X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=development%2Fautotests%2Fexport.cmake;h=0185d5b39d6e1ab6916b2d0b8d5dac327c4fa295;hb=a7112690;hp=4c77f06bb4ef4796b6c7d66eebe0a802bec1c0dd;hpb=758775ac92a11f7d378287ef6c65285dd44c3a6f;p=lyx.git diff --git a/development/autotests/export.cmake b/development/autotests/export.cmake index 4c77f06bb4..0185d5b39d 100755 --- a/development/autotests/export.cmake +++ b/development/autotests/export.cmake @@ -7,8 +7,8 @@ # LYX_ROOT = ${TOP_SRC_DIR}/lib/{doc,examples,templates,tabletemplates} # LYX_USERDIR_VER = Name of environment variable for the user directory # lyx = -# format = lyx16x|lyx20x|lyx21x|lyx22x|xhtml|docbook5 -# extension = 16.lyx|20.lyx|21.lyx|22.lyx|xhtml|xml +# format = lyx16x|lyx20x|lyx21x|lyx22x|xhtml|docbook5|epub +# extension = 16.lyx|20.lyx|21.lyx|22.lyx|xhtml|xml|epub # file = xxx # # Script should be called like: @@ -26,7 +26,9 @@ # -DTOP_SRC_DIR=${TOP_SRC_DIR} \ # -DIgnoreErrorMessage=(ON/OFF) \ # -DPERL_EXECUTABLE=${PERL_EXECUTABLE} \ +# -DLYX_PYTHON_EXECUTABLE=${LYX_PYTHON_EXECUTABLE} \ # -DXMLLINT_EXECUTABLE=${XMLLINT_EXECUTABLE} \ +# -DJAVA_EXECUTABLE=${JAVA_EXECUTABLE} \ # -DENCODING=xxx \ # -P "${TOP_SRC_DIR}/development/autotests/export.cmake" # @@ -56,6 +58,7 @@ get_filename_component(updir_ "${LYX_ROOT}" DIRECTORY) get_filename_component(updir2_ "${LYX_ROOT}" NAME) set(file "${updir2_}/${file}") set(LYX_ROOT "${updir_}") +set(NO_FAILES 0) if(format MATCHES "dvi|pdf") message(STATUS "LYX_TESTS_USERDIR = ${LYX_TESTS_USERDIR}") @@ -71,9 +74,12 @@ if(format MATCHES "dvi|pdf") RESULT_VARIABLE _err) string(COMPARE EQUAL ${_err} 0 _erg) if(NOT _erg) + set(NO_FAILES 1) message(FATAL_ERROR "Export failed while converting") endif() - set(result_file_name ${file}_${_ft}.${extension}) + # We only need "_${ENCODING}" for unicode tests (because multiple encodings + # are tested with the same format), but doesn't hurt to include for all. + set(result_file_name ${file}_${_ft}_${ENCODING}.${extension}) else() message(STATUS "Converting with perl ${Perl_Script}") set(LYX_SOURCE "${TempDir}/${file}.lyx") @@ -83,8 +89,9 @@ else() RESULT_VARIABLE _err) string(COMPARE EQUAL ${_err} 0 _erg) if(NOT _erg) + set(NO_FAILES 1) message(FATAL_ERROR "Export failed while converting") - endif() + endif() if(extension MATCHES "\\.lyx$") # Font-type not relevant for lyx16/lyx2[0123] exports set(result_file_base "${TempDir}/${file}") @@ -111,12 +118,96 @@ endfunction() macro(Summary _err _msg) if (${_err}) + MATH(EXPR NO_FAILES "${NO_FAILES}+1") list(APPEND _TestResultMessage "Error: ${_msg}") else() list(APPEND _TestResultMessage "OK: ${_msg}") endif() endmacro() +macro(check_xhtml_validate xhtml_file) + message(STATUS "Calling ${LYX_PYTHON_EXECUTABLE} \"${TOP_SRC_DIR}/development/autotests/simplehtml_validity.py\" \"${TempDir}/${xhtml_file}\"") + set(_outputfile "${TempDir}/${xhtml_file}.validate_out") + execute_process( + COMMAND ${LYX_PYTHON_EXECUTABLE} "${TOP_SRC_DIR}/development/autotests/simplehtml_validity.py" "${TempDir}/${xhtml_file}" + WORKING_DIRECTORY "${TempDir}" + OUTPUT_VARIABLE xmlout + ERROR_VARIABLE xmlerr + RESULT_VARIABLE _err) + file(WRITE "${_outputfile}" ${xmlout}) + if (_err) + Summary(_err "${_err} validating \"${_outputfile}\"") + MATH(EXPR NO_FAILES "${NO_FAILES}+1") + endif() + if (NOT "${xmlout}" STREQUAL "") + message(STATUS "${xmlout}") + set(_err -1) + Summary(_err "Non empty output \"${_outputfile}\" with \"symplehtml_validity.py\"") + endif() +endmacro() + +macro(check_xhtml_xmllint xhtml_file) + set(xmllint_params --loaddtd --noout) + string(REPLACE ";" " " xmllint_params2 " ${xmllint_params}") + message(STATUS "Calling: " ${XMLLINT_EXECUTABLE} ${xmllint_params2} " \"${TempDir}/${xhtml_file}\"") + set(_outputfile "${TempDir}/${xhtml_file}.sax_out") + execute_process( + COMMAND ${XMLLINT_EXECUTABLE} ${xmllint_params} "${xhtml_file}" + WORKING_DIRECTORY "${TempDir}" + OUTPUT_VARIABLE xmlout + ERROR_VARIABLE xmlerr + RESULT_VARIABLE _err) + file(WRITE "${_outputfile}" ${xmlout}) + Summary(_err "Checking \"${TempDir}/${xhtml_file}\" with ${XMLLINT_EXECUTABLE}") + if (NOT _err) + # check if parser output contains error messages + message(STATUS "Check the output: ${PERL_EXECUTABLE} ${TOP_SRC_DIR}/development/autotests/examineXmllintOutput.pl") + execute_process( + COMMAND ${PERL_EXECUTABLE} "${TOP_SRC_DIR}/development/autotests/examineXmllintOutput.pl" "${_outputfile}" + WORKING_DIRECTORY "${TempDir}" + OUTPUT_VARIABLE xmlout + RESULT_VARIABLE _err) + Summary(_err "Parse messages of ${XMLLINT_EXECUTABLE} for errors") + else() + message(STATUS "Errors from xmllint: ${xmlerr}") + endif() + if (NOT _err) + if (NOT "${xmlout}" STREQUAL "") + message(STATUS "${xmlout}") + set(_err -1) + Summary(_err "Non empty output \"${_outputfile}\" of \"${XMLLINT_EXECUTABLE}\"") + endif() + endif() +endmacro() + +macro(check_xhtml_xmlparser xhtml_file) + message(STATUS "Calling ${PERL_EXECUTABLE} \"${TOP_SRC_DIR}/development/autotests/xmlParser.pl\" \"${xhtml_file}\"") + execute_process( + COMMAND ${PERL_EXECUTABLE} "${TOP_SRC_DIR}/development/autotests/xmlParser.pl" "${result_file_name}" + WORKING_DIRECTORY "${TempDir}" + OUTPUT_VARIABLE parserout + ERROR_VARIABLE parsererr + RESULT_VARIABLE _err + ) + if (_err) + message(STATUS "${parsererr}") + endif() + Summary(_err "Checking \"${TempDir}/${xhtml_file}\" with xmlParser.pl") +endmacro() + +macro(check_xhtml_jing xhtml_file) + message(STATUS "Calling: ${JAVA_EXECUTABLE} -jar \"${TOP_SRC_DIR}/development/tools/jing.jar\" \"https://docbook.org/xml/5.2b09/rng/docbook.rng\" \"${TempDir}/${xhtml_file}\"") + set(_outputfile "${TempDir}/${xhtml_file}.jing_out") + execute_process( + COMMAND ${JAVA_EXECUTABLE} -jar "${TOP_SRC_DIR}/development/tools/jing.jar" "https://docbook.org/xml/5.2b09/rng/docbook.rng" "${xhtml_file}" + WORKING_DIRECTORY "${TempDir}" + OUTPUT_VARIABLE jingout + RESULT_VARIABLE _err) + file(WRITE "${_outputfile}" ${jingout}) + message(STATUS "_err = ${_err}, jingout = ${jingout}") + Summary(_err "Checking for empty output \"${_outputfile}\" of ${JAVA_EXECUTABLE} -jar \"${TOP_SRC_DIR}/development/tools/jing.jar\"") +endmacro() + set(ENV{${LYX_USERDIR_VER}} "${LYX_TESTS_USERDIR}") set(ENV{LANG} "en_US.UTF-8") # to get all error-messages in english set(ENV{LANGUAGE} "US:en") @@ -214,82 +305,59 @@ else() endforeach() endif() string(REGEX REPLACE ";" " " _LyXExtraParams "${LyXExtraParams}") + message(STATUS "Executing in working dir ${TempDir}") message(STATUS "Executing ${lyx} ${_LyXExtraParams} -userdir \"${LYX_TESTS_USERDIR}\" -E ${format} ${result_file_name} \"${LYX_SOURCE}\"") - file(REMOVE ${result_file_name}) + file(REMOVE "${TempDir}/${result_file_name}") execute_process( COMMAND ${lyx} ${LyXExtraParams} -userdir "${LYX_TESTS_USERDIR}" -E ${format} ${result_file_name} "${LYX_SOURCE}" + WORKING_DIRECTORY "${TempDir}" RESULT_VARIABLE _err) Summary(_err "Exporting \"${LYX_SOURCE}\" to format ${format}") if (NOT _err) #check if result file created - if (NOT EXISTS "${result_file_name}") - message(STATUS "Expected result file \"${result_file_name}\" does not exist") + if (NOT EXISTS "${TempDir}/${result_file_name}") + message(STATUS "Expected result file \"${TempDir}/${result_file_name}\" does not exist") set(_err -1) - Summary(_err "Expected result file \"${result_file_name}\" does not exists") + Summary(_err "Expected result file \"${TempDir}/${result_file_name}\" does not exists") else() - message(STATUS "Expected result file \"${result_file_name}\" exists") + message(STATUS "Expected result file \"${TempDir}/${result_file_name}\" exists") if (extension MATCHES "^x(ht)?ml$") - if (format MATCHES "xhtml") - set(xmllint_params --loaddtd --noout) - set(executable_ ${XMLLINT_EXECUTABLE}) - else() - set(xmllint_params) - set(executable_ ${PERL_EXECUTABLE} "${TOP_SRC_DIR}/development/autotests/filterXml4Sax.pl") + if (NOT format MATCHES "xhtml") # Check with perl xml-parser # needs XML::Parser module - message(STATUS "Calling ${PERL_EXECUTABLE} \"${TOP_SRC_DIR}/development/autotests/xmlParser.pl\" \"${result_file_name}\"") - execute_process( - COMMAND ${PERL_EXECUTABLE} "${TOP_SRC_DIR}/development/autotests/xmlParser.pl" "${result_file_name}" - OUTPUT_VARIABLE parserout - ERROR_VARIABLE parsererr - RESULT_VARIABLE _err - ) - if (_err) - message(STATUS "${parsererr}") - endif() - Summary(_err "Checking \"${result_file_name}\" with xmlParser.pl") + check_xhtml_xmlparser(${result_file_name}) endif() - if (XMLLINT_EXECUTABLE) - string(REPLACE ";" " " xmllint_params2 " ${xmllint_params}") - message(STATUS "Calling: " ${executable_} ${xmllint_params2} " ${WORKDIR}/${result_file_name}") - # check the created xhtml file - execute_process( - COMMAND ${executable_} ${xmllint_params} "${result_file_name}" - OUTPUT_VARIABLE xmlout - ERROR_VARIABLE xmlerr - RESULT_VARIABLE _err) - file(WRITE "${result_file_name}.sax_out" ${xmlout}) - Summary(_err "Checking \"${result_file_name}\" with ${XMLLINT_EXECUTABLE}") - if (NOT _err) - # check if parser output contains error messages - message(STATUS "Check the output: ${PERL_EXECUTABLE} ${TOP_SRC_DIR}/development/autotests/examineXmllintOutput.pl") - execute_process( - COMMAND ${PERL_EXECUTABLE} "${TOP_SRC_DIR}/development/autotests/examineXmllintOutput.pl" "${result_file_name}.sax_out" - OUTPUT_VARIABLE xmlout - RESULT_VARIABLE _err) - Summary(_err "Parse messages of ${XMLLINT_EXECUTABLE} for errors") + if (JAVA_EXECUTABLE) + if (format MATCHES "docbook5") + # check with jing + check_xhtml_jing(${result_file_name}) else() - message(STATUS "Errors from xmllint: ${xmlerr}") - endif() - if (NOT _err) - if (NOT "${xmlout}" STREQUAL "") - message(STATUS "${xmlout}") - set(_err -1) - Summary(_err "Non empty output of \"${XMLLINT_EXECUTABLE}\"") - endif() + #check_xhtml_validate(${result_file_name}) endif() endif() + if (XMLLINT_EXECUTABLE) + check_xhtml_xmllint(${result_file_name}) + endif() endif() endif() endif() endif() if(inverted) - string(COMPARE EQUAL ${_err} 0 _erg) + string(COMPARE EQUAL ${NO_FAILES} 0 _erg) +else() + string(COMPARE NOTEQUAL ${NO_FAILES} 0 _erg) +endif() + +if ($ENV{LYX_DEBUG_LATEX}) + # Do not remove temporary files if one wants to examine them + # for example if setting the env-var LYX_DEBUG_LATEX + # This needs a remove all temp-dirs from time to time + # $ cd build-dir + # $ find autotests/out-home -name AbC_\* | xargs rm -rf else() - string(COMPARE NOTEQUAL ${_err} 0 _erg) + execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${TempDir}") endif() -execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${TempDir}") if(_TestResultMessage) message(STATUS "Msg Summary:") foreach(_l ${_TestResultMessage})