예제 #1
0
    def testRecursion(self):
        # we have to fiddle with PolyConstraint's innards
        value = schema.ChoiceOf(
            schema.ByteStringConstraint(),
            schema.IntegerConstraint(),
            # will add 'value' here
        )
        self.conforms(value, b"key")
        self.conforms(value, 123)
        self.violates(value, [])

        mapping = schema.TupleConstraint(schema.ByteStringConstraint(10),
                                         value)
        self.conforms(mapping, (b"name", b"key"))
        self.conforms(mapping, (b"name", 123))
        value.alternatives = value.alternatives + (mapping, )

        # but note that the constraint can still be applied
        self.conforms(mapping, (b"name", 123))
        self.conforms(mapping, (b"name", b"key"))
        self.conforms(mapping, (b"name", (b"key", b"value")))
        self.conforms(mapping, (b"name", (b"key", 123)))
        self.violates(mapping, (b"name", (b"key", [])))
        l = []
        l.append(l)
        self.violates(mapping, ("name", l))
예제 #2
0
 def testPoly(self):
     c = schema.PolyConstraint(schema.ByteStringConstraint(100),
                               schema.IntegerConstraint())
     self.conforms(c, b"string")
     self.conforms(c, 123)
     self.violates(c, u"unicode")
     self.violates(c, 123.4)
     self.violates(c, ["not", "a", "list"])
예제 #3
0
 def testLargeInteger(self):
     c = schema.IntegerConstraint(64)
     self.conforms(c, 123)
     self.violates(c, "123")
     self.violates(c, None)
     self.conforms(c, 2**512 - 1)
     self.violates(c, 2**512)
     self.conforms(c, -2**512 + 1)
     self.violates(c, -2**512)
예제 #4
0
 def testTuple(self):
     c = schema.TupleConstraint(schema.ByteStringConstraint(10),
                                schema.ByteStringConstraint(100),
                                schema.IntegerConstraint())
     self.conforms(c, (b"hi", b"there buddy, you're number", 1))
     self.violates(c, "nope")
     self.violates(c, ("string", "string", "NaN"))
     self.violates(c, ("string that is too long", "string", 1))
     self.violates(c, ["Are tuples", "and lists the same?", 0])
예제 #5
0
 def testInteger(self):
     # s_int32_t
     c = schema.IntegerConstraint()
     self.conforms(c, 123)
     self.violates(c, 2**64)
     self.conforms(c, 0)
     self.conforms(c, 2**31 - 1)
     self.violates(c, 2**31)
     self.conforms(c, -2**31)
     self.violates(c, -2**31 - 1)
     self.violates(c, "123")
     self.violates(c, Dummy())
     self.violates(c, None)
예제 #6
0
    def testNestedTuple(self):
        inner = schema.TupleConstraint(schema.ByteStringConstraint(10),
                                       schema.IntegerConstraint())
        outer = schema.TupleConstraint(schema.ByteStringConstraint(100), inner)

        self.conforms(inner, (b"hi", 2))
        self.conforms(outer, (b"long string here", (b"short", 3)))
        self.violates(outer, (b"long string here", (b"short", 3, b"extra")))
        self.violates(outer, (b"long string here", (b"too long string", 3)))

        outer2 = schema.TupleConstraint(inner, inner)
        self.conforms(outer2, ((b"hi", 1), (b"there", 2)))
        self.violates(outer2, (b"hi", 1, b"flat", 2))
예제 #7
0
    def testDict(self):
        d = schema.DictOf(schema.ByteStringConstraint(10),
                          schema.IntegerConstraint(),
                          maxKeys=4)

        self.conforms(d, {b"a": 1, b"b": 2})
        self.conforms(d, {b"foo": 123, b"bar": 345, b"blah": 456, b"yar": 789})
        self.violates(d, None)
        self.violates(d, 12)
        self.violates(d, [b"nope"])
        self.violates(d, (b"nice", b"try"))
        self.violates(d, {1: 2, 3: 4})
        self.violates(d, {b"a": b"b"})
        self.violates(d, {b"a": 1, b"b": 2, b"c": 3, b"d": 4, b"toomuch": 5})
