示例#1
1
 def test_multiple_schemas(self):
     s1 = {
         "required": [
             "a",
             "c"
         ],
         "type": "object",
         "properties": {
             "a": {
                 "type": "string"
             },
             "c": {
                 "items": [
                     {
                         "type": "integer"
                     }
                 ],
                 "type": "array"
             }
         }
     }
     s2 = {
         "required": [
             "c"
         ],
         "type": "object",
         "properties": {
             "a": {
                 "type": "string"
             },
             "c": {
                 "items": [
                     {
                         "type": "integer"
                     }
                 ],
                 "type": "array"
             }
         }
     }
     s = Schema()
     s.add_schema(s1)
     s.add_schema(s2)
     self.assertEqual(s.to_dict(), s2)
示例#2
0
 def test_three_deep(self):
     s = Schema().add_object(
         {"matryoshka": {
             "design": {
                 "principle": "FTW!"
             }
         }})
     self.assertEqual(
         s.to_dict(), {
             "required": ["matryoshka"],
             "type": "object",
             "properties": {
                 "matryoshka": {
                     "required": ["design"],
                     "type": "object",
                     "properties": {
                         "design": {
                             "required": ["principle"],
                             "type": "object",
                             "properties": {
                                 "principle": {
                                     "type": "string"
                                 }
                             }
                         }
                     }
                 }
             }
         })
示例#3
0
 def test_object_in_array(self):
     s = Schema().add_object([
         {"name": "Sir Lancelot of Camelot",
          "quest": "to seek the Holy Grail",
          "favorite colour": "blue"},
         {"name": "Sir Robin of Camelot",
          "quest": "to seek the Holy Grail",
          "capitol of Assyria": None}])
     self.assertEqual(s.to_dict(), {
         "items": [
             {
                 "required": [
                     "name",
                     "quest"
                 ],
                 "type": "object",
                 "properties": {
                     "quest": {
                         "type": "string"
                     },
                     "name": {
                         "type": "string"
                     },
                     "favorite colour": {
                         "type": "string"
                     },
                     "capitol of Assyria": {
                         "type": "null"
                     }
                 }
             }
         ],
         "type": "array"
     })
示例#4
0
 def test_multitype_merge(self):
     s = Schema().add_object([1, "2", None, False])
     self.assertEqual(s.to_dict(), {
         "type": "array",
         "items": [{
             "type": ["boolean", "integer", "null", "string"]}]
         })
示例#5
0
 def test_multi_type(self):
     s = Schema()
     s.add_object("string")
     s.add_object(1.1)
     s.add_object(True)
     s.add_object(None)
     self.assertEqual(s.to_dict(), {"type": ["boolean", "null", "number", "string"]})
示例#6
0
 def test_object_in_array(self):
     s = Schema().add_object([{
         "name": "Sir Lancelot of Camelot",
         "quest": "to seek the Holy Grail",
         "favorite colour": "blue"
     }, {
         "name": "Sir Robin of Camelot",
         "quest": "to seek the Holy Grail",
         "capitol of Assyria": None
     }])
     self.assertEqual(
         s.to_dict(), {
             "items": [{
                 "required": ["name", "quest"],
                 "type": "object",
                 "properties": {
                     "quest": {
                         "type": "string"
                     },
                     "name": {
                         "type": "string"
                     },
                     "favorite colour": {
                         "type": "string"
                     },
                     "capitol of Assyria": {
                         "type": "null"
                     }
                 }
             }],
             "type":
             "array"
         })
示例#7
0
 def test_multi_type(self):
     s = Schema()
     s.add_object('string')
     s.add_object(1.1)
     s.add_object(True)
     s.add_object(None)
     self.assertEqual(s.to_dict(),
                      {'type': ['boolean', 'null', 'number', 'string']})
示例#8
0
 def test_monotype(self):
     s = Schema().add_object(["spam", "spam", "spam", "egg", "spam"])
     self.assertEqual(s.to_dict(), {
         "type": "array",
         "items": [{
             "type": "string"
         }]
     })
示例#9
0
 def test_multi_type(self):
     s = Schema()
     s.add_object('string')
     s.add_object(1.1)
     s.add_object(True)
     s.add_object(None)
     self.assertSchema(s.to_dict(),
                       {'type': ['boolean', 'null', 'number', 'string']})
示例#10
0
 def test_multitype_merge(self):
     s = Schema().add_object([1, "2", None, False])
     self.assertEqual(
         s.to_dict(), {
             "type": "array",
             "items": [{
                 "type": ["boolean", "integer", "null", "string"]
             }]
         })
