使用 l3build 的测试文件示例

使用 l3build 的测试文件示例

在使用 LaTeX3 编写一些代码后,我发现l3build将新生成的输出与标准化测试输出进行比较。听起来很有用,我尝试自己编写了一些测试,但我不太理解(现在也不理解)(因此:我没能让它工作)。

假设我有给定的 .dtx 文件定义

  • \DoubleIt将每个字符打印两次(Hello-> HHeelloo)并

  • \ChangeToNumber(尚未完全写出)等于\int_from_alph:nx-> 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}

接下来我执行了以下步骤(在正确的目录中):

  1. 跑步texlua build.lua save Versuch
  2. doublefoo.dtx命令更改\DoubleIt

    \NewDocumentCommand \DoubleIt { m }
      {
        Change
        \tl_map_inline:nn {#1} { ##1 ##1 }
      }
    

    并保存文件。(还要编译它以确保我更改了输出。)

  3. 跑步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作为测试文件,这是“安全的”(不应该有冲突的风险)。

相关内容