在使用 LaTeX3 编写一些代码后,我发现l3build将新生成的输出与标准化测试输出进行比较。听起来很有用,我尝试自己编写了一些测试,但我不太理解(现在也不理解)(因此:我没能让它工作)。
假设我有给定的 .dtx 文件定义
\DoubleIt
将每个字符打印两次(Hello
->HHeelloo
)并\ChangeToNumber
(尚未完全写出)等于\int_from_alph:n
(x
->24
)
有了这些宏,我如何为测试定义一个规范化的输出文件?
doublefoo.dtx
文件:
% \iffalse meta-comment
% !TEX program = pdfLaTeX
%
%<*internal>
\iffalse
%</internal>
%<*internal>
\fi
\def\nameofplainTeX{plain}
\ifx\fmtname\nameofplainTeX\else
\expandafter\begingroup
\fi
%</internal>
%<*install>
\input l3docstrip.tex
\keepsilent
\askforoverwritefalse
\preamble
\endpreamble
%\postamble
%\endpostamble
\usedir{tex/latex/doublefoo}
\generate{
\file{\jobname.sty}{\from{\jobname.dtx}{package}}
}
%</install>
%<install>\endbatchfile
%<*internal>
\usedir{source/latex/doublefoo}
\generate{
\file{\jobname.ins}{\from{\jobname.dtx}{install}}
}
\nopreamble\nopostamble
\ifx\fmtname\nameofplainTeX
\expandafter\endbatchfile
\else
\expandafter\endgroup
\fi
%</internal>
%<*driver>
\documentclass [
onlydoc,
]{l3doc}
\usepackage{doublefoo}
\begin{document}
\DocInput{\jobname.dtx}
\end{document}
%</driver>
% \fi
%
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
% Digits \0\1\2\3\4\5\6\7\8\9
% Exclamation \! Double quote \" Hash (number) \#
% Dollar \$ Percent \% Ampersand \&
% Acute accent \' Left paren \( Right paren \)
% Asterisk \* Plus \+ Comma \,
% Minus \- Point \. Solidus \/
% Colon \: Semicolon \; Less than \<
% Equals \= Greater than \> Question mark \?
% Commercial at \@ Left bracket \[ Backslash \\
% Right bracket \] Circumflex \^ Underscore \_
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
%
%
% \GetFileInfo{\jobname.sty}
%
% \begin{documentation}
%
% \DoubleIt {Hello}
%
% \ChangeToNumber {x}
%
% \end{documentation}
%
% \begin{implementation}
%
% \begin{macrocode}
%<@@=doublefoo>
% \end{macrocode}
%
% \begin{macrocode}
\@ifpackageloaded {xparse}
{ }
{ \RequirePackage {xparse} }
\@ifpackageloaded {expl3}
{ }
{ \RequirePackage {expl3} }
% \end{macrocode}
% \begin{macrocode}
\ProvidesExplPackage
{doublefoo}
{2016/06/31}
{42}
{A foo to double up your bar.}
% \end{macrocode}
%
% \begin{macrocode}
\NewDocumentCommand \DoubleIt { m }
{
\tl_map_inline:nn {#1} { ##1 ##1 }
}
% \end{macrocode}
%
% \begin{macrocode}
\NewDocumentCommand \ChangeToNumber { m }
{
%% not yet defined.
}
% \end{macrocode}
%
% \end{implementation}
%
% \endinput
build.lua
文件:
#!/usr/bin/env texlua
module = "doublefoo"
unpackfiles = {"*.dtx"}
kpse.set_program_name("kpsewhich")
dofile(kpse.lookup("l3build.lua"))
testfiles/Versuch.lvt
(与第 2.3 章基本相同l3build)
\documentclass{article}
\input{regression-test}
\usepackage{doublefoo}
\begin{document}
\ExplSyntaxOn
\box_new:N \l_tmp_box
\hbox_set:Nn \l_tmp_box {\DoubleIt{Hallo}}
\box_show:N \l_tmp_box
\ExplSyntaxOff
\end{document}
接下来我执行了以下步骤(在正确的目录中):
- 跑步
texlua build.lua save Versuch
将
doublefoo.dtx
命令更改\DoubleIt
为\NewDocumentCommand \DoubleIt { m } { Change \tl_map_inline:nn {#1} { ##1 ##1 } }
并保存文件。(还要编译它以确保我更改了输出。)
- 跑步
texlua build.lua check
执行此操作后,终端会打印
Running checks on
Versuch
All checks passed
这不可能是真的,因为\DoubleIt
与以前不同。
附注:这里有一个文件测试(正确工作,感谢答案).lve
:
testfiles/Versuch2.lvt
\documentclass{article}
\input{regression-test}
\usepackage{doublefoo}
\begin{document}
\ExplSyntaxOn
\START
\OMIT
\hbox_set:Nn \l_tmpa_box { \ChangeToNumber { x } }
\TIMO
\box_show:N \l_tmpa_box
\END
testfiles/Versuch2.lve
:
\documentclass{article}
\input{regression-test}
\usepackage{doublefoo}
\begin{document}
\START
\ExplSyntaxOn
\OMIT
\hbox_set:Nn \l_tmpa_box { 24 }
\TIMO
\box_show:N \l_tmpa_box
\END
之后例如texlua build.lua check Versuch2
。
答案1
您的问题是文件中没有任何内容.tlg
。原因是您没有告诉测试系统“有用”部分.log
已经开始(原始日志中有很多您不想要的材料)。您需要\START
在测试输入中的某个地方标记“有用”材料出现的时间点。我可能会选择类似
\documentclass{article}
\input{regression-test}
\usepackage{doublefoo}
\begin{document}
\ExplSyntaxOn
\START
\OMIT
\box_new:N \l_tmp_box
\hbox_set:Nn \l_tmp_box {\DoubleIt{Hallo}}
\TIMO
\box_show:N \l_tmp_box
\END
这里。对于单个测试,我们不一定需要块\OMIT
(可以只移动\START
),但对于更复杂的情况可能需要
\documentclass{article}
\input{regression-test}
\usepackage{doublefoo}
\begin{document}
\ExplSyntaxOn
\START
\TEST { Basic~use#of~\token_to_str:N \DoubleIt }
{
\OMIT
\hbox_set:Nn \l_tmpa_box {\DoubleIt{Hallo}}
\TIMO
\box_show:N \l_tmpa_box
}
...
\END
请注意,作为测试“设置”的一部分但未经测试的代码位于块内\OMIT
(以防其他地方出现一些零散问题)。我还使用标准\l_tmpa_box
作为测试文件,这是“安全的”(不应该有冲突的风险)。