2012-05-05 4 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에는 일치하는 전체 여러 줄 패턴 공간이 있지만 실제로 생각하는 것을 볼 수있는 것은 아닙니다. 특히 newline은 가상 터미널 시스템에 의해 변형 될 수 있습니다. 이 시도 : 내가 대신 따옴표의 중괄호에 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 바이트를 읽기가 더 쉽다.