Index: grit/format/policy_templates/writers/ios_plist_writer_unittest.py |
=================================================================== |
--- grit/format/policy_templates/writers/ios_plist_writer_unittest.py (revision 0) |
+++ grit/format/policy_templates/writers/ios_plist_writer_unittest.py (working copy) |
@@ -0,0 +1,208 @@ |
+#!/usr/bin/env python |
+# Copyright (c) 2014 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. |
+ |
+'''Unit tests for grit.format.policy_templates.writers.ios_plist_writer''' |
+ |
+ |
+import base64 |
+import functools |
+import os |
+import plistlib |
+import sys |
+if __name__ == '__main__': |
+ sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..')) |
+ |
+import unittest |
+ |
+try: |
+ import Cocoa |
+except: |
+ Cocoa = None |
+ |
+from grit.format.policy_templates.writers import writer_unittest_common |
+ |
+ |
+class IOSPListWriterUnittest(writer_unittest_common.WriterUnittestCommon): |
+ '''Unit tests for IOSPListWriter.''' |
+ |
+ def _ParseWithPython(self, decode, text): |
+ '''Parses a serialized Plist, using Python's plistlib. |
+ |
+ If |decode| is true then |text| is decoded as Base64 before being |
+ deserialized as a Plist.''' |
+ if decode: |
+ text = base64.b64decode(text) |
+ return plistlib.readPlistFromString(text) |
+ |
+ def _ParseWithCocoa(self, decode, text): |
+ '''Parses a serialized Plist, using Cocoa's python bindings. |
+ |
+ If |decode| is true then |text| is decoded as Base64 before being |
+ deserialized as a Plist.''' |
+ if decode: |
+ data = Cocoa.NSData.alloc().initWithBase64EncodedString_options_(text, 0) |
+ else: |
+ data = Cocoa.NSData.alloc().initWithBytes_length_(text, len(text)) |
+ result = Cocoa.NSPropertyListSerialization. \ |
+ propertyListFromData_mutabilityOption_format_errorDescription_( |
+ data, Cocoa.NSPropertyListImmutable, None, None) |
+ return result[0] |
+ |
+ def _VerifyGeneratedOutputWithParsers(self, |
+ templates, |
+ expected_output, |
+ parse, |
+ decode_and_parse): |
+ # Generate the grit output for |templates|. |
+ output = self.GetOutput( |
+ self.PrepareTest(templates), |
+ 'fr', |
+ { '_chromium': '1', 'mac_bundle_id': 'com.example.Test' }, |
+ 'ios_plist', |
+ 'en') |
+ |
+ # Parse it as a Plist. |
+ plist = parse(output) |
+ self.assertEquals(len(plist), 2) |
+ self.assertTrue('ChromePolicy' in plist) |
+ self.assertTrue('EncodedChromePolicy' in plist) |
+ |
+ # Get the 2 expected fields. |
+ chrome_policy = plist['ChromePolicy'] |
+ encoded_chrome_policy = plist['EncodedChromePolicy'] |
+ |
+ # Verify the ChromePolicy. |
+ self.assertEquals(chrome_policy, expected_output) |
+ |
+ # Decode the EncodedChromePolicy and verify it. |
+ decoded_chrome_policy = decode_and_parse(encoded_chrome_policy) |
+ self.assertEquals(decoded_chrome_policy, expected_output) |
+ |
+ def _VerifyGeneratedOutput(self, templates, expected): |
+ # plistlib is available on all Python platforms. |
+ parse = functools.partial(self._ParseWithPython, False) |
+ decode_and_parse = functools.partial(self._ParseWithPython, True) |
+ self._VerifyGeneratedOutputWithParsers( |
+ templates, expected, parse, decode_and_parse) |
+ |
+ # The Cocoa bindings are available on Mac OS X only. |
+ if Cocoa: |
+ parse = functools.partial(self._ParseWithCocoa, False) |
+ decode_and_parse = functools.partial(self._ParseWithCocoa, True) |
+ self._VerifyGeneratedOutputWithParsers( |
+ templates, expected, parse, decode_and_parse) |
+ |
+ def _MakeTemplate(self, name, type, example, extra=''): |
+ return ''' |
+ { |
+ 'policy_definitions': [ |
+ { |
+ 'name': '%s', |
+ 'type': '%s', |
+ 'desc': '', |
+ 'caption': '', |
+ 'supported_on': ['ios:35-'], |
+ 'example_value': %s, |
+ %s |
+ }, |
+ ], |
+ 'placeholders': [], |
+ 'messages': {}, |
+ } |
+ ''' % (name, type, example, extra) |
+ |
+ def testEmpty(self): |
+ templates = ''' |
+ { |
+ 'policy_definitions': [], |
+ 'placeholders': [], |
+ 'messages': {}, |
+ } |
+ ''' |
+ expected = {} |
+ self._VerifyGeneratedOutput(templates, expected) |
+ |
+ def testBoolean(self): |
+ templates = self._MakeTemplate('BooleanPolicy', 'main', 'True') |
+ expected = { |
+ 'BooleanPolicy': True, |
+ } |
+ self._VerifyGeneratedOutput(templates, expected) |
+ |
+ def testString(self): |
+ templates = self._MakeTemplate('StringPolicy', 'string', '"Foo"') |
+ expected = { |
+ 'StringPolicy': 'Foo', |
+ } |
+ self._VerifyGeneratedOutput(templates, expected) |
+ |
+ def testStringEnum(self): |
+ templates = self._MakeTemplate( |
+ 'StringEnumPolicy', 'string-enum', '"Foo"', |
+ ''' |
+ 'items': [ |
+ { 'name': 'Foo', 'value': 'Foo', 'caption': '' }, |
+ { 'name': 'Bar', 'value': 'Bar', 'caption': '' }, |
+ ], |
+ ''') |
+ expected = { |
+ 'StringEnumPolicy': 'Foo', |
+ } |
+ self._VerifyGeneratedOutput(templates, expected) |
+ |
+ def testInt(self): |
+ templates = self._MakeTemplate('IntPolicy', 'int', '42') |
+ expected = { |
+ 'IntPolicy': 42, |
+ } |
+ self._VerifyGeneratedOutput(templates, expected) |
+ |
+ def testIntEnum(self): |
+ templates = self._MakeTemplate( |
+ 'IntEnumPolicy', 'int-enum', '42', |
+ ''' |
+ 'items': [ |
+ { 'name': 'Foo', 'value': 100, 'caption': '' }, |
+ { 'name': 'Bar', 'value': 42, 'caption': '' }, |
+ ], |
+ ''') |
+ expected = { |
+ 'IntEnumPolicy': 42, |
+ } |
+ self._VerifyGeneratedOutput(templates, expected) |
+ |
+ def testStringList(self): |
+ templates = self._MakeTemplate('StringListPolicy', 'list', '["a", "b"]') |
+ expected = { |
+ 'StringListPolicy': [ "a", "b" ], |
+ } |
+ self._VerifyGeneratedOutput(templates, expected) |
+ |
+ def testListOfDictionary(self): |
+ templates = self._MakeTemplate( |
+ 'ManagedBookmarks', 'dict', |
+ ''' |
+ [ |
+ { |
+ "name": "Google Search", |
+ "url": "www.google.com", |
+ }, |
+ { |
+ "name": "Youtube", |
+ "url": "www.youtube.com", |
+ } |
+ ] |
+ ''') |
+ expected = { |
+ 'ManagedBookmarks': [ |
+ { "name": "Google Search", "url": "www.google.com" }, |
+ { "name": "Youtube", "url": "www.youtube.com" }, |
+ ], |
+ } |
+ self._VerifyGeneratedOutput(templates, expected) |
+ |
+ |
+if __name__ == '__main__': |
+ unittest.main() |
Property changes on: grit/format/policy_templates/writers/ios_plist_writer_unittest.py |
___________________________________________________________________ |
Added: svn:eol-style |
## -0,0 +1 ## |
+LF |
\ No newline at end of property |