예제 #8
0
    def testSet(self):
        l = schema.SetOf(schema.IntegerConstraint(), 3)
        self.conforms(l, set([]))
        self.conforms(l, set([1]))
        self.conforms(l, set([1, 2, 3]))
        self.violates(l, set([1, 2, 3, 4]))
        self.violates(l, set(["not a number"]))
        self.conforms(l, frozenset([]))
        self.conforms(l, frozenset([1]))
        self.conforms(l, frozenset([1, 2, 3]))
        self.violates(l, frozenset([1, 2, 3, 4]))
        self.violates(l, frozenset(["not a number"]))

        l = schema.SetOf(schema.IntegerConstraint(), 3, True)
        self.conforms(l, set([]))
        self.conforms(l, set([1]))
        self.conforms(l, set([1, 2, 3]))
        self.violates(l, set([1, 2, 3, 4]))
        self.violates(l, set(["not a number"]))
        self.violates(l, frozenset([]))
        self.violates(l, frozenset([1]))
        self.violates(l, frozenset([1, 2, 3]))
        self.violates(l, frozenset([1, 2, 3, 4]))
        self.violates(l, frozenset(["not a number"]))

        l = schema.SetOf(schema.IntegerConstraint(), 3, False)
        self.violates(l, set([]))
        self.violates(l, set([1]))
        self.violates(l, set([1, 2, 3]))
        self.violates(l, set([1, 2, 3, 4]))
        self.violates(l, set(["not a number"]))
        self.conforms(l, frozenset([]))
        self.conforms(l, frozenset([1]))
        self.conforms(l, frozenset([1, 2, 3]))
        self.violates(l, frozenset([1, 2, 3, 4]))
        self.violates(l, frozenset(["not a number"]))
예제 #9
0
    def testSet(self):
        l = schema.SetOf(schema.IntegerConstraint(), 3)
        self.conforms(l, sets.Set([]))
        self.conforms(l, sets.Set([1]))
        self.conforms(l, sets.Set([1, 2, 3]))
        self.violates(l, sets.Set([1, 2, 3, 4]))
        self.violates(l, sets.Set(["not a number"]))
        self.conforms(l, sets.ImmutableSet([]))
        self.conforms(l, sets.ImmutableSet([1]))
        self.conforms(l, sets.ImmutableSet([1, 2, 3]))
        self.violates(l, sets.ImmutableSet([1, 2, 3, 4]))
        self.violates(l, sets.ImmutableSet(["not a number"]))
        if have_builtin_set:
            self.conforms(l, set([]))
            self.conforms(l, set([1]))
            self.conforms(l, set([1, 2, 3]))
            self.violates(l, set([1, 2, 3, 4]))
            self.violates(l, set(["not a number"]))
            self.conforms(l, frozenset([]))
            self.conforms(l, frozenset([1]))
            self.conforms(l, frozenset([1, 2, 3]))
            self.violates(l, frozenset([1, 2, 3, 4]))
            self.violates(l, frozenset(["not a number"]))

        l = schema.SetOf(schema.IntegerConstraint(), 3, True)
        self.conforms(l, sets.Set([]))
        self.conforms(l, sets.Set([1]))
        self.conforms(l, sets.Set([1, 2, 3]))
        self.violates(l, sets.Set([1, 2, 3, 4]))
        self.violates(l, sets.Set(["not a number"]))
        self.violates(l, sets.ImmutableSet([]))
        self.violates(l, sets.ImmutableSet([1]))
        self.violates(l, sets.ImmutableSet([1, 2, 3]))
        self.violates(l, sets.ImmutableSet([1, 2, 3, 4]))
        self.violates(l, sets.ImmutableSet(["not a number"]))
        if have_builtin_set:
            self.conforms(l, set([]))
            self.conforms(l, set([1]))
            self.conforms(l, set([1, 2, 3]))
            self.violates(l, set([1, 2, 3, 4]))
            self.violates(l, set(["not a number"]))
            self.violates(l, frozenset([]))
            self.violates(l, frozenset([1]))
            self.violates(l, frozenset([1, 2, 3]))
            self.violates(l, frozenset([1, 2, 3, 4]))
            self.violates(l, frozenset(["not a number"]))

        l = schema.SetOf(schema.IntegerConstraint(), 3, False)
        self.violates(l, sets.Set([]))
        self.violates(l, sets.Set([1]))
        self.violates(l, sets.Set([1, 2, 3]))
        self.violates(l, sets.Set([1, 2, 3, 4]))
        self.violates(l, sets.Set(["not a number"]))
        self.conforms(l, sets.ImmutableSet([]))
        self.conforms(l, sets.ImmutableSet([1]))
        self.conforms(l, sets.ImmutableSet([1, 2, 3]))
        self.violates(l, sets.ImmutableSet([1, 2, 3, 4]))
        self.violates(l, sets.ImmutableSet(["not a number"]))
        if have_builtin_set:
            self.violates(l, set([]))
            self.violates(l, set([1]))
            self.violates(l, set([1, 2, 3]))
            self.violates(l, set([1, 2, 3, 4]))
            self.violates(l, set(["not a number"]))
            self.conforms(l, frozenset([]))
            self.conforms(l, frozenset([1]))
            self.conforms(l, frozenset([1, 2, 3]))
            self.violates(l, frozenset([1, 2, 3, 4]))
            self.violates(l, frozenset(["not a number"]))