Index: grit/node/base_unittest.py |
=================================================================== |
--- grit/node/base_unittest.py (revision 0) |
+++ grit/node/base_unittest.py (revision 0) |
@@ -0,0 +1,169 @@ |
+#!/usr/bin/python2.4 |
+# Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+'''Unit tests for base.Node functionality (as used in various subclasses)''' |
+ |
+ |
+import os |
+import sys |
+if __name__ == '__main__': |
+ sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), '../..')) |
+ |
+import unittest |
+ |
+from grit.node import base |
+from grit.node import message |
+from grit.node import structure |
+from grit.node import variant |
+ |
+def MakePlaceholder(phname='BINGO'): |
+ ph = message.PhNode() |
+ ph.StartParsing(u'ph', None) |
+ ph.HandleAttribute(u'name', phname) |
+ ph.AppendContent(u'bongo') |
+ ph.EndParsing() |
+ return ph |
+ |
+ |
+class NodeUnittest(unittest.TestCase): |
+ def testWhitespaceHandling(self): |
+ # We test using the Message node type. |
+ node = message.MessageNode() |
+ node.StartParsing(u'hello', None) |
+ node.HandleAttribute(u'name', u'bla') |
+ node.AppendContent(u" ''' two spaces ") |
+ node.EndParsing() |
+ self.failUnless(node.GetCdata() == u' two spaces') |
+ |
+ node = message.MessageNode() |
+ node.StartParsing(u'message', None) |
+ node.HandleAttribute(u'name', u'bla') |
+ node.AppendContent(u" two spaces ''' ") |
+ node.EndParsing() |
+ self.failUnless(node.GetCdata() == u'two spaces ') |
+ |
+ def testWhitespaceHandlingWithChildren(self): |
+ # We test using the Message node type. |
+ node = message.MessageNode() |
+ node.StartParsing(u'message', None) |
+ node.HandleAttribute(u'name', u'bla') |
+ node.AppendContent(u" ''' two spaces ") |
+ node.AddChild(MakePlaceholder()) |
+ node.AppendContent(u' space before and after ') |
+ node.AddChild(MakePlaceholder('BONGO')) |
+ node.AppendContent(u" space before two after '''") |
+ node.EndParsing() |
+ self.failUnless(node.mixed_content[0] == u' two spaces ') |
+ self.failUnless(node.mixed_content[2] == u' space before and after ') |
+ self.failUnless(node.mixed_content[-1] == u' space before two after ') |
+ |
+ def testXmlFormatMixedContent(self): |
+ # Again test using the Message node type, because it is the only mixed |
+ # content node. |
+ node = message.MessageNode() |
+ node.StartParsing(u'message', None) |
+ node.HandleAttribute(u'name', u'name') |
+ node.AppendContent(u'Hello <young> ') |
+ |
+ ph = message.PhNode() |
+ ph.StartParsing(u'ph', None) |
+ ph.HandleAttribute(u'name', u'USERNAME') |
+ ph.AppendContent(u'$1') |
+ ex = message.ExNode() |
+ ex.StartParsing(u'ex', None) |
+ ex.AppendContent(u'Joi') |
+ ex.EndParsing() |
+ ph.AddChild(ex) |
+ ph.EndParsing() |
+ |
+ node.AddChild(ph) |
+ node.EndParsing() |
+ |
+ non_indented_xml = node.Format(node) |
+ self.failUnless(non_indented_xml == u'<message name="name">\n Hello ' |
+ u'<young> <ph name="USERNAME">$1<ex>Joi</ex></ph>' |
+ u'\n</message>') |
+ |
+ indented_xml = node.FormatXml(u' ') |
+ self.failUnless(indented_xml == u' <message name="name">\n Hello ' |
+ u'<young> <ph name="USERNAME">$1<ex>Joi</ex></ph>' |
+ u'\n </message>') |
+ |
+ def testXmlFormatMixedContentWithLeadingWhitespace(self): |
+ # Again test using the Message node type, because it is the only mixed |
+ # content node. |
+ node = message.MessageNode() |
+ node.StartParsing(u'message', None) |
+ node.HandleAttribute(u'name', u'name') |
+ node.AppendContent(u"''' Hello <young> ") |
+ |
+ ph = message.PhNode() |
+ ph.StartParsing(u'ph', None) |
+ ph.HandleAttribute(u'name', u'USERNAME') |
+ ph.AppendContent(u'$1') |
+ ex = message.ExNode() |
+ ex.StartParsing(u'ex', None) |
+ ex.AppendContent(u'Joi') |
+ ex.EndParsing() |
+ ph.AddChild(ex) |
+ ph.EndParsing() |
+ |
+ node.AddChild(ph) |
+ node.AppendContent(u" yessiree '''") |
+ node.EndParsing() |
+ |
+ non_indented_xml = node.Format(node) |
+ self.failUnless(non_indented_xml == |
+ u"<message name=\"name\">\n ''' Hello" |
+ u' <young> <ph name="USERNAME">$1<ex>Joi</ex></ph>' |
+ u" yessiree '''\n</message>") |
+ |
+ indented_xml = node.FormatXml(u' ') |
+ self.failUnless(indented_xml == |
+ u" <message name=\"name\">\n ''' Hello" |
+ u' <young> <ph name="USERNAME">$1<ex>Joi</ex></ph>' |
+ u" yessiree '''\n </message>") |
+ |
+ self.failUnless(node.GetNodeById('name')) |
+ |
+ def testXmlFormatContentWithEntities(self): |
+ '''Tests a bug where would not be escaped correctly.''' |
+ from grit import tclib |
+ msg_node = message.MessageNode.Construct(None, tclib.Message( |
+ text = 'BEGIN_BOLDHelloWHITESPACEthere!END_BOLD Bingo!', |
+ placeholders = [ |
+ tclib.Placeholder('BEGIN_BOLD', '<b>', 'bla'), |
+ tclib.Placeholder('WHITESPACE', ' ', 'bla'), |
+ tclib.Placeholder('END_BOLD', '</b>', 'bla')]), |
+ 'BINGOBONGO') |
+ xml = msg_node.FormatXml() |
+ self.failUnless(xml.find(' ') == -1, 'should have no entities') |
+ |
+ def testIter(self): |
+ # First build a little tree of message and ph nodes. |
+ node = message.MessageNode() |
+ node.StartParsing(u'message', None) |
+ node.HandleAttribute(u'name', u'bla') |
+ node.AppendContent(u" ''' two spaces ") |
+ node.AppendContent(u' space before and after ') |
+ ph = message.PhNode() |
+ ph.StartParsing(u'ph', None) |
+ ph.AddChild(message.ExNode()) |
+ ph.HandleAttribute(u'name', u'BINGO') |
+ ph.AppendContent(u'bongo') |
+ node.AddChild(ph) |
+ node.AddChild(message.PhNode()) |
+ node.AppendContent(u" space before two after '''") |
+ |
+ order = [message.MessageNode, message.PhNode, message.ExNode, message.PhNode] |
+ for n in node: |
+ self.failUnless(type(n) == order[0]) |
+ order = order[1:] |
+ self.failUnless(len(order) == 0) |
+ |
+ |
+if __name__ == '__main__': |
+ unittest.main() |
+ |
Property changes on: grit/node/base_unittest.py |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |