|
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'])) |