# Copyright (c) Twisted Matrix Laboratories. # See LICENSE for details. """ Tests for L{twisted.lore.lint}. """ import sys from xml.dom import minidom from cStringIO import StringIO from twisted.trial.unittest import TestCase from twisted.lore.lint import getDefaultChecker from twisted.lore.process import ProcessingFailure class DefaultTagCheckerTests(TestCase): """ Tests for L{twisted.lore.lint.DefaultTagChecker}. """ def test_quote(self): """ If a non-comment node contains a quote (C{'"'}), the checker returned by L{getDefaultChecker} reports an error and raises L{ProcessingFailure}. """ documentSource = ( '' 'foo' '

foo

"
' '') document = minidom.parseString(documentSource) filename = self.mktemp() checker = getDefaultChecker() output = StringIO() patch = self.patch(sys, 'stdout', output) self.assertRaises(ProcessingFailure, checker.check, document, filename) patch.restore() self.assertIn("contains quote", output.getvalue()) def test_quoteComment(self): """ If a comment node contains a quote (C{'"'}), the checker returned by L{getDefaultChecker} does not report an error. """ documentSource = ( '' 'foo' '

foo

' '') document = minidom.parseString(documentSource) filename = self.mktemp() checker = getDefaultChecker() output = StringIO() patch = self.patch(sys, 'stdout', output) checker.check(document, filename) patch.restore() self.assertEqual(output.getvalue(), "") def test_aNode(self): """ If there is an tag in the document, the checker returned by L{getDefaultChecker} does not report an error. """ documentSource = ( '' 'foo' '

foo

A link.' '') self.assertEqual(self._lintCheck(True, documentSource), "") def test_textMatchesRef(self): """ If an I{a} node has a link with a scheme as its contained text, a warning is emitted if that link does not match the value of the I{href} attribute. """ documentSource = ( '' 'foo' '

foo

' '%s' '' '') self.assertEqual( self._lintCheck(True, documentSource % ("http://bar/baz",)), "") self.assertIn( "link text does not match href", self._lintCheck(False, documentSource % ("http://bar/quux",))) def _lintCheck(self, expectSuccess, source): """ Lint the given document source and return the output. @param expectSuccess: A flag indicating whether linting is expected to succeed or not. @param source: The document source to lint. @return: A C{str} of the output of linting. """ document = minidom.parseString(source) filename = self.mktemp() checker = getDefaultChecker() output = StringIO() patch = self.patch(sys, 'stdout', output) try: try: checker.check(document, filename) finally: patch.restore() except ProcessingFailure, e: if expectSuccess: raise else: if not expectSuccess: self.fail( "Expected checker to fail, but it did not. " "Output was: %r" % (output.getvalue(),)) return output.getvalue()