示例#11
0
 def test_multitype_sep(self):
     s = Schema(merge_arrays=False).add_object([1, "2", None, False])
     self.assertEqual(s.to_dict(), {
         "type": "array",
         "items": [
             {"type": "integer"},
             {"type": "string"},
             {"type": "null"},
             {"type": "boolean"}]
         })
示例#12
0
 def test_array_reduce(self):
     s = Schema().add_object([["surprise"],
                              ["fear", "surprise"],
                              ["fear", "surprise", "ruthless efficiency"],
                              ["fear", "surprise", "ruthless efficiency",
                               "an almost fanatical devotion to the Pope"]])
     self.assertEqual(s.to_dict(), {
         "type": "array",
         "items": [{
             "type": "array",
             "items": [{"type": "string"}]}]
         })
示例#13
0
class SchemaTestCase(unittest.TestCase):

    def setUp(self):
        self._schema = Schema()
        self._objects = []
        self._schemas = []

    def set_schema_options(self, **options):
        self._schema = Schema(**options)

    def add_object(self, obj):
        self._schema.add_object(obj)
        self._objects.append(obj)

    def add_schema(self, schema):
        self._schema.add_schema(schema)
        self._schemas.append(schema)

    def assertObjectValidates(self, obj):
        jsonschema.Draft4Validator(self._schema.to_dict()).validate(obj)

    def assertObjectDoesNotValidate(self, obj):
        with self.assertRaises(jsonschema.exceptions.ValidationError):
            jsonschema.Draft4Validator(self._schema.to_dict()).validate(obj)

    def assertResult(self, expected):
        self.assertEqual(self._schema.to_dict(), expected)
        self.assertUserContract()

    def assertUserContract(self):
        self._assertSchemaIsValid()
        self._assertComponentObjectsValidate()

    def _assertSchemaIsValid(self):
        jsonschema.Draft4Validator.check_schema(self._schema.to_dict())

    def _assertComponentObjectsValidate(self):
        compiled_schema = self._schema.to_dict()
        for obj in self._objects:
            jsonschema.Draft4Validator(compiled_schema).validate(obj)
示例#14
0
 def test_basic_object(self):
     s = Schema().add_object({
         "Red Windsor": "Normally, but today the van broke down.",
         "Stilton": "Sorry.",
         "Gruyere": False})
     self.assertEqual(s.to_dict(), {
         "required": ["Gruyere", "Red Windsor", "Stilton"],
         "type": "object",
         "properties": {
             "Red Windsor": {"type": "string"},
             "Gruyere": {"type": "boolean"},
             "Stilton": {"type": "string"}}
         })
示例#15
0
文件: base.py 项目: yileye/GenSON
class SchemaTestCase(unittest.TestCase):
    def setUp(self):
        self._schema = Schema()
        self._objects = []
        self._schemas = []

    def set_schema_options(self, **options):
        self._schema = Schema(**options)

    def add_object(self, obj):
        self._schema.add_object(obj)
        self._objects.append(obj)

    def add_schema(self, schema):
        self._schema.add_schema(schema)
        self._schemas.append(schema)

    def assertObjectValidates(self, obj):
        jsonschema.Draft4Validator(self._schema.to_dict()).validate(obj)

    def assertObjectDoesNotValidate(self, obj):
        with self.assertRaises(jsonschema.exceptions.ValidationError):
            jsonschema.Draft4Validator(self._schema.to_dict()).validate(obj)

    def assertResult(self, expected):
        self.assertEqual(self._schema.to_dict(), expected)
        self.assertUserContract()

    def assertUserContract(self):
        self._assertSchemaIsValid()
        self._assertComponentObjectsValidate()

    def _assertSchemaIsValid(self):
        jsonschema.Draft4Validator.check_schema(self._schema.to_dict())

    def _assertComponentObjectsValidate(self):
        compiled_schema = self._schema.to_dict()
        for obj in self._objects:
            jsonschema.Draft4Validator(compiled_schema).validate(obj)
示例#16
0
 def test_three_deep(self):
     s = Schema().add_object(
         {"matryoshka": {"design": {"principle": "FTW!"}}})
     self.assertEqual(s.to_dict(), {
         "required": ["matryoshka"],
         "type": "object",
         "properties": {"matryoshka": {
             "required": ["design"],
             "type": "object",
             "properties": {"design": {
                 "required": ["principle"],
                 "type": "object",
                 "properties": {"principle": {"type": "string"}}}}
             }}
         })
