summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/pgfplots/pgfregressiontest.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/pgfplots/pgfregressiontest.sty')
-rw-r--r--Master/texmf-dist/tex/latex/pgfplots/pgfregressiontest.sty159
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
+}%