X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=development%2Fautotests%2FExportTests.cmake;h=85d0ecce2968249c42a16856a58f633830bb7883;hb=cb3922093016875404aedc6d1fcf2e088944b5c9;hp=6bfa444405a3f900928f0f565e6993395b99f6e8;hpb=4e9fe808d70a0f49d77b4664daf211e352ed425b;p=lyx.git diff --git a/development/autotests/ExportTests.cmake b/development/autotests/ExportTests.cmake index 6bfa444405..85d0ecce29 100644 --- a/development/autotests/ExportTests.cmake +++ b/development/autotests/ExportTests.cmake @@ -27,6 +27,7 @@ # find_package(Perl) +find_program(XMLLINT_EXECUTABLE xmllint) if(PERL_FOUND) set(DVI_FORMATS "dvi" "dvi3") @@ -38,13 +39,16 @@ endif() set(potential_languages "ca" "cs" "da" "de" "el" "es" "eu" "fa" "fr" "gl" "he" "hu" "id" "it" "ja" "ko" "nb" "nl" "pl" "pt" "ro" "ru" "sk" "sl" "sr" "sv" "uk" "zh_CN") +# Used to select labels from .*Tests files +set(label_chars "[a-zA-Z:_]+") + macro(initLangVars varname) foreach(_l ${potential_languages}) set(${varname}_${_l}) endforeach() endmacro() -macro(getoutputformats filepath varname) +macro(getoutputformats filepath varname format_set) file(STRINGS "${filepath}" lines) # What should we test, if default_output_format is not defined? # For now we test everything ... @@ -54,18 +58,21 @@ macro(getoutputformats filepath varname) set(_format ${CMAKE_MATCH_1}) if(_format STREQUAL "default") set(out_formats "xhtml" ${DVI_FORMATS} ${PDF_FORMATS}) - elseif(_format STREQUAL "pdf2" AND "${filepath}" MATCHES "/doc/") - set(out_formats "xhtml" ${DVI_FORMATS} ${PDF_FORMATS}) - elseif(_format MATCHES "pdf$") - set(out_formats "xhtml" ${PDF_FORMATS}) - elseif(_format MATCHES "dvi$") - set(out_formats "xhtml" ${DVI_FORMATS}) - elseif(_format MATCHES "xhtml") - set(out_formats "xhtml") else() - # Respect all other output formats - # like "eps3" - set(out_formats "xhtml" ${_format}) + set(${format_set} ${_format}) + if(_format STREQUAL "pdf2" AND "${filepath}" MATCHES "/doc/") + set(out_formats "xhtml" ${DVI_FORMATS} ${PDF_FORMATS}) + elseif(_format MATCHES "pdf$") + set(out_formats "xhtml" ${PDF_FORMATS}) + elseif(_format MATCHES "dvi$") + set(out_formats "xhtml" ${DVI_FORMATS}) + elseif(_format MATCHES "xhtml") + set(out_formats "xhtml") + else() + # Respect all other output formats + # like "eps3" + set(out_formats "xhtml" ${_format}) + endif() endif() break() endif() @@ -80,7 +87,7 @@ macro(findexpr found testname listname rsublabel) if ("${_itrx}" MATCHES "^Sublabel:") set(tmpsublabel "") string(REGEX REPLACE "^Sublabel:[ \t]*" "" _itrlabels ${_itrx}) - string(REGEX MATCHALL "[a-zA-Z]+" _labels ${_itrlabels}) + string(REGEX MATCHALL ${label_chars} _labels ${_itrlabels}) foreach(subl ${_labels}) if (subl STREQUAL "RESET") set(tmpsublabel "") @@ -91,9 +98,15 @@ macro(findexpr found testname listname rsublabel) # remove doubles in sublabel list(REMOVE_DUPLICATES tmpsublabel) else() - set(_itr "^${_itrx}$") + if (_itrx MATCHES "^!\(.*\)$") + set(_itr "^${CMAKE_MATCH_1}$") + set(_foundval 0) + else() + set(_itr "^${_itrx}$") + set(_foundval 1) + endif() if (${testname} MATCHES "${_itr}") - set(_found 1) + set(_found ${_foundval}) break() endif() endif() @@ -108,21 +121,29 @@ endmacro() function(join rvalues glue routput) set(locallist ${${rvalues}}) - list(REMOVE_ITEM locallist "export" "lyx2lyx" "load") + set(removelist "export" "lyx2lyx" "load") + foreach(_l ${locallist}) + if (depth_${_l} LESS 0) + list(APPEND removelist ${_l}) + endif() + endforeach() + list(REMOVE_ITEM locallist ${removelist}) string(REGEX REPLACE "([^\\]|^);" "\\1${glue}" out "${locallist}") set(${routput} ${out} PARENT_SCOPE) endfunction() -macro(maketestname testname inverted listsuspicious listignored listunreliable listlabels) +macro(maketestname testname inverted listinverted listignored listunreliable listlabels) + # initialize output variable + set(${inverted} 0) string(REGEX MATCH "\\/[a-z][a-z](_[A-Z][A-Z])?\\/" _v ${${testname}}) if(_v) string(REGEX REPLACE "\\/" "" _v ${_v}) - set(listsuspiciousx ${listsuspicious}_${_v}) + set(listinvertedx ${listinverted}_${_v}) set(listignoredx ${listignored}_${_v}) set(listunreliablex ${listunreliable}_${_v}) set(listsuspendedx suspendedTests_${_v}) else() - set(listsuspiciousx ${listsuspicious}) + set(listinvertedx ${listinverted}) set(listignoredx ${listignored}) set(listunreliablex ${listunreliable}) set(listsuspendedx suspendedTests) @@ -134,29 +155,28 @@ macro(maketestname testname inverted listsuspicious listignored listunreliable l findexpr(foundunreliable ${testname} ${listunreliablex} sublabel2) if (foundunreliable) set(sublabel "unreliable" ${sublabel} ${sublabel2}) - list(REMOVE_ITEM sublabel "export" "inverted" "templates" "mathmacros" "manuals" "autotests") + list(REMOVE_ITEM sublabel "export" "inverted" "templates" "tabletemplates" "mathmacros" "manuals" "autotests") + endif() + string(REGEX MATCH "(^check_load|_(systemF|texF|pdf3|pdf2|pdf|dvi|lyx[0-9][0-9]|xhtml)$)" _v ${${testname}}) + # check if test _may_ be in listinverted + set(sublabel2 "") + if (_v) + findexpr(mfound ${testname} ${listinvertedx} sublabel2) else() - string(REGEX MATCH "_(systemF|texF|pdf3|pdf2|pdf|dvi|lyx16|xhtml)$" _v ${${testname}}) - # check if test _may_ be in listsuspicious - set(sublabel2 "") - if (_v) - findexpr(mfound ${testname} ${listsuspiciousx} sublabel2) - else() - set(mfound OFF) - endif() - if (mfound) - set(sublabel3 "") - findexpr(foundsuspended ${testname} ${listsuspendedx} sublabel3) - set(${inverted} 1) - if (foundsuspended) - set(sublabel "suspended" ${sublabel} ${sublabel2} ${sublabel3}) - list(REMOVE_ITEM sublabel "export" "inverted" ) - else() - set(sublabel "inverted" ${sublabel} ${sublabel2} ${sublabel3}) - endif() + set(mfound OFF) + endif() + if (mfound) + set(sublabel3 "") + findexpr(foundsuspended ${testname} ${listsuspendedx} sublabel3) + set(${inverted} 1) + if (foundsuspended) + set(sublabel "suspended" ${sublabel} ${sublabel2} ${sublabel3}) + list(REMOVE_ITEM sublabel "export" "inverted" ) else() - set(${inverted} 0) + set(sublabel "inverted" ${sublabel} ${sublabel2} ${sublabel3}) endif() + else() + set(${inverted} 0) endif() list(REMOVE_DUPLICATES sublabel) if (NOT sublabel STREQUAL "") @@ -175,7 +195,7 @@ macro(maketestname testname inverted listsuspicious listignored listunreliable l endif() endmacro() -macro(loadTestList filename resList depth) +macro(loadTestList filename resList depth splitlangs) # Create list of strings from a file without comments # ENCODING parameter is a new feature in cmake 3.1 initLangVars(${resList}) @@ -198,7 +218,7 @@ macro(loadTestList filename resList depth) list(APPEND ${resList} "${_newl}") if (_newl MATCHES "^Sublabel:") string(REGEX REPLACE "^Sublabel:[ \t]*" "" _newlabels ${_newl}) - string(REGEX MATCHALL "([0-9]*[a-zA-Z]+)" _labels ${_newlabels}) + string(REGEX MATCHALL "([0-9]*${label_chars})" _labels ${_newlabels}) foreach(labname ${_labels}) if (NOT labname STREQUAL "RESET") list(APPEND mylabels ${labname}) @@ -207,8 +227,12 @@ macro(loadTestList filename resList depth) list(REMOVE_DUPLICATES mylabels) set(sublabel ${_newl}) else() - string(REGEX REPLACE "(\\/|\\||\\(|\\))" " " _vxx ${_newl}) - string(REGEX MATCHALL " ([a-z][a-z](_[A-Z][A-Z])?) " _vx ${_vxx}) + if (${splitlangs} MATCHES "ON") + string(REGEX REPLACE "(\\/|\\||\\(|\\))" " " _vxx ${_newl}) + string(REGEX MATCHALL " ([a-z][a-z](_[A-Z][A-Z])?) " _vx ${_vxx}) + else() + set(_vx OFF) + endif() if(_vx) foreach(_v ${_vx}) string(REGEX REPLACE " " "" _v ${_v}) @@ -229,7 +253,7 @@ macro(loadTestList filename resList depth) endif() endforeach() foreach(_l1 ${mylabels}) - if (_l1 MATCHES "^([0-9]+)([a-zA-Z]+)$") + if (_l1 MATCHES "^([0-9]+)(${label_chars})$") set(_l ${CMAKE_MATCH_2}) set(depth1 ${CMAKE_MATCH_1}) else() @@ -263,15 +287,15 @@ endmacro() assignLabelDepth(0 "export" "key" "layout" "load" "lyx2lyx" "module" "roundtrip" "url") assignLabelDepth(1 "unreliable" "inverted") assignLabelDepth(2 "suspended") -assignLabelDepth(3 "examples" "manuals" "mathmacros" "templates" "autotests") +assignLabelDepth(-1 "examples" "manuals" "mathmacros" "templates" "tabletemplates" "autotests") -loadTestList(suspiciousTests suspiciousTests 7) -loadTestList(ignoredTests ignoredTests 0) -loadTestList(suspendedTests suspendedTests 6) -loadTestList(unreliableTests unreliableTests 5) +loadTestList(invertedTests invertedTests 7 ON) +loadTestList(ignoredTests ignoredTests 0 ON) +loadTestList(suspendedTests suspendedTests 6 ON) +loadTestList(unreliableTests unreliableTests 5 ON) +loadTestList(ignoreLatexErrorsTests ignoreLatexErrorsTests 8 OFF) -# preparing to add e.g. development/mathmacros to the foreach() loop -foreach(libsubfolderx autotests/export lib/doc lib/examples lib/templates development/mathmacros) +foreach(libsubfolderx autotests/export lib/doc lib/examples lib/templates lib/tabletemplates autotests/mathmacros) set(testlabel "export") if (libsubfolderx MATCHES "lib/doc") list(APPEND testlabel "manuals") @@ -279,7 +303,9 @@ foreach(libsubfolderx autotests/export lib/doc lib/examples lib/templates develo list(APPEND testlabel "examples") elseif (libsubfolderx MATCHES "lib/templates") list(APPEND testlabel "templates") - elseif (libsubfolderx MATCHES "development/mathmacros") + elseif (libsubfolderx MATCHES "lib/tabletemplates") + list(APPEND testlabel "tabletemplates") + elseif (libsubfolderx MATCHES "autotests/mathmacros") list(APPEND testlabel "mathmacros") elseif (libsubfolderx MATCHES "autotests/.+") list(APPEND testlabel "autotests") @@ -290,50 +316,55 @@ foreach(libsubfolderx autotests/export lib/doc lib/examples lib/templates develo message(STATUS "Handling export dir ${LIBSUB_SRC_DIR}") file(GLOB_RECURSE lyx_files RELATIVE "${LIBSUB_SRC_DIR}" "${LIBSUB_SRC_DIR}/*.lyx") list(SORT lyx_files) - if (libsubfolderx MATCHES "development/mathmacros") - # This is a zipped file, removing from tests - list(REMOVE_ITEM lyx_files testcases_master_child.lyx) - endif() # Now create 2 lists. One for files in a language dir, one without set(lang_lyx_files) set(nolang_lyx_files) foreach(f ${lyx_files}) - string(REGEX MATCHALL "^[a-z][a-z](_[A-Z][A-Z])?\\/" _v ${f}) - if(_v) - list(APPEND lang_lyx_files ${f}) + if (${f} MATCHES "#") + # Do nothing, probably wrong temporary file else() - list(APPEND nolang_lyx_files ${f}) + string(REGEX MATCHALL "^[a-z][a-z](_[A-Z][A-Z])?\\/" _v ${f}) + if(_v) + list(APPEND lang_lyx_files ${f}) + else() + list(APPEND nolang_lyx_files ${f}) + endif() endif() endforeach() foreach(f ${nolang_lyx_files} ${lang_lyx_files}) # Strip extension string(REGEX REPLACE "\\.lyx$" "" f ${f}) - set(TestName "export/${libsubfolder}/${f}_lyx16") - set(mytestlabel ${testlabel}) - maketestname(TestName inverted suspiciousTests ignoredTests unreliableTests mytestlabel) - if(TestName) - add_test(NAME ${TestName} - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}" - COMMAND ${CMAKE_COMMAND} -DLYX_ROOT=${LIBSUB_SRC_DIR} - -DLYX_TESTS_USERDIR=${LYX_TESTS_USERDIR} - -Dlyx=$ - -DWORKDIR=${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME} - -DLYX_USERDIR_VER=${LYX_USERDIR_VER} - -Dformat=lyx16x - -Dextension=16.lyx - -Dfile=${f} - -Dinverted=${inverted} - -DTOP_SRC_DIR=${TOP_SRC_DIR} - -DPERL_EXECUTABLE=${PERL_EXECUTABLE} - -P "${TOP_SRC_DIR}/development/autotests/export.cmake") - setmarkedtestlabel(${TestName} ${mytestlabel}) - endif() + foreach(_lyx_format_num 16 20 21 22 23) + set(TestName1 "export/${libsubfolder}/${f}_lyx${_lyx_format_num}") + string(REGEX REPLACE "[\\(\\)]" "_" TestName "${TestName1}") + set(mytestlabel ${testlabel} "lyx2lyx" "load") + maketestname(TestName inverted invertedTests ignoredTests unreliableTests mytestlabel) + if(TestName) + add_test(NAME ${TestName} + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}" + COMMAND ${CMAKE_COMMAND} -DLYX_ROOT=${LIBSUB_SRC_DIR} + -DLYX_TESTS_USERDIR=${LYX_TESTS_USERDIR} + -Dlyx=$ + -DWORKDIR=${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME} + -DLYX_USERDIR_VER=${LYX_USERDIR_VER} + -Dformat=lyx${_lyx_format_num}x + -Dextension=${_lyx_format_num}.lyx + -DLYX_FORMAT_NUM=${_lyx_format_num} + -Dfile=${f} + -Dinverted=${inverted} + -DTOP_SRC_DIR=${TOP_SRC_DIR} + -DPERL_EXECUTABLE=${PERL_EXECUTABLE} + -P "${TOP_SRC_DIR}/development/autotests/export.cmake") + setmarkedtestlabel(${TestName} ${mytestlabel}) + endif() + endforeach() if(LYX_PYTHON_EXECUTABLE) set(lyx2lyxtestlabel "lyx2lyx") # For use of lyx2lyx we need the python executable set(mytestlabel ${lyx2lyxtestlabel}) - set(TestName "lyx2lyx/${libsubfolder}/${f}") - maketestname(TestName inverted suspiciousTests ignoredTests unreliableTests mytestlabel) + set(TestName1 "lyx2lyx/${libsubfolder}/${f}") + string(REGEX REPLACE "[\\(\\)]" "_" TestName "${TestName1}") + maketestname(TestName inverted invertedTests ignoredTests unreliableTests mytestlabel) if(TestName) add_test(NAME ${TestName} WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}" @@ -348,8 +379,9 @@ foreach(libsubfolderx autotests/export lib/doc lib/examples lib/templates develo endif() set(loadtestlabel "load") set(mytestlabel ${loadtestlabel}) - set(TestName "check_load/${libsubfolder}/${f}") - maketestname(TestName inverted suspiciousTests ignoredTests unreliableTests mytestlabel) + set(TestName1 "check_load/${libsubfolder}/${f}") + string(REGEX REPLACE "[\\(\\)]" "_" TestName "${TestName1}") + maketestname(TestName inverted invertedTests ignoredTests unreliableTests mytestlabel) if(TestName) add_test(NAME ${TestName} WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}" @@ -358,11 +390,13 @@ foreach(libsubfolderx autotests/export lib/doc lib/examples lib/templates develo -Dlyx=$ -DPARAMS_DIR=${TOP_SRC_DIR}/development/autotests -DWORKDIR=${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME} + -Dinverted=${inverted} -P "${TOP_SRC_DIR}/development/autotests/check_load.cmake") setmarkedtestlabel(${TestName} ${mytestlabel}) - set_tests_properties(${TestName} PROPERTIES RUN_SERIAL ON) + #set_tests_properties(${TestName} PROPERTIES RUN_SERIAL ON) endif() - getoutputformats("${LIBSUB_SRC_DIR}/${f}.lyx" formatlist) + set(default_output_format) + getoutputformats("${LIBSUB_SRC_DIR}/${f}.lyx" formatlist default_output_format) foreach(format ${formatlist}) if(format MATCHES "dvi3|pdf4|pdf5") set(fonttypes "texF" "systemF") @@ -370,30 +404,75 @@ foreach(libsubfolderx autotests/export lib/doc lib/examples lib/templates develo set(fonttypes "defaultF") endif() foreach(fonttype ${fonttypes}) - if(fonttype MATCHES "defaultF") - set(TestName "export/${libsubfolder}/${f}_${format}") + if (format MATCHES "pdf2" AND f MATCHES "latex/unicodesymbols") + #message(STATUS "Test ${TestName} matches Unicode encodings") + # test_encodings does not include "default", since it should be covered + # by one of the supplied encodings + set(test_encodings "ascii" "utf8" "utf8x" "armscii8" "applemac" + "cp437" "cp437de" "cp850" "cp852" + "cp855" "cp862" "cp865" + "cp866" "cp1250" "cp1251" "cp1252" + "cp1255" "cp1256" "cp1257" + "koi8-r" "koi8-u" + "iso8859-1" "iso8859-2" "iso8859-3" + "iso8859-4" "iso8859-5" "iso8859-6" + "iso8859-7" "iso8859-8" "iso8859-9" + "iso8859-13" "iso8859-15" "iso8859-16" + "pt154" "big5" "shift-jis" + "euc-cn" "gbk" "jis" "euc-kr" + "utf8-cjk" "euc-tw" "euc-jp" + "euc-jp-platex" "jis-platex" + "shift-jis-platex" "utf8-platex" + "tis620-0") else() - set(TestName "export/${libsubfolder}/${f}_${format}_${fonttype}") - endif() - set(mytestlabel ${testlabel}) - maketestname(TestName inverted suspiciousTests ignoredTests unreliableTests mytestlabel) - if(TestName) - add_test(NAME ${TestName} - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}" - COMMAND ${CMAKE_COMMAND} -DLYX_ROOT=${LIBSUB_SRC_DIR} - -DLYX_TESTS_USERDIR=${LYX_TESTS_USERDIR} - -Dlyx=$ - -DWORKDIR=${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME} - -Dformat=${format} - -Dfonttype=${fonttype} - -Dextension=${format} - -Dfile=${f} - -Dinverted=${inverted} - -DTOP_SRC_DIR=${TOP_SRC_DIR} - -DPERL_EXECUTABLE=${PERL_EXECUTABLE} - -P "${TOP_SRC_DIR}/development/autotests/export.cmake") - setmarkedtestlabel(${TestName} ${mytestlabel}) # check for suspended pdf/dvi exports + set(test_encodings "default") endif() + foreach (_enc2 ${test_encodings}) + if ("${_enc2}" STREQUAL "default") + set(_enc "") + else() + set(_enc "_${_enc2}") + endif() + if(fonttype MATCHES "defaultF") + set(TestName1 "export/${libsubfolder}/${f}${_enc}_${format}") + else() + set(TestName1 "export/${libsubfolder}/${f}${_enc}_${format}_${fonttype}") + endif() + if (format MATCHES "^${default_output_format}$") + set(extraLabels "defaultoutput") + else() + set(extraLabels ) + endif() + set(missingLabels ) + findexpr(mfound TestName ignoreLatexErrorsTests missingLabels) + if (mfound) + set(mytestlabel ${testlabel} "ignoring" ${missingLabels} ${extraLabels}) + else() + set(mytestlabel ${testlabel} ${extraLabels}) + endif() + string(REGEX REPLACE "[\\(\\)]" "_" TestName "${TestName1}") + maketestname(TestName inverted invertedTests ignoredTests unreliableTests mytestlabel) + if(TestName) + add_test(NAME ${TestName} + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}" + COMMAND ${CMAKE_COMMAND} -DLYX_ROOT=${LIBSUB_SRC_DIR} + -DLYX_TESTS_USERDIR=${LYX_TESTS_USERDIR} + -Dlyx=$ + -DWORKDIR=${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME} + -Dformat=${format} + -Dfonttype=${fonttype} + -Dextension=${format} + -Dfile=${f} + -Dinverted=${inverted} + -DTOP_SRC_DIR=${TOP_SRC_DIR} + "-DIgnoreErrorMessage=${missingLabels}" + -DPERL_EXECUTABLE=${PERL_EXECUTABLE} + -DXMLLINT_EXECUTABLE=${XMLLINT_EXECUTABLE} + -DENCODING=${_enc2} + -P "${TOP_SRC_DIR}/development/autotests/export.cmake") + setmarkedtestlabel(${TestName} ${mytestlabel}) # check for suspended pdf/dvi exports + endif() + endforeach() endforeach() endforeach() endforeach()