Mads Kiilerich <mads@kiilerich.com> [Thu, 13 Oct 2011 04:27:49 +0200] rev 15244
tests: cleanup of test-fetch.t
Mads Kiilerich <mads@kiilerich.com> [Thu, 13 Oct 2011 04:27:49 +0200] rev 15243
tests: cleanup of echo statements left over from test conversion
Matt Mackall <mpm@selenic.com> [Wed, 12 Oct 2011 18:59:59 -0500] rev 15242
graft: add examples and information about copied metadata
Matt Mackall <mpm@selenic.com> [Wed, 12 Oct 2011 18:48:57 -0500] rev 15241
graft: add --continue support
Matt Mackall <mpm@selenic.com> [Wed, 12 Oct 2011 18:46:23 -0500] rev 15240
graft: add user, date, and tool options
Matt Mackall <mpm@selenic.com> [Wed, 12 Oct 2011 18:46:03 -0500] rev 15239
graft: add --edit
Matt Mackall <mpm@selenic.com> [Wed, 12 Oct 2011 18:45:36 -0500] rev 15238
graft: add initial implementation
Augie Fackler <durin42@gmail.com> [Wed, 12 Oct 2011 11:09:57 -0500] rev 15237
bookmarks: delegate writing to the repo just like reading
This makes it easier for alternate storage backends to not use flat
files for bookmarks storage.
Idan Kamara <idankk86@gmail.com> [Wed, 12 Oct 2011 22:01:14 +0200] rev 15236
tests: add support for inline doctests in test files
This adds doctest like syntax to .t files, that can be interleaved with regular
shell code:
$ echo -n a > file
>>> print open('file').read()
a
>>> open('file', 'a').write('b')
$ cat file
ab
The syntax is exactly the same as regular doctests, so multiline statements
look like this:
>>> for i in range(3):
... print i
0
1
2
Each block has its own context, i.e.:
>>> x = 0
>>> print x
0
$ echo 'foo'
foo
>>> print x
will result in a NameError.
Errors are displayed in standard doctest format:
>>> print 'foo'
bar
--- /home/idan/dev/hg/default/tests/test-test.t
+++ /home/idan/dev/hg/default/tests/test-test.t.err
@@ -2,3 +2,16 @@
> >>> print 'foo'
> bar
> EOF
+ **********************************************************************
+ File "/tmp/tmps8X_0ohg-tst", line 1, in tmps8X_0ohg-tst
+ Failed example:
+ print 'foo'
+ Expected:
+ bar
+ Got:
+ foo
+ **********************************************************************
+ 1 items had failures:
+ 1 of 1 in tmps8X_0ohg-tst
+ ***Test Failed*** 1 failures.
+ [1]
As for the implementation, it's quite simple: when the test runner sees a line
starting with '>>>' it converts it, and all subsequent lines until the next
line that begins with '$' to a 'python -m heredoctest <<EOF' call with the
proper heredoc to follow. So if we have this test file:
>>> for c in 'abcd':
... print c
a
b
c
d
$ echo foo
foo
It gets converted to:
$ python -m heredoctest <<EOF
> >>> for c in 'abcd':
> ... print c
> a
> b
> c
> d
> EOF
$ echo foo
foo
And then processed like every other test file by converting it to a sh script.
Idan Kamara <idankk86@gmail.com> [Wed, 12 Oct 2011 22:01:13 +0200] rev 15235
tests: add helper script for processing doctests read from stdin
Writes stdin to a temp file and doctests it.
In the future we might want to spare the temp file and directly call into
doctest.
Also, with some tweaking it seems possible to adjust the line numbers reported
in an error report so they match the ones in the original file.