##// END OF EJS Templates
test-run-test: use explicit variables to clarify paths...
marmoute -
r48372:da497189 default
parent child Browse files
Show More
@@ -1,2069 +1,2087
1 1 This file tests the behavior of run-tests.py itself.
2 2
3 3 Avoid interference from actual test env:
4 4
5 5 $ . "$TESTDIR/helper-runtests.sh"
6 6
7 7 Smoke test with install
8 8 ============
9 9 $ "$PYTHON" $TESTDIR/run-tests.py $HGTEST_RUN_TESTS_PURE -l
10 10 running 0 tests using 0 parallel processes
11 11
12 12 # Ran 0 tests, 0 skipped, 0 failed.
13 13
14 14 Define a helper to avoid the install step
15 15 =============
16 16 $ rt()
17 17 > {
18 18 > "$PYTHON" $TESTDIR/run-tests.py --with-hg=`which hg` -j1 "$@"
19 19 > }
20 20
21 21 error paths
22 22
23 23 #if symlink
24 24 $ ln -s `which true` hg
25 25 $ "$PYTHON" $TESTDIR/run-tests.py --with-hg=./hg
26 26 warning: --with-hg should specify an hg script
27 27 running 0 tests using 0 parallel processes
28 28
29 29 # Ran 0 tests, 0 skipped, 0 failed.
30 30 $ rm hg
31 31 #endif
32 32
33 33 #if execbit
34 34 $ touch hg
35 35 $ "$PYTHON" $TESTDIR/run-tests.py --with-hg=./hg
36 36 usage: run-tests.py [options] [tests]
37 37 run-tests.py: error: --with-hg must specify an executable hg script
38 38 [2]
39 39 $ rm hg
40 40 #endif
41 41
42 42 Features for testing optional lines
43 43 ===================================
44 44
45 45 $ cat > hghaveaddon.py <<EOF
46 46 > import hghave
47 47 > @hghave.check("custom", "custom hghave feature")
48 48 > def has_custom():
49 49 > return True
50 50 > @hghave.check("missing", "missing hghave feature")
51 51 > def has_missing():
52 52 > return False
53 53 > EOF
54 54
55 55 an empty test
56 56 =======================
57 57
58 58 $ touch test-empty.t
59 59 $ rt
60 60 running 1 tests using 1 parallel processes
61 61 .
62 62 # Ran 1 tests, 0 skipped, 0 failed.
63 63 $ rm test-empty.t
64 64
65 65 a succesful test
66 66 =======================
67 67
68 68 $ cat > test-success.t << EOF
69 69 > $ echo babar
70 70 > babar
71 71 > $ echo xyzzy
72 72 > dont_print (?)
73 73 > nothing[42]line (re) (?)
74 74 > never*happens (glob) (?)
75 75 > more_nothing (?)
76 76 > xyzzy
77 77 > nor this (?)
78 78 > $ printf 'abc\ndef\nxyz\n'
79 79 > 123 (?)
80 80 > abc
81 81 > def (?)
82 82 > 456 (?)
83 83 > xyz
84 84 > $ printf 'zyx\nwvu\ntsr\n'
85 85 > abc (?)
86 86 > zyx (custom !)
87 87 > wvu
88 88 > no_print (no-custom !)
89 89 > tsr (no-missing !)
90 90 > missing (missing !)
91 91 > EOF
92 92
93 93 $ rt
94 94 running 1 tests using 1 parallel processes
95 95 .
96 96 # Ran 1 tests, 0 skipped, 0 failed.
97 97
98 98 failing test
99 99 ==================
100 100
101 101 test churn with globs
102 102 $ cat > test-failure.t <<EOF
103 103 > $ echo "bar-baz"; echo "bar-bad"; echo foo
104 104 > bar*bad (glob)
105 105 > bar*baz (glob)
106 106 > | fo (re)
107 107 > EOF
108 108 $ rt test-failure.t
109 109 running 1 tests using 1 parallel processes
110 110
111 111 --- $TESTTMP/test-failure.t
112 112 +++ $TESTTMP/test-failure.t.err
113 113 @@ -1,4 +1,4 @@
114 114 $ echo "bar-baz"; echo "bar-bad"; echo foo
115 115 + bar*baz (glob)
116 116 bar*bad (glob)
117 117 - bar*baz (glob)
118 118 - | fo (re)
119 119 + foo
120 120
121 121 ERROR: test-failure.t output changed
122 122 !
123 123 Failed test-failure.t: output changed
124 124 # Ran 1 tests, 0 skipped, 1 failed.
125 125 python hash seed: * (glob)
126 126 [1]
127 127
128 128 test how multiple globs gets matched with lines in output
129 129 $ cat > test-failure-globs.t <<EOF
130 130 > $ echo "context"; echo "context"; \
131 131 > echo "key: 1"; echo "value: not a"; \
132 132 > echo "key: 2"; echo "value: not b"; \
133 133 > echo "key: 3"; echo "value: c"; \
134 134 > echo "key: 4"; echo "value: d"
135 135 > context
136 136 > context
137 137 > key: 1
138 138 > value: a
139 139 > key: 2
140 140 > value: b
141 141 > key: 3
142 142 > value: * (glob)
143 143 > key: 4
144 144 > value: * (glob)
145 145 > EOF
146 146 $ rt test-failure-globs.t
147 147 running 1 tests using 1 parallel processes
148 148
149 149 --- $TESTTMP/test-failure-globs.t
150 150 +++ $TESTTMP/test-failure-globs.t.err
151 151 @@ -2,9 +2,9 @@
152 152 context
153 153 context
154 154 key: 1
155 155 - value: a
156 156 + value: not a
157 157 key: 2
158 158 - value: b
159 159 + value: not b
160 160 key: 3
161 161 value: * (glob)
162 162 key: 4
163 163
164 164 ERROR: test-failure-globs.t output changed
165 165 !
166 166 Failed test-failure-globs.t: output changed
167 167 # Ran 1 tests, 0 skipped, 1 failed.
168 168 python hash seed: * (glob)
169 169 [1]
170 170 $ rm test-failure-globs.t
171 171
172 172 test diff colorisation
173 173
174 174 #if no-windows pygments
175 175 $ rt test-failure.t --color always
176 176 running 1 tests using 1 parallel processes
177 177
178 178 \x1b[38;5;124m--- $TESTTMP/test-failure.t\x1b[39m (esc)
179 179 \x1b[38;5;34m+++ $TESTTMP/test-failure.t.err\x1b[39m (esc)
180 180 \x1b[38;5;90;01m@@ -1,4 +1,4 @@\x1b[39;00m (esc)
181 181 $ echo "bar-baz"; echo "bar-bad"; echo foo
182 182 \x1b[38;5;34m+ bar*baz (glob)\x1b[39m (esc)
183 183 bar*bad (glob)
184 184 \x1b[38;5;124m- bar*baz (glob)\x1b[39m (esc)
185 185 \x1b[38;5;124m- | fo (re)\x1b[39m (esc)
186 186 \x1b[38;5;34m+ foo\x1b[39m (esc)
187 187
188 188 \x1b[38;5;88mERROR: \x1b[39m\x1b[38;5;9mtest-failure.t\x1b[39m\x1b[38;5;88m output changed\x1b[39m (esc)
189 189 !
190 190 \x1b[38;5;88mFailed \x1b[39m\x1b[38;5;9mtest-failure.t\x1b[39m\x1b[38;5;88m: output changed\x1b[39m (esc)
191 191 # Ran 1 tests, 0 skipped, 1 failed.
192 192 python hash seed: * (glob)
193 193 [1]
194 194
195 195 $ rt test-failure.t 2> tmp.log
196 196 running 1 tests using 1 parallel processes
197 197 [1]
198 198 $ cat tmp.log
199 199
200 200 --- $TESTTMP/test-failure.t
201 201 +++ $TESTTMP/test-failure.t.err
202 202 @@ -1,4 +1,4 @@
203 203 $ echo "bar-baz"; echo "bar-bad"; echo foo
204 204 + bar*baz (glob)
205 205 bar*bad (glob)
206 206 - bar*baz (glob)
207 207 - | fo (re)
208 208 + foo
209 209
210 210 ERROR: test-failure.t output changed
211 211 !
212 212 Failed test-failure.t: output changed
213 213 # Ran 1 tests, 0 skipped, 1 failed.
214 214 python hash seed: * (glob)
215 215 #endif
216 216
217 217 $ cat > test-failure.t << EOF
218 218 > $ true
219 219 > should go away (true !)
220 220 > $ true
221 221 > should stay (false !)
222 222 >
223 223 > Should remove first line, not second or third
224 224 > $ echo 'testing'
225 225 > baz*foo (glob) (true !)
226 226 > foobar*foo (glob) (false !)
227 227 > te*ting (glob) (true !)
228 228 >
229 229 > Should keep first two lines, remove third and last
230 230 > $ echo 'testing'
231 231 > test.ng (re) (true !)
232 232 > foo.ar (re) (false !)
233 233 > b.r (re) (true !)
234 234 > missing (?)
235 235 > awol (true !)
236 236 >
237 237 > The "missing" line should stay, even though awol is dropped
238 238 > $ echo 'testing'
239 239 > test.ng (re) (true !)
240 240 > foo.ar (?)
241 241 > awol
242 242 > missing (?)
243 243 > EOF
244 244 $ rt test-failure.t
245 245 running 1 tests using 1 parallel processes
246 246
247 247 --- $TESTTMP/test-failure.t
248 248 +++ $TESTTMP/test-failure.t.err
249 249 @@ -1,11 +1,9 @@
250 250 $ true
251 251 - should go away (true !)
252 252 $ true
253 253 should stay (false !)
254 254
255 255 Should remove first line, not second or third
256 256 $ echo 'testing'
257 257 - baz*foo (glob) (true !)
258 258 foobar*foo (glob) (false !)
259 259 te*ting (glob) (true !)
260 260
261 261 foo.ar (re) (false !)
262 262 missing (?)
263 263 @@ -13,13 +11,10 @@
264 264 $ echo 'testing'
265 265 test.ng (re) (true !)
266 266 foo.ar (re) (false !)
267 267 - b.r (re) (true !)
268 268 missing (?)
269 269 - awol (true !)
270 270
271 271 The "missing" line should stay, even though awol is dropped
272 272 $ echo 'testing'
273 273 test.ng (re) (true !)
274 274 foo.ar (?)
275 275 - awol
276 276 missing (?)
277 277
278 278 ERROR: test-failure.t output changed
279 279 !
280 280 Failed test-failure.t: output changed
281 281 # Ran 1 tests, 0 skipped, 1 failed.
282 282 python hash seed: * (glob)
283 283 [1]
284 284
285 285 basic failing test
286 286 $ cat > test-failure.t << EOF
287 287 > $ echo babar
288 288 > rataxes
289 289 > This is a noop statement so that
290 290 > this test is still more bytes than success.
291 291 > pad pad pad pad............................................................
292 292 > pad pad pad pad............................................................
293 293 > pad pad pad pad............................................................
294 294 > pad pad pad pad............................................................
295 295 > pad pad pad pad............................................................
296 296 > pad pad pad pad............................................................
297 297 > EOF
298 298
299 299 >>> fh = open('test-failure-unicode.t', 'wb')
300 300 >>> fh.write(u' $ echo babar\u03b1\n'.encode('utf-8')) and None
301 301 >>> fh.write(u' l\u03b5\u03b5t\n'.encode('utf-8')) and None
302 302
303 303 $ rt
304 304 running 3 tests using 1 parallel processes
305 305
306 306 --- $TESTTMP/test-failure.t
307 307 +++ $TESTTMP/test-failure.t.err
308 308 @@ -1,5 +1,5 @@
309 309 $ echo babar
310 310 - rataxes
311 311 + babar
312 312 This is a noop statement so that
313 313 this test is still more bytes than success.
314 314 pad pad pad pad............................................................
315 315
316 316 ERROR: test-failure.t output changed
317 317 !.
318 318 --- $TESTTMP/test-failure-unicode.t
319 319 +++ $TESTTMP/test-failure-unicode.t.err
320 320 @@ -1,2 +1,2 @@
321 321 $ echo babar\xce\xb1 (esc)
322 322 - l\xce\xb5\xce\xb5t (esc)
323 323 + babar\xce\xb1 (esc)
324 324
325 325 ERROR: test-failure-unicode.t output changed
326 326 !
327 327 Failed test-failure-unicode.t: output changed
328 328 Failed test-failure.t: output changed
329 329 # Ran 3 tests, 0 skipped, 2 failed.
330 330 python hash seed: * (glob)
331 331 [1]
332 332
333 333 test --outputdir
334 334 $ mkdir output
335 335 $ rt --outputdir output
336 336 running 3 tests using 1 parallel processes
337 337
338 338 --- $TESTTMP/test-failure.t
339 339 +++ $TESTTMP/output/test-failure.t.err
340 340 @@ -1,5 +1,5 @@
341 341 $ echo babar
342 342 - rataxes
343 343 + babar
344 344 This is a noop statement so that
345 345 this test is still more bytes than success.
346 346 pad pad pad pad............................................................
347 347
348 348 ERROR: test-failure.t output changed
349 349 !.
350 350 --- $TESTTMP/test-failure-unicode.t
351 351 +++ $TESTTMP/output/test-failure-unicode.t.err
352 352 @@ -1,2 +1,2 @@
353 353 $ echo babar\xce\xb1 (esc)
354 354 - l\xce\xb5\xce\xb5t (esc)
355 355 + babar\xce\xb1 (esc)
356 356
357 357 ERROR: test-failure-unicode.t output changed
358 358 !
359 359 Failed test-failure-unicode.t: output changed
360 360 Failed test-failure.t: output changed
361 361 # Ran 3 tests, 0 skipped, 2 failed.
362 362 python hash seed: * (glob)
363 363 [1]
364 364 $ ls -a output
365 365 .
366 366 ..
367 367 .testtimes
368 368 test-failure-unicode.t.err
369 369 test-failure.t.err
370 370
371 371 test --xunit support
372 372 $ rt --xunit=xunit.xml
373 373 running 3 tests using 1 parallel processes
374 374
375 375 --- $TESTTMP/test-failure.t
376 376 +++ $TESTTMP/test-failure.t.err
377 377 @@ -1,5 +1,5 @@
378 378 $ echo babar
379 379 - rataxes
380 380 + babar
381 381 This is a noop statement so that
382 382 this test is still more bytes than success.
383 383 pad pad pad pad............................................................
384 384
385 385 ERROR: test-failure.t output changed
386 386 !.
387 387 --- $TESTTMP/test-failure-unicode.t
388 388 +++ $TESTTMP/test-failure-unicode.t.err
389 389 @@ -1,2 +1,2 @@
390 390 $ echo babar\xce\xb1 (esc)
391 391 - l\xce\xb5\xce\xb5t (esc)
392 392 + babar\xce\xb1 (esc)
393 393
394 394 ERROR: test-failure-unicode.t output changed
395 395 !
396 396 Failed test-failure-unicode.t: output changed
397 397 Failed test-failure.t: output changed
398 398 # Ran 3 tests, 0 skipped, 2 failed.
399 399 python hash seed: * (glob)
400 400 [1]
401 401 $ cat xunit.xml
402 402 <?xml version="1.0" encoding="utf-8"?>
403 403 <testsuite errors="0" failures="2" name="run-tests" skipped="0" tests="3">
404 404 <testcase name="test-success.t" time="*"/> (glob)
405 405 <testcase name="test-failure-unicode.t" time="*"> (glob)
406 406 <failure message="output changed" type="output-mismatch"><![CDATA[--- $TESTTMP/test-failure-unicode.t (py38 !)
407 407 <failure message="output changed" type="output-mismatch"> (no-py38 !)
408 408 <![CDATA[--- $TESTTMP/test-failure-unicode.t (no-py38 !)
409 409 +++ $TESTTMP/test-failure-unicode.t.err
410 410 @@ -1,2 +1,2 @@
411 411 $ echo babar\xce\xb1 (esc)
412 412 - l\xce\xb5\xce\xb5t (esc)
413 413 + babar\xce\xb1 (esc)
414 414 ]]></failure> (py38 !)
415 415 ]]> </failure> (no-py38 !)
416 416 </testcase>
417 417 <testcase name="test-failure.t" time="*"> (glob)
418 418 <failure message="output changed" type="output-mismatch"><![CDATA[--- $TESTTMP/test-failure.t (py38 !)
419 419 <failure message="output changed" type="output-mismatch"> (no-py38 !)
420 420 <![CDATA[--- $TESTTMP/test-failure.t (no-py38 !)
421 421 +++ $TESTTMP/test-failure.t.err
422 422 @@ -1,5 +1,5 @@
423 423 $ echo babar
424 424 - rataxes
425 425 + babar
426 426 This is a noop statement so that
427 427 this test is still more bytes than success.
428 428 pad pad pad pad............................................................
429 429 ]]></failure> (py38 !)
430 430 ]]> </failure> (no-py38 !)
431 431 </testcase>
432 432 </testsuite>
433 433
434 434 $ cat .testtimes
435 435 test-empty.t * (glob)
436 436 test-failure-globs.t * (glob)
437 437 test-failure-unicode.t * (glob)
438 438 test-failure.t * (glob)
439 439 test-success.t * (glob)
440 440
441 441 $ rt --list-tests
442 442 test-failure-unicode.t
443 443 test-failure.t
444 444 test-success.t
445 445
446 446 $ rt --list-tests --json
447 447 test-failure-unicode.t
448 448 test-failure.t
449 449 test-success.t
450 450 $ cat report.json
451 451 testreport ={
452 452 "test-failure-unicode.t": {
453 453 "result": "success"
454 454 },
455 455 "test-failure.t": {
456 456 "result": "success"
457 457 },
458 458 "test-success.t": {
459 459 "result": "success"
460 460 }
461 461 } (no-eol)
462 462
463 463 $ rt --list-tests --xunit=xunit.xml
464 464 test-failure-unicode.t
465 465 test-failure.t
466 466 test-success.t
467 467 $ cat xunit.xml
468 468 <?xml version="1.0" encoding="utf-8"?>
469 469 <testsuite errors="0" failures="0" name="run-tests" skipped="0" tests="0">
470 470 <testcase name="test-failure-unicode.t"/>
471 471 <testcase name="test-failure.t"/>
472 472 <testcase name="test-success.t"/>
473 473 </testsuite>
474 474
475 475 $ rt --list-tests test-failure* --json --xunit=xunit.xml --outputdir output
476 476 test-failure-unicode.t
477 477 test-failure.t
478 478 $ cat output/report.json
479 479 testreport ={
480 480 "test-failure-unicode.t": {
481 481 "result": "success"
482 482 },
483 483 "test-failure.t": {
484 484 "result": "success"
485 485 }
486 486 } (no-eol)
487 487 $ cat xunit.xml
488 488 <?xml version="1.0" encoding="utf-8"?>
489 489 <testsuite errors="0" failures="0" name="run-tests" skipped="0" tests="0">
490 490 <testcase name="test-failure-unicode.t"/>
491 491 <testcase name="test-failure.t"/>
492 492 </testsuite>
493 493
494 494 $ rm test-failure-unicode.t
495 495
496 496 test for --retest
497 497 ====================
498 498
499 499 $ rt --retest
500 500 running 1 tests using 1 parallel processes
501 501
502 502 --- $TESTTMP/test-failure.t
503 503 +++ $TESTTMP/test-failure.t.err
504 504 @@ -1,5 +1,5 @@
505 505 $ echo babar
506 506 - rataxes
507 507 + babar
508 508 This is a noop statement so that
509 509 this test is still more bytes than success.
510 510 pad pad pad pad............................................................
511 511
512 512 ERROR: test-failure.t output changed
513 513 !
514 514 Failed test-failure.t: output changed
515 515 # Ran 1 tests, 0 skipped, 1 failed.
516 516 python hash seed: * (glob)
517 517 [1]
518 518
519 519 --retest works with --outputdir
520 520 $ rm -r output
521 521 $ mkdir output
522 522 $ mv test-failure.t.err output
523 523 $ rt --retest --outputdir output
524 524 running 1 tests using 1 parallel processes
525 525
526 526 --- $TESTTMP/test-failure.t
527 527 +++ $TESTTMP/output/test-failure.t.err
528 528 @@ -1,5 +1,5 @@
529 529 $ echo babar
530 530 - rataxes
531 531 + babar
532 532 This is a noop statement so that
533 533 this test is still more bytes than success.
534 534 pad pad pad pad............................................................
535 535
536 536 ERROR: test-failure.t output changed
537 537 !
538 538 Failed test-failure.t: output changed
539 539 # Ran 1 tests, 0 skipped, 1 failed.
540 540 python hash seed: * (glob)
541 541 [1]
542 542
543 543 Selecting Tests To Run
544 544 ======================
545 545
546 546 successful
547 547
548 548 $ rt test-success.t
549 549 running 1 tests using 1 parallel processes
550 550 .
551 551 # Ran 1 tests, 0 skipped, 0 failed.
552 552
553 553 success w/ keyword
554 554 $ rt -k xyzzy
555 555 running 2 tests using 1 parallel processes
556 556 .
557 557 # Ran 2 tests, 1 skipped, 0 failed.
558 558
559 559 failed
560 560
561 561 $ rt test-failure.t
562 562 running 1 tests using 1 parallel processes
563 563
564 564 --- $TESTTMP/test-failure.t
565 565 +++ $TESTTMP/test-failure.t.err
566 566 @@ -1,5 +1,5 @@
567 567 $ echo babar
568 568 - rataxes
569 569 + babar
570 570 This is a noop statement so that
571 571 this test is still more bytes than success.
572 572 pad pad pad pad............................................................
573 573
574 574 ERROR: test-failure.t output changed
575 575 !
576 576 Failed test-failure.t: output changed
577 577 # Ran 1 tests, 0 skipped, 1 failed.
578 578 python hash seed: * (glob)
579 579 [1]
580 580
581 581 failure w/ keyword
582 582 $ rt -k rataxes
583 583 running 2 tests using 1 parallel processes
584 584
585 585 --- $TESTTMP/test-failure.t
586 586 +++ $TESTTMP/test-failure.t.err
587 587 @@ -1,5 +1,5 @@
588 588 $ echo babar
589 589 - rataxes
590 590 + babar
591 591 This is a noop statement so that
592 592 this test is still more bytes than success.
593 593 pad pad pad pad............................................................
594 594
595 595 ERROR: test-failure.t output changed
596 596 !
597 597 Failed test-failure.t: output changed
598 598 # Ran 2 tests, 1 skipped, 1 failed.
599 599 python hash seed: * (glob)
600 600 [1]
601 601
602 602 Verify that when a process fails to start we show a useful message
603 603 ==================================================================
604 604
605 605 $ cat > test-serve-fail.t <<EOF
606 606 > $ echo 'abort: child process failed to start blah'
607 607 > EOF
608 608 $ rt test-serve-fail.t
609 609 running 1 tests using 1 parallel processes
610 610
611 611 --- $TESTTMP/test-serve-fail.t
612 612 +++ $TESTTMP/test-serve-fail.t.err
613 613 @@ -1* +1,2 @@ (glob)
614 614 $ echo 'abort: child process failed to start blah'
615 615 + abort: child process failed to start blah
616 616
617 617 ERROR: test-serve-fail.t output changed
618 618 !
619 619 Failed test-serve-fail.t: server failed to start (HGPORT=*) (glob)
620 620 # Ran 1 tests, 0 skipped, 1 failed.
621 621 python hash seed: * (glob)
622 622 [1]
623 623 $ rm test-serve-fail.t
624 624
625 625 Verify that we can try other ports
626 626 ===================================
627 627
628 628 Extensions aren't inherited by the invoked run-tests.py. An extension
629 629 introducing a repository requirement could cause this to fail. So we force
630 630 HGRCPATH to get a clean environment.
631 631
632 632 $ HGRCPATH= hg init inuse
633 633 $ hg serve -R inuse -p $HGPORT -d --pid-file=blocks.pid
634 634 $ cat blocks.pid >> $DAEMON_PIDS
635 635 $ cat > test-serve-inuse.t <<EOF
636 636 > $ hg serve -R `pwd`/inuse -p \$HGPORT -d --pid-file=hg.pid
637 637 > $ cat hg.pid >> \$DAEMON_PIDS
638 638 > EOF
639 639 $ rt test-serve-inuse.t
640 640 running 1 tests using 1 parallel processes
641 641 .
642 642 # Ran 1 tests, 0 skipped, 0 failed.
643 643 $ rm test-serve-inuse.t
644 644 $ killdaemons.py $DAEMON_PIDS
645 645
646 646 Running In Debug Mode
647 647 ======================
648 648
649 649 $ rt --debug 2>&1 | grep -v pwd
650 650 running 2 tests using 1 parallel processes
651 651 + alias hg=hg.exe (windows !)
652 652 + echo *SALT* 0 0 (glob)
653 653 *SALT* 0 0 (glob)
654 654 + echo babar
655 655 babar
656 656 + echo *SALT* 10 0 (glob)
657 657 *SALT* 10 0 (glob)
658 658 .+ alias hg=hg.exe (windows !)
659 659 *+ echo *SALT* 0 0 (glob)
660 660 *SALT* 0 0 (glob)
661 661 + echo babar
662 662 babar
663 663 + echo *SALT* 2 0 (glob)
664 664 *SALT* 2 0 (glob)
665 665 + echo xyzzy
666 666 xyzzy
667 667 + echo *SALT* 9 0 (glob)
668 668 *SALT* 9 0 (glob)
669 669 + printf *abc\ndef\nxyz\n* (glob)
670 670 abc
671 671 def
672 672 xyz
673 673 + echo *SALT* 15 0 (glob)
674 674 *SALT* 15 0 (glob)
675 675 + printf *zyx\nwvu\ntsr\n* (glob)
676 676 zyx
677 677 wvu
678 678 tsr
679 679 + echo *SALT* 22 0 (glob)
680 680 *SALT* 22 0 (glob)
681 681 .
682 682 # Ran 2 tests, 0 skipped, 0 failed.
683 683
684 684 Parallel runs
685 685 ==============
686 686
687 687 (duplicate the failing test to get predictable output)
688 688 $ cp test-failure.t test-failure-copy.t
689 689
690 690 $ rt --jobs 2 test-failure*.t -n
691 691 running 2 tests using 2 parallel processes
692 692 !!
693 693 Failed test-failure*.t: output changed (glob)
694 694 Failed test-failure*.t: output changed (glob)
695 695 # Ran 2 tests, 0 skipped, 2 failed.
696 696 python hash seed: * (glob)
697 697 [1]
698 698
699 699 failures in parallel with --first should only print one failure
700 700 $ rt --jobs 2 --first test-failure*.t
701 701 running 2 tests using 2 parallel processes
702 702
703 703 --- $TESTTMP/test-failure*.t (glob)
704 704 +++ $TESTTMP/test-failure*.t.err (glob)
705 705 @@ -1,5 +1,5 @@
706 706 $ echo babar
707 707 - rataxes
708 708 + babar
709 709 This is a noop statement so that
710 710 this test is still more bytes than success.
711 711 pad pad pad pad............................................................
712 712
713 713 Failed test-failure*.t: output changed (glob)
714 714 Failed test-failure*.t: output changed (glob)
715 715 # Ran 2 tests, 0 skipped, 2 failed.
716 716 python hash seed: * (glob)
717 717 [1]
718 718
719 719
720 720 (delete the duplicated test file)
721 721 $ rm test-failure-copy.t
722 722
723 723 multiple runs per test should be parallelized
724 724
725 725 $ rt --jobs 2 --runs-per-test 2 test-success.t
726 726 running 2 tests using 2 parallel processes
727 727 ..
728 728 # Ran 2 tests, 0 skipped, 0 failed.
729 729
730 730 Interactive run
731 731 ===============
732 732
733 733 (backup the failing test)
734 734 $ cp test-failure.t backup
735 735
736 736 Refuse the fix
737 737
738 738 $ echo 'n' | rt -i
739 739 running 2 tests using 1 parallel processes
740 740
741 741 --- $TESTTMP/test-failure.t
742 742 +++ $TESTTMP/test-failure.t.err
743 743 @@ -1,5 +1,5 @@
744 744 $ echo babar
745 745 - rataxes
746 746 + babar
747 747 This is a noop statement so that
748 748 this test is still more bytes than success.
749 749 pad pad pad pad............................................................
750 750 Accept this change? [y/N]
751 751 ERROR: test-failure.t output changed
752 752 !.
753 753 Failed test-failure.t: output changed
754 754 # Ran 2 tests, 0 skipped, 1 failed.
755 755 python hash seed: * (glob)
756 756 [1]
757 757
758 758 $ cat test-failure.t
759 759 $ echo babar
760 760 rataxes
761 761 This is a noop statement so that
762 762 this test is still more bytes than success.
763 763 pad pad pad pad............................................................
764 764 pad pad pad pad............................................................
765 765 pad pad pad pad............................................................
766 766 pad pad pad pad............................................................
767 767 pad pad pad pad............................................................
768 768 pad pad pad pad............................................................
769 769
770 770 Interactive with custom view
771 771
772 772 $ echo 'n' | rt -i --view echo
773 773 running 2 tests using 1 parallel processes
774 774 $TESTTMP/test-failure.t $TESTTMP/test-failure.t.err
775 775 Accept this change? [y/N]* (glob)
776 776 ERROR: test-failure.t output changed
777 777 !.
778 778 Failed test-failure.t: output changed
779 779 # Ran 2 tests, 0 skipped, 1 failed.
780 780 python hash seed: * (glob)
781 781 [1]
782 782
783 783 View the fix
784 784
785 785 $ echo 'y' | rt --view echo
786 786 running 2 tests using 1 parallel processes
787 787 $TESTTMP/test-failure.t $TESTTMP/test-failure.t.err
788 788
789 789 ERROR: test-failure.t output changed
790 790 !.
791 791 Failed test-failure.t: output changed
792 792 # Ran 2 tests, 0 skipped, 1 failed.
793 793 python hash seed: * (glob)
794 794 [1]
795 795
796 796 Accept the fix
797 797
798 798 $ cat >> test-failure.t <<EOF
799 799 > $ echo 'saved backup bundle to \$TESTTMP/foo.hg'
800 800 > saved backup bundle to \$TESTTMP/foo.hg
801 801 > $ echo 'saved backup bundle to \$TESTTMP/foo.hg'
802 802 > saved backup bundle to $TESTTMP\\foo.hg
803 803 > $ echo 'saved backup bundle to \$TESTTMP/foo.hg'
804 804 > saved backup bundle to \$TESTTMP/*.hg (glob)
805 805 > EOF
806 806 $ echo 'y' | rt -i 2>&1
807 807 running 2 tests using 1 parallel processes
808 808
809 809 --- $TESTTMP/test-failure.t
810 810 +++ $TESTTMP/test-failure.t.err
811 811 @@ -1,5 +1,5 @@
812 812 $ echo babar
813 813 - rataxes
814 814 + babar
815 815 This is a noop statement so that
816 816 this test is still more bytes than success.
817 817 pad pad pad pad............................................................
818 818 @@ -11,6 +11,6 @@
819 819 $ echo 'saved backup bundle to $TESTTMP/foo.hg'
820 820 saved backup bundle to $TESTTMP/foo.hg
821 821 $ echo 'saved backup bundle to $TESTTMP/foo.hg'
822 822 - saved backup bundle to $TESTTMP\foo.hg
823 823 + saved backup bundle to $TESTTMP/foo.hg
824 824 $ echo 'saved backup bundle to $TESTTMP/foo.hg'
825 825 saved backup bundle to $TESTTMP/*.hg (glob)
826 826 Accept this change? [y/N] ..
827 827 # Ran 2 tests, 0 skipped, 0 failed.
828 828
829 829 $ sed -e 's,(glob)$,&<,g' test-failure.t
830 830 $ echo babar
831 831 babar
832 832 This is a noop statement so that
833 833 this test is still more bytes than success.
834 834 pad pad pad pad............................................................
835 835 pad pad pad pad............................................................
836 836 pad pad pad pad............................................................
837 837 pad pad pad pad............................................................
838 838 pad pad pad pad............................................................
839 839 pad pad pad pad............................................................
840 840 $ echo 'saved backup bundle to $TESTTMP/foo.hg'
841 841 saved backup bundle to $TESTTMP/foo.hg
842 842 $ echo 'saved backup bundle to $TESTTMP/foo.hg'
843 843 saved backup bundle to $TESTTMP/foo.hg
844 844 $ echo 'saved backup bundle to $TESTTMP/foo.hg'
845 845 saved backup bundle to $TESTTMP/*.hg (glob)<
846 846
847 847 $ rm test-failure.t
848 848
849 849 Race condition - test file was modified when test is running
850 850
851 851 $ TESTRACEDIR=`pwd`
852 852 $ export TESTRACEDIR
853 853 $ cat > test-race.t <<EOF
854 854 > $ echo 1
855 855 > $ echo "# a new line" >> $TESTRACEDIR/test-race.t
856 856 > EOF
857 857
858 858 $ rt -i test-race.t
859 859 running 1 tests using 1 parallel processes
860 860
861 861 --- $TESTTMP/test-race.t
862 862 +++ $TESTTMP/test-race.t.err
863 863 @@ -1,2 +1,3 @@
864 864 $ echo 1
865 865 + 1
866 866 $ echo "# a new line" >> $TESTTMP/test-race.t
867 867 Reference output has changed (run again to prompt changes)
868 868 ERROR: test-race.t output changed
869 869 !
870 870 Failed test-race.t: output changed
871 871 # Ran 1 tests, 0 skipped, 1 failed.
872 872 python hash seed: * (glob)
873 873 [1]
874 874
875 875 $ rm test-race.t
876 876
877 877 When "#testcases" is used in .t files
878 878
879 879 $ cat >> test-cases.t <<EOF
880 880 > #testcases a b
881 881 > #if a
882 882 > $ echo 1
883 883 > #endif
884 884 > #if b
885 885 > $ echo 2
886 886 > #endif
887 887 > EOF
888 888
889 889 $ cat <<EOF | rt -i test-cases.t 2>&1
890 890 > y
891 891 > y
892 892 > EOF
893 893 running 2 tests using 1 parallel processes
894 894
895 895 --- $TESTTMP/test-cases.t
896 896 +++ $TESTTMP/test-cases.t#a.err
897 897 @@ -1,6 +1,7 @@
898 898 #testcases a b
899 899 #if a
900 900 $ echo 1
901 901 + 1
902 902 #endif
903 903 #if b
904 904 $ echo 2
905 905 Accept this change? [y/N] .
906 906 --- $TESTTMP/test-cases.t
907 907 +++ $TESTTMP/test-cases.t#b.err
908 908 @@ -5,4 +5,5 @@
909 909 #endif
910 910 #if b
911 911 $ echo 2
912 912 + 2
913 913 #endif
914 914 Accept this change? [y/N] .
915 915 # Ran 2 tests, 0 skipped, 0 failed.
916 916
917 917 $ cat test-cases.t
918 918 #testcases a b
919 919 #if a
920 920 $ echo 1
921 921 1
922 922 #endif
923 923 #if b
924 924 $ echo 2
925 925 2
926 926 #endif
927 927
928 928 $ cat >> test-cases.t <<'EOF'
929 929 > #if a
930 930 > $ NAME=A
931 931 > #else
932 932 > $ NAME=B
933 933 > #endif
934 934 > $ echo $NAME
935 935 > A (a !)
936 936 > B (b !)
937 937 > EOF
938 938 $ rt test-cases.t
939 939 running 2 tests using 1 parallel processes
940 940 ..
941 941 # Ran 2 tests, 0 skipped, 0 failed.
942 942
943 943 When using multiple dimensions of "#testcases" in .t files
944 944
945 945 $ cat > test-cases.t <<'EOF'
946 946 > #testcases a b
947 947 > #testcases c d
948 948 > #if a d
949 949 > $ echo $TESTCASE
950 950 > a#d
951 951 > #endif
952 952 > #if b c
953 953 > $ echo yes
954 954 > no
955 955 > #endif
956 956 > EOF
957 957 $ rt test-cases.t
958 958 running 4 tests using 1 parallel processes
959 959 ..
960 960 --- $TESTTMP/test-cases.t
961 961 +++ $TESTTMP/test-cases.t#b#c.err
962 962 @@ -6,5 +6,5 @@
963 963 #endif
964 964 #if b c
965 965 $ echo yes
966 966 - no
967 967 + yes
968 968 #endif
969 969
970 970 ERROR: test-cases.t#b#c output changed
971 971 !.
972 972 Failed test-cases.t#b#c: output changed
973 973 # Ran 4 tests, 0 skipped, 1 failed.
974 974 python hash seed: * (glob)
975 975 [1]
976 976
977 977 $ rt --retest
978 978 running 1 tests using 1 parallel processes
979 979
980 980 --- $TESTTMP/test-cases.t
981 981 +++ $TESTTMP/test-cases.t#b#c.err
982 982 @@ -6,5 +6,5 @@
983 983 #endif
984 984 #if b c
985 985 $ echo yes
986 986 - no
987 987 + yes
988 988 #endif
989 989
990 990 ERROR: test-cases.t#b#c output changed
991 991 !
992 992 Failed test-cases.t#b#c: output changed
993 993 # Ran 1 tests, 0 skipped, 1 failed.
994 994 python hash seed: * (glob)
995 995 [1]
996 996 $ rm test-cases.t#b#c.err
997 997 $ rm test-cases.t
998 998
999 999 (reinstall)
1000 1000 $ mv backup test-failure.t
1001 1001
1002 1002 No Diff
1003 1003 ===============
1004 1004
1005 1005 $ rt --nodiff
1006 1006 running 2 tests using 1 parallel processes
1007 1007 !.
1008 1008 Failed test-failure.t: output changed
1009 1009 # Ran 2 tests, 0 skipped, 1 failed.
1010 1010 python hash seed: * (glob)
1011 1011 [1]
1012 1012
1013 1013 test --tmpdir support
1014 1014 $ rt --tmpdir=$TESTTMP/keep test-success.t
1015 1015 running 1 tests using 1 parallel processes
1016 1016
1017 1017 Keeping testtmp dir: $TESTTMP/keep/child1/test-success.t
1018 1018 Keeping threadtmp dir: $TESTTMP/keep/child1
1019 1019 .
1020 1020 # Ran 1 tests, 0 skipped, 0 failed.
1021 1021
1022 1022 timeouts
1023 1023 ========
1024 1024 $ cat > test-timeout.t <<EOF
1025 1025 > $ sleep 2
1026 1026 > $ echo pass
1027 1027 > pass
1028 1028 > EOF
1029 1029 > echo '#require slow' > test-slow-timeout.t
1030 1030 > cat test-timeout.t >> test-slow-timeout.t
1031 1031 $ rt --timeout=1 --slowtimeout=3 test-timeout.t test-slow-timeout.t
1032 1032 running 2 tests using 1 parallel processes
1033 1033 st
1034 1034 Skipped test-slow-timeout.t: missing feature: allow slow tests (use --allow-slow-tests)
1035 1035 Failed test-timeout.t: timed out
1036 1036 # Ran 1 tests, 1 skipped, 1 failed.
1037 1037 python hash seed: * (glob)
1038 1038 [1]
1039 1039 $ rt --timeout=1 --slowtimeout=3 \
1040 1040 > test-timeout.t test-slow-timeout.t --allow-slow-tests
1041 1041 running 2 tests using 1 parallel processes
1042 1042 .t
1043 1043 Failed test-timeout.t: timed out
1044 1044 # Ran 2 tests, 0 skipped, 1 failed.
1045 1045 python hash seed: * (glob)
1046 1046 [1]
1047 1047 $ rm test-timeout.t test-slow-timeout.t
1048 1048
1049 1049 test for --time
1050 1050 ==================
1051 1051
1052 1052 $ rt test-success.t --time
1053 1053 running 1 tests using 1 parallel processes
1054 1054 .
1055 1055 # Ran 1 tests, 0 skipped, 0 failed.
1056 1056 # Producing time report
1057 1057 start end cuser csys real Test
1058 1058 \s*[\d\.]{5,8} \s*[\d\.]{5,8} \s*[\d\.]{5,8} \s*[\d\.]{5,8} \s*[\d\.]{5,8} test-success.t (re)
1059 1059
1060 1060 test for --time with --job enabled
1061 1061 ====================================
1062 1062
1063 1063 $ rt test-success.t --time --jobs 2
1064 1064 running 1 tests using 1 parallel processes
1065 1065 .
1066 1066 # Ran 1 tests, 0 skipped, 0 failed.
1067 1067 # Producing time report
1068 1068 start end cuser csys real Test
1069 1069 \s*[\d\.]{5,8} \s*[\d\.]{5,8} \s*[\d\.]{5,8} \s*[\d\.]{5,8} \s*[\d\.]{5,8} test-success.t (re)
1070 1070
1071 1071 Skips
1072 1072 ================
1073 1073 $ cat > test-skip.t <<EOF
1074 1074 > $ echo xyzzy
1075 1075 > #if true
1076 1076 > #require false
1077 1077 > #end
1078 1078 > EOF
1079 1079 $ cat > test-noskip.t <<EOF
1080 1080 > #if false
1081 1081 > #require false
1082 1082 > #endif
1083 1083 > EOF
1084 1084 $ rt --nodiff
1085 1085 running 4 tests using 1 parallel processes
1086 1086 !.s.
1087 1087 Skipped test-skip.t: missing feature: nail clipper
1088 1088 Failed test-failure.t: output changed
1089 1089 # Ran 3 tests, 1 skipped, 1 failed.
1090 1090 python hash seed: * (glob)
1091 1091 [1]
1092 1092
1093 1093 $ rm test-noskip.t
1094 1094 $ rt --keyword xyzzy
1095 1095 running 3 tests using 1 parallel processes
1096 1096 .s
1097 1097 Skipped test-skip.t: missing feature: nail clipper
1098 1098 # Ran 2 tests, 2 skipped, 0 failed.
1099 1099
1100 1100 Skips with xml
1101 1101 $ rt --keyword xyzzy \
1102 1102 > --xunit=xunit.xml
1103 1103 running 3 tests using 1 parallel processes
1104 1104 .s
1105 1105 Skipped test-skip.t: missing feature: nail clipper
1106 1106 # Ran 2 tests, 2 skipped, 0 failed.
1107 1107 $ cat xunit.xml
1108 1108 <?xml version="1.0" encoding="utf-8"?>
1109 1109 <testsuite errors="0" failures="0" name="run-tests" skipped="2" tests="2">
1110 1110 <testcase name="test-success.t" time="*"/> (glob)
1111 1111 <testcase name="test-skip.t">
1112 1112 <skipped><![CDATA[missing feature: nail clipper]]></skipped> (py38 !)
1113 1113 <skipped> (no-py38 !)
1114 1114 <![CDATA[missing feature: nail clipper]]> </skipped> (no-py38 !)
1115 1115 </testcase>
1116 1116 </testsuite>
1117 1117
1118 1118 Missing skips or blacklisted skips don't count as executed:
1119 1119 $ mkdir tests
1120 1120 $ echo tests/test-failure.t > blacklist
1121 1121 $ cp test-failure.t tests
1122 1122 $ rt --blacklist=blacklist --json\
1123 1123 > tests/test-failure.t tests/test-bogus.t
1124 1124 running 2 tests using 1 parallel processes
1125 1125 ss
1126 1126 Skipped test-bogus.t: Doesn't exist
1127 1127 Skipped test-failure.t: blacklisted
1128 1128 # Ran 0 tests, 2 skipped, 0 failed.
1129 1129 $ cat tests/report.json
1130 1130 testreport ={
1131 1131 "test-bogus.t": {
1132 1132 "result": "skip"
1133 1133 },
1134 1134 "test-failure.t": {
1135 1135 "result": "skip"
1136 1136 }
1137 1137 } (no-eol)
1138 1138 $ rm -r tests
1139 1139 $ echo test-failure.t > blacklist
1140 1140
1141 1141 Whitelist trumps blacklist
1142 1142 $ echo test-failure.t > whitelist
1143 1143 $ rt --blacklist=blacklist --whitelist=whitelist --json\
1144 1144 > test-failure.t test-bogus.t
1145 1145 running 2 tests using 1 parallel processes
1146 1146 s
1147 1147 --- $TESTTMP/test-failure.t
1148 1148 +++ $TESTTMP/test-failure.t.err
1149 1149 @@ -1,5 +1,5 @@
1150 1150 $ echo babar
1151 1151 - rataxes
1152 1152 + babar
1153 1153 This is a noop statement so that
1154 1154 this test is still more bytes than success.
1155 1155 pad pad pad pad............................................................
1156 1156
1157 1157 ERROR: test-failure.t output changed
1158 1158 !
1159 1159 Skipped test-bogus.t: Doesn't exist
1160 1160 Failed test-failure.t: output changed
1161 1161 # Ran 1 tests, 1 skipped, 1 failed.
1162 1162 python hash seed: * (glob)
1163 1163 [1]
1164 1164
1165 1165 Ensure that --test-list causes only the tests listed in that file to
1166 1166 be executed.
1167 1167 $ echo test-success.t >> onlytest
1168 1168 $ rt --test-list=onlytest
1169 1169 running 1 tests using 1 parallel processes
1170 1170 .
1171 1171 # Ran 1 tests, 0 skipped, 0 failed.
1172 1172 $ echo test-bogus.t >> anothertest
1173 1173 $ rt --test-list=onlytest --test-list=anothertest
1174 1174 running 2 tests using 1 parallel processes
1175 1175 s.
1176 1176 Skipped test-bogus.t: Doesn't exist
1177 1177 # Ran 1 tests, 1 skipped, 0 failed.
1178 1178 $ rm onlytest anothertest
1179 1179
1180 1180 test for --json
1181 1181 ==================
1182 1182
1183 1183 $ rt --json
1184 1184 running 3 tests using 1 parallel processes
1185 1185
1186 1186 --- $TESTTMP/test-failure.t
1187 1187 +++ $TESTTMP/test-failure.t.err
1188 1188 @@ -1,5 +1,5 @@
1189 1189 $ echo babar
1190 1190 - rataxes
1191 1191 + babar
1192 1192 This is a noop statement so that
1193 1193 this test is still more bytes than success.
1194 1194 pad pad pad pad............................................................
1195 1195
1196 1196 ERROR: test-failure.t output changed
1197 1197 !.s
1198 1198 Skipped test-skip.t: missing feature: nail clipper
1199 1199 Failed test-failure.t: output changed
1200 1200 # Ran 2 tests, 1 skipped, 1 failed.
1201 1201 python hash seed: * (glob)
1202 1202 [1]
1203 1203
1204 1204 $ cat report.json
1205 1205 testreport ={
1206 1206 "test-failure.t": [\{] (re)
1207 1207 "csys": "\s*\d+\.\d{3,4}", ? (re)
1208 1208 "cuser": "\s*\d+\.\d{3,4}", ? (re)
1209 1209 "diff": "---.+\+\+\+.+", ? (re)
1210 1210 "end": "\s*\d+\.\d{3,4}", ? (re)
1211 1211 "result": "failure", ? (re)
1212 1212 "start": "\s*\d+\.\d{3,4}", ? (re)
1213 1213 "time": "\s*\d+\.\d{3,4}" (re)
1214 1214 }, ? (re)
1215 1215 "test-skip.t": {
1216 1216 "csys": "\s*\d+\.\d{3,4}", ? (re)
1217 1217 "cuser": "\s*\d+\.\d{3,4}", ? (re)
1218 1218 "diff": "", ? (re)
1219 1219 "end": "\s*\d+\.\d{3,4}", ? (re)
1220 1220 "result": "skip", ? (re)
1221 1221 "start": "\s*\d+\.\d{3,4}", ? (re)
1222 1222 "time": "\s*\d+\.\d{3,4}" (re)
1223 1223 }, ? (re)
1224 1224 "test-success.t": [\{] (re)
1225 1225 "csys": "\s*\d+\.\d{3,4}", ? (re)
1226 1226 "cuser": "\s*\d+\.\d{3,4}", ? (re)
1227 1227 "diff": "", ? (re)
1228 1228 "end": "\s*\d+\.\d{3,4}", ? (re)
1229 1229 "result": "success", ? (re)
1230 1230 "start": "\s*\d+\.\d{3,4}", ? (re)
1231 1231 "time": "\s*\d+\.\d{3,4}" (re)
1232 1232 }
1233 1233 } (no-eol)
1234 1234 --json with --outputdir
1235 1235
1236 1236 $ rm report.json
1237 1237 $ rm -r output
1238 1238 $ mkdir output
1239 1239 $ rt --json --outputdir output
1240 1240 running 3 tests using 1 parallel processes
1241 1241
1242 1242 --- $TESTTMP/test-failure.t
1243 1243 +++ $TESTTMP/output/test-failure.t.err
1244 1244 @@ -1,5 +1,5 @@
1245 1245 $ echo babar
1246 1246 - rataxes
1247 1247 + babar
1248 1248 This is a noop statement so that
1249 1249 this test is still more bytes than success.
1250 1250 pad pad pad pad............................................................
1251 1251
1252 1252 ERROR: test-failure.t output changed
1253 1253 !.s
1254 1254 Skipped test-skip.t: missing feature: nail clipper
1255 1255 Failed test-failure.t: output changed
1256 1256 # Ran 2 tests, 1 skipped, 1 failed.
1257 1257 python hash seed: * (glob)
1258 1258 [1]
1259 1259 $ f report.json
1260 1260 report.json: file not found
1261 1261 $ cat output/report.json
1262 1262 testreport ={
1263 1263 "test-failure.t": [\{] (re)
1264 1264 "csys": "\s*\d+\.\d{3,4}", ? (re)
1265 1265 "cuser": "\s*\d+\.\d{3,4}", ? (re)
1266 1266 "diff": "---.+\+\+\+.+", ? (re)
1267 1267 "end": "\s*\d+\.\d{3,4}", ? (re)
1268 1268 "result": "failure", ? (re)
1269 1269 "start": "\s*\d+\.\d{3,4}", ? (re)
1270 1270 "time": "\s*\d+\.\d{3,4}" (re)
1271 1271 }, ? (re)
1272 1272 "test-skip.t": {
1273 1273 "csys": "\s*\d+\.\d{3,4}", ? (re)
1274 1274 "cuser": "\s*\d+\.\d{3,4}", ? (re)
1275 1275 "diff": "", ? (re)
1276 1276 "end": "\s*\d+\.\d{3,4}", ? (re)
1277 1277 "result": "skip", ? (re)
1278 1278 "start": "\s*\d+\.\d{3,4}", ? (re)
1279 1279 "time": "\s*\d+\.\d{3,4}" (re)
1280 1280 }, ? (re)
1281 1281 "test-success.t": [\{] (re)
1282 1282 "csys": "\s*\d+\.\d{3,4}", ? (re)
1283 1283 "cuser": "\s*\d+\.\d{3,4}", ? (re)
1284 1284 "diff": "", ? (re)
1285 1285 "end": "\s*\d+\.\d{3,4}", ? (re)
1286 1286 "result": "success", ? (re)
1287 1287 "start": "\s*\d+\.\d{3,4}", ? (re)
1288 1288 "time": "\s*\d+\.\d{3,4}" (re)
1289 1289 }
1290 1290 } (no-eol)
1291 1291 $ ls -a output
1292 1292 .
1293 1293 ..
1294 1294 .testtimes
1295 1295 report.json
1296 1296 test-failure.t.err
1297 1297
1298 1298 Test that failed test accepted through interactive are properly reported:
1299 1299
1300 1300 $ cp test-failure.t backup
1301 1301 $ echo y | rt --json -i
1302 1302 running 3 tests using 1 parallel processes
1303 1303
1304 1304 --- $TESTTMP/test-failure.t
1305 1305 +++ $TESTTMP/test-failure.t.err
1306 1306 @@ -1,5 +1,5 @@
1307 1307 $ echo babar
1308 1308 - rataxes
1309 1309 + babar
1310 1310 This is a noop statement so that
1311 1311 this test is still more bytes than success.
1312 1312 pad pad pad pad............................................................
1313 1313 Accept this change? [y/N] ..s
1314 1314 Skipped test-skip.t: missing feature: nail clipper
1315 1315 # Ran 2 tests, 1 skipped, 0 failed.
1316 1316
1317 1317 $ cat report.json
1318 1318 testreport ={
1319 1319 "test-failure.t": [\{] (re)
1320 1320 "csys": "\s*\d+\.\d{3,4}", ? (re)
1321 1321 "cuser": "\s*\d+\.\d{3,4}", ? (re)
1322 1322 "diff": "", ? (re)
1323 1323 "end": "\s*\d+\.\d{3,4}", ? (re)
1324 1324 "result": "success", ? (re)
1325 1325 "start": "\s*\d+\.\d{3,4}", ? (re)
1326 1326 "time": "\s*\d+\.\d{3,4}" (re)
1327 1327 }, ? (re)
1328 1328 "test-skip.t": {
1329 1329 "csys": "\s*\d+\.\d{3,4}", ? (re)
1330 1330 "cuser": "\s*\d+\.\d{3,4}", ? (re)
1331 1331 "diff": "", ? (re)
1332 1332 "end": "\s*\d+\.\d{3,4}", ? (re)
1333 1333 "result": "skip", ? (re)
1334 1334 "start": "\s*\d+\.\d{3,4}", ? (re)
1335 1335 "time": "\s*\d+\.\d{3,4}" (re)
1336 1336 }, ? (re)
1337 1337 "test-success.t": [\{] (re)
1338 1338 "csys": "\s*\d+\.\d{3,4}", ? (re)
1339 1339 "cuser": "\s*\d+\.\d{3,4}", ? (re)
1340 1340 "diff": "", ? (re)
1341 1341 "end": "\s*\d+\.\d{3,4}", ? (re)
1342 1342 "result": "success", ? (re)
1343 1343 "start": "\s*\d+\.\d{3,4}", ? (re)
1344 1344 "time": "\s*\d+\.\d{3,4}" (re)
1345 1345 }
1346 1346 } (no-eol)
1347 1347 $ mv backup test-failure.t
1348 1348
1349 1349 backslash on end of line with glob matching is handled properly
1350 1350
1351 1351 $ cat > test-glob-backslash.t << EOF
1352 1352 > $ echo 'foo bar \\'
1353 1353 > foo * \ (glob)
1354 1354 > EOF
1355 1355
1356 1356 $ rt test-glob-backslash.t
1357 1357 running 1 tests using 1 parallel processes
1358 1358 .
1359 1359 # Ran 1 tests, 0 skipped, 0 failed.
1360 1360
1361 1361 $ rm -f test-glob-backslash.t
1362 1362
1363 1363 Test globbing of local IP addresses
1364 1364 $ echo 172.16.18.1
1365 1365 $LOCALIP (glob)
1366 1366 $ echo dead:beef::1
1367 1367 $LOCALIP (glob)
1368 1368
1369 1369 Add support for external test formatter
1370 1370 =======================================
1371 1371
1372 1372 $ CUSTOM_TEST_RESULT=basic_test_result "$PYTHON" $TESTDIR/run-tests.py --with-hg=`which hg` -j1 "$@" test-success.t test-failure.t
1373 1373 running 2 tests using 1 parallel processes
1374 1374
1375 1375 # Ran 2 tests, 0 skipped, 0 failed.
1376 1376 ON_START! <__main__.TestSuite tests=[<__main__.TTest testMethod=test-failure.t>, <__main__.TTest testMethod=test-success.t>]>
1377 1377 FAILURE! test-failure.t output changed
1378 1378 SUCCESS! test-success.t
1379 1379 ON_END!
1380 1380
1381 1381 Test reusability for third party tools
1382 1382 ======================================
1383 1383
1384 $ mkdir "$TESTTMP"/anothertests
1385 $ cd "$TESTTMP"/anothertests
1384 $ THISTESTDIR="$TESTDIR"
1385 $ export THISTESTDIR
1386 $ THISTESTTMP="$TESTTMP"
1387 $ export THISTESTTMP
1388
1389 #if windows
1390
1391 $ NEWTESTDIR="$THISTESTTMP"\\anothertests
1392
1393 #else
1394
1395 $ NEWTESTDIR="$THISTESTTMP"/anothertests
1396
1397 #endif
1398
1399 $ export NEWTESTDIR
1400
1401 $ echo creating some new test in: $NEWTESTDIR
1402 creating some new test in: $TESTTMP\anothertests (windows !)
1403 creating some new test in: $TESTTMP/anothertests (no-windows !)
1404 $ mkdir "$NEWTESTDIR"
1405 $ cd "$NEWTESTDIR"
1386 1406
1387 1407 test that `run-tests.py` can execute hghave, even if it runs not in
1388 1408 Mercurial source tree.
1389 1409
1390 1410 $ cat > test-hghave.t <<EOF
1391 1411 > #require true
1392 1412 > $ echo foo
1393 1413 > foo
1394 1414 > EOF
1395 1415 $ rt test-hghave.t
1396 1416 running 1 tests using 1 parallel processes
1397 1417 .
1398 1418 # Ran 1 tests, 0 skipped, 0 failed.
1399 1419
1400 1420 test that RUNTESTDIR refers the directory, in which `run-tests.py` now
1401 1421 running is placed.
1402 1422
1423
1403 1424 $ cat > test-runtestdir.t <<EOF
1404 > - $TESTDIR, in which test-run-tests.t is placed
1405 > - \$TESTDIR, in which test-runtestdir.t is placed (expanded at runtime)
1406 > - \$RUNTESTDIR, in which run-tests.py is placed (expanded at runtime)
1425 > # \$THISTESTDIR, in which test-run-tests.t (this test file) is placed
1426 > # \$THISTESTTMP, in which test-run-tests.t (this test file) is placed
1427 > # \$TESTDIR, in which test-runtestdir.t is placed (expanded at runtime)
1428 > # \$RUNTESTDIR, in which run-tests.py is placed (expanded at runtime)
1407 1429 >
1408 > #if windows
1409 > $ test "\$TESTDIR" = "$TESTTMP\\anothertests"
1410 > #else
1411 > $ test "\$TESTDIR" = "$TESTTMP"/anothertests
1412 > #endif
1430 > $ test "\$TESTDIR" = "\$NEWTESTDIR"
1413 1431 > If this prints a path, that means RUNTESTDIR didn't equal
1414 > TESTDIR as it should have.
1415 > $ test "\$RUNTESTDIR" = "$TESTDIR" || echo "\$RUNTESTDIR"
1432 > THISTESTDIR as it should have.
1433 > $ test "\$RUNTESTDIR" = "\$THISTESTDIR" || echo "\$RUNTESTDIR"
1416 1434 > This should print the start of check-code. If this passes but the
1417 1435 > previous check failed, that means we found a copy of check-code at whatever
1418 > RUNTESTSDIR ended up containing, even though it doesn't match TESTDIR.
1436 > RUNTESTSDIR ended up containing, even though it doesn't match THISTESTDIR.
1419 1437 > $ head -n 3 "\$RUNTESTDIR"/../contrib/check-code.py | sed 's@.!.*python3@#!USRBINENVPY@'
1420 1438 > #!USRBINENVPY
1421 1439 > #
1422 1440 > # check-code - a style and portability checker for Mercurial
1423 1441 > EOF
1424 1442 $ rt test-runtestdir.t
1425 1443 running 1 tests using 1 parallel processes
1426 1444 .
1427 1445 # Ran 1 tests, 0 skipped, 0 failed.
1428 1446
1429 1447 #if execbit
1430 1448
1431 1449 test that TESTDIR is referred in PATH
1432 1450
1433 1451 $ cat > custom-command.sh <<EOF
1434 1452 > #!/bin/sh
1435 1453 > echo "hello world"
1436 1454 > EOF
1437 1455 $ chmod +x custom-command.sh
1438 1456 $ cat > test-testdir-path.t <<EOF
1439 1457 > $ custom-command.sh
1440 1458 > hello world
1441 1459 > EOF
1442 1460 $ rt test-testdir-path.t
1443 1461 running 1 tests using 1 parallel processes
1444 1462 .
1445 1463 # Ran 1 tests, 0 skipped, 0 failed.
1446 1464
1447 1465 #endif
1448 1466
1449 1467 test support for --allow-slow-tests
1450 1468 $ cat > test-very-slow-test.t <<EOF
1451 1469 > #require slow
1452 1470 > $ echo pass
1453 1471 > pass
1454 1472 > EOF
1455 1473 $ rt test-very-slow-test.t
1456 1474 running 1 tests using 1 parallel processes
1457 1475 s
1458 1476 Skipped test-very-slow-test.t: missing feature: allow slow tests (use --allow-slow-tests)
1459 1477 # Ran 0 tests, 1 skipped, 0 failed.
1460 1478 $ rt $HGTEST_RUN_TESTS_PURE --allow-slow-tests test-very-slow-test.t
1461 1479 running 1 tests using 1 parallel processes
1462 1480 .
1463 1481 # Ran 1 tests, 0 skipped, 0 failed.
1464 1482
1465 1483 support for running a test outside the current directory
1466 1484 $ mkdir nonlocal
1467 1485 $ cat > nonlocal/test-is-not-here.t << EOF
1468 1486 > $ echo pass
1469 1487 > pass
1470 1488 > EOF
1471 1489 $ rt nonlocal/test-is-not-here.t
1472 1490 running 1 tests using 1 parallel processes
1473 1491 .
1474 1492 # Ran 1 tests, 0 skipped, 0 failed.
1475 1493
1476 1494 support for automatically discovering test if arg is a folder
1477 1495 $ mkdir tmp && cd tmp
1478 1496
1479 1497 $ cat > test-uno.t << EOF
1480 1498 > $ echo line
1481 1499 > line
1482 1500 > EOF
1483 1501
1484 1502 $ cp test-uno.t test-dos.t
1485 1503 $ cd ..
1486 1504 $ cp -R tmp tmpp
1487 1505 $ cp tmp/test-uno.t test-solo.t
1488 1506
1489 1507 $ rt tmp/ test-solo.t tmpp
1490 1508 running 5 tests using 1 parallel processes
1491 1509 .....
1492 1510 # Ran 5 tests, 0 skipped, 0 failed.
1493 1511 $ rm -rf tmp tmpp
1494 1512
1495 1513 support for running run-tests.py from another directory
1496 1514 $ mkdir tmp && cd tmp
1497 1515
1498 1516 $ cat > useful-file.sh << EOF
1499 1517 > important command
1500 1518 > EOF
1501 1519
1502 1520 $ cat > test-folder.t << EOF
1503 1521 > $ cat \$TESTDIR/useful-file.sh
1504 1522 > important command
1505 1523 > EOF
1506 1524
1507 1525 $ cat > test-folder-fail.t << EOF
1508 1526 > $ cat \$TESTDIR/useful-file.sh
1509 1527 > important commando
1510 1528 > EOF
1511 1529
1512 1530 $ cd ..
1513 1531 $ rt tmp/test-*.t
1514 1532 running 2 tests using 1 parallel processes
1515 1533
1516 1534 --- $TESTTMP/anothertests/tmp/test-folder-fail.t
1517 1535 +++ $TESTTMP/anothertests/tmp/test-folder-fail.t.err
1518 1536 @@ -1,2 +1,2 @@
1519 1537 $ cat $TESTDIR/useful-file.sh
1520 1538 - important commando
1521 1539 + important command
1522 1540
1523 1541 ERROR: test-folder-fail.t output changed
1524 1542 !.
1525 1543 Failed test-folder-fail.t: output changed
1526 1544 # Ran 2 tests, 0 skipped, 1 failed.
1527 1545 python hash seed: * (glob)
1528 1546 [1]
1529 1547
1530 1548 support for bisecting failed tests automatically
1531 1549 $ hg init bisect
1532 1550 $ cd bisect
1533 1551 $ cat >> test-bisect.t <<EOF
1534 1552 > $ echo pass
1535 1553 > pass
1536 1554 > EOF
1537 1555 $ hg add test-bisect.t
1538 1556 $ hg ci -m 'good'
1539 1557 $ cat >> test-bisect.t <<EOF
1540 1558 > $ echo pass
1541 1559 > fail
1542 1560 > EOF
1543 1561 $ hg ci -m 'bad'
1544 1562 $ rt --known-good-rev=0 test-bisect.t
1545 1563 running 1 tests using 1 parallel processes
1546 1564
1547 1565 --- $TESTTMP/anothertests/bisect/test-bisect.t
1548 1566 +++ $TESTTMP/anothertests/bisect/test-bisect.t.err
1549 1567 @@ -1,4 +1,4 @@
1550 1568 $ echo pass
1551 1569 pass
1552 1570 $ echo pass
1553 1571 - fail
1554 1572 + pass
1555 1573
1556 1574 ERROR: test-bisect.t output changed
1557 1575 !
1558 1576 Failed test-bisect.t: output changed
1559 1577 test-bisect.t broken by 72cbf122d116 (bad)
1560 1578 # Ran 1 tests, 0 skipped, 1 failed.
1561 1579 python hash seed: * (glob)
1562 1580 [1]
1563 1581
1564 1582 $ cd ..
1565 1583
1566 1584 support bisecting a separate repo
1567 1585
1568 1586 $ hg init bisect-dependent
1569 1587 $ cd bisect-dependent
1570 1588 $ cat > test-bisect-dependent.t <<EOF
1571 1589 > $ tail -1 \$TESTDIR/../bisect/test-bisect.t
1572 1590 > pass
1573 1591 > EOF
1574 1592 $ hg commit -Am dependent test-bisect-dependent.t
1575 1593
1576 1594 $ rt --known-good-rev=0 test-bisect-dependent.t
1577 1595 running 1 tests using 1 parallel processes
1578 1596
1579 1597 --- $TESTTMP/anothertests/bisect-dependent/test-bisect-dependent.t
1580 1598 +++ $TESTTMP/anothertests/bisect-dependent/test-bisect-dependent.t.err
1581 1599 @@ -1,2 +1,2 @@
1582 1600 $ tail -1 $TESTDIR/../bisect/test-bisect.t
1583 1601 - pass
1584 1602 + fail
1585 1603
1586 1604 ERROR: test-bisect-dependent.t output changed
1587 1605 !
1588 1606 Failed test-bisect-dependent.t: output changed
1589 1607 Failed to identify failure point for test-bisect-dependent.t
1590 1608 # Ran 1 tests, 0 skipped, 1 failed.
1591 1609 python hash seed: * (glob)
1592 1610 [1]
1593 1611
1594 1612 $ rt --bisect-repo=../test-bisect test-bisect-dependent.t
1595 1613 usage: run-tests.py [options] [tests]
1596 1614 run-tests.py: error: --bisect-repo cannot be used without --known-good-rev
1597 1615 [2]
1598 1616
1599 1617 $ rt --known-good-rev=0 --bisect-repo=../bisect test-bisect-dependent.t
1600 1618 running 1 tests using 1 parallel processes
1601 1619
1602 1620 --- $TESTTMP/anothertests/bisect-dependent/test-bisect-dependent.t
1603 1621 +++ $TESTTMP/anothertests/bisect-dependent/test-bisect-dependent.t.err
1604 1622 @@ -1,2 +1,2 @@
1605 1623 $ tail -1 $TESTDIR/../bisect/test-bisect.t
1606 1624 - pass
1607 1625 + fail
1608 1626
1609 1627 ERROR: test-bisect-dependent.t output changed
1610 1628 !
1611 1629 Failed test-bisect-dependent.t: output changed
1612 1630 test-bisect-dependent.t broken by 72cbf122d116 (bad)
1613 1631 # Ran 1 tests, 0 skipped, 1 failed.
1614 1632 python hash seed: * (glob)
1615 1633 [1]
1616 1634
1617 1635 $ cd ..
1618 1636
1619 1637 Test a broken #if statement doesn't break run-tests threading.
1620 1638 ==============================================================
1621 1639 $ mkdir broken
1622 1640 $ cd broken
1623 1641 $ cat > test-broken.t <<EOF
1624 1642 > true
1625 1643 > #if notarealhghavefeature
1626 1644 > $ false
1627 1645 > #endif
1628 1646 > EOF
1629 1647 $ for f in 1 2 3 4 ; do
1630 1648 > cat > test-works-$f.t <<EOF
1631 1649 > This is test case $f
1632 1650 > $ sleep 1
1633 1651 > EOF
1634 1652 > done
1635 1653 $ rt -j 2
1636 1654 running 5 tests using 2 parallel processes
1637 1655 ....
1638 1656 # Ran 5 tests, 0 skipped, 0 failed.
1639 1657 skipped: unknown feature: notarealhghavefeature
1640 1658
1641 1659 $ cd ..
1642 1660 $ rm -rf broken
1643 1661
1644 1662 Test cases in .t files
1645 1663 ======================
1646 1664 $ mkdir cases
1647 1665 $ cd cases
1648 1666 $ cat > test-cases-abc.t <<'EOF'
1649 1667 > #testcases A B C
1650 1668 > $ V=B
1651 1669 > #if A
1652 1670 > $ V=A
1653 1671 > #endif
1654 1672 > #if C
1655 1673 > $ V=C
1656 1674 > #endif
1657 1675 > $ echo $V | sed 's/A/C/'
1658 1676 > C
1659 1677 > #if C
1660 1678 > $ [ $V = C ]
1661 1679 > #endif
1662 1680 > #if A
1663 1681 > $ [ $V = C ]
1664 1682 > [1]
1665 1683 > #endif
1666 1684 > #if no-C
1667 1685 > $ [ $V = C ]
1668 1686 > [1]
1669 1687 > #endif
1670 1688 > $ [ $V = D ]
1671 1689 > [1]
1672 1690 > EOF
1673 1691 $ rt
1674 1692 running 3 tests using 1 parallel processes
1675 1693 .
1676 1694 --- $TESTTMP/anothertests/cases/test-cases-abc.t
1677 1695 +++ $TESTTMP/anothertests/cases/test-cases-abc.t#B.err
1678 1696 @@ -7,7 +7,7 @@
1679 1697 $ V=C
1680 1698 #endif
1681 1699 $ echo $V | sed 's/A/C/'
1682 1700 - C
1683 1701 + B
1684 1702 #if C
1685 1703 $ [ $V = C ]
1686 1704 #endif
1687 1705
1688 1706 ERROR: test-cases-abc.t#B output changed
1689 1707 !.
1690 1708 Failed test-cases-abc.t#B: output changed
1691 1709 # Ran 3 tests, 0 skipped, 1 failed.
1692 1710 python hash seed: * (glob)
1693 1711 [1]
1694 1712
1695 1713 --restart works
1696 1714
1697 1715 $ rt --restart
1698 1716 running 2 tests using 1 parallel processes
1699 1717
1700 1718 --- $TESTTMP/anothertests/cases/test-cases-abc.t
1701 1719 +++ $TESTTMP/anothertests/cases/test-cases-abc.t#B.err
1702 1720 @@ -7,7 +7,7 @@
1703 1721 $ V=C
1704 1722 #endif
1705 1723 $ echo $V | sed 's/A/C/'
1706 1724 - C
1707 1725 + B
1708 1726 #if C
1709 1727 $ [ $V = C ]
1710 1728 #endif
1711 1729
1712 1730 ERROR: test-cases-abc.t#B output changed
1713 1731 !.
1714 1732 Failed test-cases-abc.t#B: output changed
1715 1733 # Ran 2 tests, 0 skipped, 1 failed.
1716 1734 python hash seed: * (glob)
1717 1735 [1]
1718 1736
1719 1737 --restart works with outputdir
1720 1738
1721 1739 $ mkdir output
1722 1740 $ mv test-cases-abc.t#B.err output
1723 1741 $ rt --restart --outputdir output
1724 1742 running 2 tests using 1 parallel processes
1725 1743
1726 1744 --- $TESTTMP/anothertests/cases/test-cases-abc.t
1727 1745 +++ $TESTTMP/anothertests/cases/output/test-cases-abc.t#B.err
1728 1746 @@ -7,7 +7,7 @@
1729 1747 $ V=C
1730 1748 #endif
1731 1749 $ echo $V | sed 's/A/C/'
1732 1750 - C
1733 1751 + B
1734 1752 #if C
1735 1753 $ [ $V = C ]
1736 1754 #endif
1737 1755
1738 1756 ERROR: test-cases-abc.t#B output changed
1739 1757 !.
1740 1758 Failed test-cases-abc.t#B: output changed
1741 1759 # Ran 2 tests, 0 skipped, 1 failed.
1742 1760 python hash seed: * (glob)
1743 1761 [1]
1744 1762
1745 1763 Test TESTCASE variable
1746 1764
1747 1765 $ cat > test-cases-ab.t <<'EOF'
1748 1766 > $ dostuff() {
1749 1767 > > echo "In case $TESTCASE"
1750 1768 > > }
1751 1769 > #testcases A B
1752 1770 > #if A
1753 1771 > $ dostuff
1754 1772 > In case A
1755 1773 > #endif
1756 1774 > #if B
1757 1775 > $ dostuff
1758 1776 > In case B
1759 1777 > #endif
1760 1778 > EOF
1761 1779 $ rt test-cases-ab.t
1762 1780 running 2 tests using 1 parallel processes
1763 1781 ..
1764 1782 # Ran 2 tests, 0 skipped, 0 failed.
1765 1783
1766 1784 Support running a specific test case
1767 1785
1768 1786 $ rt "test-cases-abc.t#B"
1769 1787 running 1 tests using 1 parallel processes
1770 1788
1771 1789 --- $TESTTMP/anothertests/cases/test-cases-abc.t
1772 1790 +++ $TESTTMP/anothertests/cases/test-cases-abc.t#B.err
1773 1791 @@ -7,7 +7,7 @@
1774 1792 $ V=C
1775 1793 #endif
1776 1794 $ echo $V | sed 's/A/C/'
1777 1795 - C
1778 1796 + B
1779 1797 #if C
1780 1798 $ [ $V = C ]
1781 1799 #endif
1782 1800
1783 1801 ERROR: test-cases-abc.t#B output changed
1784 1802 !
1785 1803 Failed test-cases-abc.t#B: output changed
1786 1804 # Ran 1 tests, 0 skipped, 1 failed.
1787 1805 python hash seed: * (glob)
1788 1806 [1]
1789 1807
1790 1808 Support running multiple test cases in the same file
1791 1809
1792 1810 $ rt test-cases-abc.t#B test-cases-abc.t#C
1793 1811 running 2 tests using 1 parallel processes
1794 1812
1795 1813 --- $TESTTMP/anothertests/cases/test-cases-abc.t
1796 1814 +++ $TESTTMP/anothertests/cases/test-cases-abc.t#B.err
1797 1815 @@ -7,7 +7,7 @@
1798 1816 $ V=C
1799 1817 #endif
1800 1818 $ echo $V | sed 's/A/C/'
1801 1819 - C
1802 1820 + B
1803 1821 #if C
1804 1822 $ [ $V = C ]
1805 1823 #endif
1806 1824
1807 1825 ERROR: test-cases-abc.t#B output changed
1808 1826 !.
1809 1827 Failed test-cases-abc.t#B: output changed
1810 1828 # Ran 2 tests, 0 skipped, 1 failed.
1811 1829 python hash seed: * (glob)
1812 1830 [1]
1813 1831
1814 1832 Support ignoring invalid test cases
1815 1833
1816 1834 $ rt test-cases-abc.t#B test-cases-abc.t#D
1817 1835 running 1 tests using 1 parallel processes
1818 1836
1819 1837 --- $TESTTMP/anothertests/cases/test-cases-abc.t
1820 1838 +++ $TESTTMP/anothertests/cases/test-cases-abc.t#B.err
1821 1839 @@ -7,7 +7,7 @@
1822 1840 $ V=C
1823 1841 #endif
1824 1842 $ echo $V | sed 's/A/C/'
1825 1843 - C
1826 1844 + B
1827 1845 #if C
1828 1846 $ [ $V = C ]
1829 1847 #endif
1830 1848
1831 1849 ERROR: test-cases-abc.t#B output changed
1832 1850 !
1833 1851 Failed test-cases-abc.t#B: output changed
1834 1852 # Ran 1 tests, 0 skipped, 1 failed.
1835 1853 python hash seed: * (glob)
1836 1854 [1]
1837 1855
1838 1856 Support running complex test cases names
1839 1857
1840 1858 $ cat > test-cases-advanced-cases.t <<'EOF'
1841 1859 > #testcases simple case-with-dashes casewith_-.chars
1842 1860 > $ echo $TESTCASE
1843 1861 > simple
1844 1862 > EOF
1845 1863
1846 1864 $ cat test-cases-advanced-cases.t
1847 1865 #testcases simple case-with-dashes casewith_-.chars
1848 1866 $ echo $TESTCASE
1849 1867 simple
1850 1868
1851 1869 $ rt test-cases-advanced-cases.t
1852 1870 running 3 tests using 1 parallel processes
1853 1871
1854 1872 --- $TESTTMP/anothertests/cases/test-cases-advanced-cases.t
1855 1873 +++ $TESTTMP/anothertests/cases/test-cases-advanced-cases.t#case-with-dashes.err
1856 1874 @@ -1,3 +1,3 @@
1857 1875 #testcases simple case-with-dashes casewith_-.chars
1858 1876 $ echo $TESTCASE
1859 1877 - simple
1860 1878 + case-with-dashes
1861 1879
1862 1880 ERROR: test-cases-advanced-cases.t#case-with-dashes output changed
1863 1881 !
1864 1882 --- $TESTTMP/anothertests/cases/test-cases-advanced-cases.t
1865 1883 +++ $TESTTMP/anothertests/cases/test-cases-advanced-cases.t#casewith_-.chars.err
1866 1884 @@ -1,3 +1,3 @@
1867 1885 #testcases simple case-with-dashes casewith_-.chars
1868 1886 $ echo $TESTCASE
1869 1887 - simple
1870 1888 + casewith_-.chars
1871 1889
1872 1890 ERROR: test-cases-advanced-cases.t#casewith_-.chars output changed
1873 1891 !.
1874 1892 Failed test-cases-advanced-cases.t#case-with-dashes: output changed
1875 1893 Failed test-cases-advanced-cases.t#casewith_-.chars: output changed
1876 1894 # Ran 3 tests, 0 skipped, 2 failed.
1877 1895 python hash seed: * (glob)
1878 1896 [1]
1879 1897
1880 1898 $ rt "test-cases-advanced-cases.t#case-with-dashes"
1881 1899 running 1 tests using 1 parallel processes
1882 1900
1883 1901 --- $TESTTMP/anothertests/cases/test-cases-advanced-cases.t
1884 1902 +++ $TESTTMP/anothertests/cases/test-cases-advanced-cases.t#case-with-dashes.err
1885 1903 @@ -1,3 +1,3 @@
1886 1904 #testcases simple case-with-dashes casewith_-.chars
1887 1905 $ echo $TESTCASE
1888 1906 - simple
1889 1907 + case-with-dashes
1890 1908
1891 1909 ERROR: test-cases-advanced-cases.t#case-with-dashes output changed
1892 1910 !
1893 1911 Failed test-cases-advanced-cases.t#case-with-dashes: output changed
1894 1912 # Ran 1 tests, 0 skipped, 1 failed.
1895 1913 python hash seed: * (glob)
1896 1914 [1]
1897 1915
1898 1916 $ rt "test-cases-advanced-cases.t#casewith_-.chars"
1899 1917 running 1 tests using 1 parallel processes
1900 1918
1901 1919 --- $TESTTMP/anothertests/cases/test-cases-advanced-cases.t
1902 1920 +++ $TESTTMP/anothertests/cases/test-cases-advanced-cases.t#casewith_-.chars.err
1903 1921 @@ -1,3 +1,3 @@
1904 1922 #testcases simple case-with-dashes casewith_-.chars
1905 1923 $ echo $TESTCASE
1906 1924 - simple
1907 1925 + casewith_-.chars
1908 1926
1909 1927 ERROR: test-cases-advanced-cases.t#casewith_-.chars output changed
1910 1928 !
1911 1929 Failed test-cases-advanced-cases.t#casewith_-.chars: output changed
1912 1930 # Ran 1 tests, 0 skipped, 1 failed.
1913 1931 python hash seed: * (glob)
1914 1932 [1]
1915 1933
1916 1934 Test automatic pattern replacement
1917 1935 ==================================
1918 1936
1919 1937 $ cat << EOF >> common-pattern.py
1920 1938 > substitutions = [
1921 1939 > (br'foo-(.*)\\b',
1922 1940 > br'\$XXX=\\1\$'),
1923 1941 > (br'bar\\n',
1924 1942 > br'\$YYY$\\n'),
1925 1943 > ]
1926 1944 > EOF
1927 1945
1928 1946 $ cat << EOF >> test-substitution.t
1929 1947 > $ echo foo-12
1930 1948 > \$XXX=12$
1931 1949 > $ echo foo-42
1932 1950 > \$XXX=42$
1933 1951 > $ echo bar prior
1934 1952 > bar prior
1935 1953 > $ echo lastbar
1936 1954 > last\$YYY$
1937 1955 > $ echo foo-bar foo-baz
1938 1956 > EOF
1939 1957
1940 1958 $ rt test-substitution.t
1941 1959 running 1 tests using 1 parallel processes
1942 1960
1943 1961 --- $TESTTMP/anothertests/cases/test-substitution.t
1944 1962 +++ $TESTTMP/anothertests/cases/test-substitution.t.err
1945 1963 @@ -7,3 +7,4 @@
1946 1964 $ echo lastbar
1947 1965 last$YYY$
1948 1966 $ echo foo-bar foo-baz
1949 1967 + $XXX=bar foo-baz$
1950 1968
1951 1969 ERROR: test-substitution.t output changed
1952 1970 !
1953 1971 Failed test-substitution.t: output changed
1954 1972 # Ran 1 tests, 0 skipped, 1 failed.
1955 1973 python hash seed: * (glob)
1956 1974 [1]
1957 1975
1958 1976 --extra-config-opt works
1959 1977
1960 1978 $ cat << EOF >> test-config-opt.t
1961 1979 > $ hg init test-config-opt
1962 1980 > $ hg -R test-config-opt purge
1963 1981 > $ echo "HGTESTEXTRAEXTENSIONS: \$HGTESTEXTRAEXTENSIONS"
1964 1982 > HGTESTEXTRAEXTENSIONS: purge
1965 1983 > EOF
1966 1984
1967 1985 $ rt --extra-config-opt extensions.purge= \
1968 1986 > --extra-config-opt not.an.extension=True test-config-opt.t
1969 1987 running 1 tests using 1 parallel processes
1970 1988 .
1971 1989 # Ran 1 tests, 0 skipped, 0 failed.
1972 1990
1973 1991 Test conditional output matching
1974 1992 ================================
1975 1993
1976 1994 $ cat << EOF >> test-conditional-matching.t
1977 1995 > #testcases foo bar
1978 1996 > $ echo richtig
1979 1997 > richtig (true !)
1980 1998 > $ echo falsch
1981 1999 > falsch (false !)
1982 2000 > #if foo
1983 2001 > $ echo arthur
1984 2002 > arthur (bar !)
1985 2003 > #endif
1986 2004 > $ echo celeste
1987 2005 > celeste (foo !)
1988 2006 > $ echo zephir
1989 2007 > zephir (bar !)
1990 2008 > EOF
1991 2009
1992 2010 $ rt test-conditional-matching.t
1993 2011 running 2 tests using 1 parallel processes
1994 2012
1995 2013 --- $TESTTMP/anothertests/cases/test-conditional-matching.t
1996 2014 +++ $TESTTMP/anothertests/cases/test-conditional-matching.t#bar.err
1997 2015 @@ -3,11 +3,13 @@
1998 2016 richtig (true !)
1999 2017 $ echo falsch
2000 2018 falsch (false !)
2001 2019 + falsch
2002 2020 #if foo
2003 2021 $ echo arthur
2004 2022 arthur \(bar !\) (re)
2005 2023 #endif
2006 2024 $ echo celeste
2007 2025 celeste \(foo !\) (re)
2008 2026 + celeste
2009 2027 $ echo zephir
2010 2028 zephir \(bar !\) (re)
2011 2029
2012 2030 ERROR: test-conditional-matching.t#bar output changed
2013 2031 !
2014 2032 --- $TESTTMP/anothertests/cases/test-conditional-matching.t
2015 2033 +++ $TESTTMP/anothertests/cases/test-conditional-matching.t#foo.err
2016 2034 @@ -3,11 +3,14 @@
2017 2035 richtig (true !)
2018 2036 $ echo falsch
2019 2037 falsch (false !)
2020 2038 + falsch
2021 2039 #if foo
2022 2040 $ echo arthur
2023 2041 arthur \(bar !\) (re)
2024 2042 + arthur
2025 2043 #endif
2026 2044 $ echo celeste
2027 2045 celeste \(foo !\) (re)
2028 2046 $ echo zephir
2029 2047 zephir \(bar !\) (re)
2030 2048 + zephir
2031 2049
2032 2050 ERROR: test-conditional-matching.t#foo output changed
2033 2051 !
2034 2052 Failed test-conditional-matching.t#bar: output changed
2035 2053 Failed test-conditional-matching.t#foo: output changed
2036 2054 # Ran 2 tests, 0 skipped, 2 failed.
2037 2055 python hash seed: * (glob)
2038 2056 [1]
2039 2057
2040 2058 Test that a proper "python" has been set up
2041 2059 ===========================================
2042 2060
2043 2061 (with a small check-code work around)
2044 2062 $ printf "#!/usr/bi" > test-py3.tmp
2045 2063 $ printf "n/en" >> test-py3.tmp
2046 2064 $ cat << EOF >> test-py3.tmp
2047 2065 > v python3
2048 2066 > import sys
2049 2067 > print('.'.join(str(x) for x in sys.version_info))
2050 2068 > EOF
2051 2069 $ mv test-py3.tmp test-py3.py
2052 2070 $ chmod +x test-py3.py
2053 2071
2054 2072 (with a small check-code work around)
2055 2073 $ printf "#!/usr/bi" > test-py.tmp
2056 2074 $ printf "n/en" >> test-py.tmp
2057 2075 $ cat << EOF >> test-py.tmp
2058 2076 > v python
2059 2077 > import sys
2060 2078 > print('.'.join(str(x) for x in sys.version_info))
2061 2079 > EOF
2062 2080 $ mv test-py.tmp test-py.py
2063 2081 $ chmod +x test-py.py
2064 2082
2065 2083 $ ./test-py3.py
2066 2084 3.* (glob)
2067 2085 $ ./test-py.py
2068 2086 2.* (glob) (no-py3 !)
2069 2087 3.* (glob) (py3 !)
General Comments 0
You need to be logged in to leave comments. Login now