| 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
|
|
|
|
|