X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=development%2Fautotests%2FExportTests.cmake;h=b0e7595c9ca04e4b76f8cc155e7f669f13df0f9f;hb=037e9051f7abd09fcb73ee8bbea399ef83ad1a75;hp=fc20f0d33e3997fbd9fccd7926a4d404f56cb6c1;hpb=76e0568697150b41fbf121b04d8296db4dbba25f;p=lyx.git diff --git a/development/autotests/ExportTests.cmake b/development/autotests/ExportTests.cmake index fc20f0d33e..b0e7595c9c 100644 --- a/development/autotests/ExportTests.cmake +++ b/development/autotests/ExportTests.cmake @@ -63,110 +63,182 @@ macro(getoutputformats filepath varname) set(${varname} ${out_formats}) endmacro() -macro(findexpr found testname listname) +macro(findexpr found testname listname rsublabel) set(_found 0) + set(tmpsublabel "") foreach(_itrx ${${listname}}) - set(_itr "^${_itrx}$") - if(${testname} MATCHES ${_itr}) - set(_found 1) - break() + if ("${_itrx}" MATCHES "^Sublabel:") + set(tmpsublabel "") + string(REGEX REPLACE "^Sublabel:[ \t]*" "" _itrlabels ${_itrx}) + string(REGEX MATCHALL "([a-zA-Z]+)" _labels ${_itrlabels}) + foreach(subl ${_labels}) + if (subl STREQUAL "RESET") + set(tmpsublabel "") + else() + list(APPEND tmpsublabel ${subl}) + endif() + endforeach() + # remove doubles in sublabel + list(REMOVE_DUPLICATES tmpsublabel) + else() + set(_itr "^${_itrx}$") + if (${testname} MATCHES "${_itr}") + set(_found 1) + break() + endif() endif() endforeach() + if (${_found}) + if (NOT "${tmpsublabel}" STREQUAL "") + list(APPEND ${rsublabel} ${tmpsublabel}) + endif() + endif() set(${found} ${_found}) endmacro() -macro(maketestname testname reverted listreverted listignored listnonstandard) +function(join rvalues glue routput) + set(locallist ${${rvalues}}) + list(REMOVE_ITEM locallist "export" "lyx2lyx" "load") + string(REGEX REPLACE "([^\\]|^);" "\\1${glue}" out "${locallist}") + set(${routput} ${out} PARENT_SCOPE) +endfunction() + +macro(maketestname testname reverted listsuspicious listignored listunreliable listlabels) string(REGEX MATCH "\\/[a-z][a-z](_[A-Z][A-Z])?\\/" _v ${${testname}}) if(_v) string(REGEX REPLACE "\\/" "" _v ${_v}) - set(listrevertedx ${listreverted}_${_v}) + set(listsuspiciousx ${listsuspicious}_${_v}) set(listignoredx ${listignored}_${_v}) - set(listnonstandardx ${listnonstandard}_${_v}) + set(listunreliablex ${listunreliable}_${_v}) + set(listsuspendedx suspendedTests_${v}) else() - set(listrevertedx ${listreverted}) + set(listsuspiciousx ${listsuspicious}) set(listignoredx ${listignored}) - set(listnonstandardx ${listnonstandard}) + set(listunreliablex ${listunreliable}) + set(listsuspendedx suspendedTests) endif() - findexpr(mfound ${testname} ${listignoredx}) + set(sublabel "${${listlabels}}") + findexpr(mfound ${testname} ${listignoredx} sublabel) if (NOT mfound) - # check if they are non-standard - findexpr(nsfound ${testname} ${listnonstandardx}) - if (nsfound) - set(${testname} "NON_STANDARD.${${testname}}") - else () + set(sublabel2 "") + findexpr(foundunreliable ${testname} ${listunreliablex} sublabel2) + if (foundunreliable) + set(sublabel "unreliable" ${sublabel} ${sublabel2}) + list(REMOVE_ITEM sublabel "export" "reverted" "templates" "mathmacros" "manuals" "autotests") + else() string(REGEX MATCH "_(systemF|texF|pdf3|pdf2|pdf|dvi|lyx16|xhtml)$" _v ${${testname}}) - # check if test _may_ be in listreverted + # check if test _may_ be in listsuspicious + set(sublabel2 "") if (_v) - findexpr(mfound ${testname} ${listrevertedx}) + findexpr(mfound ${testname} ${listsuspiciousx} sublabel2) else() - set(mfound OFF) + set(mfound OFF) endif() - if (NOT mfound) - set(${reverted} 0) + if (mfound) + set(sublabel3 "") + findexpr(foundsuspended ${testname} ${listsuspendedx} sublabel3) + set(${reverted} 1) + if (foundsuspended) + set(sublabel "reverted" "suspended" ${sublabel} ${sublabel2} ${sublabel3}) + list(REMOVE_ITEM sublabel "export") + else() + set(sublabel "reverted" ${sublabel} ${sublabel2} ${sublabel3}) + endif() else() - set(${reverted} 1) - set(${testname} "INVERTED_SEE-README.ctest_${${testname}}") + set(${reverted} 0) endif() endif() + list(REMOVE_DUPLICATES sublabel) + if (NOT sublabel STREQUAL "") + join(sublabel "." tmpprefixx) + string(TOUPPER "${tmpprefixx}_" tmpprefix) + set(${testname} "${tmpprefix}${${testname}}") + set(${listlabels} ${sublabel}) + endif() else() + # No testname because ignored set(${testname} "") endif() endmacro() +# This labels should not be used in .*Tests files +set(known_labels "export" "key" "layout" "load" "lyx2lyx" + "examples" "manuals" "mathmacros" "reverted" "templates" "unreliable" "suspended" + "module" "roundtrip" "url") + macro(loadTestList filename resList) # Create list of strings from a file without comments - file(STRINGS ${filename} tempList) + # ENCODING parameter is a new feature in cmake 3.1 + if (CMAKE_VERSION VERSION_GREATER "3.1") + file(STRINGS ${filename} tempList ENCODING "UTF-8") + else() + file(STRINGS ${filename} tempList) + endif() set(${resList}) + set(sublabel) + set(mylabels "") + set(languages "") + message(STATUS "Reading list ${filename}") foreach(_l ${tempList}) - string(REGEX REPLACE "[ \t]*#.*" "" _newl "${_l}") + set(_newl "${_l}") + string(REGEX REPLACE "[ \t]+$" "" _newl "${_l}") + string(REGEX REPLACE "[ \t]*#.*$" "" _newl "${_l}") if(_newl) - #message(STATUS "Testing ${_newl}") - string(REGEX REPLACE "(\\/|\\||\\(|\\))" " " _vxx ${_newl}) - string(REGEX MATCHALL " ([a-z][a-z](_[A-Z][A-Z])?) " _vx ${_vxx}) - if(_vx) - foreach(_v ${_vx}) - string(REGEX REPLACE " " "" _v ${_v}) - #message(STATUS " ==> ${resList}_${_v}") - list(APPEND ${resList}_${_v} "${_newl}") + list(APPEND ${resList} "${_newl}") + if (_newl MATCHES "^Sublabel:") + string(REGEX REPLACE "^Sublabel:[ \t]*" "" _newlabels ${_newl}) + string(REGEX MATCHALL "([a-zA-Z]+)" _labels ${_newlabels}) + foreach(labname ${_labels}) + if (NOT labname STREQUAL "RESET") + list(APPEND mylabels ${labname}) + endif() endforeach() - if(_newl MATCHES "\\(\\|") - #message(STATUS " ==> ${resList}") - list(APPEND ${resList} "${_newl}") - endif() + list(REMOVE_DUPLICATES mylabels) + set(sublabel ${_newl}) else() - #message(STATUS " ==> ${resList}") - list(APPEND ${resList} "${_newl}") + string(REGEX REPLACE "(\\/|\\||\\(|\\))" " " _vxx ${_newl}) + string(REGEX MATCHALL " ([a-z][a-z](_[A-Z][A-Z])?) " _vx ${_vxx}) + if(_vx) + foreach(_v ${_vx}) + string(REGEX REPLACE " " "" _v ${_v}) + #message(STATUS " ==> ${resList}_${_v}") + #message(STATUS "sublabel = ${sublabel}, sublabel_${_v} = ${sublabel_${_v}}") + if (NOT sublabel STREQUAL "${sublabel_${_v}}") + list(APPEND ${resList}_${_v} "${sublabel}") + set(sublabel_${_v} "${sublabel}") + #message(STATUS "Setting variable sublabel_${_v} with \"${sublabel}\"") + endif() + list(APPEND ${resList}_${_v} "${_newl}") + list(APPEND languages ${_v}) + endforeach() + list(REMOVE_DUPLICATES languages) + #message(STATUS "languages = ${languages}") + endif() endif() endif() endforeach() + foreach(_l ${mylabels}) + list(FIND known_labels ${_l} _ff) + if (_ff GREATER -1) + message(STATUS "Label \"${_l}\" already in use. Reused in ${filename}") + else() + list(APPEND known_labels ${_l}) + endif() + endforeach() + foreach(_lg ${languages}) + # reset label for each used language string at end of file + #message(STATUS "Resetting variable sublabel_${_lg}, previously set to ${sublabel_${_lg}}") + set(sublabel_${_lg} "") + endforeach() endmacro() -loadTestList(revertedTests revertedTests) +loadTestList(suspiciousTests suspiciousTests) loadTestList(ignoredTests ignoredTests) loadTestList(suspendedTests suspendedTests) -loadTestList(nonstandardTests nonstandardTests) - -macro(handlesuspended TestName reverted testlabel) - set(mylabel ${${testlabel}}) - set(myreverted ${reverted}) - - # check for nonstandard - if ("${TestName}" MATCHES "^NON_STANDARD") - set(mylabel "nonstandard") - set(myreverted 0) - elseif (${reverted}) - # check suspension only for reverted tests - findexpr(tfound TestName suspendedTests) - if (tfound) - set(mylabel "suspended") - set(myreverted 0) # if test is to be suspended, remove the 'reverted' flag - endif() - endif() - setmarkedtestlabel(${TestName} ${myreverted} ${mylabel}) -endmacro() +loadTestList(unreliableTests unreliableTests) # preparing to add e.g. development/mathmacros to the foreach() loop -foreach(libsubfolderx lib/doc lib/examples lib/templates development/mathmacros) +foreach(libsubfolderx autotests/export lib/doc lib/examples lib/templates development/mathmacros) set(testlabel "export") if (libsubfolderx MATCHES "lib/doc") list(APPEND testlabel "manuals") @@ -200,7 +272,8 @@ foreach(libsubfolderx lib/doc lib/examples lib/templates development/mathmacros) # Strip extension string(REGEX REPLACE "\\.lyx$" "" f ${f}) set(TestName "export/${libsubfolder}/${f}_lyx16") - maketestname(TestName reverted revertedTests ignoredTests nonstandardTests) + set(mytestlabel ${testlabel}) + maketestname(TestName reverted suspiciousTests ignoredTests unreliableTests mytestlabel) if(TestName) add_test(NAME ${TestName} WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}" @@ -216,13 +289,14 @@ foreach(libsubfolderx lib/doc lib/examples lib/templates development/mathmacros) -DTOP_SRC_DIR=${TOP_SRC_DIR} -DPERL_EXECUTABLE=${PERL_EXECUTABLE} -P "${TOP_SRC_DIR}/development/autotests/export.cmake") - handlesuspended(${TestName} ${reverted} testlabel) # checking for suspended lyx16 exports + setmarkedtestlabel(${TestName} ${reverted} ${mytestlabel}) endif() 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 reverted revertedTests ignoredTests nonstandardTests) + maketestname(TestName reverted suspiciousTests ignoredTests unreliableTests mytestlabel) if(TestName) add_test(NAME ${TestName} WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}" @@ -232,13 +306,14 @@ foreach(libsubfolderx lib/doc lib/examples lib/templates development/mathmacros) "-DLYX_TESTS_USERDIR=${LYX_TESTS_USERDIR}" "-DLYXFILE=${LIBSUB_SRC_DIR}/${f}.lyx" -P "${TOP_SRC_DIR}/development/autotests/lyx2lyxtest.cmake") - handlesuspended(${TestName} ${reverted} lyx2lyxtestlabel) + setmarkedtestlabel(${TestName} ${reverted} ${mytestlabel}) endif() endif() + set(loadtestlabel "load") + set(mytestlabel ${loadtestlabel}) set(TestName "check_load/${libsubfolder}/${f}") - maketestname(TestName reverted revertedTests ignoredTests nonstandardTests) + maketestname(TestName reverted suspiciousTests ignoredTests unreliableTests mytestlabel) if(TestName) - set(loadtestlabel "load") add_test(NAME ${TestName} WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}" COMMAND ${CMAKE_COMMAND} -DLYXFILE=${LIBSUB_SRC_DIR}/${f}.lyx @@ -247,7 +322,7 @@ foreach(libsubfolderx lib/doc lib/examples lib/templates development/mathmacros) -DPARAMS_DIR=${TOP_SRC_DIR}/development/autotests -DWORKDIR=${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME} -P "${TOP_SRC_DIR}/development/autotests/check_load.cmake") - handlesuspended(${TestName} ${reverted} loadtestlabel) + setmarkedtestlabel(${TestName} ${reverted} ${mytestlabel}) set_tests_properties(${TestName} PROPERTIES RUN_SERIAL ON) endif() getoutputformats("${LIBSUB_SRC_DIR}/${f}.lyx" formatlist) @@ -263,7 +338,8 @@ foreach(libsubfolderx lib/doc lib/examples lib/templates development/mathmacros) else() set(TestName "export/${libsubfolder}/${f}_${format}_${fonttype}") endif() - maketestname(TestName reverted revertedTests ignoredTests nonstandardTests) + set(mytestlabel ${testlabel}) + maketestname(TestName reverted suspiciousTests ignoredTests unreliableTests mytestlabel) if(TestName) add_test(NAME ${TestName} WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}" @@ -279,7 +355,7 @@ foreach(libsubfolderx lib/doc lib/examples lib/templates development/mathmacros) -DTOP_SRC_DIR=${TOP_SRC_DIR} -DPERL_EXECUTABLE=${PERL_EXECUTABLE} -P "${TOP_SRC_DIR}/development/autotests/export.cmake") - handlesuspended(${TestName} ${reverted} testlabel) # check for suspended pdf/dvi exports + setmarkedtestlabel(${TestName} ${reverted} ${mytestlabel}) # check for suspended pdf/dvi exports endif() endforeach() endforeach()