mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
Add a testing suite for CMD based on CMD scripts.
Of course, ReactOS' cmd doesn't work at all with the framework at the moment :-) Some tests were taken from "seta_test.cmd" by Royce. (see file headers) svn path=/trunk/; revision=33560
This commit is contained in:
parent
a5d311777a
commit
b655fc4f5e
7 changed files with 337 additions and 0 deletions
69
rostests/win32/cmd/script_testsuite/lib/testlib.cmd
Normal file
69
rostests/win32/cmd/script_testsuite/lib/testlib.cmd
Normal file
|
@ -0,0 +1,69 @@
|
|||
::
|
||||
:: PROJECT: ReactOS CMD Testing Suite
|
||||
:: LICENSE: GPL v2 or any later version
|
||||
:: FILE: lib/testlib.cmd
|
||||
:: PURPOSE: Library with functions available for all tests
|
||||
:: COPYRIGHT: Copyright 2008 Colin Finck <mail@colinfinck.de>
|
||||
::
|
||||
|
||||
:: Indicate that a test ran successfully
|
||||
:_successful
|
||||
set /a test_count+=1
|
||||
set /a successful_tests+=1
|
||||
goto :EOF
|
||||
|
||||
|
||||
:: Indicate that a test failed
|
||||
:: @param 1 Description of the test that failed
|
||||
:_failed
|
||||
set /a test_count+=1
|
||||
set /a failed_tests+=1
|
||||
echo Test "%~1" failed!
|
||||
goto :EOF
|
||||
|
||||
|
||||
:: Test whether a call succeeded
|
||||
:: @param 1 The test command to run and check
|
||||
:_test
|
||||
%~1
|
||||
|
||||
if "%errorlevel%" == "0" (
|
||||
call :_successful
|
||||
) else (
|
||||
call :_failed "%~1"
|
||||
)
|
||||
goto :EOF
|
||||
|
||||
|
||||
:: Test whether a call failed
|
||||
:: @param 1 The test command to run and check
|
||||
:_testnot
|
||||
%~1
|
||||
|
||||
if "%errorlevel%" == "0" (
|
||||
call :_failed "%~1"
|
||||
) else (
|
||||
call :_successful
|
||||
)
|
||||
goto :EOF
|
||||
|
||||
|
||||
:: Test the value of a variable
|
||||
:: @param 1 The variable to check (like %test%)
|
||||
:: @param 2 The variable name (like test)
|
||||
:: @param 3 The expected result (like 5)
|
||||
:: If this parameter wasn't given, _testvar checks if the variable is not ""
|
||||
:_testvar
|
||||
if "%~3" == "" (
|
||||
set testvar_operator=not
|
||||
) else (
|
||||
set testvar_operator=
|
||||
)
|
||||
|
||||
if %testvar_operator% "%~1" == "%~3" (
|
||||
call :_successful
|
||||
) else (
|
||||
call :_failed "if %%~2%% == %~3, actual result was %~1"
|
||||
)
|
||||
|
||||
goto :EOF
|
43
rostests/win32/cmd/script_testsuite/run.cmd
Normal file
43
rostests/win32/cmd/script_testsuite/run.cmd
Normal file
|
@ -0,0 +1,43 @@
|
|||
::
|
||||
:: PROJECT: ReactOS CMD Testing Suite
|
||||
:: LICENSE: GPL v2 or any later version
|
||||
:: FILE: run.cmd
|
||||
:: PURPOSE: Runs the testing scripts
|
||||
:: COPYRIGHT: Copyright 2008 Colin Finck <mail@colinfinck.de>
|
||||
::
|
||||
|
||||
@echo off
|
||||
cls
|
||||
echo ReactOS CMD Testing Suite
|
||||
echo ==========================
|
||||
echo.
|
||||
|
||||
:: Preparations
|
||||
set failed_tests=0
|
||||
set successful_tests=0
|
||||
set test_count=0
|
||||
|
||||
if exist "temp\." (
|
||||
rmdir /s /q "temp"
|
||||
)
|
||||
|
||||
mkdir "temp"
|
||||
|
||||
:: Run the tests
|
||||
call :_runtest at
|
||||
call :_runtest environment
|
||||
call :_runtest if
|
||||
call :_runtest redirect
|
||||
call :_runtest set
|
||||
|
||||
:: Print the summary and clean up
|
||||
echo Executed %test_count% tests, %successful_tests% successful, %failed_tests% failed
|
||||
rmdir /s /q "temp"
|
||||
goto :EOF
|
||||
|
||||
:: Functions
|
||||
:_runtest
|
||||
type "tests\%~1.cmd" > "temp\%~1.cmd"
|
||||
type "lib\testlib.cmd" >> "temp\%~1.cmd"
|
||||
call "temp\%~1.cmd"
|
||||
goto :EOF
|
20
rostests/win32/cmd/script_testsuite/tests/at.cmd
Normal file
20
rostests/win32/cmd/script_testsuite/tests/at.cmd
Normal file
|
@ -0,0 +1,20 @@
|
|||
::
|
||||
:: PROJECT: ReactOS CMD Testing Suite
|
||||
:: LICENSE: GPL v2 or any later version
|
||||
:: FILE: tests/at.cmd
|
||||
:: PURPOSE: Tests for the correct parsing of the "@" character
|
||||
:: COPYRIGHT: Copyright 2008 Colin Finck <mail@colinfinck.de>
|
||||
::
|
||||
|
||||
:: Calling a command should work with any number of "@" characters prepended
|
||||
call :_test "@echo Test >nul"
|
||||
call :_test "@@echo Test >nul"
|
||||
|
||||
:: Files with an "@" sign at the beginning should work as well
|
||||
echo @^@echo Test > "temp\@file.cmd"
|
||||
call :_test "call temp\@file.cmd >nul"
|
||||
|
||||
echo ^@echo Test > "temp\@file.cmd"
|
||||
call :_test "call temp\@file.cmd >nul"
|
||||
|
||||
goto :EOF
|
47
rostests/win32/cmd/script_testsuite/tests/environment.cmd
Normal file
47
rostests/win32/cmd/script_testsuite/tests/environment.cmd
Normal file
|
@ -0,0 +1,47 @@
|
|||
::
|
||||
:: PROJECT: ReactOS CMD Testing Suite
|
||||
:: LICENSE: GPL v2 or any later version
|
||||
:: FILE: tests/environment.cmd
|
||||
:: PURPOSE: Tests for the environment (like automatically set variables)
|
||||
:: COPYRIGHT: Copyright 2008 Colin Finck <mail@colinfinck.de>
|
||||
::
|
||||
|
||||
:: ~0 contains the called path to the current script file
|
||||
call :_testvar %~0 ~0
|
||||
|
||||
:: ~d0 contains the drive of the current script file
|
||||
call :_testvar %~d0 ~d0
|
||||
|
||||
:: ~p0 contains the path of the current script file without the drive letter
|
||||
call :_testvar %~p0 ~p0
|
||||
|
||||
:: ~dp0 contains the path to the current script file with the drive letter
|
||||
call :_testvar %~dp0 ~dp0
|
||||
|
||||
:: ~dpf0 contains the full path to the current script file
|
||||
call :_testvar %~dpf0 ~dpf0
|
||||
|
||||
:: ~n0 contains the name of the current script file without extension
|
||||
call :_testvar %~n0 ~n0
|
||||
|
||||
:: ~x0 contains the extension of the current script file
|
||||
call :_testvar %~x0 ~x0
|
||||
|
||||
:: ~a0 contains the attributes of the current script file
|
||||
call :_testvar %~a0 ~a0
|
||||
|
||||
:: ~t0 contains the date and time of the current script file
|
||||
call :_testvar "%~t0" ~t0
|
||||
|
||||
:: ~z0 contains the file size of the current script file in bytes
|
||||
call :_testvar %~z0 ~z0
|
||||
|
||||
:: ~s0 and ~spf0 contain the short path to the current script file
|
||||
call :_testvar %~s0 ~s0
|
||||
call :_testvar %~s0 ~s0 %~spf0%
|
||||
|
||||
:: Now try to verify that the information is valid
|
||||
set test_path=%~d0%~p0%~n0%~x0
|
||||
call :_testvar %test_path% test_path %~dpf0
|
||||
|
||||
goto :EOF
|
26
rostests/win32/cmd/script_testsuite/tests/if.cmd
Normal file
26
rostests/win32/cmd/script_testsuite/tests/if.cmd
Normal file
|
@ -0,0 +1,26 @@
|
|||
::
|
||||
:: PROJECT: ReactOS CMD Testing Suite
|
||||
:: LICENSE: GPL v2 or any later version
|
||||
:: FILE: tests/if.cmd
|
||||
:: PURPOSE: Tests for the "if" command
|
||||
:: COPYRIGHT: Copyright 2005 Royce Mitchell III
|
||||
:: Copyright 2008 Colin Finck <mail@colinfinck.de>
|
||||
::
|
||||
|
||||
:: Bugs in the if code
|
||||
if not "=="=="==" call :_failed "if not "=="=="==""
|
||||
if "=="=="==" call :_successful
|
||||
|
||||
if "1"=="2" (
|
||||
call :_failed "if "1"=="2""
|
||||
) else (
|
||||
call :_successful
|
||||
)
|
||||
|
||||
if not "1"=="1" (
|
||||
call :_failed "if "1"=="1""
|
||||
) else (
|
||||
call :_successful
|
||||
)
|
||||
|
||||
goto :EOF
|
28
rostests/win32/cmd/script_testsuite/tests/redirect.cmd
Normal file
28
rostests/win32/cmd/script_testsuite/tests/redirect.cmd
Normal file
|
@ -0,0 +1,28 @@
|
|||
::
|
||||
:: PROJECT: ReactOS CMD Testing Suite
|
||||
:: LICENSE: GPL v2 or any later version
|
||||
:: FILE: tests/redirect.cmd
|
||||
:: PURPOSE: Tests for redirections
|
||||
:: COPYRIGHT: Copyright 2008 Colin Finck <mail@colinfinck.de>
|
||||
::
|
||||
|
||||
:: One redirect, the file must exist
|
||||
call :_test "echo moo > temp\redirect_temp.txt"
|
||||
call :_test "type temp\redirect_temp.txt >nul"
|
||||
call :_test "find "moo" temp\redirect_temp.txt >nul"
|
||||
|
||||
:: Add the string yet another time to the file
|
||||
call :_test "echo moo >> temp\redirect_temp.txt"
|
||||
|
||||
set moo_temp=0
|
||||
|
||||
:: Count the moo's in the file (must be 2 now)
|
||||
:: No idea why so many percent signs are necessary here :-)
|
||||
call :_test "for /f "usebackq" %%%%i in (`findstr moo temp\redirect_temp.txt`) do set /a moo_temp+=1"
|
||||
call :_testvar %moo_temp% moo_temp 2
|
||||
|
||||
:: Two redirects, the file in the middle mustn't exist after this call
|
||||
call :_test "echo moo > temp\redirect_temp2.txt > nul"
|
||||
call :_testnot "type temp\redirect_temp2.txt 2>nul"
|
||||
|
||||
goto :EOF
|
104
rostests/win32/cmd/script_testsuite/tests/set.cmd
Normal file
104
rostests/win32/cmd/script_testsuite/tests/set.cmd
Normal file
|
@ -0,0 +1,104 @@
|
|||
::
|
||||
:: PROJECT: ReactOS CMD Testing Suite
|
||||
:: LICENSE: GPL v2 or any later version
|
||||
:: FILE: tests/set.cmd
|
||||
:: PURPOSE: Tests for the "set" command
|
||||
:: COPYRIGHT: Copyright 2005 Royce Mitchell III
|
||||
:: Copyright 2008 Colin Finck <mail@colinfinck.de>
|
||||
::
|
||||
|
||||
:: Test the /A parameter
|
||||
call :_test "set /a a=1"
|
||||
call :_testvar %a% a 1
|
||||
|
||||
call :_test "set /a b=a"
|
||||
call :_testvar %b% b 1
|
||||
|
||||
call :_test "set /a a=!5"
|
||||
call :_testvar %a% a 0
|
||||
|
||||
call :_test "set /a a=!a"
|
||||
call :_testvar %a% a 1
|
||||
|
||||
call :_test "set /a a=~5"
|
||||
call :_testvar %a% a -6
|
||||
|
||||
call :_test "set /a a=5,a=-a"
|
||||
call :_testvar %a% a -5
|
||||
|
||||
call :_test "set /a a=5*7"
|
||||
call :_testvar %a% a 35
|
||||
|
||||
call :_test "set /a a=2000/10"
|
||||
call :_testvar %a% a 200
|
||||
|
||||
call :_test "set /a a=42%%%%9"
|
||||
call :_testvar %a% a 6
|
||||
|
||||
call :_test "set /a a=5%%2"
|
||||
call :_testvar %a% a 5
|
||||
|
||||
call :_test "set /a a=42%13"
|
||||
call :_testvar %a% a 423
|
||||
|
||||
call :_test "set /a a=7+9"
|
||||
call :_testvar %a% a 16
|
||||
|
||||
call :_test "set /a a=9-7"
|
||||
call :_testvar %a% a 2
|
||||
|
||||
set /a a=9^<^<2
|
||||
call :_testvar %a% a 36
|
||||
|
||||
set /a a=36^>^>2
|
||||
call :_testvar %a% a 9
|
||||
|
||||
set /a a=42^&9
|
||||
call :_testvar %a% a 8
|
||||
|
||||
set /a a=32^9
|
||||
call :_testvar %a% a 329
|
||||
|
||||
set /a a=32^^9
|
||||
call :_testvar %a% a 41
|
||||
|
||||
set /a a=10^|22
|
||||
call :_testvar %a% a 30
|
||||
|
||||
call :_test "set /a a=2,a*=3"
|
||||
call :_testvar %a% a 6
|
||||
|
||||
call :_test "set /a a=11,a/=2"
|
||||
call :_testvar %a% a 5
|
||||
|
||||
call :_test "set /a a=42,a%%%%=9"
|
||||
call :_testvar %a% a 6
|
||||
|
||||
call :_test "set /a a=7,a+=9"
|
||||
call :_testvar %a% a 16
|
||||
|
||||
call :_test "set /a a=9,a-=7"
|
||||
call :_testvar %a% a 2
|
||||
|
||||
set /a a=42,a^&=9
|
||||
call :_testvar %a% a 8
|
||||
|
||||
set /a a=32,a^^=9
|
||||
call :_testvar %a% a 41
|
||||
|
||||
set /a a=10,a^|=22
|
||||
call :_testvar %a% a 30
|
||||
|
||||
set /a a=9,a^<^<=2
|
||||
call :_testvar %a% a 36
|
||||
|
||||
set /a a=36,a^>^>=2
|
||||
call :_testvar %a% a 9
|
||||
|
||||
call :_test "set /a a=1,2"
|
||||
call :_testvar %a% a 1
|
||||
|
||||
call :_test "set /a a=(a=1,a+2)"
|
||||
call :_testvar %a% a 3
|
||||
|
||||
goto :EOF
|
Loading…
Reference in a new issue