diff options
Diffstat (limited to 'tests/test/script/runner')
-rw-r--r-- | tests/test/script/runner/cleanup.test | 81 | ||||
-rw-r--r-- | tests/test/script/runner/redirect.test | 170 | ||||
-rw-r--r-- | tests/test/script/runner/regex.test | 87 | ||||
-rw-r--r-- | tests/test/script/runner/status.test | 18 |
4 files changed, 102 insertions, 254 deletions
diff --git a/tests/test/script/runner/cleanup.test b/tests/test/script/runner/cleanup.test index 1c3ccae..7b3539b 100644 --- a/tests/test/script/runner/cleanup.test +++ b/tests/test/script/runner/cleanup.test @@ -6,26 +6,20 @@ b += --no-column -# @@ TODO: $c <'$* -f a &a' && $b -# - : file : { : always : - $c <'$* -f a &a'; - $b + $c <'$* -f a &a' && $b : maybe : - $c <'$* &?a'; - $b + $c <'$* &?a' && $b : never : - $c <'$* &!a'; - $b + $c <'$* &!a' && $b : implicit : @@ -33,30 +27,27 @@ b += --no-column : implicitly registered for cleanup. If it were, the test would fail due to : the file absence at the cleanup time. : - $c <<EOI; + $c <<EOI && $b touch ../../a; rm -f ../../a EOI - $b : append : : Test that file append redirect does not not register cleanup. If it did, : that cleanup would fail as the file would be already deleted by rm. : - $c <<EOI; + $c <<EOI && $b touch a &!a; $* -o foo >+a; rm a EOI - $b : not-exists : : Test cleanup of non-existing file. : - $c <'$* &a'; - $b 2>>/EOE != 0 + $c <'$* &a' && $b 2>>/EOE != 0 testscript:1: error: registered for cleanup file test/1/a does not exist EOE @@ -64,8 +55,7 @@ b += --no-column : : Test explicit cleanup of a file out of the testscript working directory. : - $c <'$* &../../a'; - $b 2>>/EOE != 0 + $c <'$* &../../a' && $b 2>>/EOE != 0 testscript:1: error: file cleanup ../../a is out of working directory test/ EOE @@ -74,8 +64,7 @@ b += --no-column : Test cleanup explicit registration of a file being outside the test working : directory but inside the script working directory. : - $c <'$* &../a'; - $b 2>>/EOE != 0 + $c <'$* &../a' && $b 2>>/EOE != 0 testscript:1: error: registered for cleanup file test/a does not exist EOE @@ -83,8 +72,7 @@ b += --no-column : : Test cleanup of a directory as a file. : - $c <'$* -d a &a'; - $b 2>>/~%EOE% != 0 + $c <'$* -d a &a' && $b 2>>/~%EOE% != 0 %error: unable to remove file test/1/a: .+% EOE } @@ -94,13 +82,11 @@ b += --no-column { : always : - $c <'$* -d a &a/'; - $b + $c <'$* -d a &a/' && $b : maybe : - $c <'$* &?a/'; - $b + $c <'$* &?a/' && $b : implicit : @@ -108,18 +94,16 @@ b += --no-column : not implicitly registered for cleanup. If it were, the test would fail due : to the directory absence at the cleanup time. : - $c <<EOI; + $c <<EOI && $b mkdir ../../a; rm -r -f ../../a EOI - $b : not-exists : : Test cleanup of non-existing directory. : - $c <'$* &a/'; - $b 2>>/EOE != 0 + $c <'$* &a/' && $b 2>>/EOE != 0 testscript:1: error: registered for cleanup directory test/1/a/ does not exist EOE @@ -127,8 +111,7 @@ b += --no-column : : Test cleanup of a directory out of the testscript working directory. : - $c <'$* &../../a/'; - $b 2>>/EOE != 0 + $c <'$* &../../a/' && $b 2>>/EOE != 0 testscript:1: error: directory cleanup ../../a/ is out of working directory test/ EOE @@ -137,8 +120,7 @@ b += --no-column : Test cleanup explicit registration of a directory being outside the test : working directory but inside the testscript working directory. : - $c <'$* &../a/'; - $b 2>>/EOE != 0 + $c <'$* &../a/' && $b 2>>/EOE != 0 testscript:1: error: registered for cleanup directory test/a/ does not exist EOE @@ -146,8 +128,7 @@ b += --no-column : : Test cleanup of a non-empty directory. : - $c <'$* -d a -f a/b &a/'; - $b 2>>/EOE != 0 + $c <'$* -d a -f a/b &a/' && $b 2>>/EOE != 0 testscript:1: error: registered for cleanup directory test/1/a/ is not empty EOE @@ -155,8 +136,7 @@ b += --no-column : : Test cleanup of a file as a directory. : - $c <'$* -f a &a/'; - $b 2>>/~%EOE% != 0 + $c <'$* -f a &a/' && $b 2>>/~%EOE% != 0 %error: unable to remove directory test/1/a/: .+% EOE } @@ -166,20 +146,17 @@ b += --no-column { : always : - $c <'$* -d a/b -f a/b/c &a/***'; - $b + $c <'$* -d a/b -f a/b/c &a/***' && $b : maybe : - $c <'$* &?a/***'; - $b + $c <'$* &?a/***' && $b : not-exists : : Test cleanup of a wildcard not matching any directory. : - $c <'$* &a/***'; - $b 2>>/EOE != 0 + $c <'$* &a/***' && $b 2>>/EOE != 0 testscript:1: error: registered for cleanup wildcard test/1/a/*** doesn't match a directory EOE @@ -187,8 +164,7 @@ b += --no-column : : Test cleanup of a wildcard out of the testscript working directory. : - $c <'$* &../../a/***'; - $b 2>>/EOE != 0 + $c <'$* &../../a/***' && $b 2>>/EOE != 0 testscript:1: error: wildcard cleanup ../../a/*** is out of working directory test/ EOE @@ -198,8 +174,7 @@ b += --no-column : outside the test working directory is inside the testscript working : directory. : - $c <'$* &../a/***'; - $b 2>>/EOE != 0 + $c <'$* &../a/***' && $b 2>>/EOE != 0 testscript:1: error: registered for cleanup wildcard test/a/*** doesn't match a directory EOE @@ -207,8 +182,7 @@ b += --no-column : : Test cleanup of a file as a wildcard. : - $c <'$* -f a &a/***'; - $b 2>>/~%EOE% != 0 + $c <'$* -f a &a/***' && $b 2>>/~%EOE% != 0 %error: unable to remove directory test/1/a/: .+% EOE } @@ -217,15 +191,13 @@ b += --no-column : : Test that cleanup is performed in registration reversed order. : -$c <'$* -d a/b &a/ &a/b/'; -$b +$c <'$* -d a/b &a/ &a/b/' && $b : implicit-overwrite : : Test an implicit cleanup being overwritten with the explicit one, : -$c <'$* -o foo >=a &!a'; -$b 2>>/EOE != 0 +$c <'$* -o foo >=a &!a' && $b 2>>/EOE != 0 testscript:1: error: registered for cleanup directory test/1/ is not empty EOE @@ -233,10 +205,9 @@ EOE : : Test an explicit cleanup not being overwritten with the implicit one. : -$c <<EOO; +$c <<EOO && $b 2>>/EOE != 0 $* &!a; $* -o foo >=a EOO -$b 2>>/EOE != 0 testscript:2: error: registered for cleanup directory test/1/ is not empty EOE diff --git a/tests/test/script/runner/redirect.test b/tests/test/script/runner/redirect.test index cfc12c5..3cd6c69 100644 --- a/tests/test/script/runner/redirect.test +++ b/tests/test/script/runner/redirect.test @@ -12,7 +12,7 @@ psr = ($cxx.target.class != 'windows' ? '/' : '\\') # Path separator in regex. : pass : { - $c <'$* -i 1 -e bar <| >| 2>|'; + cat <'$* -i 1 -e bar <| >| 2>|' >=testscript; cat <<EOI >=buildfile; test{testscript}: $target EOI @@ -22,15 +22,8 @@ psr = ($cxx.target.class != 'windows' ? '/' : '\\') # Path separator in regex. : null : { - : out - : - $c <'$* -o foo >-'; - $b - - : err - : - $c <'$* -e foo 2>-'; - $b + $c <'$* -o foo >-' && $b : out + $c <'$* -e foo 2>-' && $b : err } : str @@ -39,25 +32,10 @@ psr = ($cxx.target.class != 'windows' ? '/' : '\\') # Path separator in regex. : literal : { - : in - : - $c <'$* -i 0 <foo'; - $b - - : out - : - $c <'$* -o foo >foo'; - $b - - : err - : - $c <'$* -e foo 2>foo'; - $b - - : inout - : - $c <'$* -i 1 <foo >foo'; - $b + $c <'$* -i 0 <foo' && $b : in + $c <'$* -o foo >foo' && $b : out + $c <'$* -e foo 2>foo' && $b : err + $c <'$* -i 1 <foo >foo' && $b : inout : inout-fail : @@ -75,30 +53,11 @@ psr = ($cxx.target.class != 'windows' ? '/' : '\\') # Path separator in regex. +foo EOE - : inerr - : - $c <'$* -i 2 <foo 2>foo'; - $b - - : inout-err - : - $c <'$* -i 1 -e bar <foo 1>foo 2>bar'; - $b - - : empty - : - $c <'$* -o "" >""'; - $b - - : no-newline - : - $c <'$* -i 1 <:"foo" >:"foo"'; - $b - - : no-newline-empty - : - $c <'$* -i 1 <:"" >:""'; - $b + $c <'$* -i 2 <foo 2>foo' && $b : inerr + $c <'$* -i 1 -e bar <foo 1>foo 2>bar' && $b : inout-err + $c <'$* -o "" >""' && $b : empty + $c <'$* -i 1 <:"foo" >:"foo"' && $b : no-newline + $c <'$* -i 1 <:"" >:""' && $b : no-newline-empty : no-newline-fail1 : @@ -124,31 +83,19 @@ psr = ($cxx.target.class != 'windows' ? '/' : '\\') # Path separator in regex. : merge : - $c <<EOI; + $c <<EOI && $b $* -o foo -e bar 2>>EOE 1>&2 foo bar EOE EOI - $b : portable-path : { - : in - : - $c <"\$* -i 1 </'foo/' >'foo$ps'"; - $b - - : out - : - $c <"\$* -i 1 <'foo$ps' >/'foo/'"; - $b - - : err - : - $c <"\$* -i 2 <'foo$ps' 2>/'foo/'"; - $b + $c <"\$* -i 1 </'foo/' >'foo$ps'" && $b : in + $c <"\$* -i 1 <'foo$ps' >/'foo/'" && $b : out + $c <"\$* -i 2 <'foo$ps' 2>/'foo/'" && $b : err } } @@ -211,37 +158,34 @@ psr = ($cxx.target.class != 'windows' ? '/' : '\\') # Path separator in regex. { : in : - $c <<EOI; + $c <<EOI && $b $* -i 0 <<EOO foo bar EOO EOI - $b : out : - $c <<EOI; + $c <<EOI && $b $* -o foo -o bar >>EOO foo bar EOO EOI - $b : err : - $c <<EOI; + $c <<EOI && $b $* -e foo -e bar 2>>EOO foo bar EOO EOI - $b : inout : - $c <<EOI; + $c <<EOI && $b $* -i 1 <<EOF >>EOO foo bar @@ -250,11 +194,10 @@ psr = ($cxx.target.class != 'windows' ? '/' : '\\') # Path separator in regex. bar EOO EOI - $b : inerr : - $c <<EOI; + $c <<EOI && $b $* -i 2 <<EOF 2>>EOE foo bar @@ -263,59 +206,53 @@ psr = ($cxx.target.class != 'windows' ? '/' : '\\') # Path separator in regex. bar EOE EOI - $b : empty : - $c <<EOI; + $c <<EOI && $b $* -i 1 <<EOF >>EOO EOF EOO EOI - $b : shared : - $c <<EOI; + $c <<EOI && $b $* -i 1 <<EOF >>EOF foo bar EOF EOI - $b : extra-newline : - $c <<EOI; + $c <<EOI && $b $* -i 1 <<EOF >>EOO EOF EOO EOI - $b : no-newline : - $c <<EOI; + $c <<EOI && $b $* -i 1 <<:EOF >>:EOO foo EOF foo EOO EOI - $b : no-newline-fail1 : - $c <<EOI; + $c <<EOI && $b 2>>~/EOE/ != 0 $* -i 1 <<:EOF >>EOO foo EOF foo EOO EOI - $b 2>>~/EOE/ != 0 /testscript:1: error: .+driver(\.exe)? stdout doesn't match the expected output/ /.{7} -foo @@ -325,14 +262,13 @@ psr = ($cxx.target.class != 'windows' ? '/' : '\\') # Path separator in regex. : no-newline-fail2 : - $c <<EOI; + $c <<EOI && $b 2>>~/EOE/ != 0 $* -i 1 <<EOF >>:EOO foo EOF foo EOO EOI - $b 2>>~/EOE/ != 0 /testscript:1: error: .+driver(\.exe)? stdout doesn't match the expected output/ /.{7} -foo @@ -342,27 +278,25 @@ psr = ($cxx.target.class != 'windows' ? '/' : '\\') # Path separator in regex. : no-newline-empty : - $c <<EOI; + $c <<EOI && $b $* -i 1 <<:EOF >>:EOO EOF EOO EOI - $b : no-newline-extra-newline : - $c <<EOI; + $c <<EOI && $b $* -i 1 <<:EOF >>:EOO EOF EOO EOI - $b : merge : - $c <<EOI; + $c <<EOI && $b $* -i 1 <<EOF -e baz >>EOO 2>&1 foo bar @@ -372,23 +306,21 @@ psr = ($cxx.target.class != 'windows' ? '/' : '\\') # Path separator in regex. baz EOO EOI - $b : large-diff : : Make sure that the large (>4KB) expected/real output difference is not : printed as a part of the diagnostics. : - $c <<EOI; - s="------------------------------------------------------------------------"; - s="$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s"; + $c <<EOI && $b 2>>/~%EOE%d != 0 + s="----------------------------------------------------------------------"; + s="$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s"; $* -i 1 <<"EOF" >>"EOO" $s EOF x$s EOO EOI - $b 2>>/~%EOE%d != 0 %testscript:3: error: ../../../../../driver(.exe)? stdout doesn't match the expected output% info: stdout: test/1/stdout info: expected stdout: test/1/stdout.orig @@ -401,30 +333,27 @@ psr = ($cxx.target.class != 'windows' ? '/' : '\\') # Path separator in regex. { : in : - $c <<"EOI"; + $c <<"EOI" && $b \$* -i 1 <</EOF >'foo$ps' foo/ EOF EOI - $b : out : - $c <<"EOI"; + $c <<"EOI" && $b \$* -i 1 <'foo$ps' >>/EOO foo/ EOO EOI - $b : err : - $c <<"EOI"; + $c <<"EOI" && $b \$* -i 2 <'foo$ps' 2>>/EOE foo/ EOE EOI - $b } } @@ -436,41 +365,37 @@ psr = ($cxx.target.class != 'windows' ? '/' : '\\') # Path separator in regex. { : match : - $c <<EOI; + $c <<EOI && $b $* -o foo -o foo -o bar >>~/EOO/i /FO*/* bar /* EOO EOI - $b : match-empty : - $c <<EOI; + $c <<EOI && $b $* >>:~/EOO/ /.{0} EOO EOI - $b : shared : - $c <<EOI; + $c <<EOI && $b $* -o foo -e foo >>~/EOF/ 2>>~/EOF/ foo EOF EOI - $b : mismatch : - $c <<EOI; + $c <<EOI && $b 2>>/~%EOE%d != 0 $* -o foo >>~/EOO/ bar EOO EOI - $b 2>>/~%EOE%d != 0 %testscript:1: error: ../../../../../driver(.exe)? stdout doesn't match the regex% info: stdout: test/1/stdout info: stdout regex: test/1/stdout.regex @@ -478,12 +403,11 @@ psr = ($cxx.target.class != 'windows' ? '/' : '\\') # Path separator in regex. : mismatch-icase : - $c <<EOI; + $c <<EOI && $b 2>>/~%EOE%d != 0 $* -o foo >>~/EOO/i bar EOO EOI - $b 2>>/~%EOE%d != 0 %testscript:1: error: ../../../../../driver(.exe)? stdout doesn't match the regex% info: stdout: test/1/stdout info: stdout regex: test/1/stdout.regex~i @@ -496,18 +420,17 @@ psr = ($cxx.target.class != 'windows' ? '/' : '\\') # Path separator in regex. { : in : - $c <<EOI; + $c <<EOI && $b $* -o foo >=out; $* -i 1 <<<out >foo EOI - $b : out : { : match : - $c <<EOI; + $c <<EOI && $b $* -o foo >=out; $* -e bar 2>+out; $* -i 1 <<EOF >>>out @@ -515,15 +438,13 @@ psr = ($cxx.target.class != 'windows' ? '/' : '\\') # Path separator in regex. bar EOF EOI - $b : mismatch : - $c <<EOI; + $c <<EOI && $b 2>>/~%EOE%d != 0 $* -o foo >=out; $* -o bar >>>out EOI - $b 2>>/~%EOE%d != 0 %testscript:2: error: ../../../../../driver(.exe)? stdout doesn't match the expected output% info: stdout: test/1/stdout-2 info: expected stdout: test/1/out @@ -538,7 +459,7 @@ psr = ($cxx.target.class != 'windows' ? '/' : '\\') # Path separator in regex. : merge : - $c <<EOI; + $c <<EOI && $b $* -o foo -e bar 2>&1 >=out; $* -e baz -o biz 1>&2 2>+out; $* -i 1 <<<out >>EOO @@ -548,5 +469,4 @@ psr = ($cxx.target.class != 'windows' ? '/' : '\\') # Path separator in regex. biz EOO EOI - $b } diff --git a/tests/test/script/runner/regex.test b/tests/test/script/runner/regex.test index f4863b1..413069c 100644 --- a/tests/test/script/runner/regex.test +++ b/tests/test/script/runner/regex.test @@ -23,20 +23,9 @@ : str : { - : out - : - $c <'cat <foo >~/fo./'; - $b - - : err - : - $c <'cat <foo 1>&2 2>~/fo./'; - $b - - : no-newline - : - $c <'cat <:foo >:~/fo./'; - $b + $c <'cat <foo >~/fo./' && $b : out + $c <'cat <foo 1>&2 2>~/fo./' && $b : err + $c <'cat <:foo >:~/fo./' && $b : no-newline : malformed : @@ -55,34 +44,31 @@ { : out : - $c <<EOI; + $c <<EOI && $b cat <foo >>~/EOO/ /foo/ EOO EOI - $b : err : - $c <<EOI; + $c <<EOI && $b cat <foo 1>&2 2>>~/EOO/ /fo./ EOO EOI - $b : no-newline : - $c <<EOI; + $c <<EOI && $b cat <:foo >>:~/EOO/ /fo./ EOO EOI - $b : line-char : - $c <<EOI; + $c <<EOI && $b cat <<EOF >>~/EOO/ foo bar @@ -107,11 +93,10 @@ //{2} EOO EOI - $b : expansion : - $c <<EOI; + $c <<EOI && $b s="O*/i bar "; @@ -125,41 +110,37 @@ baz EOO EOI - $b : invalid-syntax-char : - $c <<EOI; + $c <<EOI && $b 2>>EOE != 0 $* -o foo >>~/EOO/ /x EOO EOI - $b 2>>EOE != 0 testscript:2:3: error: invalid syntax character 'x' in stdout regex redirect info: regex line: '/x' EOE : invalid-char-regex : - $c <<EOI; + $c <<EOI && $b 2>>~/EOE/ != 0 $* -o foo >>~/EOO/ /foo[/ EOO EOI - $b 2>>~/EOE/ != 0 /testscript:2:3: error: invalid char-regex in stdout regex redirect.*/ info: regex line: '/foo[/' EOE : invalid-line-regex : - $c <<EOI; + $c <<EOI && $b 2>>/~%EOE% != 0 $* -o foo >>~/EOO/ a /{ EOO EOI - $b 2>>/~%EOE% != 0 %testscript:4:3: error: invalid stdout regex redirect.*% info: stdout regex: test/1/stdout.regex EOE @@ -174,8 +155,7 @@ { : i : - $c <'cat <Foo >~/foo/i'; - $b + $c <'cat <Foo >~/foo/i' && $b : d : @@ -185,15 +165,13 @@ : Escaped dot becomes syntax dot and matches any character ('i' in our : case). : - $c <'cat <fio >~/f\\.o/d'; - $b + $c <'cat <fio >~/f\\.o/d' && $b : syntax-dot : : Syntax dot becomes escaped dot and matches only '.' and so we fail. : - $c <'cat <fio >~/f.o/d'; - $b 2>>~/EOE/ != 0 + $c <'cat <fio >~/f.o/d' && $b 2>>~/EOE/ != 0 testscript:1:1: error: cat stdout doesn't match the regex /.+ EOE @@ -204,12 +182,11 @@ { : i : - $c <<EOI; + $c <<EOI && $b cat <Foo >>~/EOO/ /foo/i EOO EOI - $b : d : @@ -219,21 +196,19 @@ { : escaped-dot : - $c <<EOI; + $c <<EOI && $b cat <fio >>~/EOO/ /f\.o/d EOO EOI - $b : syntax-dot : - $c <<EOI; + $c <<EOI && $b 2>>~/EOE/ != 0 cat <fio >>~/EOO/ /f.o/d EOO EOI - $b 2>>~/EOE/ != 0 testscript:1:1: error: cat stdout doesn't match the regex /.+ EOE @@ -244,33 +219,30 @@ { : i : - $c <<EOI; + $c <<EOI && $b cat <Foo >>~/EOO/i /foo/ EOO EOI - $b : d : { : escaped-dot : - $c <<EOI; + $c <<EOI && $b cat <fio >>~/EOO/d /f\.o/ EOO EOI - $b : syntax-dot : - $c <<EOI; + $c <<EOI && $b 2>>~/EOE/ != 0 cat <fio >>~/EOO/d /f.o/ EOO EOI - $b 2>>~/EOE/ != 0 testscript:1:1: error: cat stdout doesn't match the regex /.+ EOE @@ -287,35 +259,26 @@ : str : { - : out - : - $c <"cat <'foo$ps' >/~%foo/%"; - $b - - : err - : - $c <"cat <'foo$ps' >/~%foo/%"; - $b + $c <"cat <'foo$ps' >/~%foo/%" && $b : out + $c <"cat <'foo$ps' 1>&2 2>/~%foo/%" && $b : err } : doc { : out : - $c <<"EOI"; + $c <<"EOI" && $b cat <'foo$ps' >>/~%EOO% foo/ EOO EOI - $b : err : - $c <<"EOI"; - cat <'foo$ps' >>/~%EOO% + $c <<"EOI" && $b + cat <'foo$ps' 1>&2 2>>/~%EOO% foo/ EOO EOI - $b } } diff --git a/tests/test/script/runner/status.test b/tests/test/script/runner/status.test index c1df3e4..67ce3ae 100644 --- a/tests/test/script/runner/status.test +++ b/tests/test/script/runner/status.test @@ -11,13 +11,11 @@ b += --no-column { : true : - $c <'$* == 0'; - $b + $c <'$* == 0' && $b : false : - $c <'$* -s 1 == 0'; - $b 2>>/~%EOE%d != 0 + $c <'$* -s 1 == 0' && $b 2>>/~%EOE%d != 0 %testscript:1: error: ../../../../driver(.exe)? exit status 1 != 0% EOE } @@ -27,21 +25,18 @@ b += --no-column { : true : - $c <'$* -s 1 != 0'; - $b + $c <'$* -s 1 != 0' && $b : false : - $c <'$* -s 1 != 1'; - $b 2>>/~%EOE% != 0 + $c <'$* -s 1 != 1' && $b 2>>/~%EOE% != 0 %testscript:1: error: ../../../../driver(.exe)? exit status 1 == 1% EOE } : error : -$c <'$* -s 1 -e "Error"'; -$b 2>>/~%EOE% != 0 +$c <'$* -s 1 -e "Error"' && $b 2>>/~%EOE% != 0 %testscript:1: error: ../../../driver(.exe)? exit status 1 != 0% info: stderr: test/1/stderr Error @@ -53,8 +48,7 @@ EOE : Can pop up dialog boxes on Windows or produce coredump on POSIX. Note that : under Wine some extra info is printed to STDOUT. : -$c <'$* -t m'; -$b 2>>/~%EOE% != 0 +$c <'$* -t m' && $b 2>>/~%EOE% != 0 %wine: .+%? %testscript:1: error: ../../../driver(.exe)? terminated abnormally%d % info: .+% |