Differences between revisions 1 and 2
Revision 1 as of 2005-12-20 19:01:32
Size: 1535
Editor: 192
Comment: Solution needed
Revision 2 as of 2005-12-20 19:21:51
Size: 1852
Editor: 192
Comment: well, answered my own question
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
[[TableOfContents]]
Line 4: Line 6:
'''*** Solution Needed ***'''
Line 36: Line 36:
The solution is to add the command continuation characters:
{{{#!python
>>> html = '''
... <html>
... <head>
... <title>This is the page title</title>
... </head>
... <body>
... This is the body
... </body>
... </html>
... '''
>>> title = get_html_title(html)
>>> assert(title == "This is the page title")
}}}

The DocTest module requires special actions / processing for multi-line strings.

TableOfContents

Multi-Line Strings in commands

Consider a function get_html_title designed to extract the title from an HTML page. Here is some python code to test the function:

   1 >>> html = '''
   2 <html>
   3 <head>
   4 <title>This is the page title</title>
   5 </head>
   6 <body>
   7 This is the body
   8 </body>
   9 </html>
  10 '''
  11 >>> title = get_html_title(html)
  12 >>> assert(title == "This is the page title")

Putting this directly into a doctest results in an exception, such as:

Failed example:
    html = '''
Exception raised:
    Traceback (most recent call last):
      File "C:\Python24\lib\doctest.py", line 1243, in __run
        compileflags, 1) in test.globs
      File "<doctest sample.tests[1]>", line 1
         html = '''
                   ^
     SyntaxError: EOF while scanning triple-quoted string

The solution is to add the command continuation characters:

   1 >>> html = '''
   2 ... <html>
   3 ... <head>
   4 ... <title>This is the page title</title>
   5 ... </head>
   6 ... <body>
   7 ... This is the body
   8 ... </body>
   9 ... </html>
  10 ... '''
  11 >>> title = get_html_title(html)
  12 >>> assert(title == "This is the page title")

Multi-Line Strings in output

Blank lines in the output need to be specially handled. For example, the following doctest will fail:

   1 >>> test = "Here is a blank line\n\nBlank line is above"
   2 >>> print test
   3 Here is a blank line
   4 
   5 Blank line is above

This is because the blank line is used to seperate commands and comments. With Python 2.4, a <BLANKLINE> keyword was added, so the proper doctest is now:

   1 >>> test = "Here is a blank line\n\nBlank line is above"
   2 >>> print test
   3 Here is a blank line
   4 <BLANKLINE>
   5 Blank line is above

MultiLineStringsInDocTest (last edited 2008-11-15 13:59:45 by localhost)

Unable to edit the page? See the FrontPage for instructions.