[latex3-commits] [git/l3build] config: Fully enable multiple configs (d6c5101)
Joseph Wright
joseph.wright at morningstar2.co.uk
Thu Dec 7 10:18:58 CET 2017
Repository : https://github.com/latex3/l3build
On branch : config
Link : https://github.com/latex3/l3build/commit/d6c51019aa962d93f8ca2a6a14abe0c201fedbef
>---------------------------------------------------------------
commit d6c51019aa962d93f8ca2a6a14abe0c201fedbef
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date: Thu Dec 7 09:18:58 2017 +0000
Fully enable multiple configs
This now allows mixed directories, etc. For example, one might use one
testfiledir to have searching off for pdfTeX but on for XeTeX/LuaTeX.
>---------------------------------------------------------------
d6c51019aa962d93f8ca2a6a14abe0c201fedbef
build.lua | 1 +
l3build.dtx | 44 ++++++++++++++++++++++++++++++++
l3build.lua | 25 ++++++++++++++++++
plain.lua | 2 ++
testfiles-plain/plain-pdftex.tlg | 8 +++---
testfiles-plain/plain-pdftex.xetex.tlg | 17 ++++++++++++
6 files changed, 93 insertions(+), 4 deletions(-)
diff --git a/build.lua b/build.lua
index 75fa81d..844f24c 100644
--- a/build.lua
+++ b/build.lua
@@ -7,6 +7,7 @@ module = "l3build"
bundle = ""
-- Non-standard settings
+checkconfigs = {"build", "plain"}
checkdeps = { }
checkengines = {"pdftex", "xetex", "luatex", "ptex", "uptex"}
cleanfiles = {"*.pdf", "*.tex", "*.zip"}
diff --git a/l3build.dtx b/l3build.dtx
index 1ac32d1..7f0159a 100644
--- a/l3build.dtx
+++ b/l3build.dtx
@@ -112,6 +112,9 @@
\luavarset{stdengine} {"pdftex"}{Engine to generate \texttt{.tlg} file from}
\luavarset{checkformat} {"latex"} {Format to use for tests}
\luavarseparator
+\luavarset{checkconfigs}{\{\}}{Configurations to use for tests}
+\luavarset{stdconfig} {\meta{Main script}}{Standard test configuration}
+\luavarseparator
\luavarset{typesetexe}{"pdflatex"}{Executable for compiling \texttt{doc(s)}}
\luavarset{unpackexe} {"tex"} {Executable for running \texttt{unpack}}
\luavarset{zipexe} {"zip"} {Executable for creating archive with \texttt{ctan}}
@@ -304,6 +307,7 @@
%
% As well as these commands, the system recognises the options
% \begin{itemize}
+% \item \texttt{--config} (\texttt{-c}) Configuration(s) to use for testing
% \item \texttt{--date} (\texttt{-d}) Date to use when setting version
% data
% \item \texttt{--engine} (\texttt{-e}) Sets the engine to use for
@@ -615,6 +619,46 @@
%
% \luavartypeset
%
+% \subsection{Multiple sets of tests}
+%
+% In most cases, a single set of tests will be appropriate for the module, with
+% a common set of configuration settings applying. However, there are
+% situations where you may need entirely independent sets of tests which have
+% different setting values, for example using different formats or where the
+% entire set will be engine-dependent. To support this, \pkg{l3build} offers
+% the possibility of using multiple configurations for tests. This is supported
+% using the \var{checkconfigs} table. This is used to list the names of each
+% configuration (|.lua| file) which will be used to run tests.
+%
+% For example, for the core \LaTeXe{} tests the main test files are contained
+% in a directory |testfiles|. To test font loading for \XeTeX{} and \LuaTeX{}
+% there are a second set of tests in |testfiles-TU| which use the short
+% |build-TU.lua| file shown in Figure~\ref{fig:configs}. To run both sets of
+% tests, the main |build.lua| file contains the setting
+% |checkconfigs = {"build", "build-TU"}|. This will cause \pkg{l3build} to run
+% first using no additional settings (\emph{i.e.}~reading the normal
+% |build.lua| file alone), then running \emph{also} loading the settings from
+% |build-TU.lua|.
+% \begin{figure}
+% \begin{lstlisting}[frame=single,language={[5.2]Lua},gobble = 6]
+% -- Special config for these tests
+% checksearch = true
+% checkengines = {"xetex","luatex"}
+% testfiledir = "testfiles-TU"
+% \end{lstlisting}
+% \caption{The build script for the \pkg{xparse} module.}
+% \label{fig:configs}
+% \end{figure}
+%
+% To allow selection of a one or more configurations, and to allow saving of
+% |.tlg| files in non-standard configurations, the |--config| (|-c|) option may
+% be used. This works in the same way as |--engine|: it takes a comma list of
+% configurations to apply, overriding \var{checkconfigs}.
+%
+% Note that the setting \var{stdconfig} is used to determine the \emph{vanilla}
+% configuration: this will typically be the name of the main script (usually
+% |build| for a standard |build.lua| file).
+%
% \subsection{Dependencies}
%
% If you have multiple packages that are developed separately but still interact in some way, it's often desirable to integrate them when performing regression tests.
diff --git a/l3build.lua b/l3build.lua
index 68b3dd8..f182ddb 100644
--- a/l3build.lua
+++ b/l3build.lua
@@ -136,6 +136,10 @@ checkengines = checkengines or {"pdftex", "xetex", "luatex"}
checkformat = checkformat or "latex"
stdengine = stdengine or "pdftex"
+-- Configs for testing
+checkconfigs = checkconfigs or { }
+stdconfig = stdconfig or string.gsub(arg[0], "%.lua$", "")
+
-- Enable access to trees outside of the repo
-- As these may be set false, a more elaborate test than normal is needed
if checksearch == nil then
@@ -2487,5 +2491,26 @@ end
-- Allow main function to be disabled 'higher up'
main = main or stdmain
+-- Deal with multiple configs for tests
+checkconfigs = options["config"] or checkconfigs
+if options["target"] == "check" then
+ if #checkconfigs > 1 then
+ local errorlevel = 0
+ local opts = options
+ for i = 1, #checkconfigs do
+ opts["config"] = {checkconfigs[i]}
+ errorlevel = call({"."}, "check", opts)
+ if errorlevel ~= 0 then exit(1) end
+ end
+ -- Avoid running the 'main' set of tests twice
+ exit(0)
+ end
+end
+if #checkconfigs == 1 and
+ checkconfigs[1] ~= stdconfig and
+ (options["target"] == "check" or options["target"] == "save") then
+ dofile("./" .. checkconfigs[1] .. ".lua")
+end
+
-- Call the main function
main(options["target"], options["files"])
diff --git a/plain.lua b/plain.lua
new file mode 100644
index 0000000..b59b2c1
--- /dev/null
+++ b/plain.lua
@@ -0,0 +1,2 @@
+checkformat = "tex"
+testfiledir = "testfiles-plain"
\ No newline at end of file
diff --git a/testfiles-plain/plain-pdftex.tlg b/testfiles-plain/plain-pdftex.tlg
index f09433e..eaffdfd 100644
--- a/testfiles-plain/plain-pdftex.tlg
+++ b/testfiles-plain/plain-pdftex.tlg
@@ -1,4 +1,4 @@
-This is a generated file for the LaTeX (2e + expl3) validation system.
+This is a generated file for the l3build validation system.
Don't change this file in any respect.
============================================================
CFG FILE IS LOADED
@@ -8,10 +8,10 @@ TEST 1: \afterassignment
============================================================
> hello.
<argument> ...d}}\foo } \x ={hello} \showthe \foo
-\show \y
-l.19 }
+ \show \y
+l. ...}
> \y=macro:
->world.
<argument> ... \x ={hello} \showthe \foo \show \y
-l.19 }
+l. ...}
============================================================
diff --git a/testfiles-plain/plain-pdftex.xetex.tlg b/testfiles-plain/plain-pdftex.xetex.tlg
new file mode 100644
index 0000000..eaffdfd
--- /dev/null
+++ b/testfiles-plain/plain-pdftex.xetex.tlg
@@ -0,0 +1,17 @@
+This is a generated file for the l3build validation system.
+Don't change this file in any respect.
+============================================================
+CFG FILE IS LOADED
+============================================================
+============================================================
+TEST 1: \afterassignment
+============================================================
+> hello.
+<argument> ...d}}\foo } \x ={hello} \showthe \foo
+ \show \y
+l. ...}
+> \y=macro:
+->world.
+<argument> ... \x ={hello} \showthe \foo \show \y
+l. ...}
+============================================================
More information about the latex3-commits
mailing list