示例#17
0
 def test_multitype_sep(self):
     s = Schema(merge_arrays=False).add_object([1, "2", None, False])
     self.assertEqual(
         s.to_dict(), {
             "type":
             "array",
             "items": [{
                 "type": "integer"
             }, {
                 "type": "string"
             }, {
                 "type": "null"
             }, {
                 "type": "boolean"
             }]
         })
示例#18
0
 def test_array_reduce(self):
     s = Schema().add_object([["surprise"], ["fear", "surprise"],
                              ["fear", "surprise", "ruthless efficiency"],
                              [
                                  "fear", "surprise", "ruthless efficiency",
                                  "an almost fanatical devotion to the Pope"
                              ]])
     self.assertEqual(
         s.to_dict(), {
             "type": "array",
             "items": [{
                 "type": "array",
                 "items": [{
                     "type": "string"
                 }]
             }]
         })
示例#19
0
 def test_array_in_object(self):
     s = Schema().add_object({"a": "b", "c": [1, 2, 3]})
     self.assertEqual(
         s.to_dict(), {
             "required": ["a", "c"],
             "type": "object",
             "properties": {
                 "a": {
                     "type": "string"
                 },
                 "c": {
                     "items": [{
                         "type": "integer"
                     }],
                     "type": "array"
                 }
             }
         })
示例#20
0
 def test_basic_object(self):
     s = Schema().add_object({
         "Red Windsor": "Normally, but today the van broke down.",
         "Stilton": "Sorry.",
         "Gruyere": False
     })
     self.assertEqual(
         s.to_dict(), {
             "required": ["Gruyere", "Red Windsor", "Stilton"],
             "type": "object",
             "properties": {
                 "Red Windsor": {
                     "type": "string"
                 },
                 "Gruyere": {
                     "type": "boolean"
                 },
                 "Stilton": {
                     "type": "string"
                 }
             }
         })
示例#21
0
 def test_array_in_object(self):
     s = Schema().add_object({"a": "b", "c": [1, 2, 3]})
     self.assertEqual(s.to_dict(), {
         "required": [
             "a",
             "c"
         ],
         "type": "object",
         "properties": {
             "a": {
                 "type": "string"
             },
             "c": {
                 "items": [
                     {
                         "type": "integer"
                     }
                 ],
                 "type": "array"
             }
         }
     })
示例#22
0
 def test_number(self):
     s = Schema().add_object(1.1)
     self.assertEqual(s.to_dict(), {"type": "number"})
示例#23
0
 def test_integer(self):
     s = Schema().add_object(1)
     self.assertEqual(s.to_dict(), {"type": "integer"})
示例#24
0
 def test_boolean(self):
     s = Schema().add_object(True)
     self.assertEqual(s.to_dict(), {"type": "boolean"})
示例#25
0
 def test_empty_object(self):
     s = Schema().add_object({})
     self.assertEqual(s.to_dict(), {"type": "object", "properties": {}})
示例#26
0
 def test_number(self):
     s = Schema().add_object(1.1)
     self.assertEqual(s.to_dict(), {"type": "number"})
示例#27
0
 def test_null(self):
     s = Schema().add_object(None)
     self.assertEqual(s.to_dict(), {"type": "null"})
示例#28
0
 def test_single_type_unicode(self):
     schema = {u'type': u'string'}
     s = Schema()
     s.add_schema(schema)
     self.assertEqual(s.to_dict(), schema)
示例#29
0
 def test_redundant_integer_type(self):
     s = Schema()
     s.add_object(1)
     s.add_object(1.1)
     self.assertEqual(s.to_dict(), {"type": "number"})
示例#30
0
 def test_single_type(self):
     s = Schema()
     s.add_object("bacon")
     s.add_object("egg")
     s.add_object("spam")
     self.assertEqual(s.to_dict(), {"type": "string"})
示例#31
0
 def test_to_dict_pending_deprecation_warning(self):
     with self.assertWarns(PendingDeprecationWarning):
         builder = Schema()
     with self.assertWarns(PendingDeprecationWarning):
         builder.add_object('I fart in your general direction!')
         builder.to_dict()
示例#32
0
 def test_single_type(self):
     schema = {'type': 'string'}
     s = Schema()
     s.add_schema(schema)
     self.assertEqual(s.to_dict(), schema)
示例#33
0
 def test_integer(self):
     s = Schema().add_object(1)
     self.assertEqual(s.to_dict(), {"type": "integer"})
