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 に答える