configurationengine/source/plugins/symbian/ConeHCRPlugin/hcrplugin/tests/unittest_hcrml_reader.py
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
equal deleted inserted replaced
-1:000000000000 0:2e8eeb919028
       
     1 #
       
     2 # Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 # All rights reserved.
       
     4 # This component and the accompanying materials are made available
       
     5 # under the terms of "Eclipse Public License v1.0"
       
     6 # which accompanies this distribution, and is available
       
     7 # at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 #
       
     9 # Initial Contributors:
       
    10 # Nokia Corporation - initial contribution.
       
    11 #
       
    12 # Contributors:
       
    13 #
       
    14 # Description: 
       
    15 #
       
    16 
       
    17 import unittest
       
    18 import os, shutil
       
    19 import sys
       
    20 import __init__
       
    21 import re
       
    22 import logging
       
    23 import xml.parsers.expat
       
    24 import codecs
       
    25 from hcrplugin.hcr_exceptions import *
       
    26 from hcrplugin.hcrrepository import HcrRecord, HcrRepository
       
    27 from hcrplugin.hcrml_parser import *
       
    28 
       
    29 
       
    30 from testautomation.utils import hex_to_bindata
       
    31 
       
    32 
       
    33 from cone.public import api, exceptions
       
    34 
       
    35 try:
       
    36     from cElementTree import ElementTree
       
    37 except ImportError:
       
    38     try:    
       
    39         from elementtree import ElementTree
       
    40     except ImportError:
       
    41         try:
       
    42             from xml.etree import cElementTree as ElementTree
       
    43         except ImportError:
       
    44             from xml.etree import ElementTree
       
    45 
       
    46 from cone.public import exceptions,plugin,utils,api
       
    47 
       
    48 
       
    49 
       
    50 ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
       
    51 
       
    52 NAMESPACE = 'http://www.symbianfoundation.org/xml/hcrml/1'
       
    53 
       
    54 
       
    55 class DummyConfiguration(object):
       
    56     RESOURCES = {
       
    57         'layer1/dummy.hcrml'    : '<hcr xmlns="%s"><category name="Cat0" uid="0"/></hcr>' % NAMESPACE,
       
    58         'layer1/dummy1.hcrml'   : '<hcr xmlns="%s"><category name="Cat1" uid="1"/></hcr>' % NAMESPACE,
       
    59         'layer2/dummy2.hcrml'   : '<hcr xmlns="%s"><category name="Cat2" uid="2"/></hcr>' % NAMESPACE,
       
    60         'layer2/dummy3.hcrml'   : '<hcr xmlns="%s"><category name="Cat3" uid="3"/></hcr>' % NAMESPACE,
       
    61         'layer3/dummy.gcfml'    : '',
       
    62         'layer3/dummy.crml'     : '',
       
    63         'layer4/dummy.ruleml'   : '',
       
    64         'layer4/hcr_dat.hcrml'  : '<hcr xmlns="%s"><output file="some/test/hcr.dat" type="hcr"><include ref="*.hcrml"/></output></hcr>' % NAMESPACE,
       
    65     }
       
    66     
       
    67     def list_resources(self):
       
    68         return sorted(self.RESOURCES.keys())
       
    69     
       
    70     def get_resource(self, res_ref):
       
    71         class DummyResource(object):
       
    72             def __init__(self, data):   self.data = data
       
    73             def read(self):             return self.data
       
    74             def close(self):            pass
       
    75         return DummyResource(self.RESOURCES[res_ref])
       
    76 
       
    77 
       
    78 class TestHCRHeader(unittest.TestCase):
       
    79 
       
    80     def setUp(self):
       
    81         self.reader = HcrmlReader(None, None)
       
    82 
       
    83     def test_read_hcrml_output(self):
       
    84         xml = '<hcr xmlns="%s"><output file="some/test/file.h" type="header"/></hcr>' % NAMESPACE
       
    85         self.reader.doc = ElementTree.fromstring(xml)
       
    86         output = self.reader.read_hcrml_output()
       
    87         self.assertEquals(output.type, 'header')
       
    88         self.assertEquals(output.file, 'some/test/file.h')
       
    89         self.assertEquals(output.version, None)
       
    90         self.assertEquals(output.read_only, None)
       
    91         self.assertEquals(output.categories, [])
       
    92     
       
    93     def _run_test_read_invalid_hcrml_output(self, xml, expected_exception):
       
    94         try:
       
    95             self.reader.doc = ElementTree.fromstring(xml)
       
    96             self.reader.read_hcrml_output()
       
    97             self.fail("Expected exception not raised!")
       
    98         except expected_exception:
       
    99             pass
       
   100     
       
   101     def test_read_invalid_hcrml_output(self):
       
   102         xml = '<hcr xmlns="%s"><output file="some/test/file.h"/></hcr>' % NAMESPACE
       
   103         self._run_test_read_invalid_hcrml_output(xml, NoTypeDefinedInOutPutTagError)
       
   104         
       
   105         xml = '<hcr xmlns="%s"><output file="some/test/file.h" type="foobar"/></hcr>' % NAMESPACE
       
   106         self._run_test_read_invalid_hcrml_output(xml, InvalidTypeDefinedInOutPutTagError)
       
   107         
       
   108     
       
   109     def test_read_hcrml_output_with_include(self):
       
   110         config = DummyConfiguration()
       
   111         resource_ref =  'layer4/hcr_dat.hcrml'
       
   112         
       
   113         self.reader = HcrmlReader(resource_ref, config)
       
   114         self.reader.doc = ElementTree.fromstring(config.get_resource(resource_ref).read())
       
   115         output = self.reader.read_hcrml_output()
       
   116         self.assertEquals(output.type, 'hcr')
       
   117         self.assertEquals(output.file, 'some/test/hcr.dat')
       
   118         self.assertEquals(
       
   119             sorted([cat.category_uid for cat in output.categories]),
       
   120             sorted([0, 1, 2, 3]))
       
   121 
       
   122     
       
   123     def test_read_hcrml_output_with_overlapping_includes(self):
       
   124         config = DummyConfiguration()
       
   125         resource_ref =  'layer4/hcr_dat.hcrml'
       
   126         
       
   127         XML = """<hcr xmlns="%s">
       
   128             <output file="hcr.dat" type="hcr">
       
   129                 <include ref="dummy.hcrml"/>
       
   130                 <include ref="dummy2.hcrml"/>
       
   131                 <include ref="layer1/*.hcrml"/>
       
   132             </output>
       
   133         </hcr>
       
   134         """% NAMESPACE
       
   135         
       
   136         self.reader = HcrmlReader(resource_ref, config)
       
   137         self.reader.doc = ElementTree.fromstring(XML)
       
   138         output = self.reader.read_hcrml_output()
       
   139         self.assertEquals(output.type, 'hcr')
       
   140         self.assertEquals(output.file, 'hcr.dat')
       
   141         self.assertEquals(
       
   142             sorted([cat.category_uid for cat in output.categories]),
       
   143             sorted([0, 1, 2]))
       
   144 
       
   145     def test_read_hcrml_category(self):
       
   146         xml = '<category name="KCatGPIO" uid="0x10001234"/>'
       
   147         etree = ElementTree.fromstring(xml)
       
   148         category = self.reader.read_hrcml_category(etree)
       
   149         self.assertEquals(category.name, 'KCatGPIO')
       
   150         self.assertEquals(category.category_uid, 0x10001234)
       
   151     
       
   152     def _run_test_read_invalid_hcrml_category(self, xml, expected_exception):
       
   153         try:
       
   154             etree = ElementTree.fromstring(xml)
       
   155             setting = self.reader.read_hrcml_category(etree)
       
   156             self.fail("Expected exception not raised!")
       
   157         except expected_exception:
       
   158             pass
       
   159     
       
   160     def test_read_invalid_hcrml_category(self):
       
   161         xml = '<category name="KCatGPIO"/>'
       
   162         self._run_test_read_invalid_hcrml_category(xml, NoCategoryUIDInHcrmlFileError)
       
   163         xml = '<category uid="0x10001234"/>'
       
   164         self._run_test_read_invalid_hcrml_category(xml, NoCategoryNameInHcrmlFileError)
       
   165 
       
   166     def test_read_hcrml_setting(self):
       
   167         xml = '<setting ref="hcrexample.DebounceInterval" name="KElmGPIO_DebounceInterval" type="int32" id="0"/>'
       
   168         etree = ElementTree.fromstring(xml)
       
   169         setting = self.reader.read_hcrml_setting(etree)
       
   170         self.assertEquals(setting.ref, 'hcrexample.DebounceInterval')
       
   171         self.assertEquals(setting.name, 'KElmGPIO_DebounceInterval')
       
   172         self.assertEquals(setting.type, 'int32')
       
   173         self.assertEquals(setting.id, 0)
       
   174     
       
   175     def _run_test_read_invalid_hcrml_setting(self, xml, expected_exception):
       
   176         try:
       
   177             etree = ElementTree.fromstring(xml)
       
   178             setting = self.reader.read_hcrml_setting(etree)
       
   179             self.fail("Expected exception not raised!")
       
   180         except expected_exception:
       
   181             pass
       
   182     
       
   183     def test_read_invalid_hcrml_setting(self):
       
   184         xml = '<setting name="xyz" type="int32" id="0"/>'
       
   185         self._run_test_read_invalid_hcrml_setting(xml, NoRefInHcrmlFileError)
       
   186         
       
   187         xml = '<setting ref="x.y" name="xyz" id="0"/>'
       
   188         self._run_test_read_invalid_hcrml_setting(xml, NoTypeAttributeInSettingHcrmlFileError)
       
   189         
       
   190         xml = '<setting ref="x.y" type="int32" id="0"/>'
       
   191         self._run_test_read_invalid_hcrml_setting(xml, NoNameAttributeInSettingHcrmlFileError)
       
   192         
       
   193         xml = '<setting ref="x.y" name="xyz" type="int32"/>'
       
   194         self._run_test_read_invalid_hcrml_setting(xml, NoIdAttributeInSettingHcrmlFileError)
       
   195 
       
   196         
       
   197 
       
   198     def test_read_hcrml_flag(self):
       
   199         xml = '<flags Uninitialised="0" Modifiable="0" Persistent="0"/>'
       
   200         etree = ElementTree.fromstring(xml)
       
   201         flag = self.reader.read_hrcml_flags(etree)
       
   202         self.assertEquals(flag.Uninitialised, '0')
       
   203         self.assertEquals(flag.Modifiable, '0')
       
   204         self.assertEquals(flag.Persistent, '0')
       
   205         
       
   206     def test_filter_file_list_by_include_ref(self):
       
   207         lst = [
       
   208             'layer1/dummy.hcrml',
       
   209             'dummy.hcrml',
       
   210             'layer1/dummy1.hcrml',
       
   211             'layer2/dummy2.hcrml',
       
   212             'layer2/dummy3.hcrml',
       
   213             'layer3/test_dummy.hcrml',
       
   214             'layer3/dummy.gcfml',
       
   215             'layer3/dummy.crml',
       
   216             'layer4/hcr_dat.hcrml',
       
   217         ]
       
   218         
       
   219         filt = self.reader.filter_file_list_by_include_ref
       
   220         
       
   221         self.assertEquals(sorted(filt(lst, '*.hcrml')), sorted([
       
   222             'dummy.hcrml',
       
   223             'layer1/dummy.hcrml',
       
   224             'layer1/dummy1.hcrml',
       
   225             'layer2/dummy2.hcrml',
       
   226             'layer2/dummy3.hcrml',
       
   227             'layer3/test_dummy.hcrml',
       
   228             'layer4/hcr_dat.hcrml',]))
       
   229         
       
   230         self.assertEquals(sorted(filt(lst, 'dummy.hcrml')), sorted([
       
   231             'dummy.hcrml',
       
   232             'layer1/dummy.hcrml',]))
       
   233         
       
   234         self.assertEquals(sorted(filt(lst, 'dummy*.hcrml')), sorted([
       
   235             'dummy.hcrml',
       
   236             'layer1/dummy.hcrml',
       
   237             'layer1/dummy1.hcrml',
       
   238             'layer2/dummy2.hcrml',
       
   239             'layer2/dummy3.hcrml',]))
       
   240         
       
   241         self.assertEquals(sorted(filt(lst, 'layer1/*')), sorted([
       
   242             'layer1/dummy.hcrml',
       
   243             'layer1/dummy1.hcrml',]))
       
   244         
       
   245         self.assertEquals(sorted(filt(lst, 'layer4/*')), sorted([
       
   246             'layer4/hcr_dat.hcrml']))
       
   247         
       
   248         self.assertEquals(sorted(filt(lst, 'hcr_dat.hcrml')), sorted([
       
   249             'layer4/hcr_dat.hcrml']))