在tcl测试 - 如何解释tcltest :: test

时间:2016-11-08 14:57:53

标签: tcl

我正在查看TCL源代码树中的测试,我在compExpr-old.test中看到了这个:

test compExpr-old-14.17 {CompilePrimaryExpr: string primary that looks like var ref} {
    expr $
} $

我看起来不对:测试运行脚本expr $并期望返回值为" $"。我的解释是对的吗?

这可能不对,因为expr $在语法上是错误的。

我检查了tcltest.tcl,tcltest::test的定义太长了,希望有人可以帮助我。

1 个答案:

答案 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)。不太灵活,但不太难理解。