diff -r 000000000000 -r 2e8eeb919028 configurationengine/source/plugins/symbian/ConeHCRPlugin/hcrplugin/tests/unittest_hcrml_reader.py --- /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' : '' % NAMESPACE, + 'layer1/dummy1.hcrml' : '' % NAMESPACE, + 'layer2/dummy2.hcrml' : '' % NAMESPACE, + 'layer2/dummy3.hcrml' : '' % NAMESPACE, + 'layer3/dummy.gcfml' : '', + 'layer3/dummy.crml' : '', + 'layer4/dummy.ruleml' : '', + 'layer4/hcr_dat.hcrml' : '' % 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 = '' % 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 = '' % NAMESPACE + self._run_test_read_invalid_hcrml_output(xml, NoTypeDefinedInOutPutTagError) + + xml = '' % 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 = """ + + + + + + + """% 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 = '' + 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 = '' + self._run_test_read_invalid_hcrml_category(xml, NoCategoryUIDInHcrmlFileError) + xml = '' + self._run_test_read_invalid_hcrml_category(xml, NoCategoryNameInHcrmlFileError) + + def test_read_hcrml_setting(self): + xml = '' + 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 = '' + self._run_test_read_invalid_hcrml_setting(xml, NoRefInHcrmlFileError) + + xml = '' + self._run_test_read_invalid_hcrml_setting(xml, NoTypeAttributeInSettingHcrmlFileError) + + xml = '' + self._run_test_read_invalid_hcrml_setting(xml, NoNameAttributeInSettingHcrmlFileError) + + xml = '' + self._run_test_read_invalid_hcrml_setting(xml, NoIdAttributeInSettingHcrmlFileError) + + + + def test_read_hcrml_flag(self): + xml = '' + 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']))