diff -r 000000000000 -r 2e8eeb919028 configurationengine/source/cone/public/tests/unittest_xml_parsing.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/configurationengine/source/cone/public/tests/unittest_xml_parsing.py Thu Mar 11 17:04:37 2010 +0200 @@ -0,0 +1,130 @@ +# *-* coding: utf-8 *-* +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +import sys, os +import unittest +import StringIO +import __init__ + +from cone.public import utils, exceptions + +ROOT_PATH = os.path.dirname(os.path.abspath(__file__)) + +class ElementTreeBackendTester(object): + """ + Base tester class that contains all test cases. + + The actual test case classes derive from this and set the + class attributes BACKEND_ID and LINE_NUMBERS. + """ + + DATA = u""" + + + + カタカナ + + + some text + + """.encode('utf-8') + + # ID of the ElementTree back-end to use in the tests + BACKEND_ID = None + + # Whether to check if line numbers in elements are correct or None + LINE_NUMBERS = False + + def setUp(self): + self.orig_backend_id = utils.etree.get_backend_id() + utils.etree.set_backend_id(self.BACKEND_ID) + + def tearDown(self): + utils.etree.set_backend_id(self.orig_backend_id) + + def assert_lineno_equals(self, actual, expected): + if self.LINE_NUMBERS: + self.assertEquals(actual, expected) + else: + self.assertEquals(actual, None) + + def test_correct_parser_set(self): + self.assertEquals(utils.etree.get_backend_id(), self.BACKEND_ID) + + def test_fromstring_successful(self): + root = utils.etree.fromstring(self.DATA) + self.assertEquals(root.tag, '{http://www.test.com/xml/1}root') + children = [e for e in root] + self.assertEquals(len(children), 3) + self.assertEquals(children[0].tag, '{http://www.test.com/xml/1}elem1') + self.assertEquals(children[1].tag, '{http://www.test.com/xml/1}elem2') + self.assertEquals(children[2].tag, '{http://www.test.com/xml/1}elem3') + self.assertEquals(children[1].text, u'カタカナ') + + self.assert_lineno_equals(utils.etree.get_lineno(root), 2) + self.assert_lineno_equals(utils.etree.get_lineno(children[0]), 4) + self.assert_lineno_equals(utils.etree.get_lineno(children[1]), 5) + self.assert_lineno_equals(utils.etree.get_lineno(children[2]), 6) + + def test_tostring_ascii(self): + root = utils.etree.fromstring(self.DATA) + output = utils.etree.tostring(root) + + def test_tostring_utf_8(self): + root = utils.etree.fromstring(self.DATA) + output = utils.etree.tostring(root, 'UTF-8') + + def test_tostring_utf_16(self): + root = utils.etree.fromstring(self.DATA) + output = utils.etree.tostring(root, 'UTF-16') + + def test_fromstring_failed(self): + data = """ + + + testing + """ + try: + etree = utils.etree.fromstring(data) + self.fail("XmlParseError not raised!") + except exceptions.XmlParseError, e: + self.assertEquals(e.lineno, 4) + +# ============================================================================ +# Actual test cases +# ============================================================================ + +# NOTE: +# The test classes MUST inherit the two super-classes in the order +# (ElementTreeBackendTester, unittest.TestCase), or otherwise setUp() and +# tearDown() will not be overridden correctly + +class TestElementTreeBackend(ElementTreeBackendTester, unittest.TestCase): + BACKEND_ID = utils.etree.BACKEND_ELEMENT_TREE + LINE_NUMBERS = True + +class TestCElementTreeBackend(ElementTreeBackendTester, unittest.TestCase): + BACKEND_ID = utils.etree.BACKEND_C_ELEMENT_TREE + LINE_NUMBERS = False + +class TestLxmlBackend(ElementTreeBackendTester, unittest.TestCase): + BACKEND_ID = utils.etree.BACKEND_LXML + LINE_NUMBERS = True + + +if __name__ == '__main__': + unittest.main()