在 l3build 回归测试中检查变量时确保不同引擎的结果相同

在 l3build 回归测试中检查变量时确保不同引擎的结果相同

几天前,我在聊天中读到一篇讨论,关于在使用l3build(测试排版材料时,为不同的引擎获取相同的输出https://chat.stackexchange.com/transcript/message/62890308#62890308),事实证明,当使用的字体相同时,这样做是可能的。好处是,我们可以只保存默认引擎的测试结果,然后针对同一个 .tlg 文件检查所有引擎。

我今天在玩这个,尽管遵循了那个提示,我仍然发现不同性质的引擎之间存在一些差异,但在检查变量时。如果要求显示变量的行有点长,截断似乎在pdftexluatex引擎之间有所不同。

考虑以下设置。Abuild.lua具有:

bundle = ""
module = "mypackage"

checkengines = {"pdftex","luatex","xetex"}

以及一个包含以下内容的测试文件testfiles/test1.lvt

\documentclass{article}

\input{regression-test}

\begin{document}

\section{Section 1}

\ExplSyntaxOn
\tl_new:N \l_my_var_tl
\tl_set:Nn \l_my_var_tl {foo}
\ExplSyntaxOff

\START

\ExplSyntaxOn
\BEGINTEST{Inspecting~a~variable}
Some long line which happens to also show a variable.\tl_show:N \l_my_var_tl
\ENDTEST
\ExplSyntaxOff

\OMIT

\end{document}

如果我保存测试结果,pdftex然后l3build save -e pdftex test1运行检查,则l3build check检查luatex失败。结果test1.luatex.diff是:

*** ./build/test/test1.luatex.tlg   2023-02-10 21:45:48.607269954 -0300
--- ./build/test/test1.luatex.log   2023-02-10 21:45:48.607269954 -0300
***************
*** 5,9 ****
  ============================================================
  > \l_my_var_tl=foo.
  <recently read> }
! l. ......so show a variable.\tl_show:N \l_my_var_tl
  ============================================================
--- 5,9 ----
  ============================================================
  > \l_my_var_tl=foo.
  <recently read> }
! l. ......also show a variable.\tl_show:N \l_my_var_tl
  ============================================================

因此,调用检查变量的行的方式最终出现在日志中,但该行的截断在几个字符上有所不同。

有没有办法避免这种情况?这样就可以为这次测试保存一个 .tlg 文件?

答案1

l3build 尝试使事物标准化,但 luatex 习惯于相差一列,这会使事情变得困难。您可以最大化日志行中的字符数,这样 tex 就不会换行输出。还可以在行首使用 \show,这样您就不会有 ... 上下文

例如,此版本通过

\documentclass{article}

\input{regression-test}

\begin{document}

\section{Section 1}

\ExplSyntaxOn
\tl_new:N \l_my_var_tl
\tl_set:Nn \l_my_var_tl {foo}
\ExplSyntaxOff

\START

\ExplSyntaxOn
\BEGINTEST{Inspecting~a~variable}
Some long line which happens to also show a variable.
\tl_show:N \l_my_var_tl
\ENDTEST
\ExplSyntaxOff

\ExplSyntaxOn
\BEGINTEST{Inspecting~a~variable2}
Some long line which happens to also show a variable.\typeout{\meaning\l_my_var_tl}
\ENDTEST
\ExplSyntaxOff

\ExplSyntaxOn
\BEGINTEST{Inspecting~a~variable3}
\tl_new:N \l_my_varref_tl
\tl_set:Nn \l_my_varref_tl {foo}
Some long line which happens to also show a variable. \ifx\l_my_var_tl\l_my_varref_tl\TRUE\else\FALSE\fi
\ENDTEST
\ExplSyntaxOff

\ExplSyntaxOn
\BEGINTEST{Inspecting~a~variable4}
\newcommand{\testtmp}{Some long line which happens to also show a variable.\tl_show:N \l_my_var_tl}
\testtmp
\ENDTEST
\ExplSyntaxOff

\OMIT

\end{document}

相关内容