commit aca303135257f979ba09c9ab70147d4b51cef230 Author: Kornel Benko <kor...@lyx.org> Date: Sat Jun 9 09:08:42 2018 +0200
Cmake tests: Added check to inspect created pdf in test "AMS-import" If the command "comparepdf" is found, it will be used. Also the script lyx_batch.pl is now easier to expand for possible new comparision tools. --- development/batchtests/ams-import.pdf | Bin 0 -> 60406 bytes development/batchtests/ams-import.tex | 26 +++++++ lib/scripts/CMakeLists.txt | 7 ++ lib/scripts/lyx_batch.pl.in | 119 ++++++++++++++++++++++++--------- 4 files changed, 119 insertions(+), 33 deletions(-) diff --git a/development/batchtests/ams-import.pdf b/development/batchtests/ams-import.pdf new file mode 100644 index 0000000..c16b867 Binary files /dev/null and b/development/batchtests/ams-import.pdf differ diff --git a/development/batchtests/ams-import.tex b/development/batchtests/ams-import.tex new file mode 100644 index 0000000..bd9e04d --- /dev/null +++ b/development/batchtests/ams-import.tex @@ -0,0 +1,26 @@ +\documentclass{amsart} + +\theoremstyle{plain} +\newtheorem{thm}{\protect\theoremname}[section] +%\newtheorem{thm}{\protect\theoremname}% => works +\newtheorem{cor}[thm]{\protect\corollaryname} + +\begin{document} +\section{Introduction} + +We assume + +\begin{thm} +For every $\epsilon>0$, there is a constant $\delta>0$ so that if +\end{thm} + +\begin{cor} +For every $\epsilon>0$, there is a constant $\delta>0$ so that if +\end{cor} + +\begin{thm} +There exists a positive constant $C_2$ so that +\end{thm} + +\end{document} + diff --git a/lib/scripts/CMakeLists.txt b/lib/scripts/CMakeLists.txt index 6324191..42764dd 100644 --- a/lib/scripts/CMakeLists.txt +++ b/lib/scripts/CMakeLists.txt @@ -10,6 +10,13 @@ if (UNIX) # include(../PyCompile) endif() configure_file("${CMAKE_CURRENT_SOURCE_DIR}/prefTest.pl.in" "${CMAKE_BINARY_DIR}/prefTest.pl" @ONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/checkKeys.pl.in" "${CMAKE_BINARY_DIR}/checkKeys.pl" @ONLY) +find_program(COMPAREPDF_EXECUTABLE comparepdf) +if (COMPAREPDF_EXECUTABLE MATCHES "-NOTFOUND") + message(STATUS "comparepdf (= \"${COMPAREPDF_EXECUTABLE}\") not found ==> no pdf comparision in test AMS-import") +else() + message(STATUS "found COMPAREPDF_EXECUTABLE = ${COMPAREPDF_EXECUTABLE}") +endif() configure_file("${CMAKE_CURRENT_SOURCE_DIR}/lyx_batch.pl.in" "${CMAKE_BINARY_DIR}/lyx_batch.pl" @ONLY) diff --git a/lib/scripts/lyx_batch.pl.in b/lib/scripts/lyx_batch.pl.in index 7508a13..eb7ed12 100644 --- a/lib/scripts/lyx_batch.pl.in +++ b/lib/scripts/lyx_batch.pl.in @@ -8,9 +8,10 @@ use warnings; use File::Copy; use File::Compare; -sub check_precondition(); +sub checkPrecondition(); sub system1(@); -sub add_files($$); +sub addFiles($$$); +sub mycompare($$$); my $builddir = "@CMAKE_BINARY_DIR@"; my $userdir = "$builddir/Testing/.lyxbatch"; @@ -23,19 +24,20 @@ my $qt_version = "@LYX_USE_QT@"; my $lyxsource = "@LYX_ABS_TOP_SRCDIR@"; my $data = "$lyxsource/development/batchtests"; +my $comparepdf = "@COMPAREPDF_EXECUTABLE@"; # src_files := Files to be copied from lyx-source to build-dir -# create := Files which are expected to be created in the build-dir -# original := Files in the lyx-source, corresponding to the created ones, -# which we provide for comparison -# commands := List of commands (lyx-functions) to be executed by lyx in a batch +# check := List of tripples +# created file (in build-dir) +# expected file (in source dir, to be compared with the created one) +# eventually system command to compare files +# commands := List of commands (lyx-functions) to be executed by lyx in a batch # precondition: system commands to be executed prior to the test # command_line: List of parameters to be used on the lyx-command-line my %Tests = ( beamer_test => { src_files => ["beamer_test.lyx"], - create => ["beamer_test.tex"], - original => ["beamer_test.tex.orig"], + check => [["beamer_test.tex", "beamer_test.tex.orig"]], commands => ["file-open beamer_test.lyx", "buffer-begin", "repeat 150 outline-down", @@ -50,14 +52,13 @@ my %Tests = ( workdir => "$data", }, src_files => ["vcs_info_export.lyx"], - create => ["vcs_info_export.tex"], - original => ["vcs_info_export.tex.orig"], + check => [["vcs_info_export.tex", "vcs_info_export.tex.orig"]], command_line => ["-E", "pdflatex", "vcs_info_export.tex", "$data/vcs_info_export.lyx"], }, "ams-import" => { src_files => ["ams-import.tex"], - create => ["ams-import.pdf", "ams-import.lyx"], - original => [undef, undef], + check => [["ams-import.pdf", "ams-import.pdf", $comparepdf], + ["ams-import.lyx"]], commands => ["buffer-new", "buffer-import latex ams-import.tex", "buffer-write", @@ -73,9 +74,11 @@ die("Invalid argument") if (! defined($Tests{$test})); if (! -e $userdir) { mkdir($userdir); } -my @expected = &add_files($data, $Tests{$test}->{original}); +my @expected = &addFiles($data, $Tests{$test}->{check},1); -my @created = &add_files($workdir, $Tests{$test}->{create}); +my @created = &addFiles($workdir, $Tests{$test}->{check}, 0); + +my @comparecommand = &addFiles(undef, $Tests{$test}->{check}, 2); # Copy src-files to work with for my $f (@{$Tests{$test}->{src_files}}) { @@ -88,31 +91,35 @@ $ENV{LANG} = "en"; $ENV{LC_ALL} = "C"; $ENV{LANGUAGE} = "en_US"; -check_precondition(); +&checkPrecondition(); chdir($workdir); my @command = ($lyx_exe, "-userdir", $userdir); if (defined($Tests{$test}->{command_line})) { push(@command, @{$Tests{$test}->{command_line}}); } -if (defined($Tests{$test}->{commands})) { +if (defined($Tests{$test}->{commands}->[0])) { if ($qt_version eq "QT5") { push(@command, "-platform", "offscreen"); } - push(@command, "-x", "command-sequence " . join(';', @{$Tests{$test}->{commands}})); + if (defined($Tests{$test}->{commands}->[1])) { # more than one command + push(@command, "-x", "command-sequence " . join(';', @{$Tests{$test}->{commands}})); + } + else { + push(@command, "-x", $Tests{$test}->{commands}->[0]); + } } -system1(@command); -for my $f (@created) { - die("File \"$f\" not created") if (! -e "$f"); -} +&system1(@command); + for (my $i = 0; defined($created[$i]); $i++) { - if (defined($expected[$i])) { - die("Expected ($expected[$i]) and created ($created[$i]) files differ") if (compare($expected[$i], $created[$i]) != 0); + die("File \"$created[$i]\" not created") if (! -e "$created[$i]"); +if (defined($expected[$i])) { + die("Expected ($expected[$i]) and created ($created[$i]) files differ") if (&mycompare($comparecommand[$i], $expected[$i], $created[$i]) != 0); } } exit(0); -sub check_precondition() +sub checkPrecondition() { return if (! defined($Tests{$test}->{precondition})); my $rPrecond = $Tests{$test}->{precondition}; @@ -120,7 +127,7 @@ sub check_precondition() if (defined($rPrecond->{workdir})) { chdir($rPrecond->{workdir}); } - my $result = system1(@command); + my $result = &system1(@command); print "Pre-condition result = $result\n"; die("Pre-condition error") if ($result != 0); } @@ -129,23 +136,69 @@ sub system1(@) { my ($exe, @params) = @_; print "Executing:\n\t$exe '" . join("' '", @params) . "'\n"; - system($exe, @params); + return(system($exe, @params)); } # Create a list of file paths # dir: result-dir # rBases: List of base-names -sub add_files($$) +sub addFiles($$$) { - my ($dir, $rBases) = @_; + my ($tdir, $rrBases, $idx) = @_; + my $dir; + if (defined($tdir)) { + $dir = "$tdir/"; + } + else { + $dir = ""; + } my @result = (); - for my $f (@{$rBases}) { - if (defined($f)) { - push(@result, "$dir/$f"); + for my $rf (@{$rrBases}) { + my $path = undef; + if (defined($rf) && defined($rf->[$idx])) { + $path = "$dir$rf->[$idx]"; + } + push(@result, $path); + } + return(@result); +} + +sub mycompare($$$) +{ + my ($cmd, $expected, $created) = @_; + my $result; + if (defined($cmd)) { # system command desired + my @params = (); + if ($cmd =~ /NOTFOUND/) { + # no check is done due to missing executable } else { - push(@result, undef); + if ($cmd =~ /comparepdf/) { + push(@params, "-ca", "-v=1", $expected, $created); + } + else { + die("unknown system command $cmd"); + } + my $error = ""; + if (&system1($cmd, @params) != 0) { + if ($? == -1) { + $error = sprintf("failed to execute: $cmd"); + } + elsif ($? & 127) { + $error = sprintf("$cmd with signal %d, %s coredump", + ($? & 127), ($? & 128) ? 'with' : 'without'); + } + else { + $error = sprintf("child $cmd exited with value %d", $? >> 8); + } + } + die($error) if ($error ne ""); } + $result = 0; } - return(@result); + else { + # defaut text comparision + $result = compare($created, $expected); + } + return($result); }