diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/pgfplots/pgfregressiontest.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/pgfplots/pgfregressiontest.sty | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/pgfplots/pgfregressiontest.sty b/Master/texmf-dist/tex/latex/pgfplots/pgfregressiontest.sty new file mode 100644 index 00000000000..a6ed64ffbc1 --- /dev/null +++ b/Master/texmf-dist/tex/latex/pgfplots/pgfregressiontest.sty @@ -0,0 +1,159 @@ +%-------------------------------------------------- +% Provides a feature for fully automated regression testing of PGF or derived works. +% +% DEPRECATED. +% The idea might be interesting, but it is simply did not work and is +% too complicated. Don't use it. +% +% Idea: +% - it is based on the 'external' lib of pgf (which automatically exports each tikzpicture to pdf). +% - modification: in addition to the pdf export, call imagemagick's convert +% tool to export to png as well and compare the png to a reference image. +% - pgfregressiontest.sty provides two modes: +% 1) the REFERENCE GENERATION mode +% - each image knows a reference revision tag (or the system default) +% - the 'system call' makes a "checkout" of the desired revision, +% generates the image and returns to the original revision +% - the images are stored with a unique prefix. +% 2) the COMPARISON mode +% - each tikzpicture is compared to its reference image. If there +% is none, it should be generated. +% - if the comparison fails, a protocol is generated and the user +% is alerted. + +%-------------------------------------------------- +% +\ProvidesPackage{pgfregressiontest}[2010/10/31 Version 0.1] + +\RequirePackage{tikz} +\usetikzlibrary{external} + +\def\pgfregression@invokecmdkey#1#2{% + \pgfkeysvalueof{/pgf/regression/#1/.@cmd}#2\pgfeov +}% + +\newif\ifpgfregressionpreamble +\pgfregressionpreambletrue + +\def\pgfregressiontestset{\pgfqkeys{/pgf/regression}}% + +\pgfqkeys{/pgf/regression}{% + % will be set in \begin{document} + system call original/.initial=<not yet set>, + % + % 'rev checkout' can be used to manually change the environment + % state before actually generating the image. + % Example: + % 'rev checkout=cd ~/code/tex/pgfplots ; git checkout 1.3' + % or something like this. + % + % Use 'rev restore' to immediately undo the effects. All that + % stuff is executed in one shell environment, i.e. you can define + % and use shell variables. + rev checkout/.code=\def\pgfregression@revcheckout{#1}, + rev checkout={}, + rev restore/.code=\def\pgfregression@revrestore{#1}, + rev restore={}, + reference prefix/.initial=reference_images/, + protocol file/.initial=\jobname.protocol.sh, + convert to png/.initial={convert "\image.pdf" "\image.png"},% + reference mode/.code={ + \def\pgfregr@replacement@syscall{% + \ifx\pgfregression@revcheckout\pgfutil@empty + \else + \pgfregression@revcheckout;^^J% + @echo "'rev checkout' was successful, generating pdf...";^^J% + \fi + mkdir -p \pgfkeysvalueof{/pgf/regression/reference prefix};^^J% + \pgfkeysvalueof{/pgf/regression/system call original}; EXITCODE=$$?; \\^^J% + \ifx\pgfregression@revrestore\pgfutil@empty + \else + \pgfregression@revrestore; \\^^J% + echo "'rev restore' was successful.";^^J% + \fi + @if [ "$$EXITCODE" != "0" ]; then echo "pdf generation failed; Abort"; false; fi;^^J% + \pgfkeysvalueof{/pgf/regression/convert to png};^^J% + }% + \def\pgfregr@style{% + \message{^^Jpgfregressiontest: Running in REFERENCE GENERATION mode.^^J}% + \pgfqkeys{/pgf/regression}{% + /tikz/external/prefix=\pgfkeysvalueof{/pgf/regression/reference prefix}, + }% + }% + \ifpgfregressionpreamble + \else + \pgfkeyslet{/tikz/external/system call}\pgfregr@replacement@syscall + \pgfregr@style + \fi + }, + comparison mode/.code={ + \def\pgfregr@replacement@syscall{% + \pgfkeysvalueof{/pgf/regression/system call original};^^J% + \pgfkeysvalueof{/pgf/regression/convert to png};^^J% + diff "\image.png" "\expandafter\expandafter\expandafter\pgfregr@get@reference@image@for\image\relax.png";^^J% + if [ ! $? -eq 0 ]; then ^^J + echo 'echo "file \image.pdf differs from \expandafter\expandafter\expandafter\pgfregr@get@reference@image@for\image\relax.pdf (displaying differences now)".' >> \pgfkeysvalueof{/pgf/regression/protocol file};^^J + echo 'convert "\image.png" "\expandafter\expandafter\expandafter\pgfregr@get@reference@image@for\image\relax.png" -compose difference -composite -colorspace gray miff:- | display' >>\pgfkeysvalueof{/pgf/regression/protocol file};^^J% + else^^J + rm -f "\image.png";^^J% + fi;^^J% + }% + \def\pgfregr@style{% + \message{^^Jpgfregressiontest: Running in COMPARISON mode.^^J}% + \expandafter\def\expandafter\pgfregr@get@reference@image@for\tikzexternal@filenameprefix####1\relax{% + \pgfkeysvalueof{/pgf/regression/reference prefix}####1% + }% + }% + \ifpgfregressionpreamble + \else + \pgfkeyslet{/tikz/external/system call}\pgfregr@replacement@syscall + \pgfregr@style + \fi + }, + comparison mode, +} + +% Check for "command line arguments". +% if 'pdflatex '\def\referencemode{1}\input{filename}' has been used, +% the 'reference mode' will be enabled. Otherwise we are in +% 'comparison mode'. +\expandafter\ifx\csname referencemode\endcsname\relax + \pgfregressiontestset{comparison mode}% + \message{^^Jpgfregressiontest: use pdflatex '\string\def\string\referencemode{1}\string\input{\jobname}' to enable reference generation.^^J}% +\else + \pgfregressiontestset{reference mode}% +\fi + + +\AtBeginDocument{% + \tikzifexternalizehasbeencalled{}{% + \PackageError{pgfregressiontest}{% + Please call \string\tikzexternalize\space somewhere in your preamble. I can only perform my tests together with image externalization}{}% + }% + \pgfkeysgetvalue{/tikz/external/system call}\pgfregression@temp + \pgfkeyslet{/pgf/regression/system call original}\pgfregression@temp + % + \pgfkeyslet{/tikz/external/system call}\pgfregr@replacement@syscall + \pgfregr@style + % + \immediate\openout\w@pgf@writea=\pgfkeysvalueof{/pgf/regression/protocol file} % + \immediate\closeout\w@pgf@writea + % + \global\pgfregressionpreamblefalse +} + +\AtEndDocument{% + \openin\r@pgf@reada=\pgfkeysvalueof{/pgf/regression/protocol file} % + \ifeof\r@pgf@reada + \else + \message{ + ^^J% + ======================================^^J% + There have been regression errors.^^J% + Use^^J% + >> bash \pgfkeysvalueof{/pgf/regression/protocol file}^^J% + to visualize them.^^J% + ======================================^^J% + }% + \fi +}% |