我正在查看TCL源代码树中的测试,我在compExpr-old.test中看到了这个:
test compExpr-old-14.17 {CompilePrimaryExpr: string primary that looks like var ref} {
expr $
} $
我看起来不对:测试运行脚本expr $
并期望返回值为" $"。我的解释是对的吗?
这可能不对,因为expr $
在语法上是错误的。
我检查了tcltest.tcl,tcltest::test
的定义太长了,希望有人可以帮助我。
答案 0 :(得分:0)
我不知道您正在查看的测试套件的版本(可能是一些8.4变体?),但是当我在Tcl主干中查看整个测试时,我看到了:
test compExpr-old-14.17 {CompilePrimaryExpr: string primary that looks like var ref} -body {
expr $
} -returnCodes error -match glob -result *
在这种情况下,它检查结果是错误并且结果的值(即错误消息的内容)glob与*
匹配,即什么都有(实际上忽略了它)。也就是说,测试检查是否从expr $
获得了错误,否则就不在乎。
您发布的测试(使用较早的tcltest
语法)不会传递现代版本的Tcl。但是在8.4中,做了通过;这是Tcl的语义在8.4到8.5之间变化的区域:
dkf$ tclsh8.4
% expr $
$
% exit
dkf$ tclsh8.5
% expr $
invalid character "$"
in expression "$"
% exit
Tcltest测试用例快速指南:-body
描述了要运行的脚本,-returnCode
可用于选择是否需要正常结果或错误,-result
可以使用说出由于正文脚本而期望的字符串,并且-match
可用于选择替代匹配方案而不是默认(精确字符串相等)。还有-constraints
用于指定测试的前提条件,-setup
用于执行设置代码,-cleanup
用于清理代码。两个主要的强制性参数是测试的名称(在测试套件中必须是唯一的,用于您自己的理智)和测试的简短描述,用于报告失败。
在旧的语法中(在Tcl的大部分测试套件中使用,因为更新它是一项无聊的工作),你改为使用相同的两个必需参数,然后是一个可选的约束列表(如{{ 1}}),然后是强制主体(对于-constraints
),然后是要求相等的强制字符串(对于-body
)。不太灵活,但不太难理解。