def test_dict_concrete_and_generic_key_type(self): s = Schema({ "name": str, int: str }) self.assertEqual({ "name": "Peter", 1: "one" }, s.validate({ "name": "Peter", 1: "one" })) with self.assertRaises(SchemaError): s.validate({ 1: "one", 2: "two" }) # Missing "name" with self.assertRaises(SchemaError): s.validate({ "name": "Peter", 1: 1}) # Invalid value with self.assertRaises(SchemaError): s.validate({ "name": "Peter", "1": 1}) # Invalid key
def test_dict_generic_key_type(self): # A dictionary that maps string to numbers s = Schema({ str: int }) self.assertEqual({}, s.validate({})) self.assertEqual({ "a": 1, "b": 2 }).validate({ "a": 1, "b": 2}) with self.assertRaises(SchemaError): s.validate({ 1: 1 }) # Wrong key with self.assertRaises(SchemaError): s.validate({ "a": "a" }) # Wrong value
def test_nested_match(self): s = Schema({"uid": StringMatch(r"[a-z][a-z_]+")}) self.assertEqual({ "uid": "jdoe" }, s.validate({ "uid": "jdoe" }))
def test_optional_precedes_type(self): s = Schema({ "a": Optional(int, default=42), str: 22 }) self.assertEqual({ "a": 42, "b": 22 }, s.validate({ "b": 22 }))
def test_optional_default_value(self): s = Schema({ "value": Optional(int, default=42) }) self.assertEqual({ "value": 42 }, s.validate({})) self.assertEqual({ "value": 10 }, s.validate({ "value": 10 }))
def test_nested_schema(self): s = Schema({ "value": Schema(int) }) self.assertEqual({ "value": 4 }, s.validate({ "value": 4 })) with self.assertRaises(SchemaError): s.validate({ "value": "invalid value" })