cmd/tests: Fix test runner so it catches cases where an output line contains the associated expected line as prefix

Frédéric Delanoy frederic.delanoy at gmail.com
Sat Jul 23 05:13:29 CDT 2011


Also fix tests which were marked as successful due to this bug.
---
 programs/cmd/tests/batch.c               |    9 ++++++++-
 programs/cmd/tests/test_builtins.cmd     |    8 ++++----
 programs/cmd/tests/test_builtins.cmd.exp |   12 ++++++------
 3 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/programs/cmd/tests/batch.c b/programs/cmd/tests/batch.c
index 2715b11..63a5e99 100644
--- a/programs/cmd/tests/batch.c
+++ b/programs/cmd/tests/batch.c
@@ -200,7 +200,11 @@ static const char *compare_line(const char *out_line, const char *out_end, const
         out_ptr++;
     }
 
-    return exp_ptr == exp_end ? NULL : out_ptr;
+    return exp_ptr != exp_end
+            ? out_ptr
+            : (out_ptr != out_end)
+                ? exp_end
+                : NULL;
 }
 
 static void test_output(const char *out_data, DWORD out_size, const char *exp_data, DWORD exp_size)
@@ -227,6 +231,9 @@ static void test_output(const char *out_data, DWORD out_size, const char *exp_da
         if(err == out_nl)
             ok(0, "unexpected end of line %d (got '%.*s', wanted '%.*s')\n",
                line, (int)(out_nl-out_ptr), out_ptr, (int)(exp_nl-exp_ptr), exp_ptr);
+        else if(err == exp_nl)
+            ok(0, "excess characters on line %d (got '%.*s', wanted '%.*s')\n",
+               line, (int)(out_nl-out_ptr), out_ptr, (int)(exp_nl-exp_ptr), exp_ptr);
         else
             ok(!err, "unexpected char 0x%x position %d in line %d (got '%.*s', wanted '%.*s')\n",
                (err ? *err : 0), (err ? (int)(err-out_ptr) : -1), line, (int)(out_nl-out_ptr), out_ptr, (int)(exp_nl-exp_ptr), exp_ptr);
diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd
index 851598b..f8eb9c8 100644
--- a/programs/cmd/tests/test_builtins.cmd
+++ b/programs/cmd/tests/test_builtins.cmd
@@ -189,10 +189,10 @@ goto :eof
 :endForTestFun1
 for %%i in (X) do (
     for %%j in (Y) do (
-        echo %%i %%j ))
+        echo %%i %%j))
 for %%i in (A B) do (
     for %%j in (C D) do (
-        echo %%i %%j ))
+        echo %%i %%j))
 for %%i in (A B) do (
     for %%j in (C D) do (
         call :forTestFun2 %%i %%j ))
@@ -383,7 +383,7 @@ if not exist foo (
 echo ------------ Testing CALL --------------
 mkdir foobar & cd foobar
 rem External script
-echo echo foo %%1 > foo.cmd
+echo echo foo %%1> foo.cmd
 call foo
 call foo.cmd 8
 del foo.cmd
@@ -415,7 +415,7 @@ call :setError 0
 call for %%i in (foo bar baz) do echo %%i 2> nul
 echo %ErrorLevel%
 rem First look for programs in the path before trying a builtin
-echo echo non-builtin dir > dir.cmd
+echo echo non-builtin dir> dir.cmd
 call dir /b
 cd ..
 rd /s/q foobar
diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp
index 93c1534..3cc8228 100644
--- a/programs/cmd/tests/test_builtins.cmd.exp
+++ b/programs/cmd/tests/test_builtins.cmd.exp
@@ -18,13 +18,13 @@ at-echoed-word
 @pwd@>echo "/?"@space@
 "/?"
 
- at pwd@>echo.
+ at todo_wine@@pwd@>echo.
 
 
 @pwd@>echo . at space@
 .
 
- at pwd@>echo.word
+ at todo_wine@@pwd@>echo.word
 word
 
 @pwd@>echo .word at space@
@@ -73,7 +73,7 @@ FOOBAR =  baz
  bar
 @todo_wine at FOOBAR= bar
 @todo_wine at FOOBAR =  baz2
-FOOBAR =  baz
+FOOBAR =  baz2
 FOOBAR not defined
 1
 bar
@@ -87,7 +87,7 @@ bar
 ~dp0 should be directory containing batch file
 @pwd@\
 @pwd@\
-CD value @pwd@@or_broken at CD value
+CD value @pwd@@or_broken at CD value at space@
 %
 P
 P
@@ -188,8 +188,8 @@ non-empty dir not removed
 recursive rmdir succeeded
 recursive rmdir succeeded
 ------------ Testing CALL --------------
-foo
-foo 8
+foo at space@
+ at todo_wine@foo 8
 bar :testRoutine
 @todo_wine at 0
 @todo_wine at foo created
-- 
1.7.6




More information about the wine-patches mailing list