2012-05-05 11 views
2

私はDejaGNUで自分のアプリの単体テストを書いていますが、mulitilineの出力とは一致しません。Dejagnu/expect multiline regex

出力から改行\nを削除すると、私のルールはよく一致します。 例

出力:0 123 0 123

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

私はそのような出力を持つようにしたい:

0 123 
0 123 

私はeveryting

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

を試してみたが、それらの非動作します。

答えて

2

Expectには、一致するための全体的な複数行のパターンスペースがありますが、必ずしもあなたが思っているものを見るとは限りません。特に、改行は仮想端末システムによって変換される可能性があります。それがダウンしてバックスラッシュの数を保持しますので、私は、中括弧の代わりに、二重引用符でREを置くことを

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" 
    } 
} 

注:これを試してみてください。
が実際にというものがExpectに見えていることがわかったら、それをより直接的にコーディングすることができます。私は通常、ちょうど周りに騒がすことなくそれを印刷すると言うだろうが、あなたは改行を扱っているので、ASCIIバイトを読み取ることは簡単です。