Mercurial > hg > mercurial-crew-with-dirclash
annotate tests/README @ 4193:9e3121017fb2
Optimize return value of util._matcher for common command line case
This will trigger every time somebody runs something like "hg diff"
or "hg status" without any arguments.
The important part here is returning util.always as the match function,
which is a much simpler (and faster) function than the usual return
value, and allows other code to just skip the filtering if it knows
all files will match.
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Sat, 10 Mar 2007 23:01:00 -0300 |
parents | 096f1c73cdc3 |
children | d0bbd8ee50c7 |
rev | line source |
---|---|
331 | 1 A simple testing framework |
2 | |
332 | 3 To run the tests, do: |
4 | |
5 cd tests/ | |
2207
8a2a7f7d9df6
Delete the shell version of run-tests
Stephen Darnell <stephen@darnell.plus.com>
parents:
1933
diff
changeset
|
6 python run-tests.py |
332 | 7 |
331 | 8 This finds all scripts in the test directory named test-* and executes |
9 them. The scripts can be either shell scripts or Python. Each test is | |
10 run in a temporary directory that is removed when the test is complete. | |
11 | |
12 A test-<x> succeeds if the script returns success and its output | |
13 matches test-<x>.out. If the new output doesn't match, it is stored in | |
14 test-<x>.err. | |
15 | |
16 There are some tricky points here that you should be aware of when | |
17 writing tests: | |
18 | |
2283
e506c14382fd
deprecate 'update -m'. use 'merge' instead.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2207
diff
changeset
|
19 - hg commit and hg merge want user interaction |
331 | 20 |
761
0fb498458905
Change all references to -t --text commit message to -m and --message.
Andrew Thompson <andrewkt@aktzero.com>
parents:
350
diff
changeset
|
21 for commit use -m "text" |
2283
e506c14382fd
deprecate 'update -m'. use 'merge' instead.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2207
diff
changeset
|
22 for hg merge, set HGMERGE to something noninteractive (like true or merge) |
331 | 23 |
24 - changeset hashes will change based on user and date which make | |
25 things like hg history output change | |
26 | |
1933
7544700fd931
Use 'hg ci -d "1000000 0"' in tests to circumvent problem with leading zero.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
814
diff
changeset
|
27 use commit -m "test" -u test -d "1000000 0" |
331 | 28 |
3192
096f1c73cdc3
Add -D/--nodates options to hg diff/export that removes dates from diff headers
Stephen Darnell <stephen@darnell.plus.com>
parents:
2977
diff
changeset
|
29 - diff and export may show the current time |
331 | 30 |
3192
096f1c73cdc3
Add -D/--nodates options to hg diff/export that removes dates from diff headers
Stephen Darnell <stephen@darnell.plus.com>
parents:
2977
diff
changeset
|
31 use -D/--nodates to strip the dates |
2976
61fcd9fac434
Make tests append settings to $HGRCPATH instead of $HGTMP/.hgrc
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2935
diff
changeset
|
32 |
61fcd9fac434
Make tests append settings to $HGRCPATH instead of $HGTMP/.hgrc
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2935
diff
changeset
|
33 - You can append your own hgrc settings to the file that the environment |
61fcd9fac434
Make tests append settings to $HGRCPATH instead of $HGTMP/.hgrc
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2935
diff
changeset
|
34 variable HGRCPATH points to. This file is cleared before running a test. |
2977 | 35 |
2968
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
36 You also need to be careful that the tests are portable from one platform |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
37 to another. You're probably working on Linux, where the GNU toolchain has |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
38 more (or different) functionality than on MacOS, *BSD, Solaris, AIX, etc. |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
39 While testing on all platforms is the only sure-fire way to make sure that |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
40 you've written portable code, here's a list of problems that have been |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
41 found and fixed in the tests. Another, more comprehensive list may be |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
42 found in the GNU Autoconf manual, online here: |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
43 |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
44 http://www.gnu.org/software/autoconf/manual/html_node/Portable-Shell.html |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
45 |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
46 sh: |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
47 |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
48 The Bourne shell is a very basic shell. /bin/sh on Linux is typically |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
49 bash, which even in Bourne-shell mode has many features that Bourne shells |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
50 on other Unix systems don't have (and even on Linux /bin/sh isn't |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
51 guaranteed to be bash). You'll need to be careful about constructs that |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
52 seem ubiquitous, but are actually not available in the least common |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
53 denominator. While using another shell (ksh, bash explicitly, posix shell, |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
54 etc.) explicitly may seem like another option, these may not exist in a |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
55 portable location, and so are generally probably not a good idea. You may |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
56 find that rewriting the test in python will be easier. |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
57 |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
58 - don't use pushd/popd; save the output of "pwd" and use "cd" in place of |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
59 the pushd, and cd back to the saved pwd instead of popd. |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
60 |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
61 - don't use math expressions like let, (( ... )), or $(( ... )); use "expr" |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
62 instead. |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
63 |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
64 grep: |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
65 |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
66 - don't use the -q option; redirect stdout to /dev/null instead. |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
67 |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
68 - don't use extended regular expressions with grep; use egrep instead, and |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
69 don't escape any regex operators. |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
70 |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
71 sed: |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
72 |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
73 - make sure that the beginning-of-line matcher ("^") is at the very |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
74 beginning of the expression -- it may not be supported inside parens. |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
75 |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
76 echo: |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
77 |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
78 - echo may interpret "\n" and print a newline; use printf instead if you |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
79 want a literal "\n" (backslash + n). |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
80 |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
81 false: |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
82 |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
83 - false is guaranteed only to return a non-zero value; you cannot depend on |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
84 it being 1. On Solaris in particular, /bin/false returns 255. Rewrite |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
85 your test to not depend on a particular return value, or create a |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
86 temporary "false" executable, and call that instead. |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
87 |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
88 diff: |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
89 |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
90 - don't use the -N option. There's no particularly good workaround short |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
91 of writing a reasonably complicated replacement script, but substituting |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
92 gdiff for diff if you can't rewrite the test not to need -N will probably |
4cdb68d7eb92
patch queue: portability.notes
Danek Duvall <danek.duvall@sun.com>
parents:
2935
diff
changeset
|
93 do. |