def test_format_and_save(self): doctest = ( "narrative is a line that exceeds 78 characters which causes " "scrolling in consoles and wraps poorly in email\n" " * item\n\n" " >>> very_very_very_very_very.long_long_long_long(" "method_method_method_method)\n" " True\n\n") self.file.write(doctest) self.file.flush() checker = DoctestReviewer( self.file.name, doctest, self.reporter) checker.format_and_save() expected = ( "narrative is a line that exceeds 78 characters which causes " "scrolling in\nconsoles and wraps poorly in email\n\n" " * item\n\n" " >>> very_very_very_very_very.long_long_long_long(" "method_method_method_method)\n" " True\n\n\n") self.file.seek(0) text = self.file.read() self.assertEqual(expected, text) self.assertEqual(expected, checker.doctest) # Source code issues cannot be fixed by the formatter. checker.check() self.assertEqual( [(6, 'source exceeds 78 characters.')], self.reporter.messages)
def test_doctest_without_issues(self): self.file.write(good_doctest) self.file.flush() checker = DoctestReviewer( self.file.name, good_doctest, self.reporter) checker.check() self.assertEqual([], self.reporter.messages)
def test_doctest_with_python_compilation_error(self): doctest = " >>> if (True\n pong text" self.file.write(doctest) self.file.flush() checker = DoctestReviewer( self.file.name, doctest, self.reporter) checker.check() self.assertEqual( [(1, 'Could not compile:\n if (True')], self.reporter.messages)
def test_doctest_with_globs(self): # Doctest runners often setup global identifiers that are not python # execution issues doctest = " >>> ping('text')\n pong text" self.file.write(doctest) self.file.flush() checker = DoctestReviewer( self.file.name, doctest, self.reporter) checker.check() self.assertEqual([], self.reporter.messages)
def test_trailing_whitespace(self): doctest = "narrative \n >>> print 'done'\n" self.file.write(doctest) self.file.flush() checker = DoctestReviewer( self.file.name, doctest, self.reporter) checker.check() self.assertEqual( [(1, 'narrative has trailing whitespace.')], self.reporter.messages)
def test_bad_indentation(self): doctest = "narrative\n>>> print 'done'\n" self.file.write(doctest) self.file.flush() checker = DoctestReviewer( self.file.name, doctest, self.reporter) checker.check() self.assertEqual( [(2, 'source has bad indentation.')], self.reporter.messages)
def test_moin_header(self): doctest = "= Heading =\n\nnarrative" self.file.write(doctest) self.file.flush() checker = DoctestReviewer( self.file.name, doctest, self.reporter) checker.check() self.assertEqual( [(1, 'narrative uses a moin header.')], self.reporter.messages)
def test_doctest_malformed_doctest(self): self.file.write(malformed_doctest) self.file.flush() checker = DoctestReviewer( self.file.name, malformed_doctest, self.reporter) checker.check() expected = ( "line 4 of the docstring for %s has inconsistent leading " "whitespace: 'Narrative without WANT section.'" % self.file.name) self.assertEqual( [(0, expected)], self.reporter.messages)
def test_long_line_narrative(self): doctest = ( "narrative is a line that exceeds 78 characters which causes " "scrolling in consoles and wraps poorly in email\n") self.file.write(doctest) self.file.flush() checker = DoctestReviewer( self.file.name, doctest, self.reporter) checker.check() self.assertEqual( [(1, 'narrative exceeds 78 characters.')], self.reporter.messages)
def test_long_line_source_and_want(self): doctest = ( " >>> very_very_very_very_very.long_long_long_long(" "method_method_method_method,\n" " ... call_call_call_call_call_call_call_call_call_call," "bad_bad_bad_bad_bad)\n") self.file.write(doctest) self.file.flush() checker = DoctestReviewer( self.file.name, doctest, self.reporter) checker.check() self.assertEqual( [(1, 'source exceeds 78 characters.'), (2, 'source exceeds 78 characters.')], self.reporter.messages)