我正在DejaGNU为我的应用程序编写单元测试,而且我无法匹配mulitiline输出。
当我从输出中删除换行符\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+$"
但不是它们有效。
答案 0 :(得分: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字节。