# Copyright 2014 Google Inc. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Unit tests for googleapiclient.schema.""" from __future__ import absolute_import __author__ = 'jcgregorio@google.com (Joe Gregorio)' import json import os import unittest2 as unittest from googleapiclient.schema import Schemas DATA_DIR = os.path.join(os.path.dirname(__file__), 'data') def datafile(filename): return os.path.join(DATA_DIR, filename) LOAD_FEED = """{ "items": [ { "longVal": 42, "kind": "zoo#loadValue", "enumVal": "A String", "anyVal": "", # Anything will do. "nullVal": None, "stringVal": "A String", "doubleVal": 3.14, "booleanVal": True or False, # True or False. }, ], "kind": "zoo#loadFeed", }""" class SchemasTest(unittest.TestCase): def setUp(self): f = open(datafile('zoo.json')) discovery = f.read() f.close() discovery = json.loads(discovery) self.sc = Schemas(discovery) def test_basic_formatting(self): self.assertEqual(sorted(LOAD_FEED.splitlines()), sorted(self.sc.prettyPrintByName('LoadFeed').splitlines())) def test_empty_edge_case(self): self.assertTrue('Unknown type' in self.sc.prettyPrintSchema({})) def test_simple_object(self): self.assertEqual({}, eval(self.sc.prettyPrintSchema({'type': 'object'}))) def test_string(self): self.assertEqual(type(""), type(eval(self.sc.prettyPrintSchema({'type': 'string'})))) def test_integer(self): self.assertEqual(type(20), type(eval(self.sc.prettyPrintSchema({'type': 'integer'})))) def test_number(self): self.assertEqual(type(1.2), type(eval(self.sc.prettyPrintSchema({'type': 'number'})))) def test_boolean(self): self.assertEqual(type(True), type(eval(self.sc.prettyPrintSchema({'type': 'boolean'})))) def test_string_default(self): self.assertEqual('foo', eval(self.sc.prettyPrintSchema({'type': 'string', 'default': 'foo'}))) def test_integer_default(self): self.assertEqual(20, eval(self.sc.prettyPrintSchema({'type': 'integer', 'default': 20}))) def test_number_default(self): self.assertEqual(1.2, eval(self.sc.prettyPrintSchema({'type': 'number', 'default': 1.2}))) def test_boolean_default(self): self.assertEqual(False, eval(self.sc.prettyPrintSchema({'type': 'boolean', 'default': False}))) def test_null(self): self.assertEqual(None, eval(self.sc.prettyPrintSchema({'type': 'null'}))) def test_any(self): self.assertEqual('', eval(self.sc.prettyPrintSchema({'type': 'any'}))) def test_array(self): self.assertEqual([{}], eval(self.sc.prettyPrintSchema({'type': 'array', 'items': {'type': 'object'}}))) def test_nested_references(self): feed = { 'items': [ { 'photo': { 'hash': 'A String', 'hashAlgorithm': 'A String', 'filename': 'A String', 'type': 'A String', 'size': 42 }, 'kind': 'zoo#animal', 'etag': 'A String', 'name': 'A String' } ], 'kind': 'zoo#animalFeed', 'etag': 'A String' } self.assertEqual(feed, eval(self.sc.prettyPrintByName('AnimalFeed'))) def test_additional_properties(self): items = { 'animals': { 'a_key': { 'photo': { 'hash': 'A String', 'hashAlgorithm': 'A String', 'filename': 'A String', 'type': 'A String', 'size': 42 }, 'kind': 'zoo#animal', 'etag': 'A String', 'name': 'A String' } }, 'kind': 'zoo#animalMap', 'etag': 'A String' } self.assertEqual(items, eval(self.sc.prettyPrintByName('AnimalMap'))) def test_unknown_name(self): self.assertRaises(KeyError, self.sc.prettyPrintByName, 'UknownSchemaThing') if __name__ == '__main__': unittest.main()