Mercurial > hgrepos > Python > libs > data-schema
comparison tests/test_schema.py @ 13:940676a0de84
ERRORS and WARNINGS are now enums
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Fri, 07 Jul 2023 02:10:32 +0200 |
| parents | 84dfd1a94926 |
| children | 696b83f29363 |
comparison
equal
deleted
inserted
replaced
| 12:8e0b60f868dd | 13:940676a0de84 |
|---|---|
| 8 | 8 |
| 9 import configmix.yaml | 9 import configmix.yaml |
| 10 | 10 |
| 11 import data_schema | 11 import data_schema |
| 12 import data_schema.util | 12 import data_schema.util |
| 13 from data_schema import ERRORS, WARNINGS | |
| 13 | 14 |
| 14 | 15 |
| 15 TYPE_RE = type(re.compile(r"\A.+\Z")) | 16 TYPE_RE = type(re.compile(r"\A.+\Z")) |
| 16 | 17 |
| 17 | 18 |
| 1336 pass | 1337 pass |
| 1337 else: | 1338 else: |
| 1338 self.assertFalse( | 1339 self.assertFalse( |
| 1339 "no SchemaError raised when a non-dict given as schema") | 1340 "no SchemaError raised when a non-dict given as schema") |
| 1340 | 1341 |
| 1341 def test_problem_ctor_nonexisting_code(self): | |
| 1342 self.assertRaises(ValueError, data_schema.ValidationProblem, code=2) | |
| 1343 | |
| 1344 def test_problem_ctor_no_code(self): | 1342 def test_problem_ctor_no_code(self): |
| 1345 self.assertRaises(TypeError, data_schema.ValidationProblem, code=None) | 1343 self.assertRaises(TypeError, data_schema.ValidationProblem, code=None) |
| 1346 | 1344 |
| 1347 def test_error_ctor(self): | 1345 def test_error_ctor(self): |
| 1348 v = data_schema.ValidationProblem(code=10000) | 1346 v = data_schema.ValidationProblem(code=ERRORS.E10000) |
| 1349 self.assertEqual(data_schema.ERROR, v.severity) | 1347 self.assertEqual(data_schema.ERROR, v.severity) |
| 1350 | 1348 |
| 1351 def test_warning_ctor(self): | 1349 def test_warning_ctor(self): |
| 1352 v = data_schema.ValidationProblem(code=80000) | 1350 v = data_schema.ValidationProblem(code=WARNINGS.W80000) |
| 1353 self.assertEqual(data_schema.WARNING, v.severity) | 1351 self.assertEqual(data_schema.WARNING, v.severity) |
| 1354 | 1352 |
| 1355 def test_d1(self): | 1353 def test_d1(self): |
| 1356 x = list(data_schema.validate({}, {"type": "dict"})) | 1354 x = list(data_schema.validate({}, {"type": "dict"})) |
| 1357 self.assertEqual(0, len(x)) | 1355 self.assertEqual(0, len(x)) |
| 1358 | 1356 |
| 1359 def test_d1_not_nullable(self): | 1357 def test_d1_not_nullable(self): |
| 1360 x = list(data_schema.validate(None, {"type": "dict"})) | 1358 x = list(data_schema.validate(None, {"type": "dict"})) |
| 1361 self.assertEqual(1, len(x)) | 1359 self.assertEqual(1, len(x)) |
| 1362 self.assertEqual(10000, x[0].code) | 1360 self.assertEqual(ERRORS.E10000, x[0].code) |
| 1363 | 1361 |
| 1364 def test_d1_nullable(self): | 1362 def test_d1_nullable(self): |
| 1365 x = list(data_schema.validate(None, {"type": "dict", | 1363 x = list(data_schema.validate(None, {"type": "dict", |
| 1366 "nullable": True})) | 1364 "nullable": True})) |
| 1367 self.assertEqual(0, len(x)) | 1365 self.assertEqual(0, len(x)) |
| 1368 | 1366 |
| 1369 def test_d2(self): | 1367 def test_d2(self): |
| 1370 x = list(data_schema.validate([], {"type": "map"})) | 1368 x = list(data_schema.validate([], {"type": "map"})) |
| 1371 self.assertEqual(1, len(x)) | 1369 self.assertEqual(1, len(x)) |
| 1372 self.assertEqual(data_schema.ERROR, x[0].severity) | 1370 self.assertEqual(data_schema.ERROR, x[0].severity) |
| 1373 self.assertEqual(10000, x[0].code) | 1371 self.assertEqual(ERRORS.E10000, x[0].code) |
| 1374 | 1372 |
| 1375 def test_d3(self): | 1373 def test_d3(self): |
| 1376 x = list(data_schema.validate( | 1374 x = list(data_schema.validate( |
| 1377 {"key": "value"}, | 1375 {"key": "value"}, |
| 1378 {"type": "dict", | 1376 {"type": "dict", |
| 1379 "required": ["key2"]})) | 1377 "required": ["key2"]})) |
| 1380 self.assertEqual(2, len(x)) | 1378 self.assertEqual(2, len(x)) |
| 1381 self.assertEqual(data_schema.ERROR, x[0].severity) | 1379 self.assertEqual(data_schema.ERROR, x[0].severity) |
| 1382 self.assertEqual(10004, x[0].code) | 1380 self.assertEqual(ERRORS.E10004, x[0].code) |
| 1383 self.assertEqual("key", x[0].hint) | 1381 self.assertEqual("key", x[0].hint) |
| 1384 self.assertEqual(data_schema.ERROR, x[1].severity) | 1382 self.assertEqual(data_schema.ERROR, x[1].severity) |
| 1385 self.assertEqual(10005, x[1].code) | 1383 self.assertEqual(ERRORS.E10005, x[1].code) |
| 1386 self.assertEqual(["key2"], x[1].hint) | 1384 self.assertEqual(["key2"], x[1].hint) |
| 1387 | 1385 |
| 1388 def test_d4(self): | 1386 def test_d4(self): |
| 1389 x = list(data_schema.validate( | 1387 x = list(data_schema.validate( |
| 1390 {"key": "value"}, | 1388 {"key": "value"}, |
| 1399 x = list(data_schema.validate( | 1397 x = list(data_schema.validate( |
| 1400 {"key": "value"}, | 1398 {"key": "value"}, |
| 1401 {"type": "dict", | 1399 {"type": "dict", |
| 1402 "additionalKeys": False})) | 1400 "additionalKeys": False})) |
| 1403 self.assertEqual(1, len(x)) | 1401 self.assertEqual(1, len(x)) |
| 1404 self.assertEqual(10004, x[0].code) | 1402 self.assertEqual(ERRORS.E10004, x[0].code) |
| 1405 self.assertEqual("key", x[0].hint) | 1403 self.assertEqual("key", x[0].hint) |
| 1406 | 1404 |
| 1407 def test_d5_2(self): | 1405 def test_d5_2(self): |
| 1408 x = list(data_schema.validate( | 1406 x = list(data_schema.validate( |
| 1409 {"key": "value"}, | 1407 {"key": "value"}, |
| 1427 "key2": "value"}, | 1425 "key2": "value"}, |
| 1428 {"type": "dict", | 1426 {"type": "dict", |
| 1429 "additionalKeys": False}, | 1427 "additionalKeys": False}, |
| 1430 skip_keys=[re.compile(r"\A__.+"), re.compile(r"\Akey\d+\Z")])) | 1428 skip_keys=[re.compile(r"\A__.+"), re.compile(r"\Akey\d+\Z")])) |
| 1431 self.assertEqual(1, len(x)) | 1429 self.assertEqual(1, len(x)) |
| 1432 self.assertEqual(10004, x[0].code) | 1430 self.assertEqual(ERRORS.E10004, x[0].code) |
| 1433 self.assertEqual("key", x[0].hint) | 1431 self.assertEqual("key", x[0].hint) |
| 1434 | 1432 |
| 1435 def test_d6(self): | 1433 def test_d6(self): |
| 1436 x = list(data_schema.validate( | 1434 x = list(data_schema.validate( |
| 1437 {"key": "value"}, | 1435 {"key": "value"}, |
| 1452 {"key": 1234}, | 1450 {"key": 1234}, |
| 1453 {"type": "dict", | 1451 {"type": "dict", |
| 1454 "additionalKeys": { | 1452 "additionalKeys": { |
| 1455 "type": "string"}})) | 1453 "type": "string"}})) |
| 1456 self.assertEqual(1, len(x)) | 1454 self.assertEqual(1, len(x)) |
| 1457 self.assertEqual(10002, x[0].code) | 1455 self.assertEqual(ERRORS.E10002, x[0].code) |
| 1458 self.assertEqual(1234, x[0].hint) | 1456 self.assertEqual(1234, x[0].hint) |
| 1459 | 1457 |
| 1460 def test_d8_2(self): | 1458 def test_d8_2(self): |
| 1461 x = list(data_schema.validate( | 1459 x = list(data_schema.validate( |
| 1462 {"key": 1234}, | 1460 {"key": 1234}, |
| 1470 pr = list(data_schema.validate( | 1468 pr = list(data_schema.validate( |
| 1471 {0: "value"}, | 1469 {0: "value"}, |
| 1472 {"type": "dict", | 1470 {"type": "dict", |
| 1473 "additionalKeys": True})) | 1471 "additionalKeys": True})) |
| 1474 self.assertEqual(1, len(pr)) | 1472 self.assertEqual(1, len(pr)) |
| 1475 self.assertEqual(10003, pr[0].code) | 1473 self.assertEqual(ERRORS.E10003, pr[0].code) |
| 1476 | 1474 |
| 1477 def test_d10_int_dict_keys(self): | 1475 def test_d10_int_dict_keys(self): |
| 1478 pr = list(data_schema.validate( | 1476 pr = list(data_schema.validate( |
| 1479 {1: "value", 2: "value2"}, | 1477 {1: "value", 2: "value2"}, |
| 1480 {"type": "dict", | 1478 {"type": "dict", |
| 1484 "keyNames": {"type": "int"}})) | 1482 "keyNames": {"type": "int"}})) |
| 1485 self.assertEqual(0, len(pr)) | 1483 self.assertEqual(0, len(pr)) |
| 1486 | 1484 |
| 1487 def test_error_message(self): | 1485 def test_error_message(self): |
| 1488 self.assertEqual("dict expected", | 1486 self.assertEqual("dict expected", |
| 1489 data_schema.problem_message(10000)) | 1487 data_schema.problem_message(ERRORS.E10000)) |
| 1490 pr = data_schema.ValidationProblem(code=10000) | 1488 pr = data_schema.ValidationProblem(code=ERRORS.E10000) |
| 1491 self.assertEqual("dict expected", data_schema.problem_message(pr)) | 1489 self.assertEqual("dict expected", data_schema.problem_message(pr)) |
| 1492 | 1490 |
| 1493 self.assertEqual("duplicate dict key", | 1491 self.assertEqual("duplicate dict key", |
| 1494 data_schema.problem_message(80000)) | 1492 data_schema.problem_message(WARNINGS.W80000)) |
| 1495 pr = data_schema.ValidationProblem(code=80000) | 1493 pr = data_schema.ValidationProblem(code=WARNINGS.W80000) |
| 1496 self.assertEqual("duplicate dict key", | 1494 self.assertEqual("duplicate dict key", |
| 1497 data_schema.problem_message(pr)) | 1495 data_schema.problem_message(pr)) |
| 1498 | 1496 |
| 1499 self.assertRaises(KeyError, data_schema.problem_message, 1234) | 1497 self.assertRaises(KeyError, data_schema.problem_message, 12345) |
| 1500 | 1498 |
| 1501 def test_str_enum(self): | 1499 def test_str_enum(self): |
| 1502 pr = list(data_schema.validate( | 1500 pr = list(data_schema.validate( |
| 1503 "e1", | 1501 "e1", |
| 1504 {"type": "string", | 1502 {"type": "string", |
| 1515 pr = list(data_schema.validate( | 1513 pr = list(data_schema.validate( |
| 1516 "e3", | 1514 "e3", |
| 1517 {"type": "string", | 1515 {"type": "string", |
| 1518 "enum": ["e1", "e2"]})) | 1516 "enum": ["e1", "e2"]})) |
| 1519 self.assertEqual(1, len(pr)) | 1517 self.assertEqual(1, len(pr)) |
| 1520 self.assertEqual(10043, pr[0].code) | 1518 self.assertEqual(ERRORS.E10043, pr[0].code) |
| 1521 | 1519 |
| 1522 def test_str_minlen(self): | 1520 def test_str_minlen(self): |
| 1523 pr = list(data_schema.validate( | 1521 pr = list(data_schema.validate( |
| 1524 "", | 1522 "", |
| 1525 {"type": "string", | 1523 {"type": "string", |
| 1529 pr = list(data_schema.validate( | 1527 pr = list(data_schema.validate( |
| 1530 "", | 1528 "", |
| 1531 {"type": "string", | 1529 {"type": "string", |
| 1532 "minLength": 1})) | 1530 "minLength": 1})) |
| 1533 self.assertEqual(1, len(pr)) | 1531 self.assertEqual(1, len(pr)) |
| 1534 self.assertEqual(10006, pr[0].code) | 1532 self.assertEqual(ERRORS.E10006, pr[0].code) |
| 1535 | 1533 |
| 1536 pr = list(data_schema.validate( | 1534 pr = list(data_schema.validate( |
| 1537 "x", | 1535 "x", |
| 1538 {"type": "string", | 1536 {"type": "string", |
| 1539 "minLength": 1})) | 1537 "minLength": 1})) |
| 1549 pr = list(data_schema.validate( | 1547 pr = list(data_schema.validate( |
| 1550 "x", | 1548 "x", |
| 1551 {"type": "string", | 1549 {"type": "string", |
| 1552 "maxLength": 0})) | 1550 "maxLength": 0})) |
| 1553 self.assertEqual(1, len(pr)) | 1551 self.assertEqual(1, len(pr)) |
| 1554 self.assertEqual(10007, pr[0].code) | 1552 self.assertEqual(ERRORS.E10007, pr[0].code) |
| 1555 | 1553 |
| 1556 pr = list(data_schema.validate( | 1554 pr = list(data_schema.validate( |
| 1557 "x", | 1555 "x", |
| 1558 {"type": "string", | 1556 {"type": "string", |
| 1559 "maxLength": 1})) | 1557 "maxLength": 1})) |
| 1562 pr = list(data_schema.validate( | 1560 pr = list(data_schema.validate( |
| 1563 b"x", | 1561 b"x", |
| 1564 {"type": "string", | 1562 {"type": "string", |
| 1565 "maxLength": 1})) | 1563 "maxLength": 1})) |
| 1566 self.assertEqual(1, len(pr)) | 1564 self.assertEqual(1, len(pr)) |
| 1567 self.assertEqual(10002, pr[0].code) | 1565 self.assertEqual(ERRORS.E10002, pr[0].code) |
| 1568 | 1566 |
| 1569 @staticmethod | 1567 @staticmethod |
| 1570 def _pattern_check_function(obj, schema, context=None): | 1568 def _pattern_check_function(obj, schema, context=None): |
| 1571 if obj == " 5 ": | 1569 if obj == " 5 ": |
| 1572 yield data_schema.ValidationProblem(code=10009) | 1570 yield data_schema.ValidationProblem(code=ERRORS.E10009) |
| 1573 | 1571 |
| 1574 def test_str_re(self): | 1572 def test_str_re(self): |
| 1575 pr = list(data_schema.validate( | 1573 pr = list(data_schema.validate( |
| 1576 "abc", | 1574 "abc", |
| 1577 {"type": "string", | 1575 {"type": "string", |
| 1578 "pattern": r'\A[0-9]+\Z'})) | 1576 "pattern": r'\A[0-9]+\Z'})) |
| 1579 self.assertEqual(1, len(pr)) | 1577 self.assertEqual(1, len(pr)) |
| 1580 self.assertEqual(10008, pr[0].code) | 1578 self.assertEqual(ERRORS.E10008, pr[0].code) |
| 1581 | 1579 |
| 1582 pr = list(data_schema.validate( | 1580 pr = list(data_schema.validate( |
| 1583 "123", | 1581 "123", |
| 1584 {"type": "string", | 1582 {"type": "string", |
| 1585 "pattern": re.compile(r'\A[a-z]+\Z')})) | 1583 "pattern": re.compile(r'\A[a-z]+\Z')})) |
| 1586 self.assertEqual(1, len(pr)) | 1584 self.assertEqual(1, len(pr)) |
| 1587 self.assertEqual(10008, pr[0].code) | 1585 self.assertEqual(ERRORS.E10008, pr[0].code) |
| 1588 | 1586 |
| 1589 pr = list(data_schema.validate( | 1587 pr = list(data_schema.validate( |
| 1590 "123", | 1588 "123", |
| 1591 {"type": "string", | 1589 {"type": "string", |
| 1592 "pattern": self._pattern_check_function})) | 1590 "pattern": self._pattern_check_function})) |
| 1595 pr = list(data_schema.validate( | 1593 pr = list(data_schema.validate( |
| 1596 " 5 ", | 1594 " 5 ", |
| 1597 {"type": "string", | 1595 {"type": "string", |
| 1598 "pattern": self._pattern_check_function})) | 1596 "pattern": self._pattern_check_function})) |
| 1599 self.assertEqual(1, len(pr)) | 1597 self.assertEqual(1, len(pr)) |
| 1600 self.assertEqual(10009, pr[0].code) | 1598 self.assertEqual(ERRORS.E10009, pr[0].code) |
| 1601 | 1599 |
| 1602 def test_binary_basic(self): | 1600 def test_binary_basic(self): |
| 1603 pr = list(data_schema.validate( | 1601 pr = list(data_schema.validate( |
| 1604 b"", | 1602 b"", |
| 1605 {"type": "binary"})) | 1603 {"type": "binary"})) |
| 1608 def test_str_is_not_binary(self): | 1606 def test_str_is_not_binary(self): |
| 1609 pr = list(data_schema.validate( | 1607 pr = list(data_schema.validate( |
| 1610 "", | 1608 "", |
| 1611 {"type": "binary"})) | 1609 {"type": "binary"})) |
| 1612 self.assertEqual(1, len(pr)) | 1610 self.assertEqual(1, len(pr)) |
| 1613 self.assertEqual(10035, pr[0].code) | 1611 self.assertEqual(ERRORS.E10035, pr[0].code) |
| 1614 | 1612 |
| 1615 @staticmethod | 1613 @staticmethod |
| 1616 def _binary_pattern_check_function(obj, schema, context=None): | 1614 def _binary_pattern_check_function(obj, schema, context=None): |
| 1617 if obj != b"\x00": | 1615 if obj != b"\x00": |
| 1618 yield data_schema.ValidationProblem(code=10009) | 1616 yield data_schema.ValidationProblem(code=ERRORS.E10009) |
| 1619 | 1617 |
| 1620 def test_binary_pattern_check(self): | 1618 def test_binary_pattern_check(self): |
| 1621 pr = list(data_schema.validate( | 1619 pr = list(data_schema.validate( |
| 1622 b"\x00", | 1620 b"\x00", |
| 1623 {"type": "binary", | 1621 {"type": "binary", |
| 1627 pr = list(data_schema.validate( | 1625 pr = list(data_schema.validate( |
| 1628 b"\x01", | 1626 b"\x01", |
| 1629 {"type": "binary", | 1627 {"type": "binary", |
| 1630 "pattern": self._binary_pattern_check_function})) | 1628 "pattern": self._binary_pattern_check_function})) |
| 1631 self.assertEqual(1, len(pr)) | 1629 self.assertEqual(1, len(pr)) |
| 1632 self.assertEqual(10009, pr[0].code) | 1630 self.assertEqual(ERRORS.E10009, pr[0].code) |
| 1633 | 1631 |
| 1634 def test_binary_re_str_match(self): | 1632 def test_binary_re_str_match(self): |
| 1635 pr = list(data_schema.validate( | 1633 pr = list(data_schema.validate( |
| 1636 b"\x00\x00\x00", | 1634 b"\x00\x00\x00", |
| 1637 {"type": "binary", | 1635 {"type": "binary", |
| 1649 pr = list(data_schema.validate( | 1647 pr = list(data_schema.validate( |
| 1650 b"\x00\x00\x00", | 1648 b"\x00\x00\x00", |
| 1651 {"type": "binary", | 1649 {"type": "binary", |
| 1652 "pattern": u"\\x01+"})) | 1650 "pattern": u"\\x01+"})) |
| 1653 self.assertEqual(1, len(pr)) | 1651 self.assertEqual(1, len(pr)) |
| 1654 self.assertEqual(10047, pr[0].code) | 1652 self.assertEqual(ERRORS.E10047, pr[0].code) |
| 1655 | 1653 |
| 1656 def test_binary_re_bytes_mismatch(self): | 1654 def test_binary_re_bytes_mismatch(self): |
| 1657 pr = list(data_schema.validate( | 1655 pr = list(data_schema.validate( |
| 1658 b"\x00\x00\x00", | 1656 b"\x00\x00\x00", |
| 1659 {"type": "binary", | 1657 {"type": "binary", |
| 1660 "pattern": b"\x01+"})) | 1658 "pattern": b"\x01+"})) |
| 1661 self.assertEqual(1, len(pr)) | 1659 self.assertEqual(1, len(pr)) |
| 1662 self.assertEqual(10047, pr[0].code) | 1660 self.assertEqual(ERRORS.E10047, pr[0].code) |
| 1663 | 1661 |
| 1664 def test_binary_length(self): | 1662 def test_binary_length(self): |
| 1665 pr = list(data_schema.validate( | 1663 pr = list(data_schema.validate( |
| 1666 b"", | 1664 b"", |
| 1667 {"type": "binary", | 1665 {"type": "binary", |
| 1668 "minLength": 1})) | 1666 "minLength": 1})) |
| 1669 self.assertEqual(1, len(pr)) | 1667 self.assertEqual(1, len(pr)) |
| 1670 self.assertEqual(10036, pr[0].code) | 1668 self.assertEqual(ERRORS.E10036, pr[0].code) |
| 1671 | 1669 |
| 1672 pr = list(data_schema.validate( | 1670 pr = list(data_schema.validate( |
| 1673 b"1", | 1671 b"1", |
| 1674 {"type": "binary", | 1672 {"type": "binary", |
| 1675 "maxLength": 0})) | 1673 "maxLength": 0})) |
| 1676 self.assertEqual(1, len(pr)) | 1674 self.assertEqual(1, len(pr)) |
| 1677 self.assertEqual(10037, pr[0].code) | 1675 self.assertEqual(ERRORS.E10037, pr[0].code) |
| 1678 | 1676 |
| 1679 def test_deny(self): | 1677 def test_deny(self): |
| 1680 pr = list(data_schema.validate("abc", {"type": "deny"})) | 1678 pr = list(data_schema.validate("abc", {"type": "deny"})) |
| 1681 self.assertEqual(1, len(pr)) | 1679 self.assertEqual(1, len(pr)) |
| 1682 self.assertEqual(10010, pr[0].code) | 1680 self.assertEqual(ERRORS.E10010, pr[0].code) |
| 1683 | 1681 |
| 1684 def test_accept(self): | 1682 def test_accept(self): |
| 1685 pr = list(data_schema.validate("abc", {"type": "accept"})) | 1683 pr = list(data_schema.validate("abc", {"type": "accept"})) |
| 1686 self.assertEqual(0, len(pr)) | 1684 self.assertEqual(0, len(pr)) |
| 1687 | 1685 |
| 1701 pr = list(data_schema.validate(None, {"type": None})) | 1699 pr = list(data_schema.validate(None, {"type": None})) |
| 1702 self.assertEqual(0, len(pr)) | 1700 self.assertEqual(0, len(pr)) |
| 1703 | 1701 |
| 1704 pr = list(data_schema.validate({}, {"type": None})) | 1702 pr = list(data_schema.validate({}, {"type": None})) |
| 1705 self.assertEqual(1, len(pr)) | 1703 self.assertEqual(1, len(pr)) |
| 1706 self.assertEqual(10011, pr[0].code) | 1704 self.assertEqual(ERRORS.E10011, pr[0].code) |
| 1707 | 1705 |
| 1708 def test_l1(self): | 1706 def test_l1(self): |
| 1709 pr = list(data_schema.validate([], {"type": "list"})) | 1707 pr = list(data_schema.validate([], {"type": "list"})) |
| 1710 self.assertEqual(0, len(pr)) | 1708 self.assertEqual(0, len(pr)) |
| 1711 | 1709 |
| 1713 self.assertEqual(0, len(pr)) | 1711 self.assertEqual(0, len(pr)) |
| 1714 | 1712 |
| 1715 def test_l1_not_nullable(self): | 1713 def test_l1_not_nullable(self): |
| 1716 pr = list(data_schema.validate(None, {"type": "list"})) | 1714 pr = list(data_schema.validate(None, {"type": "list"})) |
| 1717 self.assertEqual(1, len(pr)) | 1715 self.assertEqual(1, len(pr)) |
| 1718 self.assertEqual(10001, pr[0].code) | 1716 self.assertEqual(ERRORS.E10001, pr[0].code) |
| 1719 | 1717 |
| 1720 def test_l1_nullable(self): | 1718 def test_l1_nullable(self): |
| 1721 pr = list(data_schema.validate( | 1719 pr = list(data_schema.validate( |
| 1722 None, {"type": "list", "nullable": True})) | 1720 None, {"type": "list", "nullable": True})) |
| 1723 self.assertEqual(0, len(pr)) | 1721 self.assertEqual(0, len(pr)) |
| 1724 | 1722 |
| 1725 def test_l2_default_schema_for_items_is_deny(self): | 1723 def test_l2_default_schema_for_items_is_deny(self): |
| 1726 pr = list(data_schema.validate(["a", "b", "c"], {"type": "list"})) | 1724 pr = list(data_schema.validate(["a", "b", "c"], {"type": "list"})) |
| 1727 self.assertEqual(3, len(pr)) | 1725 self.assertEqual(3, len(pr)) |
| 1728 for i in range(0, 3): | 1726 for i in range(0, 3): |
| 1729 self.assertEqual(10010, pr[i].code) | 1727 self.assertEqual(ERRORS.E10010, pr[i].code) |
| 1730 | 1728 |
| 1731 def test_l3_schema_for_items(self): | 1729 def test_l3_schema_for_items(self): |
| 1732 pr = list(data_schema.validate( | 1730 pr = list(data_schema.validate( |
| 1733 ["a", "b", "c"], | 1731 ["a", "b", "c"], |
| 1734 {"type": "array", | 1732 {"type": "array", |
| 1743 self.assertEqual(0, len(pr)) | 1741 self.assertEqual(0, len(pr)) |
| 1744 | 1742 |
| 1745 def test_t1_not_nullable(self): | 1743 def test_t1_not_nullable(self): |
| 1746 pr = list(data_schema.validate(None, {"type": "tuple"})) | 1744 pr = list(data_schema.validate(None, {"type": "tuple"})) |
| 1747 self.assertEqual(1, len(pr)) | 1745 self.assertEqual(1, len(pr)) |
| 1748 self.assertEqual(10014, pr[0].code) | 1746 self.assertEqual(ERRORS.E10014, pr[0].code) |
| 1749 | 1747 |
| 1750 def test_t1_nullable(self): | 1748 def test_t1_nullable(self): |
| 1751 pr = list(data_schema.validate( | 1749 pr = list(data_schema.validate( |
| 1752 None, {"type": "tuple", "nullable": True})) | 1750 None, {"type": "tuple", "nullable": True})) |
| 1753 self.assertEqual(0, len(pr)) | 1751 self.assertEqual(0, len(pr)) |
| 1769 "items": [ | 1767 "items": [ |
| 1770 {"type": "string"}, | 1768 {"type": "string"}, |
| 1771 {"type": None}, | 1769 {"type": None}, |
| 1772 {"type": "deny"}]})) | 1770 {"type": "deny"}]})) |
| 1773 self.assertEqual(1, len(pr)) | 1771 self.assertEqual(1, len(pr)) |
| 1774 self.assertEqual(10010, pr[0].code) | 1772 self.assertEqual(ERRORS.E10010, pr[0].code) |
| 1775 self.assertEqual(2, pr[0].context.index) | 1773 self.assertEqual(2, pr[0].context.index) |
| 1776 | 1774 |
| 1777 def test_t4(self): | 1775 def test_t4(self): |
| 1778 pr = list(data_schema.validate( | 1776 pr = list(data_schema.validate( |
| 1779 ["a", None, {"key": "value"}], | 1777 ["a", None, {"key": "value"}], |
| 1780 {"type": "tuple", | 1778 {"type": "tuple", |
| 1781 "items": [ | 1779 "items": [ |
| 1782 {"type": "string"}, | 1780 {"type": "string"}, |
| 1783 {"type": None}]})) | 1781 {"type": None}]})) |
| 1784 self.assertEqual(1, len(pr)) | 1782 self.assertEqual(1, len(pr)) |
| 1785 self.assertEqual(10017, pr[0].code) | 1783 self.assertEqual(ERRORS.E10017, pr[0].code) |
| 1786 self.assertEqual(2, pr[0].context.index) | 1784 self.assertEqual(2, pr[0].context.index) |
| 1787 | 1785 |
| 1788 def test_t5(self): | 1786 def test_t5(self): |
| 1789 pr = list(data_schema.validate( | 1787 pr = list(data_schema.validate( |
| 1790 ["a", None, {"key": "value"}], | 1788 ["a", None, {"key": "value"}], |
| 1820 "additionalItems": { | 1818 "additionalItems": { |
| 1821 "type": "dict", | 1819 "type": "dict", |
| 1822 "keys": {"key": {"type": "string"}} | 1820 "keys": {"key": {"type": "string"}} |
| 1823 }})) | 1821 }})) |
| 1824 self.assertEqual(1, len(pr)) | 1822 self.assertEqual(1, len(pr)) |
| 1825 self.assertEqual(10016, pr[0].code) | 1823 self.assertEqual(ERRORS.E10016, pr[0].code) |
| 1826 | 1824 |
| 1827 def test_t8(self): | 1825 def test_t8(self): |
| 1828 # do not check anything that exceeds maxLength | 1826 # do not check anything that exceeds maxLength |
| 1829 pr = list(data_schema.validate( | 1827 pr = list(data_schema.validate( |
| 1830 ["a", None, {"key": "value"}, {"key": "value"}, {"key2": "value"}], | 1828 ["a", None, {"key": "value"}, {"key": "value"}, {"key2": "value"}], |
| 1837 "additionalItems": { | 1835 "additionalItems": { |
| 1838 "type": "dict", | 1836 "type": "dict", |
| 1839 "keys": {"key": {"type": "string"}} | 1837 "keys": {"key": {"type": "string"}} |
| 1840 }})) | 1838 }})) |
| 1841 self.assertEqual(2, len(pr)) | 1839 self.assertEqual(2, len(pr)) |
| 1842 self.assertEqual(10015, pr[0].code) | 1840 self.assertEqual(ERRORS.E10015, pr[0].code) |
| 1843 self.assertEqual(10016, pr[1].code) | 1841 self.assertEqual(ERRORS.E10016, pr[1].code) |
| 1844 | 1842 |
| 1845 def test_set1(self): | 1843 def test_set1(self): |
| 1846 # do not check anything that exceeds maxLength | 1844 # do not check anything that exceeds maxLength |
| 1847 pr = list(data_schema.validate( | 1845 pr = list(data_schema.validate( |
| 1848 set(["a", None, "b"]), | 1846 set(["a", None, "b"]), |
| 1858 # do not check anything that exceeds maxLength | 1856 # do not check anything that exceeds maxLength |
| 1859 pr = list(data_schema.validate( | 1857 pr = list(data_schema.validate( |
| 1860 None, | 1858 None, |
| 1861 {"type": "set"})) | 1859 {"type": "set"})) |
| 1862 self.assertEqual(1, len(pr)) | 1860 self.assertEqual(1, len(pr)) |
| 1863 self.assertEqual(10038, pr[0].code) | 1861 self.assertEqual(ERRORS.E10038, pr[0].code) |
| 1864 | 1862 |
| 1865 def test_set1_nullable(self): | 1863 def test_set1_nullable(self): |
| 1866 # do not check anything that exceeds maxLength | 1864 # do not check anything that exceeds maxLength |
| 1867 pr = list(data_schema.validate( | 1865 pr = list(data_schema.validate( |
| 1868 None, | 1866 None, |
| 1878 "items": {"any-of": [ | 1876 "items": {"any-of": [ |
| 1879 {"type": "string"}, | 1877 {"type": "string"}, |
| 1880 {"type": None}]}} | 1878 {"type": None}]}} |
| 1881 )) | 1879 )) |
| 1882 self.assertEqual(1, len(pr)) | 1880 self.assertEqual(1, len(pr)) |
| 1883 self.assertEqual(10039, pr[0].code) | 1881 self.assertEqual(ERRORS.E10039, pr[0].code) |
| 1884 | 1882 |
| 1885 def test_set3(self): | 1883 def test_set3(self): |
| 1886 # do not check anything that exceeds maxLength | 1884 # do not check anything that exceeds maxLength |
| 1887 pr = list(data_schema.validate( | 1885 pr = list(data_schema.validate( |
| 1888 set(["a", None, "b"]), | 1886 set(["a", None, "b"]), |
| 1891 "items": {"any-of": [ | 1889 "items": {"any-of": [ |
| 1892 {"type": "string"}, | 1890 {"type": "string"}, |
| 1893 {"type": None}]}} | 1891 {"type": None}]}} |
| 1894 )) | 1892 )) |
| 1895 self.assertEqual(1, len(pr)) | 1893 self.assertEqual(1, len(pr)) |
| 1896 self.assertEqual(10040, pr[0].code) | 1894 self.assertEqual(ERRORS.E10040, pr[0].code) |
| 1897 | 1895 |
| 1898 def test_set4_itemschema(self): | 1896 def test_set4_itemschema(self): |
| 1899 pr = list(data_schema.validate( | 1897 pr = list(data_schema.validate( |
| 1900 set(["a", None, "b"]), | 1898 set(["a", None, "b"]), |
| 1901 {"type": "set", | 1899 {"type": "set", |
| 1904 {"type": "int"}]}} | 1902 {"type": "int"}]}} |
| 1905 )) | 1903 )) |
| 1906 codes = set([p.code for p in pr]) | 1904 codes = set([p.code for p in pr]) |
| 1907 | 1905 |
| 1908 self.assertEqual(1, len(pr)) | 1906 self.assertEqual(1, len(pr)) |
| 1909 self.assertEqual(10055, pr[0].code) | 1907 self.assertEqual(ERRORS.E10055, pr[0].code) |
| 1910 self.assertEqual(2, len(pr[0].cause)) | 1908 self.assertEqual(2, len(pr[0].cause)) |
| 1911 self.assertEqual(10056, pr[0].cause[0].code) | 1909 self.assertEqual(ERRORS.E10056, pr[0].cause[0].code) |
| 1912 self.assertEqual(1, len(pr[0].cause[0].cause)) | 1910 self.assertEqual(1, len(pr[0].cause[0].cause)) |
| 1913 self.assertEqual(10002, pr[0].cause[0].cause[0].code) | 1911 self.assertEqual(ERRORS.E10002, pr[0].cause[0].cause[0].code) |
| 1914 self.assertEqual(10056, pr[0].cause[1].code) | 1912 self.assertEqual(ERRORS.E10056, pr[0].cause[1].code) |
| 1915 self.assertEqual(1, len(pr[0].cause[1].cause)) | 1913 self.assertEqual(1, len(pr[0].cause[1].cause)) |
| 1916 self.assertEqual(10020, pr[0].cause[1].cause[0].code) | 1914 self.assertEqual(ERRORS.E10020, pr[0].cause[1].cause[0].code) |
| 1917 | 1915 |
| 1918 def test_empty(self): | 1916 def test_empty(self): |
| 1919 pr = list(data_schema.validate(None, {"type": "empty"})) | 1917 pr = list(data_schema.validate(None, {"type": "empty"})) |
| 1920 self.assertEqual(0, len(pr)) | 1918 self.assertEqual(0, len(pr)) |
| 1921 | 1919 |
| 1922 pr = list(data_schema.validate([], {"type": "empty"})) | 1920 pr = list(data_schema.validate([], {"type": "empty"})) |
| 1923 self.assertEqual(0, len(pr)) | 1921 self.assertEqual(0, len(pr)) |
| 1924 | 1922 |
| 1925 pr = list(data_schema.validate(["a"], {"type": "empty"})) | 1923 pr = list(data_schema.validate(["a"], {"type": "empty"})) |
| 1926 self.assertEqual(1, len(pr)) | 1924 self.assertEqual(1, len(pr)) |
| 1927 self.assertEqual(10018, pr[0].code) | 1925 self.assertEqual(ERRORS.E10018, pr[0].code) |
| 1928 | 1926 |
| 1929 pr = list(data_schema.validate(tuple(), {"type": "empty"})) | 1927 pr = list(data_schema.validate(tuple(), {"type": "empty"})) |
| 1930 self.assertEqual(0, len(pr)) | 1928 self.assertEqual(0, len(pr)) |
| 1931 | 1929 |
| 1932 pr = list(data_schema.validate(set(), {"type": "empty"})) | 1930 pr = list(data_schema.validate(set(), {"type": "empty"})) |
| 1935 pr = list(data_schema.validate(frozenset(), {"type": "empty"})) | 1933 pr = list(data_schema.validate(frozenset(), {"type": "empty"})) |
| 1936 self.assertEqual(0, len(pr)) | 1934 self.assertEqual(0, len(pr)) |
| 1937 | 1935 |
| 1938 pr = list(data_schema.validate(tuple(["a"]), {"type": "empty"})) | 1936 pr = list(data_schema.validate(tuple(["a"]), {"type": "empty"})) |
| 1939 self.assertEqual(1, len(pr)) | 1937 self.assertEqual(1, len(pr)) |
| 1940 self.assertEqual(10018, pr[0].code) | 1938 self.assertEqual(ERRORS.E10018, pr[0].code) |
| 1941 | 1939 |
| 1942 pr = list(data_schema.validate({}, {"type": "empty"})) | 1940 pr = list(data_schema.validate({}, {"type": "empty"})) |
| 1943 self.assertEqual(0, len(pr)) | 1941 self.assertEqual(0, len(pr)) |
| 1944 | 1942 |
| 1945 pr = list(data_schema.validate({"key": "value"}, {"type": "empty"})) | 1943 pr = list(data_schema.validate({"key": "value"}, {"type": "empty"})) |
| 1946 self.assertEqual(1, len(pr)) | 1944 self.assertEqual(1, len(pr)) |
| 1947 self.assertEqual(10018, pr[0].code) | 1945 self.assertEqual(ERRORS.E10018, pr[0].code) |
| 1948 | 1946 |
| 1949 pr = list(data_schema.validate("", {"type": "empty"})) | 1947 pr = list(data_schema.validate("", {"type": "empty"})) |
| 1950 self.assertEqual(1, len(pr)) | 1948 self.assertEqual(1, len(pr)) |
| 1951 self.assertEqual(10018, pr[0].code) | 1949 self.assertEqual(ERRORS.E10018, pr[0].code) |
| 1952 | 1950 |
| 1953 def test_allOf(self): | 1951 def test_allOf(self): |
| 1954 pr = list(data_schema.validate( | 1952 pr = list(data_schema.validate( |
| 1955 None, | 1953 None, |
| 1956 {"type": { | 1954 {"type": { |
| 1969 {"type": "accept"}, | 1967 {"type": "accept"}, |
| 1970 {"type": "deny"}, | 1968 {"type": "deny"}, |
| 1971 ] | 1969 ] |
| 1972 }})) | 1970 }})) |
| 1973 self.assertEqual(1, len(pr)) | 1971 self.assertEqual(1, len(pr)) |
| 1974 self.assertEqual(10057, pr[0].code) | 1972 self.assertEqual(ERRORS.E10057, pr[0].code) |
| 1975 self.assertEqual(1, len(pr[0].cause)) | 1973 self.assertEqual(1, len(pr[0].cause)) |
| 1976 self.assertEqual(10058, pr[0].cause[0].code) | 1974 self.assertEqual(ERRORS.E10058, pr[0].cause[0].code) |
| 1977 self.assertEqual(1, len(pr[0].cause[0].cause)) | 1975 self.assertEqual(1, len(pr[0].cause[0].cause)) |
| 1978 self.assertEqual(10010, pr[0].cause[0].cause[0].code) | 1976 self.assertEqual(ERRORS.E10010, pr[0].cause[0].cause[0].code) |
| 1979 | 1977 |
| 1980 def test_anyOf(self): | 1978 def test_anyOf(self): |
| 1981 pr = list(data_schema.validate( | 1979 pr = list(data_schema.validate( |
| 1982 None, | 1980 None, |
| 1983 {"type": { | 1981 {"type": { |
| 1995 {"type": "string"}, | 1993 {"type": "string"}, |
| 1996 {"type": "deny"}, | 1994 {"type": "deny"}, |
| 1997 ] | 1995 ] |
| 1998 }})) | 1996 }})) |
| 1999 self.assertEqual(1, len(pr)) | 1997 self.assertEqual(1, len(pr)) |
| 2000 self.assertEqual(10055, pr[0].code) | 1998 self.assertEqual(ERRORS.E10055, pr[0].code) |
| 2001 self.assertEqual(2, len(pr[0].cause)) | 1999 self.assertEqual(2, len(pr[0].cause)) |
| 2002 self.assertEqual(10056, pr[0].cause[0].code) | 2000 self.assertEqual(ERRORS.E10056, pr[0].cause[0].code) |
| 2003 self.assertEqual(1, len(pr[0].cause[0].cause)) | 2001 self.assertEqual(1, len(pr[0].cause[0].cause)) |
| 2004 self.assertEqual(10002, pr[0].cause[0].cause[0].code) | 2002 self.assertEqual(ERRORS.E10002, pr[0].cause[0].cause[0].code) |
| 2005 self.assertEqual(10056, pr[0].cause[1].code) | 2003 self.assertEqual(ERRORS.E10056, pr[0].cause[1].code) |
| 2006 self.assertEqual(1, len(pr[0].cause[1].cause)) | 2004 self.assertEqual(1, len(pr[0].cause[1].cause)) |
| 2007 self.assertEqual(10010, pr[0].cause[1].cause[0].code) | 2005 self.assertEqual(ERRORS.E10010, pr[0].cause[1].cause[0].code) |
| 2008 | 2006 |
| 2009 def test_anyOf_with_list(self): | 2007 def test_anyOf_with_list(self): |
| 2010 pr = list(data_schema.validate( | 2008 pr = list(data_schema.validate( |
| 2011 None, | 2009 None, |
| 2012 {"type": [ | 2010 {"type": [ |
| 2020 {"type": [ | 2018 {"type": [ |
| 2021 {"type": "string"}, | 2019 {"type": "string"}, |
| 2022 {"type": "deny"}, | 2020 {"type": "deny"}, |
| 2023 ]})) | 2021 ]})) |
| 2024 self.assertEqual(1, len(pr)) | 2022 self.assertEqual(1, len(pr)) |
| 2025 self.assertEqual(10055, pr[0].code) | 2023 self.assertEqual(ERRORS.E10055, pr[0].code) |
| 2026 self.assertEqual(2, len(pr[0].cause)) | 2024 self.assertEqual(2, len(pr[0].cause)) |
| 2027 self.assertEqual(10056, pr[0].cause[0].code) | 2025 self.assertEqual(ERRORS.E10056, pr[0].cause[0].code) |
| 2028 self.assertEqual(1, len(pr[0].cause[0].cause)) | 2026 self.assertEqual(1, len(pr[0].cause[0].cause)) |
| 2029 self.assertEqual(10002, pr[0].cause[0].cause[0].code) | 2027 self.assertEqual(ERRORS.E10002, pr[0].cause[0].cause[0].code) |
| 2030 self.assertEqual(10056, pr[0].cause[1].code) | 2028 self.assertEqual(ERRORS.E10056, pr[0].cause[1].code) |
| 2031 self.assertEqual(1, len(pr[0].cause[1].cause)) | 2029 self.assertEqual(1, len(pr[0].cause[1].cause)) |
| 2032 self.assertEqual(10010, pr[0].cause[1].cause[0].code) | 2030 self.assertEqual(ERRORS.E10010, pr[0].cause[1].cause[0].code) |
| 2033 | 2031 |
| 2034 def test_oneOf(self): | 2032 def test_oneOf(self): |
| 2035 pr = list(data_schema.validate( | 2033 pr = list(data_schema.validate( |
| 2036 None, | 2034 None, |
| 2037 {"type": { | 2035 {"type": { |
| 2050 {"type": "deny"}, | 2048 {"type": "deny"}, |
| 2051 ] | 2049 ] |
| 2052 }})) | 2050 }})) |
| 2053 | 2051 |
| 2054 self.assertEqual(1, len(pr)) | 2052 self.assertEqual(1, len(pr)) |
| 2055 self.assertEqual(10053, pr[0].code) | 2053 self.assertEqual(ERRORS.E10053, pr[0].code) |
| 2056 self.assertEqual(2, len(pr[0].cause)) | 2054 self.assertEqual(2, len(pr[0].cause)) |
| 2057 self.assertEqual(10054, pr[0].cause[0].code) | 2055 self.assertEqual(ERRORS.E10054, pr[0].cause[0].code) |
| 2058 self.assertEqual(1, len(pr[0].cause[0].cause)) | 2056 self.assertEqual(1, len(pr[0].cause[0].cause)) |
| 2059 self.assertEqual(10002, pr[0].cause[0].cause[0].code) | 2057 self.assertEqual(ERRORS.E10002, pr[0].cause[0].cause[0].code) |
| 2060 self.assertEqual(10054, pr[0].cause[1].code) | 2058 self.assertEqual(ERRORS.E10054, pr[0].cause[1].code) |
| 2061 self.assertEqual(1, len(pr[0].cause[1].cause)) | 2059 self.assertEqual(1, len(pr[0].cause[1].cause)) |
| 2062 self.assertEqual(10010, pr[0].cause[1].cause[0].code) | 2060 self.assertEqual(ERRORS.E10010, pr[0].cause[1].cause[0].code) |
| 2063 | 2061 |
| 2064 pr = list(data_schema.validate( | 2062 pr = list(data_schema.validate( |
| 2065 None, | 2063 None, |
| 2066 {"type": { | 2064 {"type": { |
| 2067 "one-of": [ | 2065 "one-of": [ |
| 2070 {"type": "empty"}, | 2068 {"type": "empty"}, |
| 2071 {"type": None}, | 2069 {"type": None}, |
| 2072 ] | 2070 ] |
| 2073 }})) | 2071 }})) |
| 2074 self.assertEqual(1, len(pr)) | 2072 self.assertEqual(1, len(pr)) |
| 2075 self.assertEqual(10019, pr[0].code) | 2073 self.assertEqual(ERRORS.E10019, pr[0].code) |
| 2076 self.assertEqual("2,3", pr[0].hint) | 2074 self.assertEqual("2,3", pr[0].hint) |
| 2077 | 2075 |
| 2078 def test_not(self): | 2076 def test_not(self): |
| 2079 pr = list(data_schema.validate( | 2077 pr = list(data_schema.validate( |
| 2080 None, | 2078 None, |
| 2081 {"type": { | 2079 {"type": { |
| 2082 "not": { | 2080 "not": { |
| 2083 "type": "empty"}}})) | 2081 "type": "empty"}}})) |
| 2084 self.assertEqual(1, len(pr)) | 2082 self.assertEqual(1, len(pr)) |
| 2085 self.assertEqual(10029, pr[0].code) | 2083 self.assertEqual(ERRORS.E10029, pr[0].code) |
| 2086 | 2084 |
| 2087 pr = list(data_schema.validate( | 2085 pr = list(data_schema.validate( |
| 2088 None, | 2086 None, |
| 2089 {"type": { | 2087 {"type": { |
| 2090 "not": { | 2088 "not": { |
| 2097 2, | 2095 2, |
| 2098 {"type": { | 2096 {"type": { |
| 2099 "not": { | 2097 "not": { |
| 2100 "type": "int"}}})) | 2098 "type": "int"}}})) |
| 2101 self.assertEqual(1, len(pr)) | 2099 self.assertEqual(1, len(pr)) |
| 2102 self.assertEqual(10029, pr[0].code) | 2100 self.assertEqual(ERRORS.E10029, pr[0].code) |
| 2103 | 2101 |
| 2104 pr = list(data_schema.validate( | 2102 pr = list(data_schema.validate( |
| 2105 1, | 2103 1, |
| 2106 {"type": { | 2104 {"type": { |
| 2107 "not": { | 2105 "not": { |
| 2121 pr = list(data_schema.validate( | 2119 pr = list(data_schema.validate( |
| 2122 None, | 2120 None, |
| 2123 {"not": { | 2121 {"not": { |
| 2124 "type": "empty"}})) | 2122 "type": "empty"}})) |
| 2125 self.assertEqual(1, len(pr)) | 2123 self.assertEqual(1, len(pr)) |
| 2126 self.assertEqual(10029, pr[0].code) | 2124 self.assertEqual(ERRORS.E10029, pr[0].code) |
| 2127 | 2125 |
| 2128 pr = list(data_schema.validate( | 2126 pr = list(data_schema.validate( |
| 2129 None, | 2127 None, |
| 2130 {"not": { | 2128 {"not": { |
| 2131 "not": { | 2129 "not": { |
| 2135 pr = list(data_schema.validate( | 2133 pr = list(data_schema.validate( |
| 2136 2, | 2134 2, |
| 2137 {"not": { | 2135 {"not": { |
| 2138 "type": "int"}})) | 2136 "type": "int"}})) |
| 2139 self.assertEqual(1, len(pr)) | 2137 self.assertEqual(1, len(pr)) |
| 2140 self.assertEqual(10029, pr[0].code) | 2138 self.assertEqual(ERRORS.E10029, pr[0].code) |
| 2141 | 2139 |
| 2142 pr = list(data_schema.validate( | 2140 pr = list(data_schema.validate( |
| 2143 1, | 2141 1, |
| 2144 {"not": { | 2142 {"not": { |
| 2145 "not": { | 2143 "not": { |
| 2156 pr = list(data_schema.validate(1, {"type": "integer"})) | 2154 pr = list(data_schema.validate(1, {"type": "integer"})) |
| 2157 self.assertEqual(0, len(pr)) | 2155 self.assertEqual(0, len(pr)) |
| 2158 | 2156 |
| 2159 pr = list(data_schema.validate(1, {"type": "float"})) | 2157 pr = list(data_schema.validate(1, {"type": "float"})) |
| 2160 self.assertEqual(1, len(pr)) | 2158 self.assertEqual(1, len(pr)) |
| 2161 self.assertEqual(10023, pr[0].code) | 2159 self.assertEqual(ERRORS.E10023, pr[0].code) |
| 2162 | 2160 |
| 2163 pr = list(data_schema.validate( | 2161 pr = list(data_schema.validate( |
| 2164 2, | 2162 2, |
| 2165 {"type": "int", | 2163 {"type": "int", |
| 2166 "minValue": 3, | 2164 "minValue": 3, |
| 2167 "maxValue": 1})) | 2165 "maxValue": 1})) |
| 2168 | 2166 |
| 2169 self.assertEqual(2, len(pr)) | 2167 self.assertEqual(2, len(pr)) |
| 2170 self.assertEqual(10021, pr[0].code) | 2168 self.assertEqual(ERRORS.E10021, pr[0].code) |
| 2171 self.assertEqual(10022, pr[1].code) | 2169 self.assertEqual(ERRORS.E10022, pr[1].code) |
| 2172 | 2170 |
| 2173 def test_float(self): | 2171 def test_float(self): |
| 2174 pr = list(data_schema.validate(1.8, {"type": "float"})) | 2172 pr = list(data_schema.validate(1.8, {"type": "float"})) |
| 2175 self.assertEqual(0, len(pr)) | 2173 self.assertEqual(0, len(pr)) |
| 2176 | 2174 |
| 2177 pr = list(data_schema.validate(1, {"type": "float"})) | 2175 pr = list(data_schema.validate(1, {"type": "float"})) |
| 2178 self.assertEqual(1, len(pr)) | 2176 self.assertEqual(1, len(pr)) |
| 2179 self.assertEqual(10023, pr[0].code) | 2177 self.assertEqual(ERRORS.E10023, pr[0].code) |
| 2180 | 2178 |
| 2181 pr = list(data_schema.validate( | 2179 pr = list(data_schema.validate( |
| 2182 2.0, | 2180 2.0, |
| 2183 {"type": "real", | 2181 {"type": "real", |
| 2184 "minValue": 2.1, | 2182 "minValue": 2.1, |
| 2185 "maxValue": 1.9})) | 2183 "maxValue": 1.9})) |
| 2186 | 2184 |
| 2187 self.assertEqual(2, len(pr)) | 2185 self.assertEqual(2, len(pr)) |
| 2188 self.assertEqual(10024, pr[0].code) | 2186 self.assertEqual(ERRORS.E10024, pr[0].code) |
| 2189 self.assertEqual(10025, pr[1].code) | 2187 self.assertEqual(ERRORS.E10025, pr[1].code) |
| 2190 | 2188 |
| 2191 def test_number(self): | 2189 def test_number(self): |
| 2192 pr = list(data_schema.validate(1.8, {"type": "number"})) | 2190 pr = list(data_schema.validate(1.8, {"type": "number"})) |
| 2193 self.assertEqual(0, len(pr)) | 2191 self.assertEqual(0, len(pr)) |
| 2194 pr = list(data_schema.validate(1, {"type": "num"})) | 2192 pr = list(data_schema.validate(1, {"type": "num"})) |
| 2199 {"type": "number", | 2197 {"type": "number", |
| 2200 "minValue": 3, | 2198 "minValue": 3, |
| 2201 "maxValue": 1.3})) | 2199 "maxValue": 1.3})) |
| 2202 | 2200 |
| 2203 self.assertEqual(2, len(pr)) | 2201 self.assertEqual(2, len(pr)) |
| 2204 self.assertEqual(10031, pr[0].code) | 2202 self.assertEqual(ERRORS.E10031, pr[0].code) |
| 2205 self.assertEqual(10032, pr[1].code) | 2203 self.assertEqual(ERRORS.E10032, pr[1].code) |
| 2206 | 2204 |
| 2207 pr = list(data_schema.validate({}, {"type": "number"})) | 2205 pr = list(data_schema.validate({}, {"type": "number"})) |
| 2208 self.assertEqual(1, len(pr)) | 2206 self.assertEqual(1, len(pr)) |
| 2209 self.assertEqual(10030, pr[0].code) | 2207 self.assertEqual(ERRORS.E10030, pr[0].code) |
| 2210 | 2208 |
| 2211 def test_bool(self): | 2209 def test_bool(self): |
| 2212 pr = list(data_schema.validate(True, {"type": "bool"})) | 2210 pr = list(data_schema.validate(True, {"type": "bool"})) |
| 2213 self.assertEqual(0, len(pr)) | 2211 self.assertEqual(0, len(pr)) |
| 2214 | 2212 |
| 2217 self.assertEqual(0, len(pr)) | 2215 self.assertEqual(0, len(pr)) |
| 2218 | 2216 |
| 2219 pr = list(data_schema.validate(True, {"type": "boolean", | 2217 pr = list(data_schema.validate(True, {"type": "boolean", |
| 2220 "value": False})) | 2218 "value": False})) |
| 2221 self.assertEqual(1, len(pr)) | 2219 self.assertEqual(1, len(pr)) |
| 2222 self.assertEqual(10028, pr[0].code) | 2220 self.assertEqual(ERRORS.E10028, pr[0].code) |
| 2223 | 2221 |
| 2224 pr = list(data_schema.validate(False, {"type": "boolean"})) | 2222 pr = list(data_schema.validate(False, {"type": "boolean"})) |
| 2225 self.assertEqual(0, len(pr)) | 2223 self.assertEqual(0, len(pr)) |
| 2226 | 2224 |
| 2227 pr = list(data_schema.validate(False, {"type": "boolean", | 2225 pr = list(data_schema.validate(False, {"type": "boolean", |
| 2229 self.assertEqual(0, len(pr)) | 2227 self.assertEqual(0, len(pr)) |
| 2230 | 2228 |
| 2231 pr = list(data_schema.validate(False, {"type": "boolean", | 2229 pr = list(data_schema.validate(False, {"type": "boolean", |
| 2232 "value": True})) | 2230 "value": True})) |
| 2233 self.assertEqual(1, len(pr)) | 2231 self.assertEqual(1, len(pr)) |
| 2234 self.assertEqual(10027, pr[0].code) | 2232 self.assertEqual(ERRORS.E10027, pr[0].code) |
| 2235 | 2233 |
| 2236 def test_bool_real(self): | 2234 def test_bool_real(self): |
| 2237 pr = list(data_schema.validate([1, 2], {"type": "bool"})) | 2235 pr = list(data_schema.validate([1, 2], {"type": "bool"})) |
| 2238 self.assertEqual(1, len(pr)) | 2236 self.assertEqual(1, len(pr)) |
| 2239 self.assertEqual(10026, pr[0].code) | 2237 self.assertEqual(ERRORS.E10026, pr[0].code) |
| 2240 | 2238 |
| 2241 pr = list(data_schema.validate([], {"type": "bool"})) | 2239 pr = list(data_schema.validate([], {"type": "bool"})) |
| 2242 self.assertEqual(1, len(pr)) | 2240 self.assertEqual(1, len(pr)) |
| 2243 self.assertEqual(10026, pr[0].code) | 2241 self.assertEqual(ERRORS.E10026, pr[0].code) |
| 2244 | 2242 |
| 2245 pr = list(data_schema.validate(None, {"type": "bool"})) | 2243 pr = list(data_schema.validate(None, {"type": "bool"})) |
| 2246 self.assertEqual(1, len(pr)) | 2244 self.assertEqual(1, len(pr)) |
| 2247 self.assertEqual(10026, pr[0].code) | 2245 self.assertEqual(ERRORS.E10026, pr[0].code) |
| 2248 | 2246 |
| 2249 @staticmethod | 2247 @staticmethod |
| 2250 def _check_value_ts(obj, schema, context): | 2248 def _check_value_ts(obj, schema, context): |
| 2251 if obj == datetime.datetime.fromtimestamp(0): | 2249 if obj == datetime.datetime.fromtimestamp(0): |
| 2252 yield data_schema.ValidationProblem( | 2250 yield data_schema.ValidationProblem( |
| 2253 code=10042, hint=obj, context=context) | 2251 code=ERRORS.E10042, hint=obj, context=context) |
| 2254 | 2252 |
| 2255 def test_timestamp(self): | 2253 def test_timestamp(self): |
| 2256 pr = list(data_schema.validate( | 2254 pr = list(data_schema.validate( |
| 2257 datetime.datetime.utcnow(), | 2255 datetime.datetime.utcnow(), |
| 2258 {"type": "timestamp"})) | 2256 {"type": "timestamp"})) |
| 2266 pr = list(data_schema.validate( | 2264 pr = list(data_schema.validate( |
| 2267 datetime.datetime.fromtimestamp(0), | 2265 datetime.datetime.fromtimestamp(0), |
| 2268 {"type": "datetime", | 2266 {"type": "datetime", |
| 2269 "value": self._check_value_ts})) | 2267 "value": self._check_value_ts})) |
| 2270 self.assertEqual(1, len(pr)) | 2268 self.assertEqual(1, len(pr)) |
| 2271 self.assertEqual(10042, pr[0].code) | 2269 self.assertEqual(ERRORS.E10042, pr[0].code) |
| 2272 | 2270 |
| 2273 def test_scalar(self): | 2271 def test_scalar(self): |
| 2274 pr = list(data_schema.validate(1, {"type": "scalar"})) | 2272 pr = list(data_schema.validate(1, {"type": "scalar"})) |
| 2275 self.assertEqual(0, len(pr)) | 2273 self.assertEqual(0, len(pr)) |
| 2276 | 2274 |
| 2284 {"type": "scalar"})) | 2282 {"type": "scalar"})) |
| 2285 self.assertEqual(0, len(pr)) | 2283 self.assertEqual(0, len(pr)) |
| 2286 | 2284 |
| 2287 pr = list(data_schema.validate(None, {"type": "scalar"})) | 2285 pr = list(data_schema.validate(None, {"type": "scalar"})) |
| 2288 self.assertEqual(1, len(pr)) | 2286 self.assertEqual(1, len(pr)) |
| 2289 self.assertEqual(10033, pr[0].code) | 2287 self.assertEqual(ERRORS.E10033, pr[0].code) |
| 2290 | 2288 |
| 2291 pr = list(data_schema.validate({}, {"type": "scalar"})) | 2289 pr = list(data_schema.validate({}, {"type": "scalar"})) |
| 2292 self.assertEqual(1, len(pr)) | 2290 self.assertEqual(1, len(pr)) |
| 2293 self.assertEqual(10033, pr[0].code) | 2291 self.assertEqual(ERRORS.E10033, pr[0].code) |
| 2294 | 2292 |
| 2295 pr = list(data_schema.validate([], {"type": "scalar"})) | 2293 pr = list(data_schema.validate([], {"type": "scalar"})) |
| 2296 self.assertEqual(1, len(pr)) | 2294 self.assertEqual(1, len(pr)) |
| 2297 self.assertEqual(10033, pr[0].code) | 2295 self.assertEqual(ERRORS.E10033, pr[0].code) |
| 2298 | 2296 |
| 2299 pr = list(data_schema.validate(tuple(), {"type": "scalar"})) | 2297 pr = list(data_schema.validate(tuple(), {"type": "scalar"})) |
| 2300 self.assertEqual(1, len(pr)) | 2298 self.assertEqual(1, len(pr)) |
| 2301 self.assertEqual(10033, pr[0].code) | 2299 self.assertEqual(ERRORS.E10033, pr[0].code) |
| 2302 | 2300 |
| 2303 pr = list(data_schema.validate(set(), {"type": "scalar"})) | 2301 pr = list(data_schema.validate(set(), {"type": "scalar"})) |
| 2304 self.assertEqual(1, len(pr)) | 2302 self.assertEqual(1, len(pr)) |
| 2305 self.assertEqual(10033, pr[0].code) | 2303 self.assertEqual(ERRORS.E10033, pr[0].code) |
| 2306 | 2304 |
| 2307 pr = list(data_schema.validate(frozenset(), {"type": "scalar"})) | 2305 pr = list(data_schema.validate(frozenset(), {"type": "scalar"})) |
| 2308 self.assertEqual(1, len(pr)) | 2306 self.assertEqual(1, len(pr)) |
| 2309 self.assertEqual(10033, pr[0].code) | 2307 self.assertEqual(ERRORS.E10033, pr[0].code) |
| 2310 | 2308 |
| 2311 pr = list(data_schema.validate( | 2309 pr = list(data_schema.validate( |
| 2312 None, | 2310 None, |
| 2313 {"type": { | 2311 {"type": { |
| 2314 "one-of": [ | 2312 "one-of": [ |
