diff -r 000000000000 -r 2e8eeb919028 configurationengine/source/testautomation/testautomation/tests/unittest_compare_xml.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/configurationengine/source/testautomation/testautomation/tests/unittest_compare_xml.py Thu Mar 11 17:04:37 2010 +0200 @@ -0,0 +1,243 @@ +# +# 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 unittest +from testautomation import compare_xml + +class TestGetXmlEncoding(unittest.TestCase): + def assert_enc_eq(self, encoding, xml_data): + self.assertEquals(encoding, compare_xml._get_xml_encoding(xml_data)) + + def test_get_encoding(self): + self.assert_enc_eq('ASCII', u"""""".encode('ascii', 'xmlcharrefreplace')) + self.assert_enc_eq('ISO-8859-1', u"""""".encode('latin1')) + self.assert_enc_eq('utf-8', u"""""".encode('utf-8')) + self.assert_enc_eq('UTF-16', u"""""".encode('utf-16')) + self.assert_enc_eq('', u"""""".encode('utf-8')) + self.assert_enc_eq('', u"""""".encode('utf-8')) + +class TestCompareXml(unittest.TestCase): + REF_DATA = """ + + a sub-element + another sub-element + yet another sub-element + +""" + + def assert_comparison_result_equals(self, data1, data2, expected_result, msg=None, **kwargs): + class DebugStream: + def __init__(self): + self.messages = [] + def write(self, data): + self.messages.append(data) + + ds = DebugStream() + kwargs['debug_stream'] = ds + result = compare_xml.compare_xml_documents(data1, data2, **kwargs) + if result != expected_result: + d = [] + if msg != None: d.append(msg + '\n') + d.append("Comparison results are not equal (expected %s, got %s)\n" % (expected_result, result)) + d.append("Debug output:\n") + d.extend(ds.messages) + self.fail(''.join(d)) + + def test_identical(self): + self.assert_comparison_result_equals(self.REF_DATA, self.REF_DATA, True) + + def test_different_whitespace(self): + DATA = """ + +a sub-elementanother sub-element +yet another sub-element + + """ + self.assert_comparison_result_equals(self.REF_DATA, DATA, True) + + def test_attrs_in_different_order(self): + DATA = """ + + a sub-element + another sub-element + yet another sub-element + +""" + self.assert_comparison_result_equals(self.REF_DATA, DATA, True) + + def test_elements_in_different_order(self): + REF_DATA = """ + + 1 + 2 + 3 + + + + +""" + DATA = """ + + + 3 + 1 + + + 2 + +""" + self.assert_comparison_result_equals(REF_DATA, DATA, True) + + def test_different_root_contents(self): + DATA = """ + +some text content in root + a sub-element + another sub-element + yet another sub-element + +""" + self.assert_comparison_result_equals(self.REF_DATA, DATA, False) + + def test_different_subelem_contents(self): + DATA = """ + + a sub-element (with different content) + another sub-element + yet another sub-element + +""" + self.assert_comparison_result_equals(self.REF_DATA, DATA, False) + + def test_different_attrs_in_root(self): + DATA = """ + + a sub-element (with different content) + another sub-element + yet another sub-element + +""" + self.assert_comparison_result_equals(self.REF_DATA, DATA, False) + + def test_missing_attrs_in_root(self): + DATA = """ + + a sub-element (with different content) + another sub-element + yet another sub-element + +""" + self.assert_comparison_result_equals(self.REF_DATA, DATA, False) + + def test_different_attrs_in_subelem(self): + DATA = """ + + a sub-element (with different content) + another sub-element + yet another sub-element + +""" + self.assert_comparison_result_equals(self.REF_DATA, DATA, False) + + def test_different_whitespace_in_subelem_content(self): + DATA = """ + + a sub-element + another sub-element + yet another sub-element + +""" + self.assert_comparison_result_equals(self.REF_DATA, DATA, True) + + def test_ignore_root_namespace(self): + DATA = """ + + a sub-element + another sub-element + yet another sub-element + +""" + self.assert_comparison_result_equals(self.REF_DATA, DATA, True) + + def test_ignore_namespace(self): + DATA = """ + + a sub-element + another sub-element + yet another sub-element + +""" + self.assert_comparison_result_equals(self.REF_DATA, DATA, True, ignore_namespaces=True) + + def test_ignore_empty_tags(self): + REF_DATA = """ + + a sub-element + + 1 + 2 + + + +""" + DATA = """ + + a sub-element + + 1 + 2 + +""" + self.assert_comparison_result_equals(REF_DATA, DATA, False) + self.assert_comparison_result_equals(DATA, REF_DATA, False) + self.assert_comparison_result_equals(REF_DATA, DATA, False, ignored_empty_tags=['/rootElem/emptySubElem']) + self.assert_comparison_result_equals(DATA, REF_DATA, False, ignored_empty_tags=['/rootElem/emptySubElem']) + self.assert_comparison_result_equals(REF_DATA, DATA, False, ignored_empty_tags=['/rootElem/subElem/emptySubElem']) + self.assert_comparison_result_equals(DATA, REF_DATA, False, ignored_empty_tags=['/rootElem/subElem/emptySubElem']) + self.assert_comparison_result_equals(REF_DATA, DATA, True, ignored_empty_tags=['/rootElem/emptySubElem', '/rootElem/subElem/emptySubElem']) + self.assert_comparison_result_equals(DATA, REF_DATA, True, ignored_empty_tags=['/rootElem/emptySubElem', '/rootElem/subElem/emptySubElem']) + #self.assert_comparison_result_equals(DATA, REF_DATA, True, ignored_empty_tags=['emptySubElem']) + #self.assert_comparison_result_equals(REF_DATA, DATA, False, ignored_empty_tags=[('emptySubElem', 1)]) + #self.assert_comparison_result_equals(DATA, REF_DATA, False, ignored_empty_tags=[('emptySubElem', 1)]) + #self.assert_comparison_result_equals(REF_DATA, DATA, False, ignored_empty_tags=[('emptySubElem', 2)]) + #self.assert_comparison_result_equals(DATA, REF_DATA, False, ignored_empty_tags=[('emptySubElem', 2)]) + #self.assert_comparison_result_equals(REF_DATA, DATA, True, ignored_empty_tags=[('emptySubElem', 1), ('emptySubElem', 2)]) + #self.assert_comparison_result_equals(DATA, REF_DATA, True, ignored_empty_tags=[('emptySubElem', 1), ('emptySubElem', 2)]) + + def test_check_encoding(self): + DATA_DICT = { + 'ASCII': u"""""".encode('ascii', 'xmlcharrefreplace'), + 'ISO-8859-1': u"""""".encode('latin1'), + 'UTF8': u"""""".encode('utf-8'), + 'UTF-16': u"""""".encode('utf-16'), + 'None1': u"""""".encode('utf-8'), + 'None2': u"""""".encode('utf-8'), + } + + for key1 in DATA_DICT.keys(): + for key2 in DATA_DICT.keys(): + if key1 != key2 and not (key1.startswith('None') or key2.startswith('None')): + self.assert_comparison_result_equals( + DATA_DICT[key1], DATA_DICT[key2], + False, "Encoding check failed for '%s' vs. '%s'" % (key1, key2), + check_encoding=True) + self.assert_comparison_result_equals( + DATA_DICT[key1], DATA_DICT[key2], + True, "Comparison without encoding check failed for '%s' vs. '%s'" % (key1, key2), + check_encoding=False) \ No newline at end of file