configurationengine/source/plugins/symbian/ConeHCRPlugin/hcrplugin/tests/unittest_hcrml_reader.py
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/configurationengine/source/plugins/symbian/ConeHCRPlugin/hcrplugin/tests/unittest_hcrml_reader.py	Thu Mar 11 17:04:37 2010 +0200
@@ -0,0 +1,249 @@
+#
+# 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, shutil
+import sys
+import __init__
+import re
+import logging
+import xml.parsers.expat
+import codecs
+from hcrplugin.hcr_exceptions import *
+from hcrplugin.hcrrepository import HcrRecord, HcrRepository
+from hcrplugin.hcrml_parser import *
+
+
+from testautomation.utils import hex_to_bindata
+
+
+from cone.public import api, exceptions
+
+try:
+    from cElementTree import ElementTree
+except ImportError:
+    try:    
+        from elementtree import ElementTree
+    except ImportError:
+        try:
+            from xml.etree import cElementTree as ElementTree
+        except ImportError:
+            from xml.etree import ElementTree
+
+from cone.public import exceptions,plugin,utils,api
+
+
+
+ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
+
+NAMESPACE = 'http://www.symbianfoundation.org/xml/hcrml/1'
+
+
+class DummyConfiguration(object):
+    RESOURCES = {
+        'layer1/dummy.hcrml'    : '<hcr xmlns="%s"><category name="Cat0" uid="0"/></hcr>' % NAMESPACE,
+        'layer1/dummy1.hcrml'   : '<hcr xmlns="%s"><category name="Cat1" uid="1"/></hcr>' % NAMESPACE,
+        'layer2/dummy2.hcrml'   : '<hcr xmlns="%s"><category name="Cat2" uid="2"/></hcr>' % NAMESPACE,
+        'layer2/dummy3.hcrml'   : '<hcr xmlns="%s"><category name="Cat3" uid="3"/></hcr>' % NAMESPACE,
+        'layer3/dummy.gcfml'    : '',
+        'layer3/dummy.crml'     : '',
+        'layer4/dummy.ruleml'   : '',
+        'layer4/hcr_dat.hcrml'  : '<hcr xmlns="%s"><output file="some/test/hcr.dat" type="hcr"><include ref="*.hcrml"/></output></hcr>' % NAMESPACE,
+    }
+    
+    def list_resources(self):
+        return sorted(self.RESOURCES.keys())
+    
+    def get_resource(self, res_ref):
+        class DummyResource(object):
+            def __init__(self, data):   self.data = data
+            def read(self):             return self.data
+            def close(self):            pass
+        return DummyResource(self.RESOURCES[res_ref])
+
+
+class TestHCRHeader(unittest.TestCase):
+
+    def setUp(self):
+        self.reader = HcrmlReader(None, None)
+
+    def test_read_hcrml_output(self):
+        xml = '<hcr xmlns="%s"><output file="some/test/file.h" type="header"/></hcr>' % NAMESPACE
+        self.reader.doc = ElementTree.fromstring(xml)
+        output = self.reader.read_hcrml_output()
+        self.assertEquals(output.type, 'header')
+        self.assertEquals(output.file, 'some/test/file.h')
+        self.assertEquals(output.version, None)
+        self.assertEquals(output.read_only, None)
+        self.assertEquals(output.categories, [])
+    
+    def _run_test_read_invalid_hcrml_output(self, xml, expected_exception):
+        try:
+            self.reader.doc = ElementTree.fromstring(xml)
+            self.reader.read_hcrml_output()
+            self.fail("Expected exception not raised!")
+        except expected_exception:
+            pass
+    
+    def test_read_invalid_hcrml_output(self):
+        xml = '<hcr xmlns="%s"><output file="some/test/file.h"/></hcr>' % NAMESPACE
+        self._run_test_read_invalid_hcrml_output(xml, NoTypeDefinedInOutPutTagError)
+        
+        xml = '<hcr xmlns="%s"><output file="some/test/file.h" type="foobar"/></hcr>' % NAMESPACE
+        self._run_test_read_invalid_hcrml_output(xml, InvalidTypeDefinedInOutPutTagError)
+        
+    
+    def test_read_hcrml_output_with_include(self):
+        config = DummyConfiguration()
+        resource_ref =  'layer4/hcr_dat.hcrml'
+        
+        self.reader = HcrmlReader(resource_ref, config)
+        self.reader.doc = ElementTree.fromstring(config.get_resource(resource_ref).read())
+        output = self.reader.read_hcrml_output()
+        self.assertEquals(output.type, 'hcr')
+        self.assertEquals(output.file, 'some/test/hcr.dat')
+        self.assertEquals(
+            sorted([cat.category_uid for cat in output.categories]),
+            sorted([0, 1, 2, 3]))
+
+    
+    def test_read_hcrml_output_with_overlapping_includes(self):
+        config = DummyConfiguration()
+        resource_ref =  'layer4/hcr_dat.hcrml'
+        
+        XML = """<hcr xmlns="%s">
+            <output file="hcr.dat" type="hcr">
+                <include ref="dummy.hcrml"/>
+                <include ref="dummy2.hcrml"/>
+                <include ref="layer1/*.hcrml"/>
+            </output>
+        </hcr>
+        """% NAMESPACE
+        
+        self.reader = HcrmlReader(resource_ref, config)
+        self.reader.doc = ElementTree.fromstring(XML)
+        output = self.reader.read_hcrml_output()
+        self.assertEquals(output.type, 'hcr')
+        self.assertEquals(output.file, 'hcr.dat')
+        self.assertEquals(
+            sorted([cat.category_uid for cat in output.categories]),
+            sorted([0, 1, 2]))
+
+    def test_read_hcrml_category(self):
+        xml = '<category name="KCatGPIO" uid="0x10001234"/>'
+        etree = ElementTree.fromstring(xml)
+        category = self.reader.read_hrcml_category(etree)
+        self.assertEquals(category.name, 'KCatGPIO')
+        self.assertEquals(category.category_uid, 0x10001234)
+    
+    def _run_test_read_invalid_hcrml_category(self, xml, expected_exception):
+        try:
+            etree = ElementTree.fromstring(xml)
+            setting = self.reader.read_hrcml_category(etree)
+            self.fail("Expected exception not raised!")
+        except expected_exception:
+            pass
+    
+    def test_read_invalid_hcrml_category(self):
+        xml = '<category name="KCatGPIO"/>'
+        self._run_test_read_invalid_hcrml_category(xml, NoCategoryUIDInHcrmlFileError)
+        xml = '<category uid="0x10001234"/>'
+        self._run_test_read_invalid_hcrml_category(xml, NoCategoryNameInHcrmlFileError)
+
+    def test_read_hcrml_setting(self):
+        xml = '<setting ref="hcrexample.DebounceInterval" name="KElmGPIO_DebounceInterval" type="int32" id="0"/>'
+        etree = ElementTree.fromstring(xml)
+        setting = self.reader.read_hcrml_setting(etree)
+        self.assertEquals(setting.ref, 'hcrexample.DebounceInterval')
+        self.assertEquals(setting.name, 'KElmGPIO_DebounceInterval')
+        self.assertEquals(setting.type, 'int32')
+        self.assertEquals(setting.id, 0)
+    
+    def _run_test_read_invalid_hcrml_setting(self, xml, expected_exception):
+        try:
+            etree = ElementTree.fromstring(xml)
+            setting = self.reader.read_hcrml_setting(etree)
+            self.fail("Expected exception not raised!")
+        except expected_exception:
+            pass
+    
+    def test_read_invalid_hcrml_setting(self):
+        xml = '<setting name="xyz" type="int32" id="0"/>'
+        self._run_test_read_invalid_hcrml_setting(xml, NoRefInHcrmlFileError)
+        
+        xml = '<setting ref="x.y" name="xyz" id="0"/>'
+        self._run_test_read_invalid_hcrml_setting(xml, NoTypeAttributeInSettingHcrmlFileError)
+        
+        xml = '<setting ref="x.y" type="int32" id="0"/>'
+        self._run_test_read_invalid_hcrml_setting(xml, NoNameAttributeInSettingHcrmlFileError)
+        
+        xml = '<setting ref="x.y" name="xyz" type="int32"/>'
+        self._run_test_read_invalid_hcrml_setting(xml, NoIdAttributeInSettingHcrmlFileError)
+
+        
+
+    def test_read_hcrml_flag(self):
+        xml = '<flags Uninitialised="0" Modifiable="0" Persistent="0"/>'
+        etree = ElementTree.fromstring(xml)
+        flag = self.reader.read_hrcml_flags(etree)
+        self.assertEquals(flag.Uninitialised, '0')
+        self.assertEquals(flag.Modifiable, '0')
+        self.assertEquals(flag.Persistent, '0')
+        
+    def test_filter_file_list_by_include_ref(self):
+        lst = [
+            'layer1/dummy.hcrml',
+            'dummy.hcrml',
+            'layer1/dummy1.hcrml',
+            'layer2/dummy2.hcrml',
+            'layer2/dummy3.hcrml',
+            'layer3/test_dummy.hcrml',
+            'layer3/dummy.gcfml',
+            'layer3/dummy.crml',
+            'layer4/hcr_dat.hcrml',
+        ]
+        
+        filt = self.reader.filter_file_list_by_include_ref
+        
+        self.assertEquals(sorted(filt(lst, '*.hcrml')), sorted([
+            'dummy.hcrml',
+            'layer1/dummy.hcrml',
+            'layer1/dummy1.hcrml',
+            'layer2/dummy2.hcrml',
+            'layer2/dummy3.hcrml',
+            'layer3/test_dummy.hcrml',
+            'layer4/hcr_dat.hcrml',]))
+        
+        self.assertEquals(sorted(filt(lst, 'dummy.hcrml')), sorted([
+            'dummy.hcrml',
+            'layer1/dummy.hcrml',]))
+        
+        self.assertEquals(sorted(filt(lst, 'dummy*.hcrml')), sorted([
+            'dummy.hcrml',
+            'layer1/dummy.hcrml',
+            'layer1/dummy1.hcrml',
+            'layer2/dummy2.hcrml',
+            'layer2/dummy3.hcrml',]))
+        
+        self.assertEquals(sorted(filt(lst, 'layer1/*')), sorted([
+            'layer1/dummy.hcrml',
+            'layer1/dummy1.hcrml',]))
+        
+        self.assertEquals(sorted(filt(lst, 'layer4/*')), sorted([
+            'layer4/hcr_dat.hcrml']))
+        
+        self.assertEquals(sorted(filt(lst, 'hcr_dat.hcrml')), sorted([
+            'layer4/hcr_dat.hcrml']))