2

我正在用 DejaGNU 为我的应用程序编写单元测试,但我无法匹配多行输出。

当我从输出中删除换行符\n时,我的规则匹配得很好。例如。

输出:0 123 0 123

expect {
  -re "^0 \\d+ 0 \\d+$" {pass "$test_name"}
}

我想要这样的输出:

0 123
0 123

我已经尝试了一切

"^0 \\d+\\n0 \\d+$"
"^0 \\d+\n0 \\d+$"
"^0 \\d+$\\n^0 \\d+$"
"^0 \\d+$\n^0 \\d+$"

但它们都不起作用。

4

1 回答 1

2

Expect 确实有一个整体的多行模式空间来匹配,但它不一定能看到你的想法。特别是,换行符最终会被虚拟终端系统转换。试试这个:

expect {
    -re {^0 \d+[\r\n]{1,2}0 \d+$} {
        # Just for debugging (and you might need to write to a log...)
        binary scan $expect_out(0,string) c* byteList
        puts [join $byteList ","]
        # Now do the rest of your code
        pass "$test_name"
    }
}

请注意,我将 RE 放在大括号而不是双引号中,因为这样可以减少反斜杠的数量。
一旦您知道Expect实际看到的是什么,您就可以更直接地对其进行编码。我通常只会说打印出来而不会大惊小怪,但是由于您正在处理换行符,因此更容易读取 ASCII 字节。

于 2012-05-05T21:57:17.617 回答