コード例 #1
0
  def test_get_schema_type(self):
    # Basic parsing.
    self.assertEqual(type(get_schema_type(False)), BooleanType)
    self.assertEqual(type(get_schema_type(1)), IntegerType)
    self.assertEqual(type(get_schema_type(1.6)), NumberType)
    self.assertEqual(type(get_schema_type(None)), NullType)
    self.assertEqual(type(get_schema_type('lolcat')), StringType)
    self.assertEqual(type(get_schema_type([1])), ArrayType)
    self.assertEqual(type(get_schema_type({'a': 'b'})), ObjectType)

    # Array parsing.
    schema = get_schema_type([1, 2, 3])
    self.assertEqual(type(schema), ArrayType)
    self.assertEqual(type(schema.items), IntegerType)
    schema = get_schema_type([1, False, 'hello'])
    self.assertEqual(type(schema), ArrayType)
    self.assertEqual(type(schema.items), AnyType)

    # Object parsing.
    schema = get_schema_type({'lol': 'cat', 'int': 10, 'bool': True,
                              'nested': {'hello': 'world'}})
    self.assertEqual(type(schema), ObjectType)
    self.assertEqual(len(schema.properties), 4)
    self.assertEqual(set(schema.properties), {'lol', 'int', 'bool', 'nested'})
    self.assertEqual(len(schema.required), 4)
    self.assertEqual(set(schema.required), {'lol', 'int', 'bool', 'nested'})
    self.assertEqual(type(schema.properties['lol']), StringType)
    self.assertEqual(type(schema.properties['int']), IntegerType)
    self.assertEqual(type(schema.properties['bool']), BooleanType)
    nested = schema.properties['nested']
    self.assertEqual(type(nested), ObjectType)
    self.assertEqual(len(nested.properties), 1)
    self.assertEqual(set(nested.properties), {'hello'})
    self.assertEqual(len(nested.required), 1)
    self.assertEqual(set(nested.required), {'hello'})
    self.assertEqual(type(nested.properties['hello']), StringType)
コード例 #2
0
 def test_combining(self):
   a = {
     'bool': True,
     'string': 'hello',
     'int': 1,
     'number': 2,
     'null': None,
     'any': False,
     'array_int': [1, 2],
     'array_any': [False],
     'object': {
       'lol': 'cat'
     },
     'not_required1': 1
   }
   b = {
     'bool': False,
     'string': 'world',
     'int': 23,
     'number': 2.56,
     'null': None,
     'any': 'yo',
     'array_int': [3, 4],
     'array_any': ['any'],
     'object': {
       'lol': 'cat',
       'not_required2': 'blah'
     },
     'null_not_required': None
   }
   merged = get_schema_type(a).combine(get_schema_type(b))
   expected = {
     'properties': {
       'any': {
         'type': 'any'
       },
       'array_any': {
         'items': {
           'type': 'any'
         },
         'type': 'array'
       },
       'array_int': {
         'items': {
           'type': 'integer'
         },
         'type': 'array'
       },
       'bool': {
         'type': 'boolean'
       },
       'int': {
         'type': 'integer'
       },
       'not_required1': {
         'type': 'integer'
       },
       'null': {
         'type': 'null'
       },
       'number': {
         'type': 'number'
       },
       'object': {
         'properties': {
           'lol': {
             'type': 'string'
           },
           'not_required2': {
             'type': 'string'
           }
         },
         'required': ['lol'],
         'type': 'object'
       },
       'string': {
         'type': 'string'
       },
       'null_not_required': {
         'type': 'null'
       },
     },
     'required': sorted(['bool', 'string', 'int', 'number', 'null', 'any',
                         'array_int', 'array_any', 'object']),
     'type': 'object'
   }
   self.assertEqual(json.dumps(merged.to_dict(), sort_keys=True),
                    json.dumps(expected, sort_keys=True))