test-run-tests.t
1563 lines
| 38.5 KiB
| text/troff
|
Tads3Lexer
/ tests / test-run-tests.t
|
r21732 | This file tests the behavior of run-tests.py itself. | ||
|
r24960 | Avoid interference from actual test env: | ||
|
r29220 | $ . "$TESTDIR/helper-runtests.sh" | ||
|
r24960 | |||
|
r27395 | Smoke test with install | ||
|
r21732 | ============ | ||
|
r27395 | $ run-tests.py $HGTEST_RUN_TESTS_PURE -l | ||
|
r21732 | |||
|
r32942 | # Ran 0 tests, 0 skipped, 0 failed. | ||
|
r21734 | |||
|
r27395 | Define a helper to avoid the install step | ||
============= | ||||
$ rt() | ||||
> { | ||||
> run-tests.py --with-hg=`which hg` "$@" | ||||
> } | ||||
|
r28037 | error paths | ||
#if symlink | ||||
$ ln -s `which true` hg | ||||
$ run-tests.py --with-hg=./hg | ||||
warning: --with-hg should specify an hg script | ||||
|
r32942 | # Ran 0 tests, 0 skipped, 0 failed. | ||
|
r28037 | $ rm hg | ||
#endif | ||||
#if execbit | ||||
$ touch hg | ||||
$ run-tests.py --with-hg=./hg | ||||
Usage: run-tests.py [options] [tests] | ||||
run-tests.py: error: --with-hg must specify an executable hg script | ||||
[2] | ||||
$ rm hg | ||||
#endif | ||||
|
r31829 | Features for testing optional lines | ||
=================================== | ||||
$ cat > hghaveaddon.py <<EOF | ||||
> import hghave | ||||
> @hghave.check("custom", "custom hghave feature") | ||||
> def has_custom(): | ||||
> return True | ||||
> @hghave.check("missing", "missing hghave feature") | ||||
> def has_missing(): | ||||
> return False | ||||
> EOF | ||||
|
r28812 | an empty test | ||
======================= | ||||
$ touch test-empty.t | ||||
$ rt | ||||
. | ||||
|
r32942 | # Ran 1 tests, 0 skipped, 0 failed. | ||
|
r28812 | $ rm test-empty.t | ||
|
r21734 | a succesful test | ||
======================= | ||||
$ cat > test-success.t << EOF | ||||
> $ echo babar | ||||
> babar | ||||
|
r21995 | > $ echo xyzzy | ||
|
r31827 | > dont_print (?) | ||
> nothing[42]line (re) (?) | ||||
|
r28701 | > never*happens (glob) (?) | ||
|
r31827 | > more_nothing (?) | ||
|
r21995 | > xyzzy | ||
|
r25388 | > nor this (?) | ||
|
r28317 | > $ printf 'abc\ndef\nxyz\n' | ||
> 123 (?) | ||||
> abc | ||||
> def (?) | ||||
> 456 (?) | ||||
> xyz | ||||
|
r31829 | > $ printf 'zyx\nwvu\ntsr\n' | ||
> abc (?) | ||||
> zyx (custom !) | ||||
> wvu | ||||
> no_print (no-custom !) | ||||
> tsr (no-missing !) | ||||
> missing (missing !) | ||||
|
r21734 | > EOF | ||
|
r27395 | $ rt | ||
|
r21734 | . | ||
|
r32942 | # Ran 1 tests, 0 skipped, 0 failed. | ||
|
r21738 | |||
failing test | ||||
================== | ||||
|
r28619 | test churn with globs | ||
$ cat > test-failure.t <<EOF | ||||
> $ echo "bar-baz"; echo "bar-bad" | ||||
> bar*bad (glob) | ||||
> bar*baz (glob) | ||||
> EOF | ||||
$ rt test-failure.t | ||||
--- $TESTTMP/test-failure.t | ||||
+++ $TESTTMP/test-failure.t.err | ||||
@@ -1,3 +1,3 @@ | ||||
$ echo "bar-baz"; echo "bar-bad" | ||||
+ bar*baz (glob) | ||||
bar*bad (glob) | ||||
- bar*baz (glob) | ||||
ERROR: test-failure.t output changed | ||||
! | ||||
Failed test-failure.t: output changed | ||||
|
r32942 | # Ran 1 tests, 0 skipped, 1 failed. | ||
|
r28619 | python hash seed: * (glob) | ||
[1] | ||||
|
r33420 | test diff colorisation | ||
|
r33552 | #if no-windows pygments | ||
|
r33420 | $ rt test-failure.t --color always | ||
\x1b[38;5;124m--- $TESTTMP/test-failure.t\x1b[39m (esc) | ||||
\x1b[38;5;34m+++ $TESTTMP/test-failure.t.err\x1b[39m (esc) | ||||
\x1b[38;5;90;01m@@ -1,3 +1,3 @@\x1b[39;00m (esc) | ||||
$ echo "bar-baz"; echo "bar-bad" | ||||
\x1b[38;5;34m+ bar*baz (glob)\x1b[39m (esc) | ||||
bar*bad (glob) | ||||
\x1b[38;5;124m- bar*baz (glob)\x1b[39m (esc) | ||||
|
r34843 | |||
|
r33813 | \x1b[38;5;88mERROR: \x1b[39m\x1b[38;5;9mtest-failure.t\x1b[39m\x1b[38;5;88m output changed\x1b[39m (esc) | ||
|
r33420 | ! | ||
|
r33813 | \x1b[38;5;88mFailed \x1b[39m\x1b[38;5;9mtest-failure.t\x1b[39m\x1b[38;5;88m: output changed\x1b[39m (esc) | ||
|
r33420 | # Ran 1 tests, 0 skipped, 1 failed. | ||
python hash seed: * (glob) | ||||
[1] | ||||
$ rt test-failure.t 2> tmp.log | ||||
[1] | ||||
$ cat tmp.log | ||||
--- $TESTTMP/test-failure.t | ||||
+++ $TESTTMP/test-failure.t.err | ||||
@@ -1,3 +1,3 @@ | ||||
$ echo "bar-baz"; echo "bar-bad" | ||||
+ bar*baz (glob) | ||||
bar*bad (glob) | ||||
- bar*baz (glob) | ||||
ERROR: test-failure.t output changed | ||||
! | ||||
Failed test-failure.t: output changed | ||||
# Ran 1 tests, 0 skipped, 1 failed. | ||||
python hash seed: * (glob) | ||||
|
r33500 | #endif | ||
|
r33420 | |||
|
r33658 | $ cat > test-failure.t << EOF | ||
> $ true | ||||
> should go away (true !) | ||||
> $ true | ||||
> should stay (false !) | ||||
> | ||||
> Should remove first line, not second or third | ||||
> $ echo 'testing' | ||||
> baz*foo (glob) (true !) | ||||
> foobar*foo (glob) (false !) | ||||
> te*ting (glob) (true !) | ||||
> | ||||
> Should keep first two lines, remove third and last | ||||
> $ echo 'testing' | ||||
> test.ng (re) (true !) | ||||
> foo.ar (re) (false !) | ||||
> b.r (re) (true !) | ||||
> missing (?) | ||||
> awol (true !) | ||||
|
r33659 | > | ||
> The "missing" line should stay, even though awol is dropped | ||||
> $ echo 'testing' | ||||
> test.ng (re) (true !) | ||||
> foo.ar (?) | ||||
> awol | ||||
> missing (?) | ||||
|
r33658 | > EOF | ||
$ rt test-failure.t | ||||
--- $TESTTMP/test-failure.t | ||||
+++ $TESTTMP/test-failure.t.err | ||||
@@ -1,11 +1,9 @@ | ||||
$ true | ||||
- should go away (true !) | ||||
$ true | ||||
should stay (false !) | ||||
Should remove first line, not second or third | ||||
$ echo 'testing' | ||||
- baz*foo (glob) (true !) | ||||
foobar*foo (glob) (false !) | ||||
te*ting (glob) (true !) | ||||
|
r33659 | foo.ar (re) (false !) | ||
missing (?) | ||||
@@ -13,13 +11,10 @@ | ||||
|
r33658 | $ echo 'testing' | ||
test.ng (re) (true !) | ||||
foo.ar (re) (false !) | ||||
- b.r (re) (true !) | ||||
missing (?) | ||||
- awol (true !) | ||||
|
r33659 | |||
The "missing" line should stay, even though awol is dropped | ||||
$ echo 'testing' | ||||
test.ng (re) (true !) | ||||
foo.ar (?) | ||||
- awol | ||||
missing (?) | ||||
|
r33658 | |||
ERROR: test-failure.t output changed | ||||
! | ||||
Failed test-failure.t: output changed | ||||
# Ran 1 tests, 0 skipped, 1 failed. | ||||
python hash seed: * (glob) | ||||
[1] | ||||
|
r28619 | basic failing test | ||
|
r21738 | $ cat > test-failure.t << EOF | ||
> $ echo babar | ||||
> rataxes | ||||
|
r21995 | > This is a noop statement so that | ||
> this test is still more bytes than success. | ||||
|
r28316 | > pad pad pad pad............................................................ | ||
> pad pad pad pad............................................................ | ||||
|
r31828 | > pad pad pad pad............................................................ | ||
> pad pad pad pad............................................................ | ||||
> pad pad pad pad............................................................ | ||||
> pad pad pad pad............................................................ | ||||
|
r21738 | > EOF | ||
|
r24500 | >>> fh = open('test-failure-unicode.t', 'wb') | ||
|
r25054 | >>> fh.write(u' $ echo babar\u03b1\n'.encode('utf-8')) and None | ||
>>> fh.write(u' l\u03b5\u03b5t\n'.encode('utf-8')) and None | ||||
|
r24500 | |||
|
r27395 | $ rt | ||
|
r21738 | |||
|
r23348 | --- $TESTTMP/test-failure.t | ||
+++ $TESTTMP/test-failure.t.err | ||||
|
r28316 | @@ -1,5 +1,5 @@ | ||
|
r21738 | $ echo babar | ||
- rataxes | ||||
+ babar | ||||
|
r21995 | This is a noop statement so that | ||
this test is still more bytes than success. | ||||
|
r28316 | pad pad pad pad............................................................ | ||
|
r21738 | |||
ERROR: test-failure.t output changed | ||||
!. | ||||
|
r24500 | --- $TESTTMP/test-failure-unicode.t | ||
+++ $TESTTMP/test-failure-unicode.t.err | ||||
@@ -1,2 +1,2 @@ | ||||
$ echo babar\xce\xb1 (esc) | ||||
- l\xce\xb5\xce\xb5t (esc) | ||||
+ babar\xce\xb1 (esc) | ||||
ERROR: test-failure-unicode.t output changed | ||||
! | ||||
|
r21738 | Failed test-failure.t: output changed | ||
|
r24500 | Failed test-failure-unicode.t: output changed | ||
|
r32942 | # Ran 3 tests, 0 skipped, 2 failed. | ||
|
r21738 | python hash seed: * (glob) | ||
[1] | ||||
|
r24500 | |||
|
r32716 | test --outputdir | ||
$ mkdir output | ||||
$ rt --outputdir output | ||||
--- $TESTTMP/test-failure.t | ||||
+++ $TESTTMP/output/test-failure.t.err | ||||
@@ -1,5 +1,5 @@ | ||||
$ echo babar | ||||
- rataxes | ||||
+ babar | ||||
This is a noop statement so that | ||||
this test is still more bytes than success. | ||||
pad pad pad pad............................................................ | ||||
ERROR: test-failure.t output changed | ||||
!. | ||||
--- $TESTTMP/test-failure-unicode.t | ||||
+++ $TESTTMP/output/test-failure-unicode.t.err | ||||
@@ -1,2 +1,2 @@ | ||||
$ echo babar\xce\xb1 (esc) | ||||
- l\xce\xb5\xce\xb5t (esc) | ||||
+ babar\xce\xb1 (esc) | ||||
ERROR: test-failure-unicode.t output changed | ||||
! | ||||
Failed test-failure.t: output changed | ||||
Failed test-failure-unicode.t: output changed | ||||
|
r32942 | # Ran 3 tests, 0 skipped, 2 failed. | ||
|
r32716 | python hash seed: * (glob) | ||
[1] | ||||
$ ls -a output | ||||
. | ||||
.. | ||||
|
r32717 | .testtimes | ||
|
r32716 | test-failure-unicode.t.err | ||
test-failure.t.err | ||||
|
r22044 | test --xunit support | ||
|
r27395 | $ rt --xunit=xunit.xml | ||
|
r22044 | |||
--- $TESTTMP/test-failure.t | ||||
+++ $TESTTMP/test-failure.t.err | ||||
|
r28316 | @@ -1,5 +1,5 @@ | ||
|
r22044 | $ echo babar | ||
- rataxes | ||||
+ babar | ||||
This is a noop statement so that | ||||
this test is still more bytes than success. | ||||
|
r28316 | pad pad pad pad............................................................ | ||
|
r22044 | |||
ERROR: test-failure.t output changed | ||||
!. | ||||
|
r24500 | --- $TESTTMP/test-failure-unicode.t | ||
+++ $TESTTMP/test-failure-unicode.t.err | ||||
@@ -1,2 +1,2 @@ | ||||
$ echo babar\xce\xb1 (esc) | ||||
- l\xce\xb5\xce\xb5t (esc) | ||||
+ babar\xce\xb1 (esc) | ||||
ERROR: test-failure-unicode.t output changed | ||||
! | ||||
|
r22044 | Failed test-failure.t: output changed | ||
|
r24500 | Failed test-failure-unicode.t: output changed | ||
|
r32942 | # Ran 3 tests, 0 skipped, 2 failed. | ||
|
r22044 | python hash seed: * (glob) | ||
[1] | ||||
$ cat xunit.xml | ||||
<?xml version="1.0" encoding="utf-8"?> | ||||
|
r24500 | <testsuite errors="0" failures="2" name="run-tests" skipped="0" tests="3"> | ||
|
r22044 | <testcase name="test-success.t" time="*"/> (glob) | ||
|
r24500 | <testcase name="test-failure-unicode.t" time="*"> (glob) | ||
|
r32714 | <failure message="output changed" type="output-mismatch"> | ||
|
r24500 | <![CDATA[--- $TESTTMP/test-failure-unicode.t | ||
+++ $TESTTMP/test-failure-unicode.t.err | ||||
@@ -1,2 +1,2 @@ | ||||
$ echo babar\xce\xb1 (esc) | ||||
- l\xce\xb5\xce\xb5t (esc) | ||||
+ babar\xce\xb1 (esc) | ||||
|
r32714 | ]]> </failure> | ||
</testcase> | ||||
|
r22044 | <testcase name="test-failure.t" time="*"> (glob) | ||
|
r32714 | <failure message="output changed" type="output-mismatch"> | ||
|
r22044 | <![CDATA[--- $TESTTMP/test-failure.t | ||
+++ $TESTTMP/test-failure.t.err | ||||
|
r28316 | @@ -1,5 +1,5 @@ | ||
|
r22044 | $ echo babar | ||
- rataxes | ||||
+ babar | ||||
This is a noop statement so that | ||||
this test is still more bytes than success. | ||||
|
r28316 | pad pad pad pad............................................................ | ||
|
r32714 | ]]> </failure> | ||
</testcase> | ||||
|
r22044 | </testsuite> | ||
|
r21741 | |||
|
r29280 | $ cat .testtimes | ||
test-failure-unicode.t * (glob) | ||||
test-failure.t * (glob) | ||||
test-success.t * (glob) | ||||
|
r32704 | |||
$ rt --list-tests | ||||
test-failure-unicode.t | ||||
test-failure.t | ||||
test-success.t | ||||
$ rt --list-tests --json | ||||
test-failure-unicode.t | ||||
test-failure.t | ||||
test-success.t | ||||
$ cat report.json | ||||
testreport ={ | ||||
"test-failure-unicode.t": { | ||||
"result": "success" | ||||
}, | ||||
"test-failure.t": { | ||||
"result": "success" | ||||
}, | ||||
"test-success.t": { | ||||
"result": "success" | ||||
} | ||||
} (no-eol) | ||||
$ rt --list-tests --xunit=xunit.xml | ||||
test-failure-unicode.t | ||||
test-failure.t | ||||
test-success.t | ||||
$ cat xunit.xml | ||||
<?xml version="1.0" encoding="utf-8"?> | ||||
<testsuite errors="0" failures="0" name="run-tests" skipped="0" tests="0"> | ||||
<testcase name="test-failure-unicode.t"/> | ||||
<testcase name="test-failure.t"/> | ||||
<testcase name="test-success.t"/> | ||||
</testsuite> | ||||
|
r32718 | $ rt --list-tests test-failure* --json --xunit=xunit.xml --outputdir output | ||
|
r32704 | test-failure-unicode.t | ||
test-failure.t | ||||
|
r32718 | $ cat output/report.json | ||
|
r32704 | testreport ={ | ||
"test-failure-unicode.t": { | ||||
"result": "success" | ||||
}, | ||||
"test-failure.t": { | ||||
"result": "success" | ||||
} | ||||
} (no-eol) | ||||
$ cat xunit.xml | ||||
<?xml version="1.0" encoding="utf-8"?> | ||||
<testsuite errors="0" failures="0" name="run-tests" skipped="0" tests="0"> | ||||
<testcase name="test-failure-unicode.t"/> | ||||
<testcase name="test-failure.t"/> | ||||
</testsuite> | ||||
|
r24500 | $ rm test-failure-unicode.t | ||
|
r21741 | test for --retest | ||
==================== | ||||
|
r27395 | $ rt --retest | ||
|
r21741 | |||
|
r23348 | --- $TESTTMP/test-failure.t | ||
+++ $TESTTMP/test-failure.t.err | ||||
|
r28316 | @@ -1,5 +1,5 @@ | ||
|
r21741 | $ echo babar | ||
- rataxes | ||||
+ babar | ||||
|
r21995 | This is a noop statement so that | ||
this test is still more bytes than success. | ||||
|
r28316 | pad pad pad pad............................................................ | ||
|
r21741 | |||
ERROR: test-failure.t output changed | ||||
! | ||||
Failed test-failure.t: output changed | ||||
|
r32942 | # Ran 2 tests, 1 skipped, 1 failed. | ||
|
r21741 | python hash seed: * (glob) | ||
[1] | ||||
|
r21742 | |||
|
r32716 | --retest works with --outputdir | ||
$ rm -r output | ||||
$ mkdir output | ||||
$ mv test-failure.t.err output | ||||
$ rt --retest --outputdir output | ||||
--- $TESTTMP/test-failure.t | ||||
+++ $TESTTMP/output/test-failure.t.err | ||||
@@ -1,5 +1,5 @@ | ||||
$ echo babar | ||||
- rataxes | ||||
+ babar | ||||
This is a noop statement so that | ||||
this test is still more bytes than success. | ||||
pad pad pad pad............................................................ | ||||
ERROR: test-failure.t output changed | ||||
! | ||||
Failed test-failure.t: output changed | ||||
|
r32942 | # Ran 2 tests, 1 skipped, 1 failed. | ||
|
r32716 | python hash seed: * (glob) | ||
[1] | ||||
|
r21742 | Selecting Tests To Run | ||
====================== | ||||
successful | ||||
|
r27395 | $ rt test-success.t | ||
|
r21742 | . | ||
|
r32942 | # Ran 1 tests, 0 skipped, 0 failed. | ||
|
r21742 | |||
|
r21997 | success w/ keyword | ||
|
r27395 | $ rt -k xyzzy | ||
|
r22107 | . | ||
|
r32942 | # Ran 2 tests, 1 skipped, 0 failed. | ||
|
r21997 | |||
|
r21742 | failed | ||
|
r27395 | $ rt test-failure.t | ||
|
r21742 | |||
|
r23348 | --- $TESTTMP/test-failure.t | ||
+++ $TESTTMP/test-failure.t.err | ||||
|
r28316 | @@ -1,5 +1,5 @@ | ||
|
r21742 | $ echo babar | ||
- rataxes | ||||
+ babar | ||||
|
r21995 | This is a noop statement so that | ||
this test is still more bytes than success. | ||||
|
r28316 | pad pad pad pad............................................................ | ||
|
r21742 | |||
ERROR: test-failure.t output changed | ||||
! | ||||
Failed test-failure.t: output changed | ||||
|
r32942 | # Ran 1 tests, 0 skipped, 1 failed. | ||
|
r21742 | python hash seed: * (glob) | ||
[1] | ||||
|
r21743 | |||
|
r21997 | failure w/ keyword | ||
|
r27395 | $ rt -k rataxes | ||
|
r22107 | |||
|
r21997 | --- $TESTTMP/test-failure.t | ||
+++ $TESTTMP/test-failure.t.err | ||||
|
r28316 | @@ -1,5 +1,5 @@ | ||
|
r21997 | $ echo babar | ||
- rataxes | ||||
+ babar | ||||
This is a noop statement so that | ||||
this test is still more bytes than success. | ||||
|
r28316 | pad pad pad pad............................................................ | ||
|
r21997 | |||
ERROR: test-failure.t output changed | ||||
! | ||||
Failed test-failure.t: output changed | ||||
|
r32942 | # Ran 2 tests, 1 skipped, 1 failed. | ||
|
r21997 | python hash seed: * (glob) | ||
[1] | ||||
|
r22840 | Verify that when a process fails to start we show a useful message | ||
================================================================== | ||||
$ cat > test-serve-fail.t <<EOF | ||||
> $ echo 'abort: child process failed to start blah' | ||||
> EOF | ||||
|
r27395 | $ rt test-serve-fail.t | ||
|
r22840 | |||
ERROR: test-serve-fail.t output changed | ||||
! | ||||
Failed test-serve-fail.t: server failed to start (HGPORT=*) (glob) | ||||
|
r32942 | # Ran 1 tests, 0 skipped, 1 failed. | ||
|
r22840 | python hash seed: * (glob) | ||
[1] | ||||
$ rm test-serve-fail.t | ||||
|
r27602 | Verify that we can try other ports | ||
=================================== | ||||
$ hg init inuse | ||||
$ hg serve -R inuse -p $HGPORT -d --pid-file=blocks.pid | ||||
$ cat blocks.pid >> $DAEMON_PIDS | ||||
$ cat > test-serve-inuse.t <<EOF | ||||
> $ hg serve -R `pwd`/inuse -p \$HGPORT -d --pid-file=hg.pid | ||||
> $ cat hg.pid >> \$DAEMON_PIDS | ||||
> EOF | ||||
$ rt test-serve-inuse.t | ||||
. | ||||
|
r32942 | # Ran 1 tests, 0 skipped, 0 failed. | ||
|
r27602 | $ rm test-serve-inuse.t | ||
|
r29221 | $ killdaemons.py $DAEMON_PIDS | ||
$ rm $DAEMON_PIDS | ||||
|
r27602 | |||
|
r21743 | Running In Debug Mode | ||
====================== | ||||
|
r27395 | $ rt --debug 2>&1 | grep -v pwd | ||
|
r23676 | + echo *SALT* 0 0 (glob) | ||
*SALT* 0 0 (glob) | ||||
|
r21743 | + echo babar | ||
babar | ||||
|
r31828 | + echo *SALT* 10 0 (glob) | ||
*SALT* 10 0 (glob) | ||||
|
r27509 | *+ echo *SALT* 0 0 (glob) | ||
|
r23676 | *SALT* 0 0 (glob) | ||
|
r21743 | + echo babar | ||
babar | ||||
|
r23676 | + echo *SALT* 2 0 (glob) | ||
*SALT* 2 0 (glob) | ||||
|
r21995 | + echo xyzzy | ||
xyzzy | ||||
|
r31827 | + echo *SALT* 9 0 (glob) | ||
*SALT* 9 0 (glob) | ||||
|
r28317 | + printf *abc\ndef\nxyz\n* (glob) | ||
abc | ||||
def | ||||
xyz | ||||
|
r31827 | + echo *SALT* 15 0 (glob) | ||
*SALT* 15 0 (glob) | ||||
|
r31829 | + printf *zyx\nwvu\ntsr\n* (glob) | ||
zyx | ||||
wvu | ||||
tsr | ||||
+ echo *SALT* 22 0 (glob) | ||||
*SALT* 22 0 (glob) | ||||
|
r21743 | . | ||
|
r32942 | # Ran 2 tests, 0 skipped, 0 failed. | ||
|
r21744 | |||
Parallel runs | ||||
============== | ||||
(duplicate the failing test to get predictable output) | ||||
$ cp test-failure.t test-failure-copy.t | ||||
|
r27395 | $ rt --jobs 2 test-failure*.t -n | ||
|
r23107 | !! | ||
|
r21744 | Failed test-failure*.t: output changed (glob) | ||
Failed test-failure*.t: output changed (glob) | ||||
|
r32942 | # Ran 2 tests, 0 skipped, 2 failed. | ||
|
r21744 | python hash seed: * (glob) | ||
[1] | ||||
|
r22838 | failures in parallel with --first should only print one failure | ||
|
r34895 | $ rt --jobs 2 --first test-failure*.t | ||
|
r22838 | |||
--- $TESTTMP/test-failure*.t (glob) | ||||
+++ $TESTTMP/test-failure*.t.err (glob) | ||||
|
r28316 | @@ -1,5 +1,5 @@ | ||
|
r22838 | $ echo babar | ||
- rataxes | ||||
+ babar | ||||
This is a noop statement so that | ||||
this test is still more bytes than success. | ||||
|
r28316 | pad pad pad pad............................................................ | ||
|
r22838 | |||
Failed test-failure*.t: output changed (glob) | ||||
|
r34895 | Failed test-failure*.t: output changed (glob) | ||
|
r32942 | # Ran 2 tests, 0 skipped, 2 failed. | ||
|
r22838 | python hash seed: * (glob) | ||
[1] | ||||
|
r21744 | (delete the duplicated test file) | ||
|
r34895 | $ rm test-failure-copy.t | ||
|
r21744 | |||
|
r21755 | |||
Interactive run | ||||
=============== | ||||
(backup the failing test) | ||||
$ cp test-failure.t backup | ||||
Refuse the fix | ||||
|
r27395 | $ echo 'n' | rt -i | ||
|
r21755 | |||
--- $TESTTMP/test-failure.t | ||||
+++ $TESTTMP/test-failure.t.err | ||||
|
r28316 | @@ -1,5 +1,5 @@ | ||
|
r21755 | $ echo babar | ||
- rataxes | ||||
+ babar | ||||
|
r21995 | This is a noop statement so that | ||
this test is still more bytes than success. | ||||
|
r28316 | pad pad pad pad............................................................ | ||
|
r21763 | Accept this change? [n] | ||
|
r21755 | ERROR: test-failure.t output changed | ||
|
r21763 | !. | ||
|
r21755 | Failed test-failure.t: output changed | ||
|
r32942 | # Ran 2 tests, 0 skipped, 1 failed. | ||
|
r21755 | python hash seed: * (glob) | ||
[1] | ||||
$ cat test-failure.t | ||||
$ echo babar | ||||
rataxes | ||||
|
r21995 | This is a noop statement so that | ||
this test is still more bytes than success. | ||||
|
r28316 | pad pad pad pad............................................................ | ||
pad pad pad pad............................................................ | ||||
|
r31828 | pad pad pad pad............................................................ | ||
pad pad pad pad............................................................ | ||||
pad pad pad pad............................................................ | ||||
pad pad pad pad............................................................ | ||||
|
r21755 | |||
|
r22361 | Interactive with custom view | ||
|
r27395 | $ echo 'n' | rt -i --view echo | ||
|
r23348 | $TESTTMP/test-failure.t $TESTTMP/test-failure.t.err (glob) | ||
|
r22361 | Accept this change? [n]* (glob) | ||
ERROR: test-failure.t output changed | ||||
!. | ||||
Failed test-failure.t: output changed | ||||
|
r32942 | # Ran 2 tests, 0 skipped, 1 failed. | ||
|
r22361 | python hash seed: * (glob) | ||
[1] | ||||
|
r22108 | View the fix | ||
|
r27395 | $ echo 'y' | rt --view echo | ||
|
r23348 | $TESTTMP/test-failure.t $TESTTMP/test-failure.t.err (glob) | ||
|
r22108 | |||
ERROR: test-failure.t output changed | ||||
!. | ||||
Failed test-failure.t: output changed | ||||
|
r32942 | # Ran 2 tests, 0 skipped, 1 failed. | ||
|
r22108 | python hash seed: * (glob) | ||
[1] | ||||
|
r21755 | |||
Accept the fix | ||||
|
r23728 | $ echo " $ echo 'saved backup bundle to \$TESTTMP/foo.hg'" >> test-failure.t | ||
$ echo " saved backup bundle to \$TESTTMP/foo.hg" >> test-failure.t | ||||
$ echo " $ echo 'saved backup bundle to \$TESTTMP/foo.hg'" >> test-failure.t | ||||
$ echo " saved backup bundle to \$TESTTMP/foo.hg (glob)" >> test-failure.t | ||||
$ echo " $ echo 'saved backup bundle to \$TESTTMP/foo.hg'" >> test-failure.t | ||||
$ echo " saved backup bundle to \$TESTTMP/*.hg (glob)" >> test-failure.t | ||||
|
r27395 | $ echo 'y' | rt -i 2>&1 | ||
|
r21755 | |||
--- $TESTTMP/test-failure.t | ||||
+++ $TESTTMP/test-failure.t.err | ||||
|
r31828 | @@ -1,5 +1,5 @@ | ||
|
r21755 | $ echo babar | ||
- rataxes | ||||
+ babar | ||||
|
r21995 | This is a noop statement so that | ||
this test is still more bytes than success. | ||||
|
r28316 | pad pad pad pad............................................................ | ||
|
r31828 | @@ -9,7 +9,7 @@ | ||
pad pad pad pad............................................................ | ||||
|
r28316 | pad pad pad pad............................................................ | ||
|
r23728 | $ echo 'saved backup bundle to $TESTTMP/foo.hg' | ||
- saved backup bundle to $TESTTMP/foo.hg | ||||
|
r27395 | + saved backup bundle to $TESTTMP/foo.hg* (glob) | ||
|
r23728 | $ echo 'saved backup bundle to $TESTTMP/foo.hg' | ||
|
r27395 | saved backup bundle to $TESTTMP/foo.hg* (glob) | ||
|
r23728 | $ echo 'saved backup bundle to $TESTTMP/foo.hg' | ||
|
r21755 | Accept this change? [n] .. | ||
|
r32942 | # Ran 2 tests, 0 skipped, 0 failed. | ||
|
r21755 | |||
|
r23728 | $ sed -e 's,(glob)$,&<,g' test-failure.t | ||
|
r21755 | $ echo babar | ||
babar | ||||
|
r21995 | This is a noop statement so that | ||
this test is still more bytes than success. | ||||
|
r28316 | pad pad pad pad............................................................ | ||
pad pad pad pad............................................................ | ||||
|
r31828 | pad pad pad pad............................................................ | ||
pad pad pad pad............................................................ | ||||
pad pad pad pad............................................................ | ||||
pad pad pad pad............................................................ | ||||
|
r23728 | $ echo 'saved backup bundle to $TESTTMP/foo.hg' | ||
saved backup bundle to $TESTTMP/foo.hg (glob)< | ||||
$ echo 'saved backup bundle to $TESTTMP/foo.hg' | ||||
saved backup bundle to $TESTTMP/foo.hg (glob)< | ||||
$ echo 'saved backup bundle to $TESTTMP/foo.hg' | ||||
saved backup bundle to $TESTTMP/*.hg (glob)< | ||||
|
r21755 | |||
|
r32980 | Race condition - test file was modified when test is running | ||
$ TESTRACEDIR=`pwd` | ||||
$ export TESTRACEDIR | ||||
$ cat > test-race.t <<EOF | ||||
> $ echo 1 | ||||
> $ echo "# a new line" >> $TESTRACEDIR/test-race.t | ||||
> EOF | ||||
$ rt -i test-race.t | ||||
--- $TESTTMP/test-race.t | ||||
+++ $TESTTMP/test-race.t.err | ||||
@@ -1,2 +1,3 @@ | ||||
$ echo 1 | ||||
+ 1 | ||||
$ echo "# a new line" >> $TESTTMP/test-race.t | ||||
Reference output has changed (run again to prompt changes) | ||||
ERROR: test-race.t output changed | ||||
! | ||||
Failed test-race.t: output changed | ||||
# Ran 1 tests, 0 skipped, 1 failed. | ||||
python hash seed: * (glob) | ||||
[1] | ||||
$ rm test-race.t | ||||
|
r32982 | When "#testcases" is used in .t files | ||
$ cat >> test-cases.t <<EOF | ||||
> #testcases a b | ||||
> #if a | ||||
> $ echo 1 | ||||
> #endif | ||||
> #if b | ||||
> $ echo 2 | ||||
> #endif | ||||
> EOF | ||||
$ cat <<EOF | rt -i test-cases.t 2>&1 | ||||
> y | ||||
> y | ||||
> EOF | ||||
--- $TESTTMP/test-cases.t | ||||
+++ $TESTTMP/test-cases.t.a.err | ||||
@@ -1,6 +1,7 @@ | ||||
#testcases a b | ||||
#if a | ||||
$ echo 1 | ||||
+ 1 | ||||
#endif | ||||
#if b | ||||
$ echo 2 | ||||
Accept this change? [n] . | ||||
--- $TESTTMP/test-cases.t | ||||
+++ $TESTTMP/test-cases.t.b.err | ||||
@@ -5,4 +5,5 @@ | ||||
#endif | ||||
#if b | ||||
$ echo 2 | ||||
+ 2 | ||||
#endif | ||||
Accept this change? [n] . | ||||
# Ran 2 tests, 0 skipped, 0 failed. | ||||
$ cat test-cases.t | ||||
#testcases a b | ||||
#if a | ||||
$ echo 1 | ||||
1 | ||||
#endif | ||||
#if b | ||||
$ echo 2 | ||||
2 | ||||
#endif | ||||
|
r33935 | $ cat >> test-cases.t <<'EOF' | ||
> #if a | ||||
> $ NAME=A | ||||
> #else | ||||
> $ NAME=B | ||||
> #endif | ||||
> $ echo $NAME | ||||
> A (a !) | ||||
> B (b !) | ||||
> EOF | ||||
$ rt test-cases.t | ||||
.. | ||||
# Ran 2 tests, 0 skipped, 0 failed. | ||||
|
r32982 | $ rm test-cases.t | ||
|
r21755 | (reinstall) | ||
$ mv backup test-failure.t | ||||
|
r21756 | |||
No Diff | ||||
=============== | ||||
|
r27395 | $ rt --nodiff | ||
|
r21756 | !. | ||
Failed test-failure.t: output changed | ||||
|
r32942 | # Ran 2 tests, 0 skipped, 1 failed. | ||
|
r21756 | python hash seed: * (glob) | ||
[1] | ||||
|
r21977 | |||
|
r26422 | test --tmpdir support | ||
|
r27395 | $ rt --tmpdir=$TESTTMP/keep test-success.t | ||
|
r26422 | |||
|
r26432 | Keeping testtmp dir: $TESTTMP/keep/child1/test-success.t (glob) | ||
Keeping threadtmp dir: $TESTTMP/keep/child1 (glob) | ||||
|
r26422 | . | ||
|
r32942 | # Ran 1 tests, 0 skipped, 0 failed. | ||
|
r26422 | |||
|
r27141 | timeouts | ||
======== | ||||
$ cat > test-timeout.t <<EOF | ||||
> $ sleep 2 | ||||
> $ echo pass | ||||
> pass | ||||
> EOF | ||||
> echo '#require slow' > test-slow-timeout.t | ||||
> cat test-timeout.t >> test-slow-timeout.t | ||||
|
r27395 | $ rt --timeout=1 --slowtimeout=3 test-timeout.t test-slow-timeout.t | ||
|
r27393 | st | ||
|
r32473 | Skipped test-slow-timeout.t: missing feature: allow slow tests (use --allow-slow-tests) | ||
|
r27141 | Failed test-timeout.t: timed out | ||
|
r32942 | # Ran 1 tests, 1 skipped, 1 failed. | ||
|
r27141 | python hash seed: * (glob) | ||
[1] | ||||
|
r27395 | $ rt --timeout=1 --slowtimeout=3 \ | ||
|
r27141 | > test-timeout.t test-slow-timeout.t --allow-slow-tests | ||
|
r27393 | .t | ||
|
r27141 | Failed test-timeout.t: timed out | ||
|
r32942 | # Ran 2 tests, 0 skipped, 1 failed. | ||
|
r27141 | python hash seed: * (glob) | ||
[1] | ||||
$ rm test-timeout.t test-slow-timeout.t | ||||
|
r21977 | test for --time | ||
================== | ||||
|
r27395 | $ rt test-success.t --time | ||
|
r21977 | . | ||
|
r32942 | # Ran 1 tests, 0 skipped, 0 failed. | ||
|
r21977 | # Producing time report | ||
|
r25098 | start end cuser csys real Test | ||
\s*[\d\.]{5} \s*[\d\.]{5} \s*[\d\.]{5} \s*[\d\.]{5} \s*[\d\.]{5} test-success.t (re) | ||||
|
r21977 | |||
test for --time with --job enabled | ||||
==================================== | ||||
|
r27395 | $ rt test-success.t --time --jobs 2 | ||
|
r21977 | . | ||
|
r32942 | # Ran 1 tests, 0 skipped, 0 failed. | ||
|
r21977 | # Producing time report | ||
|
r25098 | start end cuser csys real Test | ||
\s*[\d\.]{5} \s*[\d\.]{5} \s*[\d\.]{5} \s*[\d\.]{5} \s*[\d\.]{5} test-success.t (re) | ||||
|
r21996 | |||
Skips | ||||
================ | ||||
$ cat > test-skip.t <<EOF | ||||
> $ echo xyzzy | ||||
|
r22045 | > #require false | ||
|
r21996 | > EOF | ||
|
r27395 | $ rt --nodiff | ||
|
r21996 | !.s | ||
|
r27564 | Skipped test-skip.t: missing feature: nail clipper | ||
|
r21996 | Failed test-failure.t: output changed | ||
|
r32942 | # Ran 2 tests, 1 skipped, 1 failed. | ||
|
r21996 | python hash seed: * (glob) | ||
[1] | ||||
|
r27395 | $ rt --keyword xyzzy | ||
|
r22107 | .s | ||
|
r27564 | Skipped test-skip.t: missing feature: nail clipper | ||
|
r32942 | # Ran 2 tests, 2 skipped, 0 failed. | ||
|
r21997 | |||
|
r22044 | Skips with xml | ||
|
r27395 | $ rt --keyword xyzzy \ | ||
|
r22044 | > --xunit=xunit.xml | ||
|
r22107 | .s | ||
|
r27564 | Skipped test-skip.t: missing feature: nail clipper | ||
|
r32942 | # Ran 2 tests, 2 skipped, 0 failed. | ||
|
r22044 | $ cat xunit.xml | ||
<?xml version="1.0" encoding="utf-8"?> | ||||
|
r22107 | <testsuite errors="0" failures="0" name="run-tests" skipped="2" tests="2"> | ||
|
r22044 | <testcase name="test-success.t" time="*"/> (glob) | ||
|
r32715 | <testcase name="test-skip.t"> | ||
<skipped> | ||||
<![CDATA[missing feature: nail clipper]]> </skipped> | ||||
</testcase> | ||||
|
r22044 | </testsuite> | ||
|
r21997 | Missing skips or blacklisted skips don't count as executed: | ||
$ echo test-failure.t > blacklist | ||||
|
r27927 | $ rt --blacklist=blacklist --json\ | ||
|
r21997 | > test-failure.t test-bogus.t | ||
ss | ||||
Skipped test-bogus.t: Doesn't exist | ||||
Skipped test-failure.t: blacklisted | ||||
|
r32942 | # Ran 0 tests, 2 skipped, 0 failed. | ||
|
r27927 | $ cat report.json | ||
testreport ={ | ||||
"test-bogus.t": { | ||||
"result": "skip" | ||||
|
r29199 | }, | ||
|
r27927 | "test-failure.t": { | ||
"result": "skip" | ||||
} | ||||
} (no-eol) | ||||
|
r29173 | |||
Whitelist trumps blacklist | ||||
$ echo test-failure.t > whitelist | ||||
$ rt --blacklist=blacklist --whitelist=whitelist --json\ | ||||
> test-failure.t test-bogus.t | ||||
s | ||||
--- $TESTTMP/test-failure.t | ||||
+++ $TESTTMP/test-failure.t.err | ||||
@@ -1,5 +1,5 @@ | ||||
$ echo babar | ||||
- rataxes | ||||
+ babar | ||||
This is a noop statement so that | ||||
this test is still more bytes than success. | ||||
pad pad pad pad............................................................ | ||||
ERROR: test-failure.t output changed | ||||
! | ||||
Skipped test-bogus.t: Doesn't exist | ||||
Failed test-failure.t: output changed | ||||
|
r32942 | # Ran 1 tests, 1 skipped, 1 failed. | ||
|
r29173 | python hash seed: * (glob) | ||
[1] | ||||
|
r34264 | Ensure that --test-list causes only the tests listed in that file to | ||
be executed. | ||||
$ echo test-success.t >> onlytest | ||||
$ rt --test-list=onlytest | ||||
. | ||||
# Ran 1 tests, 0 skipped, 0 failed. | ||||
$ echo test-bogus.t >> anothertest | ||||
$ rt --test-list=onlytest --test-list=anothertest | ||||
s. | ||||
Skipped test-bogus.t: Doesn't exist | ||||
# Ran 1 tests, 1 skipped, 0 failed. | ||||
$ rm onlytest anothertest | ||||
|
r22391 | test for --json | ||
================== | ||||
|
r27395 | $ rt --json | ||
|
r22391 | |||
--- $TESTTMP/test-failure.t | ||||
+++ $TESTTMP/test-failure.t.err | ||||
|
r28316 | @@ -1,5 +1,5 @@ | ||
|
r22391 | $ echo babar | ||
- rataxes | ||||
+ babar | ||||
This is a noop statement so that | ||||
this test is still more bytes than success. | ||||
|
r28316 | pad pad pad pad............................................................ | ||
|
r22391 | |||
ERROR: test-failure.t output changed | ||||
!.s | ||||
|
r27564 | Skipped test-skip.t: missing feature: nail clipper | ||
|
r22391 | Failed test-failure.t: output changed | ||
|
r32942 | # Ran 2 tests, 1 skipped, 1 failed. | ||
|
r22391 | python hash seed: * (glob) | ||
[1] | ||||
$ cat report.json | ||||
testreport ={ | ||||
"test-failure.t": [\{] (re) | ||||
|
r23245 | "csys": "\s*[\d\.]{4,5}", ? (re) | ||
"cuser": "\s*[\d\.]{4,5}", ? (re) | ||||
|
r27686 | "diff": "---.+\+\+\+.+", ? (re) | ||
|
r25097 | "end": "\s*[\d\.]{4,5}", ? (re) | ||
|
r23245 | "result": "failure", ? (re) | ||
|
r25097 | "start": "\s*[\d\.]{4,5}", ? (re) | ||
|
r23245 | "time": "\s*[\d\.]{4,5}" (re) | ||
}, ? (re) | ||||
|
r22391 | "test-skip.t": { | ||
|
r23245 | "csys": "\s*[\d\.]{4,5}", ? (re) | ||
"cuser": "\s*[\d\.]{4,5}", ? (re) | ||||
|
r27686 | "diff": "", ? (re) | ||
|
r25097 | "end": "\s*[\d\.]{4,5}", ? (re) | ||
|
r23245 | "result": "skip", ? (re) | ||
|
r25097 | "start": "\s*[\d\.]{4,5}", ? (re) | ||
|
r23245 | "time": "\s*[\d\.]{4,5}" (re) | ||
}, ? (re) | ||||
|
r22391 | "test-success.t": [\{] (re) | ||
|
r23245 | "csys": "\s*[\d\.]{4,5}", ? (re) | ||
"cuser": "\s*[\d\.]{4,5}", ? (re) | ||||
|
r27686 | "diff": "", ? (re) | ||
|
r25097 | "end": "\s*[\d\.]{4,5}", ? (re) | ||
|
r23245 | "result": "success", ? (re) | ||
|
r25097 | "start": "\s*[\d\.]{4,5}", ? (re) | ||
|
r23245 | "time": "\s*[\d\.]{4,5}" (re) | ||
|
r22391 | } | ||
} (no-eol) | ||||
|
r32718 | --json with --outputdir | ||
$ rm report.json | ||||
$ rm -r output | ||||
$ mkdir output | ||||
$ rt --json --outputdir output | ||||
--- $TESTTMP/test-failure.t | ||||
+++ $TESTTMP/output/test-failure.t.err | ||||
@@ -1,5 +1,5 @@ | ||||
$ echo babar | ||||
- rataxes | ||||
+ babar | ||||
This is a noop statement so that | ||||
this test is still more bytes than success. | ||||
pad pad pad pad............................................................ | ||||
ERROR: test-failure.t output changed | ||||
!.s | ||||
Skipped test-skip.t: missing feature: nail clipper | ||||
Failed test-failure.t: output changed | ||||
|
r32942 | # Ran 2 tests, 1 skipped, 1 failed. | ||
|
r32718 | python hash seed: * (glob) | ||
[1] | ||||
$ f report.json | ||||
report.json: file not found | ||||
$ cat output/report.json | ||||
testreport ={ | ||||
"test-failure.t": [\{] (re) | ||||
"csys": "\s*[\d\.]{4,5}", ? (re) | ||||
"cuser": "\s*[\d\.]{4,5}", ? (re) | ||||
"diff": "---.+\+\+\+.+", ? (re) | ||||
"end": "\s*[\d\.]{4,5}", ? (re) | ||||
"result": "failure", ? (re) | ||||
"start": "\s*[\d\.]{4,5}", ? (re) | ||||
"time": "\s*[\d\.]{4,5}" (re) | ||||
}, ? (re) | ||||
"test-skip.t": { | ||||
"csys": "\s*[\d\.]{4,5}", ? (re) | ||||
"cuser": "\s*[\d\.]{4,5}", ? (re) | ||||
"diff": "", ? (re) | ||||
"end": "\s*[\d\.]{4,5}", ? (re) | ||||
"result": "skip", ? (re) | ||||
"start": "\s*[\d\.]{4,5}", ? (re) | ||||
"time": "\s*[\d\.]{4,5}" (re) | ||||
}, ? (re) | ||||
"test-success.t": [\{] (re) | ||||
"csys": "\s*[\d\.]{4,5}", ? (re) | ||||
"cuser": "\s*[\d\.]{4,5}", ? (re) | ||||
"diff": "", ? (re) | ||||
"end": "\s*[\d\.]{4,5}", ? (re) | ||||
"result": "success", ? (re) | ||||
"start": "\s*[\d\.]{4,5}", ? (re) | ||||
"time": "\s*[\d\.]{4,5}" (re) | ||||
} | ||||
} (no-eol) | ||||
$ ls -a output | ||||
. | ||||
.. | ||||
.testtimes | ||||
report.json | ||||
test-failure.t.err | ||||
|
r22579 | |||
|
r24979 | Test that failed test accepted through interactive are properly reported: | ||
$ cp test-failure.t backup | ||||
|
r27395 | $ echo y | rt --json -i | ||
|
r24979 | |||
--- $TESTTMP/test-failure.t | ||||
+++ $TESTTMP/test-failure.t.err | ||||
|
r28316 | @@ -1,5 +1,5 @@ | ||
|
r24979 | $ echo babar | ||
- rataxes | ||||
+ babar | ||||
This is a noop statement so that | ||||
this test is still more bytes than success. | ||||
|
r28316 | pad pad pad pad............................................................ | ||
|
r24979 | Accept this change? [n] ..s | ||
|
r27564 | Skipped test-skip.t: missing feature: nail clipper | ||
|
r32942 | # Ran 2 tests, 1 skipped, 0 failed. | ||
|
r24979 | |||
$ cat report.json | ||||
testreport ={ | ||||
"test-failure.t": [\{] (re) | ||||
"csys": "\s*[\d\.]{4,5}", ? (re) | ||||
"cuser": "\s*[\d\.]{4,5}", ? (re) | ||||
|
r27686 | "diff": "", ? (re) | ||
|
r25097 | "end": "\s*[\d\.]{4,5}", ? (re) | ||
|
r24979 | "result": "success", ? (re) | ||
|
r25097 | "start": "\s*[\d\.]{4,5}", ? (re) | ||
|
r24979 | "time": "\s*[\d\.]{4,5}" (re) | ||
}, ? (re) | ||||
"test-skip.t": { | ||||
"csys": "\s*[\d\.]{4,5}", ? (re) | ||||
"cuser": "\s*[\d\.]{4,5}", ? (re) | ||||
|
r27686 | "diff": "", ? (re) | ||
|
r25097 | "end": "\s*[\d\.]{4,5}", ? (re) | ||
|
r24979 | "result": "skip", ? (re) | ||
|
r25097 | "start": "\s*[\d\.]{4,5}", ? (re) | ||
|
r24979 | "time": "\s*[\d\.]{4,5}" (re) | ||
}, ? (re) | ||||
"test-success.t": [\{] (re) | ||||
"csys": "\s*[\d\.]{4,5}", ? (re) | ||||
"cuser": "\s*[\d\.]{4,5}", ? (re) | ||||
|
r27686 | "diff": "", ? (re) | ||
|
r25097 | "end": "\s*[\d\.]{4,5}", ? (re) | ||
|
r24979 | "result": "success", ? (re) | ||
|
r25097 | "start": "\s*[\d\.]{4,5}", ? (re) | ||
|
r24979 | "time": "\s*[\d\.]{4,5}" (re) | ||
} | ||||
} (no-eol) | ||||
$ mv backup test-failure.t | ||||
|
r24811 | backslash on end of line with glob matching is handled properly | ||
$ cat > test-glob-backslash.t << EOF | ||||
> $ echo 'foo bar \\' | ||||
> foo * \ (glob) | ||||
> EOF | ||||
|
r27395 | $ rt test-glob-backslash.t | ||
|
r24811 | . | ||
|
r32942 | # Ran 1 tests, 0 skipped, 0 failed. | ||
|
r24811 | |||
$ rm -f test-glob-backslash.t | ||||
|
r31673 | Test globbing of local IP addresses | ||
|
r29518 | $ echo 172.16.18.1 | ||
|
r31673 | $LOCALIP (glob) | ||
$ echo dead:beef::1 | ||||
$LOCALIP (glob) | ||||
|
r29518 | |||
|
r25728 | Test reusability for third party tools | ||
====================================== | ||||
$ mkdir "$TESTTMP"/anothertests | ||||
$ cd "$TESTTMP"/anothertests | ||||
test that `run-tests.py` can execute hghave, even if it runs not in | ||||
Mercurial source tree. | ||||
$ cat > test-hghave.t <<EOF | ||||
> #require true | ||||
> $ echo foo | ||||
> foo | ||||
> EOF | ||||
|
r28616 | $ rt test-hghave.t | ||
|
r25728 | . | ||
|
r32942 | # Ran 1 tests, 0 skipped, 0 failed. | ||
|
r25729 | |||
test that RUNTESTDIR refers the directory, in which `run-tests.py` now | ||||
running is placed. | ||||
$ cat > test-runtestdir.t <<EOF | ||||
> - $TESTDIR, in which test-run-tests.t is placed | ||||
> - \$TESTDIR, in which test-runtestdir.t is placed (expanded at runtime) | ||||
> - \$RUNTESTDIR, in which run-tests.py is placed (expanded at runtime) | ||||
> | ||||
|
r27057 | > #if windows | ||
> $ test "\$TESTDIR" = "$TESTTMP\anothertests" | ||||
> #else | ||||
|
r25729 | > $ test "\$TESTDIR" = "$TESTTMP"/anothertests | ||
|
r27057 | > #endif | ||
|
r25729 | > $ test "\$RUNTESTDIR" = "$TESTDIR" | ||
|
r32937 | > $ head -n 3 "\$RUNTESTDIR"/../contrib/check-code.py | sed 's@.!.*python@#!USRBINENVPY@' | ||
> #!USRBINENVPY | ||||
|
r25729 | > # | ||
> # check-code - a style and portability checker for Mercurial | ||||
> EOF | ||||
|
r28616 | $ rt test-runtestdir.t | ||
|
r25729 | . | ||
|
r32942 | # Ran 1 tests, 0 skipped, 0 failed. | ||
|
r25730 | |||
#if execbit | ||||
test that TESTDIR is referred in PATH | ||||
$ cat > custom-command.sh <<EOF | ||||
> #!/bin/sh | ||||
> echo "hello world" | ||||
> EOF | ||||
$ chmod +x custom-command.sh | ||||
$ cat > test-testdir-path.t <<EOF | ||||
> $ custom-command.sh | ||||
> hello world | ||||
> EOF | ||||
|
r28616 | $ rt test-testdir-path.t | ||
|
r25730 | . | ||
|
r32942 | # Ran 1 tests, 0 skipped, 0 failed. | ||
|
r25730 | |||
#endif | ||||
|
r26109 | |||
test support for --allow-slow-tests | ||||
$ cat > test-very-slow-test.t <<EOF | ||||
> #require slow | ||||
> $ echo pass | ||||
> pass | ||||
> EOF | ||||
|
r28616 | $ rt test-very-slow-test.t | ||
|
r26109 | s | ||
|
r32473 | Skipped test-very-slow-test.t: missing feature: allow slow tests (use --allow-slow-tests) | ||
|
r32942 | # Ran 0 tests, 1 skipped, 0 failed. | ||
|
r27395 | $ rt $HGTEST_RUN_TESTS_PURE --allow-slow-tests test-very-slow-test.t | ||
|
r26109 | . | ||
|
r32942 | # Ran 1 tests, 0 skipped, 0 failed. | ||
|
r28180 | |||
support for running a test outside the current directory | ||||
$ mkdir nonlocal | ||||
$ cat > nonlocal/test-is-not-here.t << EOF | ||||
> $ echo pass | ||||
> pass | ||||
> EOF | ||||
$ rt nonlocal/test-is-not-here.t | ||||
. | ||||
|
r32942 | # Ran 1 tests, 0 skipped, 0 failed. | ||
|
r28596 | |||
|
r34970 | support for automatically discovering test if arg is a folder | ||
$ mkdir tmp && cd tmp | ||||
$ cat > test-uno.t << EOF | ||||
> $ echo line | ||||
> line | ||||
> EOF | ||||
$ cp test-uno.t test-dos.t | ||||
$ cd .. | ||||
$ cp -R tmp tmpp | ||||
$ cp tmp/test-uno.t test-solo.t | ||||
$ $PYTHON $TESTDIR/run-tests.py tmp/ test-solo.t tmpp | ||||
..... | ||||
# Ran 5 tests, 0 skipped, 0 failed. | ||||
$ rm -rf tmp tmpp | ||||
|
r34963 | support for running run-tests.py from another directory | ||
$ mkdir tmp && cd tmp | ||||
|
r35096 | |||
|
r34963 | $ cat > useful-file.sh << EOF | ||
> important command | ||||
> EOF | ||||
$ cat > test-folder.t << EOF | ||||
> $ cat \$TESTDIR/useful-file.sh | ||||
> important command | ||||
> EOF | ||||
|
r35096 | $ cat > test-folder-fail.t << EOF | ||
> $ cat \$TESTDIR/useful-file.sh | ||||
> important commando | ||||
> EOF | ||||
|
r34963 | $ cd .. | ||
|
r35096 | $ $PYTHON $TESTDIR/run-tests.py tmp/test-*.t | ||
--- $TESTTMP/anothertests/tmp/test-folder-fail.t | ||||
+++ $TESTTMP/anothertests/tmp/test-folder-fail.t.err | ||||
@@ -1,2 +1,2 @@ | ||||
$ cat $TESTDIR/useful-file.sh | ||||
- important commando | ||||
+ important command | ||||
ERROR: test-folder-fail.t output changed | ||||
!. | ||||
Failed test-folder-fail.t: output changed | ||||
# Ran 2 tests, 0 skipped, 1 failed. | ||||
python hash seed: * (glob) | ||||
[1] | ||||
|
r34963 | |||
|
r28596 | support for bisecting failed tests automatically | ||
$ hg init bisect | ||||
$ cd bisect | ||||
$ cat >> test-bisect.t <<EOF | ||||
> $ echo pass | ||||
> pass | ||||
> EOF | ||||
$ hg add test-bisect.t | ||||
$ hg ci -m 'good' | ||||
$ cat >> test-bisect.t <<EOF | ||||
> $ echo pass | ||||
> fail | ||||
> EOF | ||||
$ hg ci -m 'bad' | ||||
$ rt --known-good-rev=0 test-bisect.t | ||||
--- $TESTTMP/anothertests/bisect/test-bisect.t | ||||
+++ $TESTTMP/anothertests/bisect/test-bisect.t.err | ||||
@@ -1,4 +1,4 @@ | ||||
$ echo pass | ||||
pass | ||||
$ echo pass | ||||
- fail | ||||
+ pass | ||||
ERROR: test-bisect.t output changed | ||||
! | ||||
Failed test-bisect.t: output changed | ||||
test-bisect.t broken by 72cbf122d116 (bad) | ||||
|
r32942 | # Ran 1 tests, 0 skipped, 1 failed. | ||
|
r28596 | python hash seed: * (glob) | ||
[1] | ||||
|
r32317 | |||
$ cd .. | ||||
|
r34043 | support bisecting a separate repo | ||
$ hg init bisect-dependent | ||||
$ cd bisect-dependent | ||||
$ cat > test-bisect-dependent.t <<EOF | ||||
> $ tail -1 \$TESTDIR/../bisect/test-bisect.t | ||||
> pass | ||||
> EOF | ||||
$ hg commit -Am dependent test-bisect-dependent.t | ||||
$ rt --known-good-rev=0 test-bisect-dependent.t | ||||
--- $TESTTMP/anothertests/bisect-dependent/test-bisect-dependent.t | ||||
+++ $TESTTMP/anothertests/bisect-dependent/test-bisect-dependent.t.err | ||||
@@ -1,2 +1,2 @@ | ||||
$ tail -1 $TESTDIR/../bisect/test-bisect.t | ||||
- pass | ||||
+ fail | ||||
ERROR: test-bisect-dependent.t output changed | ||||
! | ||||
Failed test-bisect-dependent.t: output changed | ||||
Failed to identify failure point for test-bisect-dependent.t | ||||
# Ran 1 tests, 0 skipped, 1 failed. | ||||
python hash seed: * (glob) | ||||
[1] | ||||
$ rt --bisect-repo=../test-bisect test-bisect-dependent.t | ||||
Usage: run-tests.py [options] [tests] | ||||
run-tests.py: error: --bisect-repo cannot be used without --known-good-rev | ||||
[2] | ||||
$ rt --known-good-rev=0 --bisect-repo=../bisect test-bisect-dependent.t | ||||
--- $TESTTMP/anothertests/bisect-dependent/test-bisect-dependent.t | ||||
+++ $TESTTMP/anothertests/bisect-dependent/test-bisect-dependent.t.err | ||||
@@ -1,2 +1,2 @@ | ||||
$ tail -1 $TESTDIR/../bisect/test-bisect.t | ||||
- pass | ||||
+ fail | ||||
ERROR: test-bisect-dependent.t output changed | ||||
! | ||||
Failed test-bisect-dependent.t: output changed | ||||
test-bisect-dependent.t broken by 72cbf122d116 (bad) | ||||
# Ran 1 tests, 0 skipped, 1 failed. | ||||
python hash seed: * (glob) | ||||
[1] | ||||
$ cd .. | ||||
|
r32622 | Test a broken #if statement doesn't break run-tests threading. | ||
============================================================== | ||||
$ mkdir broken | ||||
$ cd broken | ||||
$ cat > test-broken.t <<EOF | ||||
> true | ||||
> #if notarealhghavefeature | ||||
> $ false | ||||
> #endif | ||||
> EOF | ||||
$ for f in 1 2 3 4 ; do | ||||
> cat > test-works-$f.t <<EOF | ||||
> This is test case $f | ||||
> $ sleep 1 | ||||
> EOF | ||||
> done | ||||
$ rt -j 2 | ||||
.... | ||||
|
r32942 | # Ran 5 tests, 0 skipped, 0 failed. | ||
|
r32622 | skipped: unknown feature: notarealhghavefeature | ||
$ cd .. | ||||
$ rm -rf broken | ||||
|
r32317 | Test cases in .t files | ||
====================== | ||||
$ mkdir cases | ||||
$ cd cases | ||||
$ cat > test-cases-abc.t <<'EOF' | ||||
> #testcases A B C | ||||
> $ V=B | ||||
> #if A | ||||
> $ V=A | ||||
> #endif | ||||
> #if C | ||||
> $ V=C | ||||
> #endif | ||||
> $ echo $V | sed 's/A/C/' | ||||
> C | ||||
> #if C | ||||
> $ [ $V = C ] | ||||
> #endif | ||||
> #if A | ||||
> $ [ $V = C ] | ||||
> [1] | ||||
> #endif | ||||
> #if no-C | ||||
> $ [ $V = C ] | ||||
> [1] | ||||
> #endif | ||||
> $ [ $V = D ] | ||||
> [1] | ||||
> EOF | ||||
$ rt | ||||
. | ||||
--- $TESTTMP/anothertests/cases/test-cases-abc.t | ||||
+++ $TESTTMP/anothertests/cases/test-cases-abc.t.B.err | ||||
@@ -7,7 +7,7 @@ | ||||
$ V=C | ||||
#endif | ||||
$ echo $V | sed 's/A/C/' | ||||
- C | ||||
+ B | ||||
#if C | ||||
$ [ $V = C ] | ||||
#endif | ||||
ERROR: test-cases-abc.t (case B) output changed | ||||
!. | ||||
Failed test-cases-abc.t (case B): output changed | ||||
|
r32942 | # Ran 3 tests, 0 skipped, 1 failed. | ||
|
r32317 | python hash seed: * (glob) | ||
[1] | ||||
--restart works | ||||
$ rt --restart | ||||
--- $TESTTMP/anothertests/cases/test-cases-abc.t | ||||
+++ $TESTTMP/anothertests/cases/test-cases-abc.t.B.err | ||||
@@ -7,7 +7,7 @@ | ||||
$ V=C | ||||
#endif | ||||
$ echo $V | sed 's/A/C/' | ||||
- C | ||||
+ B | ||||
#if C | ||||
$ [ $V = C ] | ||||
#endif | ||||
ERROR: test-cases-abc.t (case B) output changed | ||||
!. | ||||
Failed test-cases-abc.t (case B): output changed | ||||
|
r32942 | # Ran 2 tests, 0 skipped, 1 failed. | ||
|
r32317 | python hash seed: * (glob) | ||
[1] | ||||
|
r32720 | |||
--restart works with outputdir | ||||
$ mkdir output | ||||
$ mv test-cases-abc.t.B.err output | ||||
$ rt --restart --outputdir output | ||||
--- $TESTTMP/anothertests/cases/test-cases-abc.t | ||||
+++ $TESTTMP/anothertests/cases/output/test-cases-abc.t.B.err | ||||
@@ -7,7 +7,7 @@ | ||||
$ V=C | ||||
#endif | ||||
$ echo $V | sed 's/A/C/' | ||||
- C | ||||
+ B | ||||
#if C | ||||
$ [ $V = C ] | ||||
#endif | ||||
ERROR: test-cases-abc.t (case B) output changed | ||||
!. | ||||
Failed test-cases-abc.t (case B): output changed | ||||
|
r32942 | # Ran 2 tests, 0 skipped, 1 failed. | ||
|
r32720 | python hash seed: * (glob) | ||
[1] | ||||
|
r35068 | |||
Test automatic pattern replacement | ||||
$ cat << EOF >> common-pattern.py | ||||
> substitutions = [ | ||||
> (br'foo-(.*)\\b', | ||||
> br'\$XXX=\\1\$'), | ||||
> (br'bar\\n', | ||||
> br'\$YYY$\\n'), | ||||
> ] | ||||
> EOF | ||||
$ cat << EOF >> test-substitution.t | ||||
> $ echo foo-12 | ||||
> \$XXX=12$ | ||||
> $ echo foo-42 | ||||
> \$XXX=42$ | ||||
> $ echo bar prior | ||||
> bar prior | ||||
> $ echo lastbar | ||||
> last\$YYY$ | ||||
> $ echo foo-bar foo-baz | ||||
> EOF | ||||
$ rt test-substitution.t | ||||
--- $TESTTMP/anothertests/cases/test-substitution.t | ||||
+++ $TESTTMP/anothertests/cases/test-substitution.t.err | ||||
@@ -7,3 +7,4 @@ | ||||
$ echo lastbar | ||||
last$YYY$ | ||||
$ echo foo-bar foo-baz | ||||
+ $XXX=bar foo-baz$ | ||||
ERROR: test-substitution.t output changed | ||||
! | ||||
Failed test-substitution.t: output changed | ||||
# Ran 1 tests, 0 skipped, 1 failed. | ||||
python hash seed: * (glob) | ||||
[1] | ||||