示例#34
0
 def test_empty_object(self):
     s = Schema().add_object({})
     self.assertEqual(s.to_dict(), {"type": "object", "properties": {}})
示例#35
0
 def test_string(self):
     s = Schema().add_object("string")
     self.assertEqual(s.to_dict(), {"type": "string"})
示例#36
0
 def test_single_type(self):
     schema = {'type': 'string'}
     s = Schema()
     s.add_schema(schema)
     self.assertSchema(s.to_dict(), schema)
示例#37
0
 def test_to_dict_pending_deprecation_warning(self):
     with self.assertWarns(PendingDeprecationWarning):
         builder = Schema()
     with self.assertWarns(PendingDeprecationWarning):
         builder.add_object('I fart in your general direction!')
         builder.to_dict()
示例#38
0
 def test_recurse_deprecation_warning(self):
     with self.assertWarns(DeprecationWarning):
         builder = Schema()
         builder.add_object('Go away or I shall taunt you a second time!')
         builder.to_dict(recurse=True)
示例#39
0
 def test_preserves_existing_keys(self):
     schema = {'type': 'number', 'value': 5}
     s = Schema()
     s.add_schema(schema)
     self.assertEqual(s.to_dict(), schema)
示例#40
0
 def test_single_type(self):
     s = Schema()
     s.add_object('bacon')
     s.add_object('egg')
     s.add_object('spam')
     self.assertEqual(s.to_dict(), {'type': 'string'})
示例#41
0
 def test_single_type_unicode(self):
     schema = {u'type': u'string'}
     s = Schema()
     s.add_schema(schema)
     self.assertSchema(s.to_dict(), schema)
示例#42
0
 def test_no_schema(self):
     schema = {}
     s = Schema()
     s.add_schema(schema)
     self.assertEqual(s.to_dict(), schema)
示例#43
0
 def test_preserves_existing_keys(self):
     schema = {'type': 'number', 'value': 5}
     s = Schema()
     s.add_schema(schema)
     self.assertSchema(s.to_dict(), schema)
示例#44
0
 def test_multi_type(self):
     schema = {'type': ['boolean', 'null', 'number', 'string']}
     s = Schema()
     s.add_schema(schema)
     self.assertEqual(s.to_dict(), schema)
示例#45
0
 def test_empty(self):
     s = Schema().add_object([])
     self.assertEqual(s.to_dict(), {"type": "array", "items": []})
示例#46
0
 def test_no_schema(self):
     schema = {}
     s = Schema()
     s.add_schema(schema)
     self.assertSchema(s.to_dict(), schema)
示例#47
0
 def test_redundant_integer_type(self):
     s = Schema()
     s.add_object(1)
     s.add_object(1.1)
     self.assertEqual(s.to_dict(), {'type': 'number'})
示例#48
0
 def test_multi_type(self):
     schema = {'type': ['boolean', 'null', 'number', 'string']}
     s = Schema()
     s.add_schema(schema)
     self.assertSchema(s.to_dict(), schema)
示例#49
0
 def test_no_object(self):
     s = Schema()
     self.assertEqual(s.to_dict(), {})
示例#50
0
 def test_boolean(self):
     s = Schema().add_object(True)
     self.assertEqual(s.to_dict(), {"type": "boolean"})
示例#51
0
 def test_string(self):
     s = Schema().add_object("string")
     self.assertEqual(s.to_dict(), {"type": "string"})
示例#52
0
 def test_recurse_deprecation_warning(self):
     with self.assertWarns(DeprecationWarning):
         builder = Schema()
         builder.add_object('Go away or I shall taunt you a second time!')
         builder.to_dict(recurse=True)
示例#53
0
 def test_null(self):
     s = Schema().add_object(None)
     self.assertEqual(s.to_dict(), {"type": "null"})
示例#54
0
 def test_single_type(self):
     s = Schema()
     s.add_object('bacon')
     s.add_object('egg')
     s.add_object('spam')
     self.assertSchema(s.to_dict(), {'type': 'string'})
示例#55
0
 def test_empty(self):
     s = Schema().add_object([])
     self.assertEqual(s.to_dict(),
                      {"type": "array", "items": []})
示例#56
0
 def test_redundant_integer_type(self):
     s = Schema()
     s.add_object(1)
     s.add_object(1.1)
     self.assertSchema(s.to_dict(),
                       {'type': 'number'})
示例#57
0
 def test_monotype(self):
     s = Schema().add_object(["spam", "spam", "spam", "egg", "spam"])
     self.assertEqual(s.to_dict(),
                      {"type": "array", "items": [{"type": "string"}]})