2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
7 """Unittests for grit.format.policy_templates.writers.admx_writer."""
13 if __name__ == '__main__':
14 sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..'))
17 from grit.format.policy_templates.writers import admx_writer
18 from grit.format.policy_templates.writers import xml_writer_base_unittest
19 from xml.dom import minidom
22 class AdmxWriterUnittest(xml_writer_base_unittest.XmlWriterBaseTest):
24 def _CreateDocumentElement(self):
25 dom_impl = minidom.getDOMImplementation('')
26 doc = dom_impl.createDocument(None, 'root', None)
27 return doc.documentElement
30 # Writer configuration. This dictionary contains parameter used by the ADMX
33 'win_group_policy_class': 'TestClass',
34 'win_supported_os': 'SUPPORTED_TESTOS',
35 'win_reg_mandatory_key_name': 'Software\\Policies\\Test',
36 'win_reg_recommended_key_name': 'Software\\Policies\\Test\\Recommended',
37 'win_mandatory_category_path': ['test_category'],
38 'win_recommended_category_path': ['test_recommended_category'],
39 'admx_namespace': 'ADMXWriter.Test.Namespace',
40 'admx_prefix': 'test_prefix'
42 self.writer = admx_writer.GetWriter(config)
45 def _GetPoliciesElement(self, doc):
46 node_list = doc.getElementsByTagName('policies')
47 self.assertTrue(node_list.length == 1)
48 return node_list.item(0)
50 def _GetCategoriesElement(self, doc):
51 node_list = doc.getElementsByTagName('categories')
52 self.assertTrue(node_list.length == 1)
53 return node_list.item(0)
56 self.writer.BeginTemplate()
57 self.writer.EndTemplate()
59 output = self.writer.GetTemplateText()
61 '<?xml version="1.0" ?>\n'
62 '<policyDefinitions revision="1.0" schemaVersion="1.0">\n'
63 ' <policyNamespaces>\n'
64 ' <target namespace="ADMXWriter.Test.Namespace"'
65 ' prefix="test_prefix"/>\n'
66 ' <using namespace="Microsoft.Policies.Windows" prefix="windows"/>\n'
67 ' </policyNamespaces>\n'
68 ' <resources minRequiredRevision="1.0"/>\n'
71 ' <definition displayName="'
72 '$(string.SUPPORTED_TESTOS)" name="SUPPORTED_TESTOS"/>\n'
76 ' <category displayName="$(string.test_category)"'
77 ' name="test_category"/>\n'
78 ' <category displayName="$(string.test_recommended_category)"'
79 ' name="test_recommended_category"/>\n'
82 '</policyDefinitions>')
83 self.AssertXMLEquals(output, expected_output)
85 def testEmptyPolicyGroup(self):
86 empty_policy_group = {
87 'name': 'PolicyGroup',
90 # Initialize writer to write a policy group.
91 self.writer.BeginTemplate()
93 self.writer.BeginPolicyGroup(empty_policy_group)
94 self.writer.EndPolicyGroup()
96 output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
98 self.AssertXMLEquals(output, expected_output)
100 output = self.GetXMLOfChildren(
101 self._GetCategoriesElement(self.writer._doc))
103 '<category displayName="$(string.test_category)"'
104 ' name="test_category"/>\n'
105 '<category displayName="$(string.test_recommended_category)"'
106 ' name="test_recommended_category"/>\n'
107 '<category displayName="$(string.PolicyGroup_group)"'
108 ' name="PolicyGroup">\n'
109 ' <parentCategory ref="test_category"/>\n'
112 self.AssertXMLEquals(output, expected_output)
114 def testPolicyGroup(self):
115 empty_policy_group = {
116 'name': 'PolicyGroup',
118 {'name': 'PolicyStub2',
120 {'name': 'PolicyStub1',
124 # Initialize writer to write a policy group.
125 self.writer.BeginTemplate()
127 self.writer.BeginPolicyGroup(empty_policy_group)
128 self.writer.EndPolicyGroup()
130 output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
132 self.AssertXMLEquals(output, expected_output)
134 output = self.GetXMLOfChildren(
135 self._GetCategoriesElement(self.writer._doc))
137 '<category displayName="$(string.test_category)"'
138 ' name="test_category"/>\n'
139 '<category displayName="$(string.test_recommended_category)"'
140 ' name="test_recommended_category"/>\n'
141 '<category displayName="$(string.PolicyGroup_group)"'
142 ' name="PolicyGroup">\n'
143 ' <parentCategory ref="test_category"/>\n'
145 self.AssertXMLEquals(output, expected_output)
148 def _initWriterForPolicy(self, writer, policy):
149 '''Initializes the writer to write the given policy next.
152 'name': 'PolicyGroup',
155 writer.BeginTemplate()
156 writer.BeginPolicyGroup(policy_group)
158 def testMainPolicy(self):
160 'name': 'DummyMainPolicy',
164 self._initWriterForPolicy(self.writer, main_policy)
166 self.writer.WritePolicy(main_policy)
168 output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
170 '<policy class="TestClass" displayName="$(string.DummyMainPolicy)"'
171 ' explainText="$(string.DummyMainPolicy_Explain)"'
172 ' key="Software\\Policies\\Test" name="DummyMainPolicy"'
173 ' presentation="$(presentation.DummyMainPolicy)"'
174 ' valueName="DummyMainPolicy">\n'
175 ' <parentCategory ref="PolicyGroup"/>\n'
176 ' <supportedOn ref="SUPPORTED_TESTOS"/>\n'
178 ' <decimal value="1"/>\n'
181 ' <decimal value="0"/>\n'
182 ' </disabledValue>\n'
185 self.AssertXMLEquals(output, expected_output)
187 def testRecommendedPolicy(self):
189 'name': 'DummyMainPolicy',
194 'name': 'PolicyGroup',
195 'policies': [main_policy],
197 self.writer.BeginTemplate()
198 self.writer.BeginRecommendedPolicyGroup(policy_group)
200 self.writer.WriteRecommendedPolicy(main_policy)
202 output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
204 '<policy class="TestClass" displayName="$(string.DummyMainPolicy)"'
205 ' explainText="$(string.DummyMainPolicy_Explain)"'
206 ' key="Software\\Policies\\Test\\Recommended"'
207 ' name="DummyMainPolicy_recommended"'
208 ' presentation="$(presentation.DummyMainPolicy)"'
209 ' valueName="DummyMainPolicy">\n'
210 ' <parentCategory ref="PolicyGroup_recommended"/>\n'
211 ' <supportedOn ref="SUPPORTED_TESTOS"/>\n'
213 ' <decimal value="1"/>\n'
216 ' <decimal value="0"/>\n'
217 ' </disabledValue>\n'
220 self.AssertXMLEquals(output, expected_output)
222 def testRecommendedOnlyPolicy(self):
224 'name': 'DummyMainPolicy',
227 'can_be_recommended': True,
228 'can_be_mandatory': False,
233 'name': 'PolicyGroup',
234 'policies': [main_policy],
236 self.writer.BeginTemplate()
237 self.writer.BeginRecommendedPolicyGroup(policy_group)
239 self.writer.WritePolicy(main_policy)
240 self.writer.WriteRecommendedPolicy(main_policy)
242 output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
244 '<policy class="TestClass" displayName="$(string.DummyMainPolicy)"'
245 ' explainText="$(string.DummyMainPolicy_Explain)"'
246 ' key="Software\\Policies\\Test\\Recommended"'
247 ' name="DummyMainPolicy_recommended"'
248 ' presentation="$(presentation.DummyMainPolicy)"'
249 ' valueName="DummyMainPolicy">\n'
250 ' <parentCategory ref="PolicyGroup_recommended"/>\n'
251 ' <supportedOn ref="SUPPORTED_TESTOS"/>\n'
253 ' <decimal value="1"/>\n'
256 ' <decimal value="0"/>\n'
257 ' </disabledValue>\n'
260 self.AssertXMLEquals(output, expected_output)
262 def testStringPolicy(self):
264 'name': 'SampleStringPolicy',
267 self._initWriterForPolicy(self.writer, string_policy)
269 self.writer.WritePolicy(string_policy)
270 output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
272 '<policy class="TestClass" displayName="$(string.SampleStringPolicy)"'
273 ' explainText="$(string.SampleStringPolicy_Explain)"'
274 ' key="Software\\Policies\\Test" name="SampleStringPolicy"'
275 ' presentation="$(presentation.SampleStringPolicy)">\n'
276 ' <parentCategory ref="PolicyGroup"/>\n'
277 ' <supportedOn ref="SUPPORTED_TESTOS"/>\n'
279 ' <text id="SampleStringPolicy" valueName="SampleStringPolicy"/>\n'
282 self.AssertXMLEquals(output, expected_output)
284 def testIntPolicy(self):
286 'name': 'SampleIntPolicy',
289 self._initWriterForPolicy(self.writer, int_policy)
291 self.writer.WritePolicy(int_policy)
292 output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
294 '<policy class="TestClass" displayName="$(string.SampleIntPolicy)"'
295 ' explainText="$(string.SampleIntPolicy_Explain)"'
296 ' key="Software\\Policies\\Test" name="SampleIntPolicy"'
297 ' presentation="$(presentation.SampleIntPolicy)">\n'
298 ' <parentCategory ref="PolicyGroup"/>\n'
299 ' <supportedOn ref="SUPPORTED_TESTOS"/>\n'
301 ' <decimal id="SampleIntPolicy" maxValue="2000000000" '
302 'valueName="SampleIntPolicy"/>\n'
305 self.AssertXMLEquals(output, expected_output)
307 def testIntEnumPolicy(self):
309 'name': 'SampleEnumPolicy',
312 {'name': 'item_1', 'value': 0},
313 {'name': 'item_2', 'value': 1},
317 self._initWriterForPolicy(self.writer, enum_policy)
318 self.writer.WritePolicy(enum_policy)
319 output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
321 '<policy class="TestClass" displayName="$(string.SampleEnumPolicy)"'
322 ' explainText="$(string.SampleEnumPolicy_Explain)"'
323 ' key="Software\\Policies\\Test" name="SampleEnumPolicy"'
324 ' presentation="$(presentation.SampleEnumPolicy)">\n'
325 ' <parentCategory ref="PolicyGroup"/>\n'
326 ' <supportedOn ref="SUPPORTED_TESTOS"/>\n'
328 ' <enum id="SampleEnumPolicy" valueName="SampleEnumPolicy">\n'
329 ' <item displayName="$(string.item_1)">\n'
331 ' <decimal value="0"/>\n'
334 ' <item displayName="$(string.item_2)">\n'
336 ' <decimal value="1"/>\n'
342 self.AssertXMLEquals(output, expected_output)
344 def testStringEnumPolicy(self):
346 'name': 'SampleEnumPolicy',
347 'type': 'string-enum',
349 {'name': 'item_1', 'value': 'one'},
350 {'name': 'item_2', 'value': 'two'},
354 # This test is different than the others because it also tests that space
355 # usage inside <string> nodes is correct.
356 dom_impl = minidom.getDOMImplementation('')
357 self.writer._doc = dom_impl.createDocument(None, 'policyDefinitions', None)
358 self.writer._active_policies_elem = self.writer._doc.documentElement
359 self.writer._active_mandatory_policy_group_name = 'PolicyGroup'
360 self.writer.WritePolicy(enum_policy)
361 output = self.writer.GetTemplateText()
363 '<?xml version="1.0" ?>\n'
364 '<policyDefinitions>\n'
365 ' <policy class="TestClass" displayName="$(string.SampleEnumPolicy)"'
366 ' explainText="$(string.SampleEnumPolicy_Explain)"'
367 ' key="Software\\Policies\\Test" name="SampleEnumPolicy"'
368 ' presentation="$(presentation.SampleEnumPolicy)">\n'
369 ' <parentCategory ref="PolicyGroup"/>\n'
370 ' <supportedOn ref="SUPPORTED_TESTOS"/>\n'
372 ' <enum id="SampleEnumPolicy" valueName="SampleEnumPolicy">\n'
373 ' <item displayName="$(string.item_1)">\n'
375 ' <string>one</string>\n'
378 ' <item displayName="$(string.item_2)">\n'
380 ' <string>two</string>\n'
386 '</policyDefinitions>')
387 self.AssertXMLEquals(output, expected_output)
389 def testListPolicy(self):
391 'name': 'SampleListPolicy',
394 self._initWriterForPolicy(self.writer, list_policy)
395 self.writer.WritePolicy(list_policy)
396 output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
398 '<policy class="TestClass" displayName="$(string.SampleListPolicy)"'
399 ' explainText="$(string.SampleListPolicy_Explain)"'
400 ' key="Software\\Policies\\Test" name="SampleListPolicy"'
401 ' presentation="$(presentation.SampleListPolicy)">\n'
402 ' <parentCategory ref="PolicyGroup"/>\n'
403 ' <supportedOn ref="SUPPORTED_TESTOS"/>\n'
405 ' <list id="SampleListPolicyDesc"'
406 ' key="Software\Policies\Test\SampleListPolicy" valuePrefix=""/>\n'
410 self.AssertXMLEquals(output, expected_output)
412 def testStringEnumListPolicy(self):
414 'name': 'SampleListPolicy',
415 'type': 'string-enum-list',
417 {'name': 'item_1', 'value': 'one'},
418 {'name': 'item_2', 'value': 'two'},
421 self._initWriterForPolicy(self.writer, list_policy)
422 self.writer.WritePolicy(list_policy)
423 output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
425 '<policy class="TestClass" displayName="$(string.SampleListPolicy)"'
426 ' explainText="$(string.SampleListPolicy_Explain)"'
427 ' key="Software\\Policies\\Test" name="SampleListPolicy"'
428 ' presentation="$(presentation.SampleListPolicy)">\n'
429 ' <parentCategory ref="PolicyGroup"/>\n'
430 ' <supportedOn ref="SUPPORTED_TESTOS"/>\n'
432 ' <list id="SampleListPolicyDesc"'
433 ' key="Software\Policies\Test\SampleListPolicy" valuePrefix=""/>\n'
437 self.AssertXMLEquals(output, expected_output)
439 def testDictionaryPolicy(self):
441 'name': 'SampleDictionaryPolicy',
444 self._initWriterForPolicy(self.writer, dict_policy)
446 self.writer.WritePolicy(dict_policy)
447 output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
449 '<policy class="TestClass" displayName="$(string.'
450 'SampleDictionaryPolicy)"'
451 ' explainText="$(string.SampleDictionaryPolicy_Explain)"'
452 ' key="Software\\Policies\\Test" name="SampleDictionaryPolicy"'
453 ' presentation="$(presentation.SampleDictionaryPolicy)">\n'
454 ' <parentCategory ref="PolicyGroup"/>\n'
455 ' <supportedOn ref="SUPPORTED_TESTOS"/>\n'
457 ' <text id="SampleDictionaryPolicy" '
458 'valueName="SampleDictionaryPolicy"/>\n'
461 self.AssertXMLEquals(output, expected_output)
463 def testPlatform(self):
464 # Test that the writer correctly chooses policies of platform Windows.
465 self.assertTrue(self.writer.IsPolicySupported({
467 {'platforms': ['win', 'zzz']}, {'platforms': ['aaa']}
470 self.assertFalse(self.writer.IsPolicySupported({
472 {'platforms': ['mac', 'linux']}, {'platforms': ['aaa']}
477 if __name__ == '__main__':