195640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org#!/usr/bin/env python
295640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org# Copyright (c) 2012 The Chromium Authors. All rights reserved.
301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# Use of this source code is governed by a BSD-style license that can be
401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# found in the LICENSE file.
501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org"""Unittests for grit.format.policy_templates.writers.admx_writer."""
801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport os
1101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport sys
1201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport unittest
1301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgif __name__ == '__main__':
1498b76c0017dbdc61506f146d197d594b1ce07db7joi@chromium.org  sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..'))
1501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.format.policy_templates.writers import admx_writer
1801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.format.policy_templates.writers import xml_writer_base_unittest
1901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom xml.dom import minidom
2001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
2101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
226fb6d62a2a05b7a7c268cc4e6bf0452e376e1990joaodasilva@chromium.orgclass AdmxWriterUnittest(xml_writer_base_unittest.XmlWriterBaseTest):
2301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
2401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def _CreateDocumentElement(self):
2501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    dom_impl = minidom.getDOMImplementation('')
2601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    doc = dom_impl.createDocument(None, 'root', None)
2701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    return doc.documentElement
2801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
2901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def setUp(self):
3001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    # Writer configuration. This dictionary contains parameter used by the ADMX
3101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    # Writer
3201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    config = {
3301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'win_group_policy_class': 'TestClass',
3401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'win_supported_os': 'SUPPORTED_TESTOS',
350bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org      'win_reg_mandatory_key_name': 'Software\\Policies\\Test',
360bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org      'win_reg_recommended_key_name': 'Software\\Policies\\Test\\Recommended',
370bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org      'win_mandatory_category_path': ['test_category'],
380bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org      'win_recommended_category_path': ['test_recommended_category'],
3901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'admx_namespace': 'ADMXWriter.Test.Namespace',
4001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'admx_prefix': 'test_prefix'
4101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    }
4201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.writer = admx_writer.GetWriter(config)
4301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.writer.Init()
4401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
4501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def _GetPoliciesElement(self, doc):
4601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    node_list = doc.getElementsByTagName('policies')
4701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.assertTrue(node_list.length == 1)
4801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    return node_list.item(0)
4901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
5001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def _GetCategoriesElement(self, doc):
5101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    node_list = doc.getElementsByTagName('categories')
5201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.assertTrue(node_list.length == 1)
5301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    return node_list.item(0)
5401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
5501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def testEmpty(self):
5601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.writer.BeginTemplate()
5701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.writer.EndTemplate()
5801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
5901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    output = self.writer.GetTemplateText()
6001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    expected_output = (
6101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '<?xml version="1.0" ?>\n'
6201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '<policyDefinitions revision="1.0" schemaVersion="1.0">\n'
6301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <policyNamespaces>\n'
6401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '    <target namespace="ADMXWriter.Test.Namespace"'
6501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' prefix="test_prefix"/>\n'
6601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '    <using namespace="Microsoft.Policies.Windows" prefix="windows"/>\n'
6701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  </policyNamespaces>\n'
6801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <resources minRequiredRevision="1.0"/>\n'
6901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <supportedOn>\n'
7001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '    <definitions>\n'
7101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '      <definition displayName="'
7201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '$(string.SUPPORTED_TESTOS)" name="SUPPORTED_TESTOS"/>\n'
7301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '    </definitions>\n'
7401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  </supportedOn>\n'
7501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <categories>\n'
7601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '    <category displayName="$(string.test_category)"'
7701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' name="test_category"/>\n'
780bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        '    <category displayName="$(string.test_recommended_category)"'
790bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        ' name="test_recommended_category"/>\n'
8001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  </categories>\n'
8101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <policies/>\n'
8201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '</policyDefinitions>')
8301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.AssertXMLEquals(output, expected_output)
8401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
8501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def testEmptyPolicyGroup(self):
8601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    empty_policy_group = {
8701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'name': 'PolicyGroup',
8801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'policies': []
8901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    }
9001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    # Initialize writer to write a policy group.
9101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.writer.BeginTemplate()
9201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    # Write policy group
9301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.writer.BeginPolicyGroup(empty_policy_group)
9401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.writer.EndPolicyGroup()
9501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
9601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
9701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    expected_output = ''
9801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.AssertXMLEquals(output, expected_output)
9901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
10001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    output = self.GetXMLOfChildren(
10101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        self._GetCategoriesElement(self.writer._doc))
10201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    expected_output = (
10301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '<category displayName="$(string.test_category)"'
10401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' name="test_category"/>\n'
1050bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        '<category displayName="$(string.test_recommended_category)"'
1060bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        ' name="test_recommended_category"/>\n'
10701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '<category displayName="$(string.PolicyGroup_group)"'
10801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' name="PolicyGroup">\n'
10901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <parentCategory ref="test_category"/>\n'
11001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '</category>')
11101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
11201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.AssertXMLEquals(output, expected_output)
11301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
11401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def testPolicyGroup(self):
11501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    empty_policy_group = {
11601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'name': 'PolicyGroup',
11701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'policies': [
11801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org          {'name': 'PolicyStub2',
11901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org          'type': 'main'},
12001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org          {'name': 'PolicyStub1',
12101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org          'type': 'main'},
12201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      ]
12301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    }
12401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    # Initialize writer to write a policy group.
12501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.writer.BeginTemplate()
12601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    # Write policy group
12701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.writer.BeginPolicyGroup(empty_policy_group)
12801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.writer.EndPolicyGroup()
12901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
13001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
13101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    expected_output = ''
13201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.AssertXMLEquals(output, expected_output)
13301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
13401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    output = self.GetXMLOfChildren(
13501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        self._GetCategoriesElement(self.writer._doc))
13601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    expected_output = (
13701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '<category displayName="$(string.test_category)"'
13801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' name="test_category"/>\n'
1390bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        '<category displayName="$(string.test_recommended_category)"'
1400bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        ' name="test_recommended_category"/>\n'
14101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '<category displayName="$(string.PolicyGroup_group)"'
14201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' name="PolicyGroup">\n'
14301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <parentCategory ref="test_category"/>\n'
14401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '</category>')
14501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.AssertXMLEquals(output, expected_output)
14601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
14701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
14801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def _initWriterForPolicy(self, writer, policy):
14901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    '''Initializes the writer to write the given policy next.
15001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    '''
15101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    policy_group = {
15201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'name': 'PolicyGroup',
15301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'policies': [policy]
15401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    }
15501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    writer.BeginTemplate()
15601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    writer.BeginPolicyGroup(policy_group)
15701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
15801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def testMainPolicy(self):
15901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    main_policy = {
16001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'name': 'DummyMainPolicy',
16101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'type': 'main',
16201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    }
16301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
16401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self._initWriterForPolicy(self.writer, main_policy)
16501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
16601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.writer.WritePolicy(main_policy)
16701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
16801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
16901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    expected_output = (
17001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '<policy class="TestClass" displayName="$(string.DummyMainPolicy)"'
17101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' explainText="$(string.DummyMainPolicy_Explain)"'
17201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' key="Software\\Policies\\Test" name="DummyMainPolicy"'
17301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' presentation="$(presentation.DummyMainPolicy)"'
17401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' valueName="DummyMainPolicy">\n'
17501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <parentCategory ref="PolicyGroup"/>\n'
17601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <supportedOn ref="SUPPORTED_TESTOS"/>\n'
17701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <enabledValue>\n'
17801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '    <decimal value="1"/>\n'
17901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  </enabledValue>\n'
18001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <disabledValue>\n'
18101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '    <decimal value="0"/>\n'
18201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  </disabledValue>\n'
18301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '</policy>')
18401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
18501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.AssertXMLEquals(output, expected_output)
18601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1870bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org  def testRecommendedPolicy(self):
1880bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org    main_policy = {
1890bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org      'name': 'DummyMainPolicy',
1900bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org      'type': 'main',
1910bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org    }
1920bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org
1930bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org    policy_group = {
1940bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org      'name': 'PolicyGroup',
1950bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org      'policies': [main_policy],
1960bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org    }
1970bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org    self.writer.BeginTemplate()
1980bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org    self.writer.BeginRecommendedPolicyGroup(policy_group)
1990bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org
2000bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org    self.writer.WriteRecommendedPolicy(main_policy)
2010bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org
2020bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org    output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
203740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org    expected_output = (
204740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org        '<policy class="TestClass" displayName="$(string.DummyMainPolicy)"'
205740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org        ' explainText="$(string.DummyMainPolicy_Explain)"'
206740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org        ' key="Software\\Policies\\Test\\Recommended"'
207740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org        ' name="DummyMainPolicy_recommended"'
208740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org        ' presentation="$(presentation.DummyMainPolicy)"'
209740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org        ' valueName="DummyMainPolicy">\n'
210740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org        '  <parentCategory ref="PolicyGroup_recommended"/>\n'
211740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org        '  <supportedOn ref="SUPPORTED_TESTOS"/>\n'
212740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org        '  <enabledValue>\n'
213740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org        '    <decimal value="1"/>\n'
214740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org        '  </enabledValue>\n'
215740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org        '  <disabledValue>\n'
216740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org        '    <decimal value="0"/>\n'
217740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org        '  </disabledValue>\n'
218740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org        '</policy>')
219740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org
220740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org    self.AssertXMLEquals(output, expected_output)
221740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org
222740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org  def testRecommendedOnlyPolicy(self):
223740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org    main_policy = {
224740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org      'name': 'DummyMainPolicy',
225740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org      'type': 'main',
226740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org      'features': {
227740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org        'can_be_recommended': True,
228740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org        'can_be_mandatory': False,
229740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org      }
230740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org    }
231740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org
232740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org    policy_group = {
233740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org      'name': 'PolicyGroup',
234740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org      'policies': [main_policy],
235740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org    }
236740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org    self.writer.BeginTemplate()
237740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org    self.writer.BeginRecommendedPolicyGroup(policy_group)
238740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org
239740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org    self.writer.WritePolicy(main_policy)
240740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org    self.writer.WriteRecommendedPolicy(main_policy)
241740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org
242740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org    output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
2430bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org    expected_output = (
2440bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        '<policy class="TestClass" displayName="$(string.DummyMainPolicy)"'
2450bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        ' explainText="$(string.DummyMainPolicy_Explain)"'
2460bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        ' key="Software\\Policies\\Test\\Recommended"'
2470bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        ' name="DummyMainPolicy_recommended"'
2480bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        ' presentation="$(presentation.DummyMainPolicy)"'
2490bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        ' valueName="DummyMainPolicy">\n'
2500bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        '  <parentCategory ref="PolicyGroup_recommended"/>\n'
2510bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        '  <supportedOn ref="SUPPORTED_TESTOS"/>\n'
2520bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        '  <enabledValue>\n'
2530bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        '    <decimal value="1"/>\n'
2540bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        '  </enabledValue>\n'
2550bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        '  <disabledValue>\n'
2560bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        '    <decimal value="0"/>\n'
2570bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        '  </disabledValue>\n'
2580bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org        '</policy>')
2590bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org
2600bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org    self.AssertXMLEquals(output, expected_output)
2610bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org
26201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def testStringPolicy(self):
26301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    string_policy = {
26401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'name': 'SampleStringPolicy',
26501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'type': 'string',
26601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    }
26701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self._initWriterForPolicy(self.writer, string_policy)
26801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
26901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.writer.WritePolicy(string_policy)
27001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
27101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    expected_output = (
27201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '<policy class="TestClass" displayName="$(string.SampleStringPolicy)"'
27301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' explainText="$(string.SampleStringPolicy_Explain)"'
27401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' key="Software\\Policies\\Test" name="SampleStringPolicy"'
27501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' presentation="$(presentation.SampleStringPolicy)">\n'
27601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <parentCategory ref="PolicyGroup"/>\n'
27701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <supportedOn ref="SUPPORTED_TESTOS"/>\n'
27801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <elements>\n'
27901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '    <text id="SampleStringPolicy" valueName="SampleStringPolicy"/>\n'
28001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  </elements>\n'
28101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '</policy>')
28201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.AssertXMLEquals(output, expected_output)
28301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
28401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def testIntPolicy(self):
28501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    int_policy = {
28601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'name': 'SampleIntPolicy',
28701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'type': 'int',
28801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    }
28901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self._initWriterForPolicy(self.writer, int_policy)
29001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
29101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.writer.WritePolicy(int_policy)
29201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
29301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    expected_output = (
29401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '<policy class="TestClass" displayName="$(string.SampleIntPolicy)"'
29501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' explainText="$(string.SampleIntPolicy_Explain)"'
29601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' key="Software\\Policies\\Test" name="SampleIntPolicy"'
29701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' presentation="$(presentation.SampleIntPolicy)">\n'
29801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <parentCategory ref="PolicyGroup"/>\n'
29901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <supportedOn ref="SUPPORTED_TESTOS"/>\n'
30001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <elements>\n'
3019286469aaa9be3f2bef0156a27faf105b8d55449pastarmovj@chromium.org        '    <decimal id="SampleIntPolicy" maxValue="2000000000" '
3029286469aaa9be3f2bef0156a27faf105b8d55449pastarmovj@chromium.org        'valueName="SampleIntPolicy"/>\n'
30301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  </elements>\n'
30401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '</policy>')
30501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.AssertXMLEquals(output, expected_output)
30601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
30701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def testIntEnumPolicy(self):
30801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    enum_policy = {
30901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'name': 'SampleEnumPolicy',
31001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'type': 'int-enum',
31101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        'items': [
31201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org          {'name': 'item_1', 'value': 0},
31301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org          {'name': 'item_2', 'value': 1},
31401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ]
31501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    }
31601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
31701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self._initWriterForPolicy(self.writer, enum_policy)
31801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.writer.WritePolicy(enum_policy)
31901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
32001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    expected_output = (
32101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '<policy class="TestClass" displayName="$(string.SampleEnumPolicy)"'
32201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' explainText="$(string.SampleEnumPolicy_Explain)"'
32301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' key="Software\\Policies\\Test" name="SampleEnumPolicy"'
32401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' presentation="$(presentation.SampleEnumPolicy)">\n'
32501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <parentCategory ref="PolicyGroup"/>\n'
32601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <supportedOn ref="SUPPORTED_TESTOS"/>\n'
32701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <elements>\n'
32801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '    <enum id="SampleEnumPolicy" valueName="SampleEnumPolicy">\n'
32901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '      <item displayName="$(string.item_1)">\n'
33001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '        <value>\n'
33101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '          <decimal value="0"/>\n'
33201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '        </value>\n'
33301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '      </item>\n'
33401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '      <item displayName="$(string.item_2)">\n'
33501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '        <value>\n'
33601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '          <decimal value="1"/>\n'
33701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '        </value>\n'
33801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '      </item>\n'
33901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '    </enum>\n'
34001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  </elements>\n'
34101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '</policy>')
34201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.AssertXMLEquals(output, expected_output)
34301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
34401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def testStringEnumPolicy(self):
34501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    enum_policy = {
34601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'name': 'SampleEnumPolicy',
34701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'type': 'string-enum',
34801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        'items': [
34901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org          {'name': 'item_1', 'value': 'one'},
35001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org          {'name': 'item_2', 'value': 'two'},
35101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ]
35201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    }
35301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
35401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    # This test is different than the others because it also tests that space
35501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    # usage inside <string> nodes is correct.
35601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    dom_impl = minidom.getDOMImplementation('')
35701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.writer._doc = dom_impl.createDocument(None, 'policyDefinitions', None)
35801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.writer._active_policies_elem = self.writer._doc.documentElement
3590bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org    self.writer._active_mandatory_policy_group_name = 'PolicyGroup'
36001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.writer.WritePolicy(enum_policy)
36101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    output = self.writer.GetTemplateText()
36201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    expected_output = (
36301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '<?xml version="1.0" ?>\n'
36401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '<policyDefinitions>\n'
36501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <policy class="TestClass" displayName="$(string.SampleEnumPolicy)"'
36601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org          ' explainText="$(string.SampleEnumPolicy_Explain)"'
36701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org          ' key="Software\\Policies\\Test" name="SampleEnumPolicy"'
36801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org          ' presentation="$(presentation.SampleEnumPolicy)">\n'
36901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '    <parentCategory ref="PolicyGroup"/>\n'
37001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '    <supportedOn ref="SUPPORTED_TESTOS"/>\n'
37101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '    <elements>\n'
37201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '      <enum id="SampleEnumPolicy" valueName="SampleEnumPolicy">\n'
37301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '        <item displayName="$(string.item_1)">\n'
37401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '          <value>\n'
37501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '            <string>one</string>\n'
37601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '          </value>\n'
37701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '        </item>\n'
37801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '        <item displayName="$(string.item_2)">\n'
37901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '          <value>\n'
38001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '            <string>two</string>\n'
38101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '          </value>\n'
38201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '        </item>\n'
38301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '      </enum>\n'
38401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '    </elements>\n'
38501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  </policy>\n'
38601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '</policyDefinitions>')
38701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.AssertXMLEquals(output, expected_output)
38801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
38901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def testListPolicy(self):
39001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    list_policy = {
39101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'name': 'SampleListPolicy',
39201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'type': 'list',
39301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    }
39401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self._initWriterForPolicy(self.writer, list_policy)
39501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.writer.WritePolicy(list_policy)
39601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
39701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    expected_output = (
398786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org        '<policy class="TestClass" displayName="$(string.SampleListPolicy)"'
399786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org        ' explainText="$(string.SampleListPolicy_Explain)"'
400786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org        ' key="Software\\Policies\\Test" name="SampleListPolicy"'
401786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org        ' presentation="$(presentation.SampleListPolicy)">\n'
402786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org        '  <parentCategory ref="PolicyGroup"/>\n'
403786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org        '  <supportedOn ref="SUPPORTED_TESTOS"/>\n'
404786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org        '  <elements>\n'
405786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org        '    <list id="SampleListPolicyDesc"'
406786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org        ' key="Software\Policies\Test\SampleListPolicy" valuePrefix=""/>\n'
407786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org        '  </elements>\n'
408786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org        '</policy>')
409786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org
410786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org    self.AssertXMLEquals(output, expected_output)
411786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org
412786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org  def testStringEnumListPolicy(self):
413786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org    list_policy = {
414786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org      'name': 'SampleListPolicy',
415786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org      'type': 'string-enum-list',
416786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org      'items': [
417786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org        {'name': 'item_1', 'value': 'one'},
418786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org        {'name': 'item_2', 'value': 'two'},
419786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org      ]
420786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org    }
421786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org    self._initWriterForPolicy(self.writer, list_policy)
422786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org    self.writer.WritePolicy(list_policy)
423786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org    output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
424786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org    expected_output = (
42501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '<policy class="TestClass" displayName="$(string.SampleListPolicy)"'
42601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' explainText="$(string.SampleListPolicy_Explain)"'
42701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' key="Software\\Policies\\Test" name="SampleListPolicy"'
42801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' presentation="$(presentation.SampleListPolicy)">\n'
42901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <parentCategory ref="PolicyGroup"/>\n'
43001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <supportedOn ref="SUPPORTED_TESTOS"/>\n'
43101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  <elements>\n'
43201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '    <list id="SampleListPolicyDesc"'
43301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        ' key="Software\Policies\Test\SampleListPolicy" valuePrefix=""/>\n'
43401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '  </elements>\n'
43501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        '</policy>')
43601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
43701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.AssertXMLEquals(output, expected_output)
43801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
439248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org  def testDictionaryPolicy(self):
440248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org    dict_policy = {
441248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org      'name': 'SampleDictionaryPolicy',
442248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org      'type': 'dict',
443248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org    }
444248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org    self._initWriterForPolicy(self.writer, dict_policy)
445248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org
446248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org    self.writer.WritePolicy(dict_policy)
447248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org    output = self.GetXMLOfChildren(self._GetPoliciesElement(self.writer._doc))
448248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org    expected_output = (
449248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org        '<policy class="TestClass" displayName="$(string.'
450248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org            'SampleDictionaryPolicy)"'
451248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org        ' explainText="$(string.SampleDictionaryPolicy_Explain)"'
452248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org        ' key="Software\\Policies\\Test" name="SampleDictionaryPolicy"'
453248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org        ' presentation="$(presentation.SampleDictionaryPolicy)">\n'
454248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org        '  <parentCategory ref="PolicyGroup"/>\n'
455248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org        '  <supportedOn ref="SUPPORTED_TESTOS"/>\n'
456248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org        '  <elements>\n'
457248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org        '    <text id="SampleDictionaryPolicy" '
458248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org            'valueName="SampleDictionaryPolicy"/>\n'
459248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org        '  </elements>\n'
460248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org        '</policy>')
461248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org    self.AssertXMLEquals(output, expected_output)
462248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org
46301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def testPlatform(self):
46401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    # Test that the writer correctly chooses policies of platform Windows.
46501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.assertTrue(self.writer.IsPolicySupported({
46601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'supported_on': [
46701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        {'platforms': ['win', 'zzz']}, {'platforms': ['aaa']}
46801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      ]
46901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    }))
47001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.assertFalse(self.writer.IsPolicySupported({
47101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'supported_on': [
47201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        {'platforms': ['mac', 'linux']}, {'platforms': ['aaa']}
47301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      ]
47401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    }))
47501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
47601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
47701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgif __name__ == '__main__':
47801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  unittest.main()
479