Index: grit/format/policy_templates/policy_template_generator_unittest.py |
=================================================================== |
--- grit/format/policy_templates/policy_template_generator_unittest.py (revision 0) |
+++ grit/format/policy_templates/policy_template_generator_unittest.py (revision 0) |
@@ -0,0 +1,371 @@ |
+# Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+ |
+import os |
+import sys |
+if __name__ == '__main__': |
+ sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), '../../..')) |
+ |
+import unittest |
+ |
+from grit.format.policy_templates import policy_template_generator |
+from grit.format.policy_templates.writers import mock_writer |
+from grit.format.policy_templates.writers import template_writer |
+ |
+ |
+class PolicyTemplateGeneratorUnittest(unittest.TestCase): |
+ '''Unit tests for policy_template_generator.py.''' |
+ |
+ def do_test(self, policy_data, writer): |
+ '''Executes a test case. |
+ |
+ Creates and invokes an instance of PolicyTemplateGenerator with |
+ the given arguments. |
+ |
+ Notice: Plain comments are used in test methods instead of docstrings, |
+ so that method names do not get overridden by the docstrings in the |
+ test output. |
+ |
+ Args: |
+ policy_data: The list of policies and groups as it would be |
+ loaded from policy_templates.json. |
+ writer: A writer used for this test. It is usually derived from |
+ mock_writer.MockWriter. |
+ ''' |
+ writer.tester = self |
+ config = { |
+ 'app_name': '_app_name', |
+ 'frame_name': '_frame_name', |
+ 'os_name': '_os_name', |
+ } |
+ if not 'messages' in policy_data: |
+ policy_data['messages'] = {} |
+ if not 'placeholders' in policy_data: |
+ policy_data['placeholders'] = [] |
+ if not 'policy_definitions' in policy_data: |
+ policy_data['policy_definitions'] = [] |
+ policy_generator = policy_template_generator.PolicyTemplateGenerator( |
+ config, |
+ policy_data) |
+ res = policy_generator.GetTemplateText(writer) |
+ writer.Test() |
+ return res |
+ |
+ def testSequence(self): |
+ # Test the sequence of invoking the basic PolicyWriter operations, |
+ # in case of empty input data structures. |
+ class LocalMockWriter(mock_writer.MockWriter): |
+ def __init__(self): |
+ self.log = 'init;' |
+ def Init(self): |
+ self.log += 'prepare;' |
+ def BeginTemplate(self): |
+ self.log += 'begin;' |
+ def EndTemplate(self): |
+ self.log += 'end;' |
+ def GetTemplateText(self): |
+ self.log += 'get_text;' |
+ return 'writer_result_string' |
+ def Test(self): |
+ self.tester.assertEquals(self.log, |
+ 'init;prepare;begin;end;get_text;') |
+ result = self.do_test({}, LocalMockWriter()) |
+ self.assertEquals(result, 'writer_result_string') |
+ |
+ def testEmptyGroups(self): |
+ # Test that empty policy groups are not passed to the writer. |
+ policies_mock = { |
+ 'policy_definitions': [ |
+ {'name': 'Group1', 'type': 'group', 'policies': [], |
+ 'desc': '', 'caption': ''}, |
+ {'name': 'Group2', 'type': 'group', 'policies': [], |
+ 'desc': '', 'caption': ''}, |
+ {'name': 'Group3', 'type': 'group', 'policies': [], |
+ 'desc': '', 'caption': ''}, |
+ ] |
+ } |
+ class LocalMockWriter(mock_writer.MockWriter): |
+ def __init__(self): |
+ self.log = '' |
+ def BeginPolicyGroup(self, group): |
+ self.log += '[' |
+ def EndPolicyGroup(self): |
+ self.log += ']' |
+ def Test(self): |
+ self.tester.assertEquals(self.log, '') |
+ self.do_test(policies_mock, LocalMockWriter()) |
+ |
+ def testGroups(self): |
+ # Test that policy groups are passed to the writer in the correct order. |
+ policies_mock = { |
+ 'policy_definitions': [ |
+ { |
+ 'name': 'Group1', 'type': 'group', |
+ 'caption': '', 'desc': '', |
+ 'policies': [{'name': 'TAG1', 'type': 'mock', 'supported_on': [], |
+ 'caption': '', 'desc': ''}] |
+ }, |
+ { |
+ 'name': 'Group2', 'type': 'group', |
+ 'caption': '', 'desc': '', |
+ 'policies': [{'name': 'TAG2', 'type': 'mock', 'supported_on': [], |
+ 'caption': '', 'desc': ''}] |
+ }, |
+ { |
+ 'name': 'Group3', 'type': 'group', |
+ 'caption': '', 'desc': '', |
+ 'policies': [{'name': 'TAG3', 'type': 'mock', 'supported_on': [], |
+ 'caption': '', 'desc': ''}] |
+ }, |
+ ] |
+ } |
+ class LocalMockWriter(mock_writer.MockWriter): |
+ def __init__(self): |
+ self.log = '' |
+ def BeginPolicyGroup(self, group): |
+ self.log += '[' + group['policies'][0]['name'] |
+ def EndPolicyGroup(self): |
+ self.log += ']' |
+ def Test(self): |
+ self.tester.assertEquals(self.log, '[TAG1][TAG2][TAG3]') |
+ self.do_test(policies_mock, LocalMockWriter()) |
+ |
+ def testPolicies(self): |
+ # Test that policies are passed to the writer in the correct order. |
+ policy_defs_mock = { |
+ 'policy_definitions': [ |
+ { |
+ 'name': 'Group1', |
+ 'type': 'group', |
+ 'caption': '', |
+ 'desc': '', |
+ 'policies': [ |
+ {'name': 'Group1Policy1', 'type': 'string', 'supported_on': [], |
+ 'caption': '', 'desc': ''}, |
+ {'name': 'Group1Policy2', 'type': 'string', 'supported_on': [], |
+ 'caption': '', 'desc': ''}, |
+ ] |
+ }, |
+ { |
+ 'name': 'Group2', |
+ 'type': 'group', |
+ 'caption': '', |
+ 'desc': '', |
+ 'policies': [ |
+ {'name': 'Group2Policy3', 'type': 'string', 'supported_on': [], |
+ 'caption': '', 'desc': ''}, |
+ ] |
+ } |
+ ] |
+ } |
+ class LocalMockWriter(mock_writer.MockWriter): |
+ def __init__(self): |
+ self.policy_name = None |
+ self.policy_list = [] |
+ def BeginPolicyGroup(self, group): |
+ self.group = group; |
+ def EndPolicyGroup(self): |
+ self.group = None |
+ def WritePolicy(self, policy): |
+ self.tester.assertEquals(policy['name'][0:6], self.group['name']) |
+ self.policy_list.append(policy['name']) |
+ def Test(self): |
+ self.tester.assertEquals( |
+ self.policy_list, |
+ ['Group1Policy1', 'Group1Policy2', 'Group2Policy3']) |
+ self.do_test( policy_defs_mock, LocalMockWriter()) |
+ |
+ def testPolicyTexts(self): |
+ # Test that GUI messages of policies all get placeholders replaced. |
+ policy_data_mock = { |
+ 'policy_definitions': [ |
+ { |
+ 'name': 'Group1', |
+ 'type': 'group', |
+ 'desc': '', |
+ 'caption': '', |
+ 'policies': [ |
+ { |
+ 'name': 'Policy1', |
+ 'caption': '1. app_name -- $1', |
+ 'label': '2. os_name -- $2', |
+ 'desc': '3. frame_name -- $3', |
+ 'type': 'string', |
+ 'supported_on': [] |
+ }, |
+ ] |
+ } |
+ ] |
+ } |
+ class LocalMockWriter(mock_writer.MockWriter): |
+ def WritePolicy(self, policy): |
+ if policy['name'] == 'Policy1': |
+ self.tester.assertEquals(policy['caption'], |
+ '1. app_name -- _app_name') |
+ self.tester.assertEquals(policy['label'], |
+ '2. os_name -- _os_name') |
+ self.tester.assertEquals(policy['desc'], |
+ '3. frame_name -- _frame_name') |
+ elif policy['name'] == 'Group1': |
+ pass |
+ else: |
+ self.tester.fail() |
+ self.do_test(policy_data_mock, LocalMockWriter()) |
+ |
+ def testIntEnumTexts(self): |
+ # Test that GUI messages are assigned correctly to int-enums |
+ # (aka dropdown menus). |
+ policy_defs_mock = { |
+ 'policy_definitions': [{ |
+ 'name': 'Policy1', |
+ 'type': 'int-enum', |
+ 'caption': '', 'desc': '', |
+ 'supported_on': [], |
+ 'items': [ |
+ {'name': 'item1', 'value': 0, 'caption': 'string1', 'desc': ''}, |
+ {'name': 'item2', 'value': 1, 'caption': 'string2', 'desc': ''}, |
+ {'name': 'item3', 'value': 3, 'caption': 'string3', 'desc': ''}, |
+ ] |
+ }] |
+ } |
+ |
+ class LocalMockWriter(mock_writer.MockWriter): |
+ def WritePolicy(self, policy): |
+ self.tester.assertEquals(policy['items'][0]['caption'], 'string1') |
+ self.tester.assertEquals(policy['items'][1]['caption'], 'string2') |
+ self.tester.assertEquals(policy['items'][2]['caption'], 'string3') |
+ self.do_test(policy_defs_mock, LocalMockWriter()) |
+ |
+ def testStringEnumTexts(self): |
+ # Test that GUI messages are assigned correctly to string-enums |
+ # (aka dropdown menus). |
+ policy_data_mock = { |
+ 'policy_definitions': [{ |
+ 'name': 'Policy1', |
+ 'type': 'string-enum', |
+ 'caption': '', 'desc': '', |
+ 'supported_on': [], |
+ 'items': [ |
+ {'name': 'item1', 'value': 'one', 'caption': 'string1', 'desc': ''}, |
+ {'name': 'item2', 'value': 'two', 'caption': 'string2', 'desc': ''}, |
+ {'name': 'item3', 'value': 'three', 'caption': 'string3', 'desc': ''}, |
+ ] |
+ }] |
+ } |
+ class LocalMockWriter(mock_writer.MockWriter): |
+ def WritePolicy(self, policy): |
+ self.tester.assertEquals(policy['items'][0]['caption'], 'string1') |
+ self.tester.assertEquals(policy['items'][1]['caption'], 'string2') |
+ self.tester.assertEquals(policy['items'][2]['caption'], 'string3') |
+ self.do_test(policy_data_mock, LocalMockWriter()) |
+ |
+ def testPolicyFiltering(self): |
+ # Test that policies are filtered correctly based on their annotations. |
+ policy_data_mock = { |
+ 'policy_definitions': [ |
+ { |
+ 'name': 'Group1', |
+ 'type': 'group', |
+ 'caption': '', |
+ 'desc': '', |
+ 'policies': [ |
+ { |
+ 'name': 'Group1Policy1', |
+ 'type': 'string', |
+ 'caption': '', |
+ 'desc': '', |
+ 'supported_on': [ |
+ 'chrome.aaa:8-', 'chrome.bbb:8-', 'chrome.ccc:8-' |
+ ] |
+ }, |
+ { |
+ 'name': 'Group1Policy2', |
+ 'type': 'string', |
+ 'caption': '', |
+ 'desc': '', |
+ 'supported_on': ['chrome.ddd:8-'] |
+ }, |
+ ] |
+ }, { |
+ 'name': 'Group2', |
+ 'type': 'group', |
+ 'caption': '', |
+ 'desc': '', |
+ 'policies': [ |
+ { |
+ 'name': 'Group2Policy3', |
+ 'type': 'string', |
+ 'caption': '', |
+ 'desc': '', |
+ 'supported_on': ['chrome.eee:8-'] |
+ }, |
+ ] |
+ }, { |
+ 'name': 'SinglePolicy', |
+ 'type': 'int', |
+ 'caption': '', |
+ 'desc': '', |
+ 'supported_on': ['chrome.eee:8-'] |
+ } |
+ ] |
+ } |
+ # This writer accumulates the list of policies it is asked to write. |
+ # This list is stored in the result_list member variable and can |
+ # be used later for assertions. |
+ class LocalMockWriter(mock_writer.MockWriter): |
+ def __init__(self, platforms): |
+ self.platforms = platforms |
+ self.policy_name = None |
+ self.result_list = [] |
+ def BeginPolicyGroup(self, group): |
+ self.group = group; |
+ self.result_list.append('begin_' + group['name']) |
+ def EndPolicyGroup(self): |
+ self.result_list.append('end_group') |
+ self.group = None |
+ def WritePolicy(self, policy): |
+ self.result_list.append(policy['name']) |
+ def IsPolicySupported(self, policy): |
+ # Call the original (non-mock) implementation of this method. |
+ return template_writer.TemplateWriter.IsPolicySupported(self, policy) |
+ |
+ local_mock_writer = LocalMockWriter(['eee']) |
+ self.do_test(policy_data_mock, local_mock_writer) |
+ # Test that only policies of platform 'eee' were written: |
+ self.assertEquals( |
+ local_mock_writer.result_list, |
+ ['begin_Group2', 'Group2Policy3', 'end_group', 'SinglePolicy']) |
+ |
+ local_mock_writer = LocalMockWriter(['ddd', 'bbb']) |
+ self.do_test(policy_data_mock, local_mock_writer) |
+ # Test that only policies of platforms 'ddd' and 'bbb' were written: |
+ self.assertEquals( |
+ local_mock_writer.result_list, |
+ ['begin_Group1', 'Group1Policy1', 'Group1Policy2', 'end_group']) |
+ |
+ def testSortingInvoked(self): |
+ # Tests that policy-sorting happens before passing policies to the writer. |
+ policy_data = { |
+ 'policy_definitions': [ |
+ {'name': 'zp', 'type': 'string', 'supported_on': [], |
+ 'caption': '', 'desc': ''}, |
+ {'name': 'ap', 'type': 'string', 'supported_on': [], |
+ 'caption': '', 'desc': ''}, |
+ ] |
+ } |
+ class LocalMockWriter(mock_writer.MockWriter): |
+ def __init__(self): |
+ self.result_list = [] |
+ def WritePolicy(self, policy): |
+ self.result_list.append(policy['name']) |
+ def Test(self): |
+ self.tester.assertEquals( |
+ self.result_list, |
+ ['ap', 'zp']) |
+ self.do_test(policy_data, LocalMockWriter()) |
+ |
+ |
+if __name__ == '__main__': |
+ unittest.main() |
Property changes on: grit/format/policy_templates/policy_template_generator_unittest.py |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |