summaryrefslogtreecommitdiff
path: root/docutils/test/DocutilsTestSupport.py
diff options
context:
space:
mode:
Diffstat (limited to 'docutils/test/DocutilsTestSupport.py')
-rw-r--r--docutils/test/DocutilsTestSupport.py399
1 files changed, 0 insertions, 399 deletions
diff --git a/docutils/test/DocutilsTestSupport.py b/docutils/test/DocutilsTestSupport.py
deleted file mode 100644
index 6fb710cd0..000000000
--- a/docutils/test/DocutilsTestSupport.py
+++ /dev/null
@@ -1,399 +0,0 @@
-#! /usr/bin/env python
-
-"""
-:Authors: David Goodger; Garth Kidd
-:Contact: goodger@users.sourceforge.net
-:Revision: $Revision$
-:Date: $Date$
-:Copyright: This module has been placed in the public domain.
-
-Exports the following:
-
-:Modules:
- - `statemachine` is 'docutils.statemachine'
- - `nodes` is 'docutils.nodes'
- - `urischemes` is 'docutils.urischemes'
- - `utils` is 'docutils.utils'
- - `transforms` is 'docutils.transforms'
- - `states` is 'docutils.parsers.rst.states'
- - `tableparser` is 'docutils.parsers.rst.tableparser'
-
-:Classes:
- - `CustomTestSuite`
- - `CustomTestCase`
- - `ParserTestSuite`
- - `ParserTestCase`
- - `TableParserTestSuite`
- - `TableParserTestCase`
-"""
-__docformat__ = 'reStructuredText'
-
-import package_unittest
-import sys, os, unittest, difflib, inspect, os, sys
-from pprint import pformat
-import docutils
-from docutils import statemachine, nodes, urischemes, utils, transforms
-from docutils.transforms import universal
-from docutils.parsers import rst
-from docutils.parsers.rst import states, tableparser, directives, languages
-from docutils.statemachine import string2lines
-
-try:
- import mypdb as pdb
-except:
- import pdb
-
-
-class CustomTestSuite(unittest.TestSuite):
-
- """
- A collection of custom TestCases.
-
- """
-
- id = ''
- """Identifier for the TestSuite. Prepended to the
- TestCase identifiers to make identification easier."""
-
- nextTestCaseId = 0
- """The next identifier to use for non-identified test cases."""
-
- def __init__(self, tests=(), id=None):
- """
- Initialize the CustomTestSuite.
-
- Arguments:
-
- id -- identifier for the suite, prepended to test cases.
- """
- unittest.TestSuite.__init__(self, tests)
- if id is None:
- outerframes = inspect.getouterframes(inspect.currentframe())
- mypath = outerframes[0][1]
- for outerframe in outerframes[1:]:
- if outerframe[3] != '__init__':
- callerpath = outerframe[1]
- break
- mydir, myname = os.path.split(mypath)
- if not mydir:
- mydir = os.curdir
- if callerpath.startswith(mydir):
- self.id = callerpath[len(mydir) + 1:] # caller's module
- else:
- self.id = callerpath
- else:
- self.id = id
-
- def addTestCase(self, testCaseClass, methodName, input, expected,
- id=None, runInDebugger=0, shortDescription=None,
- **kwargs):
- """
- Create a custom TestCase in the CustomTestSuite.
- Also return it, just in case.
-
- Arguments:
-
- testCaseClass --
- methodName --
- input -- input to the parser.
- expected -- expected output from the parser.
- id -- unique test identifier, used by the test framework.
- runInDebugger -- if true, run this test under the pdb debugger.
- shortDescription -- override to default test description.
- """
- if id is None: # generate id if required
- id = self.nextTestCaseId
- self.nextTestCaseId += 1
- # test identifier will become suiteid.testid
- tcid = '%s: %s' % (self.id, id)
- # generate and add test case
- tc = testCaseClass(methodName, input, expected, tcid,
- runInDebugger=runInDebugger,
- shortDescription=shortDescription,
- **kwargs)
- self.addTest(tc)
- return tc
-
-
-class CustomTestCase(unittest.TestCase):
-
- compare = difflib.Differ().compare
- """Comparison method shared by all subclasses."""
-
- def __init__(self, methodName, input, expected, id,
- runInDebugger=0, shortDescription=None):
- """
- Initialise the CustomTestCase.
-
- Arguments:
-
- methodName -- name of test method to run.
- input -- input to the parser.
- expected -- expected output from the parser.
- id -- unique test identifier, used by the test framework.
- runInDebugger -- if true, run this test under the pdb debugger.
- shortDescription -- override to default test description.
- """
- self.id = id
- self.input = input
- self.expected = expected
- self.runInDebugger = runInDebugger
- # Ring your mother.
- unittest.TestCase.__init__(self, methodName)
-
- def __str__(self):
- """
- Return string conversion. Overridden to give test id, in addition to
- method name.
- """
- return '%s; %s' % (self.id, unittest.TestCase.__str__(self))
-
- def __repr__(self):
- return "<%s %s>" % (self.id, unittest.TestCase.__repr__(self))
-
- def compareOutput(self, input, output, expected):
- """`input`, `output`, and `expected` should all be strings."""
- try:
- self.assertEquals('\n' + output, '\n' + expected)
- except AssertionError:
- print >>sys.stderr, '\n%s\ninput:' % (self,)
- print >>sys.stderr, input
- print >>sys.stderr, '-: expected\n+: output'
- print >>sys.stderr, ''.join(self.compare(expected.splitlines(1),
- output.splitlines(1)))
- raise
-
-
-class TransformTestSuite(CustomTestSuite):
-
- """
- A collection of TransformTestCases.
-
- A TransformTestSuite instance manufactures TransformTestCases,
- keeps track of them, and provides a shared test fixture (a-la
- setUp and tearDown).
- """
-
- def __init__(self, parser):
- self.parser = parser
- """Parser shared by all test cases."""
-
- CustomTestSuite.__init__(self)
-
- def generateTests(self, dict, dictname='totest',
- testmethod='test_transforms'):
- """
- Stock the suite with test cases generated from a test data dictionary.
-
- Each dictionary key (test type's name) maps to a list of transform
- classes and list of tests. Each test is a list: input, expected
- output, optional modifier. The optional third entry, a behavior
- modifier, can be 0 (temporarily disable this test) or 1 (run this test
- under the pdb debugger). Tests should be self-documenting and not
- require external comments.
- """
- for name, (transforms, cases) in dict.items():
- for casenum in range(len(cases)):
- case = cases[casenum]
- runInDebugger = 0
- if len(case)==3:
- if case[2]:
- runInDebugger = 1
- else:
- continue
- self.addTestCase(
- TransformTestCase, testmethod,
- transforms=transforms, parser=self.parser,
- input=case[0], expected=case[1],
- id='%s[%r][%s]' % (dictname, name, casenum),
- runInDebugger=runInDebugger)
-
-
-class TransformTestCase(CustomTestCase):
-
- """
- Output checker for the transform.
-
- Should probably be called TransformOutputChecker, but I can deal with
- that later when/if someone comes up with a category of transform test
- cases that have nothing to do with the input and output of the transform.
- """
-
- def __init__(self, *args, **kwargs):
- self.transforms = kwargs['transforms']
- """List of transforms to perform for this test case."""
-
- self.parser = kwargs['parser']
- """Input parser for this test case."""
-
- del kwargs['transforms'], kwargs['parser'] # only wanted here
- CustomTestCase.__init__(self, *args, **kwargs)
-
- def test_transforms(self):
- if self.runInDebugger:
- pdb.set_trace()
- doctree = utils.newdocument(warninglevel=5, errorlevel=5,
- debug=package_unittest.debug)
- self.parser.parse(self.input, doctree)
- for transformClass in (self.transforms + universal.test_transforms):
- transformClass(doctree).transform()
- output = doctree.pformat()
- self.compareOutput(self.input, output, self.expected)
-
- def test_transforms_verbosely(self):
- if self.runInDebugger:
- pdb.set_trace()
- print '\n', self.id
- print '-' * 70
- print self.input
- doctree = utils.newdocument(warninglevel=5, errorlevel=5,
- debug=package_unittest.debug)
- self.parser.parse(self.input, doctree)
- print '-' * 70
- print doctree.pformat()
- for transformClass in self.transforms:
- transformClass(doctree).transform()
- output = doctree.pformat()
- print '-' * 70
- print output
- self.compareOutput(self.input, output, self.expected)
-
-
-class ParserTestCase(CustomTestCase):
-
- """
- Output checker for the parser.
-
- Should probably be called ParserOutputChecker, but I can deal with
- that later when/if someone comes up with a category of parser test
- cases that have nothing to do with the input and output of the parser.
- """
-
- parser = rst.Parser()
- """Parser shared by all ParserTestCases."""
-
- def test_parser(self):
- if self.runInDebugger:
- pdb.set_trace()
- document = utils.newdocument(warninglevel=5, errorlevel=5,
- debug=package_unittest.debug)
- self.parser.parse(self.input, document)
- output = document.pformat()
- self.compareOutput(self.input, output, self.expected)
-
-
-class ParserTestSuite(CustomTestSuite):
-
- """
- A collection of ParserTestCases.
-
- A ParserTestSuite instance manufactures ParserTestCases,
- keeps track of them, and provides a shared test fixture (a-la
- setUp and tearDown).
- """
-
- test_case_class = ParserTestCase
-
- def generateTests(self, dict, dictname='totest'):
- """
- Stock the suite with test cases generated from a test data dictionary.
-
- Each dictionary key (test type name) maps to a list of tests. Each
- test is a list: input, expected output, optional modifier. The
- optional third entry, a behavior modifier, can be 0 (temporarily
- disable this test) or 1 (run this test under the pdb debugger). Tests
- should be self-documenting and not require external comments.
- """
- for name, cases in dict.items():
- for casenum in range(len(cases)):
- case = cases[casenum]
- runInDebugger = 0
- if len(case)==3:
- if case[2]:
- runInDebugger = 1
- else:
- continue
- self.addTestCase(
- self.test_case_class, 'test_parser',
- input=case[0], expected=case[1],
- id='%s[%r][%s]' % (dictname, name, casenum),
- runInDebugger=runInDebugger)
-
-
-class RFC2822ParserTestCase(ParserTestCase):
-
- """RFC2822-specific parser test case."""
-
- parser = rst.Parser(rfc2822=1)
- """Parser shared by all RFC2822ParserTestCases."""
-
-
-class RFC2822ParserTestSuite(ParserTestSuite):
-
- """A collection of RFC2822ParserTestCases."""
-
- test_case_class = RFC2822ParserTestCase
-
-
-class TableParserTestSuite(CustomTestSuite):
-
- """
- A collection of TableParserTestCases.
-
- A TableParserTestSuite instance manufactures TableParserTestCases,
- keeps track of them, and provides a shared test fixture (a-la
- setUp and tearDown).
- """
-
- def generateTests(self, dict, dictname='totest'):
- """
- Stock the suite with test cases generated from a test data dictionary.
-
- Each dictionary key (test type name) maps to a list of tests. Each
- test is a list: an input table, expected output from parsegrid(),
- expected output from parse(), optional modifier. The optional fourth
- entry, a behavior modifier, can be 0 (temporarily disable this test)
- or 1 (run this test under the pdb debugger). Tests should be
- self-documenting and not require external comments.
- """
- for name, cases in dict.items():
- for casenum in range(len(cases)):
- case = cases[casenum]
- runInDebugger = 0
- if len(case) == 4:
- if case[3]:
- runInDebugger = 1
- else:
- continue
- self.addTestCase(TableParserTestCase, 'test_parsegrid',
- input=case[0], expected=case[1],
- id='%s[%r][%s]' % (dictname, name, casenum),
- runInDebugger=runInDebugger)
- self.addTestCase(TableParserTestCase, 'test_parse',
- input=case[0], expected=case[2],
- id='%s[%r][%s]' % (dictname, name, casenum),
- runInDebugger=runInDebugger)
-
-
-class TableParserTestCase(CustomTestCase):
-
- parser = tableparser.TableParser()
-
- def test_parsegrid(self):
- self.parser.setup(string2lines(self.input))
- try:
- self.parser.findheadbodysep()
- self.parser.parsegrid()
- output = self.parser.cells
- except Exception, details:
- output = '%s: %s' % (details.__class__.__name__, details)
- self.compareOutput(self.input, pformat(output) + '\n',
- pformat(self.expected) + '\n')
-
- def test_parse(self):
- try:
- output = self.parser.parse(string2lines(self.input))
- except Exception, details:
- output = '%s: %s' % (details.__class__.__name__, details)
- self.compareOutput(self.input, pformat(output) + '\n',
- pformat(self.expected) + '\n')