#!/usr/bin/env python # Copyright 2013 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 unittest from copy import deepcopy from schema_util import RemoveNoDocs, DetectInlineableTypes, InlineDocs class SchemaUtilTest(unittest.TestCase): def testRemoveNoDocs(self): expected_nodoc = [ { 'name': 'B', 'list': [ { 'name': 'B2' } ] }, { 'name': 'D', 'nodoc': False }, { 'name': 'E', 'items1': [ { 'name': 'E1', 'items': [ { 'name': 'E1.3' } ] }, { 'name': 'E2' } ] } ] nodoc_data = [ { 'name': 'A', 'nodoc': True }, { 'name': 'B', 'list': [ { 'name': 'B1', 'nodoc': True }, { 'name': 'B2' }, { 'name': 'B3', 'nodoc': True } ] }, { 'name': 'C', 'nodoc': True }, { 'name': 'D', 'nodoc': False }, { 'name': 'E', 'dict': { 'name': 'Ed', 'nodoc': True }, 'items1': [ { 'name': 'E1', 'items': [ { 'name': 'E1.1', 'nodoc': True }, { 'name': 'E1.2', 'nodoc': True }, { 'name': 'E1.3' } ] }, { 'name': 'E2' }, { 'name': 'E3', 'nodoc': True } ] } ] RemoveNoDocs(nodoc_data) self.assertEquals(expected_nodoc, nodoc_data) def testInlineDocs(self): schema = { 'namespace': 'storage', 'properties': { 'key2': { 'description': 'second key', '$ref': 'Key' }, 'key1': { 'description': 'first key', '$ref': 'Key' } }, 'types': [ { 'inline_doc': True, 'type': 'string', 'id': 'Key', # Should be inlined into both properties and be removed # from types. 'description': 'This is a key.', # This description should disappear. 'marker': True # This should appear three times in the output. }, { 'items': { '$ref': 'Key' }, 'type': 'array', 'id': 'KeyList', 'description': 'A list of keys' } ] } expected_schema = { 'namespace': 'storage', 'properties': { 'key2': { 'marker': True, 'type': 'string', 'description': 'second key' }, 'key1': { 'marker': True, 'type': 'string', 'description': 'first key' } }, 'types': [ { 'items': { 'marker': True, 'type': 'string' }, 'type': 'array', 'id': 'KeyList', 'description': 'A list of keys' } ] } inlined_schema = deepcopy(schema) InlineDocs(inlined_schema) self.assertEqual(expected_schema, inlined_schema) def testDetectInline(self): schema = { 'types': [ { 'id': 'Key', 'items': { '$ref': 'Value' } }, { 'id': 'Value', 'marker': True } ] } expected_schema = { 'types': [ { 'id': 'Key', 'items': { 'marker': True, } } ] } DetectInlineableTypes(schema) InlineDocs(schema) self.assertEqual(expected_schema, schema) if __name__ == '__main__': unittest.main()