[Python-checkins] python/dist/src/Lib doctest.py,1.36.2.3,1.36.2.4

tim_one at users.sourceforge.net tim_one at users.sourceforge.net
Tue Aug 3 17:55:47 CEST 2004


Update of /cvsroot/python/python/dist/src/Lib
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12755/Lib
Modified Files:
 Tag: tim-doctest-branch
	doctest.py 
Log Message:
Repair failure of test_difflib. difflib has a nasty one:
 >>> for line in results: print repr(line)
 ...
 [results go here]
That managed to break the intent (of doctest's parsing) that an
example would end with a newline iff it was a multi-line example.
That example really isn't multiline, but ended up with a trailing
newline anyway. Edward's new code asserted this invariant, which
the old difflib code did not do. So fixed the parsing to get rid
of the trailing newline in this case.
But then it turned out that compile(... "single") doesn't accept
a "block opener: body" statement *without* a trailing newline,
raising SyntaxError if you try. So changed compilation to always
append a newline.
test_difflib passes now.
Index: doctest.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/doctest.py,v
retrieving revision 1.36.2.3
retrieving revision 1.36.2.4
diff -C2 -d -r1.36.2.3 -r1.36.2.4
*** doctest.py	3 Aug 2004 04:08:52 -0000	1.36.2.3
--- doctest.py	3 Aug 2004 15:55:29 -0000	1.36.2.4
***************
*** 510,513 ****
--- 510,514 ----
 i, n = 0, len(lines)
 while i < n:
+ # Search for an example (a PS1 line).
 line = lines[i]
 i = i + 1
***************
*** 515,526 ****
 if m is None:
 continue
 j = m.end(0) # beyond the prompt
 if isEmpty(line, j) or isComment(line, j):
 # a bare prompt or comment -- not interesting
 continue
 lineno = i - 1
 if line[j] != " ":
 raise ValueError('line %r of the docstring for %s lacks '
! 'blanks after %s: %r' %
 (lineno, self.name, self._PS1, line))
 
--- 516,529 ----
 if m is None:
 continue
+ # line is a PS1 line.
 j = m.end(0) # beyond the prompt
 if isEmpty(line, j) or isComment(line, j):
 # a bare prompt or comment -- not interesting
 continue
+ # line is a non-trivial PS1 line.
 lineno = i - 1
 if line[j] != " ":
 raise ValueError('line %r of the docstring for %s lacks '
! 'blank after %s: %r' %
 (lineno, self.name, self._PS1, line))
 
***************
*** 542,551 ****
 else:
 break
 if len(source) == 1:
 source = source[0]
 else:
- # get rid of useless null line from trailing empty "..."
- if source[-1] == "":
- del source[-1]
 source = "\n".join(source) + "\n"
 # suck up response
--- 545,555 ----
 else:
 break
+ # get rid of useless null line from trailing empty "..."
+ if source[-1] == "":
+ assert len(source) > 1
+ del source[-1]
 if len(source) == 1:
 source = source[0]
 else:
 source = "\n".join(source) + "\n"
 # suck up response
***************
*** 1161,1165 ****
 # keyboard interrupts.)
 try:
! exec compile(example.source, "<string>", "single",
 compileflags, 1) in globs
 exception = None
--- 1165,1173 ----
 # keyboard interrupts.)
 try:
! # If the example is a compound statement on one line,
! # like "if 1: print 2", then compile() requires a
! # trailing newline. Rather than analyze that, always
! # append one (it never hurts).
! exec compile(example.source + '\n', "<string>", "single",
 compileflags, 1) in globs
 exception = None
***************
*** 1967,1971 ****
 Traceback (most recent call last):
 [...]
! ValueError: 
 foo
 
--- 1975,1979 ----
 Traceback (most recent call last):
 [...]
! ValueError:
 foo
 


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /