--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/configurationengine/source/cone/validation/tests/unittest_schemavalidation.py Tue Aug 10 14:29:28 2010 +0300
@@ -0,0 +1,192 @@
+#
+# 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
+import os
+import StringIO
+
+from testautomation.base_testcase import BaseTestCase
+from cone.public import api, plugin, utils, exceptions
+from cone.validation import schemavalidation
+
+ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
+
+CONFML1_NAMESPACE = 'http://www.s60.com/xml/confml/1'
+CONFML2_NAMESPACE = 'http://www.s60.com/xml/confml/2'
+
+class DummyResource(object):
+ def __init__(self, data):
+ self.data = data
+ def read(self):
+ return self.data
+ def close(self):
+ pass
+
+class DummyConfiguration(object):
+ def __init__(self, resources):
+ self.resources = resources
+
+ def get_resource(self, ref):
+ if ref in self.resources:
+ return DummyResource(self.resources[ref])
+ else:
+ raise exceptions.NotFound("No such resource '%s'!" % ref)
+
+class TestConfmlSchemaValidation(BaseTestCase, schemavalidation.SchemaValidationTestMixin):
+
+ def test_valid_confml2_files(self):
+ self.assert_schemavalidation_succeeds(
+ type = 'confml',
+ dir = os.path.join(ROOT_PATH, 'testdata/schema/confml2/valid'),
+ namespace = CONFML2_NAMESPACE)
+
+ def test_invalid_confml2_files(self):
+ self.assert_schemavalidation_fails(
+ type = 'confml',
+ dir = os.path.join(ROOT_PATH, 'testdata/schema/confml2/invalid'),
+ namespace = CONFML2_NAMESPACE)
+
+ def test_valid_confml1_files(self):
+ self.assert_schemavalidation_succeeds(
+ type = 'confml',
+ dir = os.path.join(ROOT_PATH, 'testdata/schema/confml1/valid'),
+ namespace = CONFML1_NAMESPACE)
+
+ def test_invalid_confml1_files(self):
+ self.assert_schemavalidation_fails(
+ type = 'confml',
+ dir = os.path.join(ROOT_PATH, 'testdata/schema/confml1/invalid'),
+ namespace = CONFML1_NAMESPACE)
+
+ def test_validate_confml_invalid_xml_data(self):
+ config = DummyConfiguration({'foo.confml': 'foo'})
+ problems = schemavalidation.validate_confml_file(config, 'foo.confml')
+ self.assertEquals(len(problems), 1)
+ prob = problems[0]
+ #self.assertEquals(prob.type, api.Problem.TYPE_XML_PROBLEM)
+ self.assertEquals(prob.severity, api.Problem.SEVERITY_ERROR)
+ self.assertEquals(prob.line, 1)
+
+ def test_validate_confml_invalid_xml_data_but_valid_root(self):
+ REF = 'test.confml'
+ DATA = """<?xml version="1.0" encoding="UTF-8"?>
+ <configuration xmlns="http://www.s60.com/xml/confml/2">
+ <test someattr/>
+ </configuration>""".encode('utf-8')
+ config = DummyConfiguration({REF: DATA})
+ problems = schemavalidation.validate_confml_file(config, REF)
+ self.assertEquals(len(problems), 1)
+ prob = problems[0]
+ #self.assertEquals(prob.type, api.Problem.TYPE_XML_PROBLEM)
+ self.assertEquals(prob.severity, api.Problem.SEVERITY_ERROR)
+ self.assertEquals(prob.line, 3)
+
+ def test_validate_confml_unsupported_namespace(self):
+ DATA = """<?xml version="1.0" encoding="UTF-8"?>
+ <unsupported xmlns="http://www.test.com/xml/unsupported">
+ <test someattr="yay"/>
+ </unsupported>""".encode('utf-8')
+ self.assertRaises(exceptions.ConfmlParseError, schemavalidation.validate_confml_data, DATA)
+
+
+
+
+class TestImplmlSchemaValidation(BaseTestCase, schemavalidation.SchemaValidationTestMixin):
+
+ DUMMY1_XSD_DATA = """<?xml version="1.0" encoding="UTF-8"?>
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.dummy.com/dummy1"
+ elementFormDefault="qualified">
+
+ <xs:element name="dummy1">
+ <xs:complexType>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element name="myElem" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+ </xs:schema>"""
+
+ DUMMY2_XSD_DATA = """<?xml version="1.0" encoding="UTF-8"?>
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.dummy.com/dummy2"
+ elementFormDefault="qualified">
+
+ <xs:element name="dummy2">
+ <xs:complexType>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element name="someElem" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+ </xs:schema>"""
+
+ def setUp(self):
+ class MockReader1(plugin.ReaderBase):
+ NAMESPACE = "http://www.dummy.com/dummy1"
+ NAMESPACE_ID = "dummy1ml"
+ FILE_EXTENSIONS = ['dummy1ml']
+ ROOT_ELEMENT_NAME = 'dummy1'
+ @classmethod
+ def get_schema_data(cls):
+ return self.DUMMY1_XSD_DATA
+ class MockReader2(plugin.ReaderBase):
+ NAMESPACE = "http://www.dummy.com/dummy2"
+ NAMESPACE_ID = "dummy2ml"
+ FILE_EXTENSIONS = ['dummy2ml']
+ ROOT_ELEMENT_NAME = 'dummy2'
+ @classmethod
+ def get_schema_data(cls):
+ return self.DUMMY2_XSD_DATA
+ class MockReader3(plugin.ReaderBase):
+ NAMESPACE = "http://www.dummy.com/dummy3"
+ NAMESPACE_ID = "dummy3ml"
+ FILE_EXTENSIONS = ['dummy3ml']
+ ROOT_ELEMENT_NAME = 'dummy3'
+ plugin.ImplFactory.set_reader_classes_override([MockReader1, MockReader2, MockReader3])
+
+ def tearDown(self):
+ plugin.ImplFactory.set_reader_classes_override(None)
+
+ def test_valid_implml_files(self):
+ self.assert_schemavalidation_succeeds(
+ type = 'implml',
+ dir = os.path.join(ROOT_PATH, 'testdata/schema/implml/valid'))
+
+ def test_invalid_implml_files(self):
+ self.assert_schemavalidation_fails(
+ type = 'implml',
+ dir = os.path.join(ROOT_PATH, 'testdata/schema/implml/invalid'))
+
+ def test_validate_implml_invalid_xml_data(self):
+ self.assertRaises(exceptions.XmlParseError, schemavalidation.validate_implml_data, "foo")
+
+ def test_validate_implml_invalid_xml_data_but_valid_root(self):
+ DATA = """<?xml version="1.0" encoding="UTF-8"?>
+ <implml>
+ <test someattr/>
+ </implml>""".encode('utf-8')
+ self.assertRaises(exceptions.ImplmlParseError, schemavalidation.validate_implml_data, DATA)
+
+ def test_validate_implml_unsupported_namespace(self):
+ DATA = """<?xml version="1.0" encoding="UTF-8"?>
+ <unsupported xmlns="http://www.test.com/xml/unsupported">
+ <test someattr="yay"/>
+ </unsupported>""".encode('utf-8')
+ self.assertRaises(exceptions.ImplmlParseError, schemavalidation.validate_implml_data, DATA)
+
+if __name__ == '__main__':
+ unittest.main()