Mercurial > hgrepos > Python > libs > data-schema
comparison tests/test_schema.py @ 31:271ec3abdfa3
Use "$type" as the schema's type specifier instead of "type".
THIS IS BACKWARDS INCOMPATIBLE.
| author | Franz Glasner <f.glasner@feldmann-mg.com> |
|---|---|
| date | Tue, 18 Jul 2023 14:28:52 +0200 |
| parents | 2e7c08c356ee |
| children | 5a2fba996773 |
comparison
equal
deleted
inserted
replaced
| 30:2e7c08c356ee | 31:271ec3abdfa3 |
|---|---|
| 587 def setUp(self): | 587 def setUp(self): |
| 588 self._ctx = data_schema.Context( | 588 self._ctx = data_schema.Context( |
| 589 None, root_object={"foo": "bar", "foo2": None}, settings=None) | 589 None, root_object={"foo": "bar", "foo2": None}, settings=None) |
| 590 | 590 |
| 591 def test_no_cond(self): | 591 def test_no_cond(self): |
| 592 schema = data_schema._Schema(None, True, {"type": None}) | 592 schema = data_schema._Schema(None, True, {"$type": None}) |
| 593 self.assertIs(data_schema.process_schema_conditionals( | 593 self.assertIs(data_schema.process_schema_conditionals( |
| 594 schema, self._ctx), | 594 schema, self._ctx), |
| 595 schema) | 595 schema) |
| 596 | 596 |
| 597 def test_cond_is_none(self): | 597 def test_cond_is_none(self): |
| 598 schema = data_schema._Schema(None, True, {"type": None, | 598 schema = data_schema._Schema(None, True, {"$type": None, |
| 599 "cond": None}) | 599 "cond": None}) |
| 600 self.assertIs(data_schema.process_schema_conditionals( | 600 self.assertIs(data_schema.process_schema_conditionals( |
| 601 schema, self._ctx), | 601 schema, self._ctx), |
| 602 schema) | 602 schema) |
| 603 | 603 |
| 604 def test_ambiguous(self): | 604 def test_ambiguous(self): |
| 605 schema = data_schema._Schema(None, True, {"type": None, | 605 schema = data_schema._Schema(None, True, {"$type": None, |
| 606 "cond": None, | 606 "cond": None, |
| 607 "match": None}) | 607 "match": None}) |
| 608 self.assertRaises( | 608 self.assertRaises( |
| 609 data_schema.SchemaError, | 609 data_schema.SchemaError, |
| 610 data_schema.process_schema_conditionals, | 610 data_schema.process_schema_conditionals, |
| 611 schema, | 611 schema, |
| 612 self._ctx) | 612 self._ctx) |
| 613 | 613 |
| 614 def test_cond_not_a_sequence(self): | 614 def test_cond_not_a_sequence(self): |
| 615 schema = data_schema._Schema(None, True, {"type": None, | 615 schema = data_schema._Schema(None, True, {"$type": None, |
| 616 "cond": {"type": None}}) | 616 "cond": {"$type": None}}) |
| 617 self.assertRaises( | 617 self.assertRaises( |
| 618 data_schema.SchemaError, | 618 data_schema.SchemaError, |
| 619 data_schema.process_schema_conditionals, | 619 data_schema.process_schema_conditionals, |
| 620 schema, | 620 schema, |
| 621 self._ctx) | 621 self._ctx) |
| 622 | 622 |
| 623 def test_match_not_a_sequence(self): | 623 def test_match_not_a_sequence(self): |
| 624 schema = data_schema._Schema( | 624 schema = data_schema._Schema( |
| 625 None, True, {"type": None, | 625 None, True, {"$type": None, |
| 626 "match": {"type": None}}) | 626 "match": {"$type": None}}) |
| 627 self.assertRaises( | 627 self.assertRaises( |
| 628 data_schema.SchemaError, | 628 data_schema.SchemaError, |
| 629 data_schema.process_schema_conditionals, | 629 data_schema.process_schema_conditionals, |
| 630 schema, | 630 schema, |
| 631 self._ctx) | 631 self._ctx) |
| 632 | 632 |
| 633 def test_condline_not_a_dict(self): | 633 def test_condline_not_a_dict(self): |
| 634 schema = data_schema._Schema(None, True, {"type": None, | 634 schema = data_schema._Schema(None, True, {"$type": None, |
| 635 "cond": [None]}) | 635 "cond": [None]}) |
| 636 self.assertRaises( | 636 self.assertRaises( |
| 637 data_schema.SchemaError, | 637 data_schema.SchemaError, |
| 638 data_schema.process_schema_conditionals, | 638 data_schema.process_schema_conditionals, |
| 639 schema, | 639 schema, |
| 640 self._ctx) | 640 self._ctx) |
| 641 | 641 |
| 642 def test_matchline_not_a_dict(self): | 642 def test_matchline_not_a_dict(self): |
| 643 schema = {"type": None, | 643 schema = {"$type": None, |
| 644 "match": [None]} | 644 "match": [None]} |
| 645 self.assertRaises( | 645 self.assertRaises( |
| 646 data_schema.SchemaError, | 646 data_schema.SchemaError, |
| 647 data_schema.process_schema_conditionals, | 647 data_schema.process_schema_conditionals, |
| 648 schema, | 648 schema, |
| 649 self._ctx) | 649 self._ctx) |
| 650 | 650 |
| 651 def test_cond_unknown_predicate(self): | 651 def test_cond_unknown_predicate(self): |
| 652 schema = data_schema._Schema( | 652 schema = data_schema._Schema( |
| 653 None, True, {"type": None, | 653 None, True, {"$type": None, |
| 654 "cond": [ | 654 "cond": [ |
| 655 {"unexisting-when-xxxx": None, | 655 {"unexisting-when-xxxx": None, |
| 656 "then": {}} | 656 "then": {}} |
| 657 ]}) | 657 ]}) |
| 658 self.assertRaises( | 658 self.assertRaises( |
| 661 schema, | 661 schema, |
| 662 self._ctx) | 662 self._ctx) |
| 663 | 663 |
| 664 def test_match_unknown_predicate(self): | 664 def test_match_unknown_predicate(self): |
| 665 schema = data_schema._Schema( | 665 schema = data_schema._Schema( |
| 666 None, True, {"type": None, | 666 None, True, {"$type": None, |
| 667 "match": [ | 667 "match": [ |
| 668 {"unexisting-when-xxxx": None, | 668 {"unexisting-when-xxxx": None, |
| 669 "then": {}} | 669 "then": {}} |
| 670 ]}) | 670 ]}) |
| 671 self.assertRaises( | 671 self.assertRaises( |
| 674 schema, | 674 schema, |
| 675 self._ctx) | 675 self._ctx) |
| 676 | 676 |
| 677 def test_simple_replace_when_true(self): | 677 def test_simple_replace_when_true(self): |
| 678 schema = data_schema._Schema( | 678 schema = data_schema._Schema( |
| 679 None, True, {"type": None, | 679 None, True, {"$type": None, |
| 680 "require": ["huhu", "haha"], | 680 "require": ["huhu", "haha"], |
| 681 "cond": [ | 681 "cond": [ |
| 682 {"when": True, | 682 {"when": True, |
| 683 "then": { | 683 "then": { |
| 684 "require": ["r1", "r2", "r3"], | 684 "require": ["r1", "r2", "r3"], |
| 692 self.assertIsNone(r["new-key"]) | 692 self.assertIsNone(r["new-key"]) |
| 693 self.assertFalse("cond" in r) | 693 self.assertFalse("cond" in r) |
| 694 | 694 |
| 695 def test_simple_replace_when_not_false(self): | 695 def test_simple_replace_when_not_false(self): |
| 696 schema = data_schema._Schema( | 696 schema = data_schema._Schema( |
| 697 None, True, {"type": None, | 697 None, True, {"$type": None, |
| 698 "require": ["huhu", "haha"], | 698 "require": ["huhu", "haha"], |
| 699 "cond": [ | 699 "cond": [ |
| 700 {"when": {"not": False}, | 700 {"when": {"not": False}, |
| 701 "then": { | 701 "then": { |
| 702 "require": ["r1", "r2", "r3"], | 702 "require": ["r1", "r2", "r3"], |
| 710 self.assertIsNone(r["new-key"]) | 710 self.assertIsNone(r["new-key"]) |
| 711 self.assertFalse("cond" in r) | 711 self.assertFalse("cond" in r) |
| 712 | 712 |
| 713 def test_simple_merge_when_true(self): | 713 def test_simple_merge_when_true(self): |
| 714 schema = data_schema._Schema( | 714 schema = data_schema._Schema( |
| 715 None, True, {"type": None, | 715 None, True, {"$type": None, |
| 716 "require": ["huhu", "haha"], | 716 "require": ["huhu", "haha"], |
| 717 "old-key": "here I am", | 717 "old-key": "here I am", |
| 718 "cond": [ | 718 "cond": [ |
| 719 {"when": True, | 719 {"when": True, |
| 720 "then-merge": { | 720 "then-merge": { |
| 731 self.assertFalse("old-key" in r) | 731 self.assertFalse("old-key" in r) |
| 732 self.assertFalse("cond" in r) | 732 self.assertFalse("cond" in r) |
| 733 | 733 |
| 734 def test_simple_replace_first_wins_1(self): | 734 def test_simple_replace_first_wins_1(self): |
| 735 schema = data_schema._Schema( | 735 schema = data_schema._Schema( |
| 736 None, True, {"type": None, | 736 None, True, {"$type": None, |
| 737 "require": ["huhu", "haha", "hehe"], | 737 "require": ["huhu", "haha", "hehe"], |
| 738 "cond": [ | 738 "cond": [ |
| 739 {"when": True, | 739 {"when": True, |
| 740 "then": { | 740 "then": { |
| 741 "new-key2": "v2"}}, | 741 "new-key2": "v2"}}, |
| 751 self.assertEqual("v2", r["new-key2"]) | 751 self.assertEqual("v2", r["new-key2"]) |
| 752 self.assertFalse("cond" in r) | 752 self.assertFalse("cond" in r) |
| 753 | 753 |
| 754 def test_simple_replace_first_wins_2(self): | 754 def test_simple_replace_first_wins_2(self): |
| 755 schema = data_schema._Schema( | 755 schema = data_schema._Schema( |
| 756 None, True, {"type": None, | 756 None, True, {"$type": None, |
| 757 "require": ["huhu", "haha", "hehe"], | 757 "require": ["huhu", "haha", "hehe"], |
| 758 "cond": [ | 758 "cond": [ |
| 759 {"when": False, | 759 {"when": False, |
| 760 "then": { | 760 "then": { |
| 761 "new-key2": "v2"}}, | 761 "new-key2": "v2"}}, |
| 772 self.assertFalse("new-key2" in r) | 772 self.assertFalse("new-key2" in r) |
| 773 self.assertFalse("cond" in r) | 773 self.assertFalse("cond" in r) |
| 774 | 774 |
| 775 def test_simple_replace_when_false(self): | 775 def test_simple_replace_when_false(self): |
| 776 schema = data_schema._Schema( | 776 schema = data_schema._Schema( |
| 777 None, True, {"type": None, | 777 None, True, {"$type": None, |
| 778 "require": ["huhu", "haha"], | 778 "require": ["huhu", "haha"], |
| 779 "cond": [ | 779 "cond": [ |
| 780 {"when": False, | 780 {"when": False, |
| 781 "then": { | 781 "then": { |
| 782 "require": ["r1", "r2", "r3"], | 782 "require": ["r1", "r2", "r3"], |
| 789 self.assertFalse("new-key" in r) | 789 self.assertFalse("new-key" in r) |
| 790 self.assertFalse("cond" in r) | 790 self.assertFalse("cond" in r) |
| 791 | 791 |
| 792 def test_simple_replace_when_ref_true(self): | 792 def test_simple_replace_when_ref_true(self): |
| 793 schema = data_schema._Schema( | 793 schema = data_schema._Schema( |
| 794 None, True, {"type": None, | 794 None, True, {"$type": None, |
| 795 "require": ["huhu", "haha"], | 795 "require": ["huhu", "haha"], |
| 796 "cond": [ | 796 "cond": [ |
| 797 {"when-ref-true": '#foo', | 797 {"when-ref-true": '#foo', |
| 798 "then": { | 798 "then": { |
| 799 "require": ["r1", "r2", "r3"], | 799 "require": ["r1", "r2", "r3"], |
| 807 self.assertIsNone(r["new-key"]) | 807 self.assertIsNone(r["new-key"]) |
| 808 self.assertFalse("cond" in r) | 808 self.assertFalse("cond" in r) |
| 809 | 809 |
| 810 def test_simple_replace_when_ref_true_2(self): | 810 def test_simple_replace_when_ref_true_2(self): |
| 811 schema = data_schema._Schema( | 811 schema = data_schema._Schema( |
| 812 None, True, {"type": None, | 812 None, True, {"$type": None, |
| 813 "require": ["huhu", "haha"], | 813 "require": ["huhu", "haha"], |
| 814 "cond": [ | 814 "cond": [ |
| 815 {"when": {"ref-true": '#foo'}, | 815 {"when": {"ref-true": '#foo'}, |
| 816 "then": { | 816 "then": { |
| 817 "require": ["r1", "r2", "r3"], | 817 "require": ["r1", "r2", "r3"], |
| 825 self.assertIsNone(r["new-key"]) | 825 self.assertIsNone(r["new-key"]) |
| 826 self.assertFalse("cond" in r) | 826 self.assertFalse("cond" in r) |
| 827 | 827 |
| 828 def test_simple_replace_when_ref_is_not_true(self): | 828 def test_simple_replace_when_ref_is_not_true(self): |
| 829 schema = data_schema._Schema( | 829 schema = data_schema._Schema( |
| 830 None, True, {"type": None, | 830 None, True, {"$type": None, |
| 831 "require": ["huhu", "haha"], | 831 "require": ["huhu", "haha"], |
| 832 "cond": [ | 832 "cond": [ |
| 833 {"when-ref-true": '#not-a-foo', | 833 {"when-ref-true": '#not-a-foo', |
| 834 "then": { | 834 "then": { |
| 835 "require": ["r1", "r2", "r3"], | 835 "require": ["r1", "r2", "r3"], |
| 842 self.assertTrue("new-key" not in r) | 842 self.assertTrue("new-key" not in r) |
| 843 self.assertFalse("cond" in r) | 843 self.assertFalse("cond" in r) |
| 844 | 844 |
| 845 def test_simple_replace_when_ref_is_not_true_2(self): | 845 def test_simple_replace_when_ref_is_not_true_2(self): |
| 846 schema = data_schema._Schema( | 846 schema = data_schema._Schema( |
| 847 None, True, {"type": None, | 847 None, True, {"$type": None, |
| 848 "require": ["huhu", "haha"], | 848 "require": ["huhu", "haha"], |
| 849 "cond": [ | 849 "cond": [ |
| 850 {"when": {"ref-true": '#not-a-foo'}, | 850 {"when": {"ref-true": '#not-a-foo'}, |
| 851 "then": { | 851 "then": { |
| 852 "require": ["r1", "r2", "r3"], | 852 "require": ["r1", "r2", "r3"], |
| 859 self.assertTrue("new-key" not in r) | 859 self.assertTrue("new-key" not in r) |
| 860 self.assertFalse("cond" in r) | 860 self.assertFalse("cond" in r) |
| 861 | 861 |
| 862 def test_simple_replace_when_ref_exists(self): | 862 def test_simple_replace_when_ref_exists(self): |
| 863 schema = data_schema._Schema( | 863 schema = data_schema._Schema( |
| 864 None, True, {"type": None, | 864 None, True, {"$type": None, |
| 865 "require": ["huhu", "haha"], | 865 "require": ["huhu", "haha"], |
| 866 "cond": [ | 866 "cond": [ |
| 867 {"when-ref-exists": '#foo2', | 867 {"when-ref-exists": '#foo2', |
| 868 "then": { | 868 "then": { |
| 869 "require": ["r1", "r2", "r3"], | 869 "require": ["r1", "r2", "r3"], |
| 881 self.assertFalse("new-key3" in r) | 881 self.assertFalse("new-key3" in r) |
| 882 self.assertFalse("cond" in r) | 882 self.assertFalse("cond" in r) |
| 883 | 883 |
| 884 def test_simple_replace_when_ref_exists_2(self): | 884 def test_simple_replace_when_ref_exists_2(self): |
| 885 schema = data_schema._Schema( | 885 schema = data_schema._Schema( |
| 886 None, True, {"type": None, | 886 None, True, {"$type": None, |
| 887 "require": ["huhu", "haha"], | 887 "require": ["huhu", "haha"], |
| 888 "cond": [ | 888 "cond": [ |
| 889 {"when": {"ref-exists": '#foo2'}, | 889 {"when": {"ref-exists": '#foo2'}, |
| 890 "then": { | 890 "then": { |
| 891 "require": ["r1", "r2", "r3"], | 891 "require": ["r1", "r2", "r3"], |
| 903 self.assertFalse("new-key3" in r) | 903 self.assertFalse("new-key3" in r) |
| 904 self.assertFalse("cond" in r) | 904 self.assertFalse("cond" in r) |
| 905 | 905 |
| 906 def test_simple_replace_when_ref_exists_is_false(self): | 906 def test_simple_replace_when_ref_exists_is_false(self): |
| 907 schema = data_schema._Schema( | 907 schema = data_schema._Schema( |
| 908 None, True, {"type": None, | 908 None, True, {"$type": None, |
| 909 "cond": [ | 909 "cond": [ |
| 910 {"when-ref-exists": '#foo-not-existing', | 910 {"when-ref-exists": '#foo-not-existing', |
| 911 "then": { | 911 "then": { |
| 912 "require": ["r1", "r2", "r3"], | 912 "require": ["r1", "r2", "r3"], |
| 913 "new-key": None, | 913 "new-key": None, |
| 923 self.assertEqual("val", r["new-key3"]) | 923 self.assertEqual("val", r["new-key3"]) |
| 924 self.assertFalse("cond" in r) | 924 self.assertFalse("cond" in r) |
| 925 | 925 |
| 926 def test_simple_replace_when_ref_exists_is_false_2(self): | 926 def test_simple_replace_when_ref_exists_is_false_2(self): |
| 927 schema = data_schema._Schema( | 927 schema = data_schema._Schema( |
| 928 None, True, {"type": None, | 928 None, True, {"$type": None, |
| 929 "cond": [ | 929 "cond": [ |
| 930 {"when": {"ref-exists": '#foo-not-existing'}, | 930 {"when": {"ref-exists": '#foo-not-existing'}, |
| 931 "then": { | 931 "then": { |
| 932 "require": ["r1", "r2", "r3"], | 932 "require": ["r1", "r2", "r3"], |
| 933 "new-key": None, | 933 "new-key": None, |
| 948 None, True, {"cond": [ | 948 None, True, {"cond": [ |
| 949 {"when": {"all-of": [ | 949 {"when": {"all-of": [ |
| 950 True, | 950 True, |
| 951 {"ref-exists": '#foo2'}, | 951 {"ref-exists": '#foo2'}, |
| 952 {"ref-true": '#foo'}]}, | 952 {"ref-true": '#foo'}]}, |
| 953 "then": {"type": "string"}}, | 953 "then": {"$type": "string"}}, |
| 954 {"when": True, | 954 {"when": True, |
| 955 "then": {"type": None}} | 955 "then": {"$type": None}} |
| 956 ]}) | 956 ]}) |
| 957 r = data_schema.process_schema_conditionals(schema, self._ctx) | 957 r = data_schema.process_schema_conditionals(schema, self._ctx) |
| 958 self.assertIsNot(r, schema) | 958 self.assertIsNot(r, schema) |
| 959 self.assertEqual("string", r["type"]) | 959 self.assertEqual("string", r["$type"]) |
| 960 | 960 |
| 961 def test_allOf_false(self): | 961 def test_allOf_false(self): |
| 962 schema = data_schema._Schema( | 962 schema = data_schema._Schema( |
| 963 None, True, {"cond": [ | 963 None, True, {"cond": [ |
| 964 {"when": {"all-of": [ | 964 {"when": {"all-of": [ |
| 965 True, | 965 True, |
| 966 {"ref-exists": '#foo-non-existing'}, | 966 {"ref-exists": '#foo-non-existing'}, |
| 967 {"ref-true": '#foo'}]}, | 967 {"ref-true": '#foo'}]}, |
| 968 "then": {"type": "string"}}, | 968 "then": {"$type": "string"}}, |
| 969 {"when": True, | 969 {"when": True, |
| 970 "then": {"type": None}} | 970 "then": {"$type": None}} |
| 971 ]}) | 971 ]}) |
| 972 r = data_schema.process_schema_conditionals(schema, self._ctx) | 972 r = data_schema.process_schema_conditionals(schema, self._ctx) |
| 973 self.assertIsNot(r, schema) | 973 self.assertIsNot(r, schema) |
| 974 self.assertIsNone(r["type"]) | 974 self.assertIsNone(r["$type"]) |
| 975 | 975 |
| 976 def test_short_allOf_true(self): | 976 def test_short_allOf_true(self): |
| 977 schema = data_schema._Schema( | 977 schema = data_schema._Schema( |
| 978 None, True, {"cond": [ | 978 None, True, {"cond": [ |
| 979 {"when": [ | 979 {"when": [ |
| 980 True, | 980 True, |
| 981 {"ref-exists": '#foo2'}, | 981 {"ref-exists": '#foo2'}, |
| 982 {"ref-true": '#foo'}], | 982 {"ref-true": '#foo'}], |
| 983 "then": {"type": "string"}}, | 983 "then": {"$type": "string"}}, |
| 984 {"when": True, | 984 {"when": True, |
| 985 "then": {"type": None}} | 985 "then": {"$type": None}} |
| 986 ]}) | 986 ]}) |
| 987 r = data_schema.process_schema_conditionals(schema, self._ctx) | 987 r = data_schema.process_schema_conditionals(schema, self._ctx) |
| 988 self.assertIsNot(r, schema) | 988 self.assertIsNot(r, schema) |
| 989 self.assertEqual("string", r["type"]) | 989 self.assertEqual("string", r["$type"]) |
| 990 | 990 |
| 991 def test_short_allOf_false(self): | 991 def test_short_allOf_false(self): |
| 992 schema = data_schema._Schema( | 992 schema = data_schema._Schema( |
| 993 None, True, {"cond": [ | 993 None, True, {"cond": [ |
| 994 {"when": [ | 994 {"when": [ |
| 995 True, | 995 True, |
| 996 {"ref-exists": '#foo-non-existing'}, | 996 {"ref-exists": '#foo-non-existing'}, |
| 997 {"ref-true": '#foo'}], | 997 {"ref-true": '#foo'}], |
| 998 "then": {"type": "string"}}, | 998 "then": {"$type": "string"}}, |
| 999 {"when": True, | 999 {"when": True, |
| 1000 "then": {"type": None}} | 1000 "then": {"$type": None}} |
| 1001 ]}) | 1001 ]}) |
| 1002 r = data_schema.process_schema_conditionals(schema, self._ctx) | 1002 r = data_schema.process_schema_conditionals(schema, self._ctx) |
| 1003 self.assertIsNot(r, schema) | 1003 self.assertIsNot(r, schema) |
| 1004 self.assertIsNone(r["type"]) | 1004 self.assertIsNone(r["$type"]) |
| 1005 | 1005 |
| 1006 def test_anyOf_true(self): | 1006 def test_anyOf_true(self): |
| 1007 schema = data_schema._Schema( | 1007 schema = data_schema._Schema( |
| 1008 None, True, {"cond": [ | 1008 None, True, {"cond": [ |
| 1009 {"when": {"any-of": [ | 1009 {"when": {"any-of": [ |
| 1010 False, | 1010 False, |
| 1011 {"ref-exists": '#foo2'}, | 1011 {"ref-exists": '#foo2'}, |
| 1012 {"ref-true": '#foo'}]}, | 1012 {"ref-true": '#foo'}]}, |
| 1013 "then": {"type": "string"}}, | 1013 "then": {"$type": "string"}}, |
| 1014 {"when": True, | 1014 {"when": True, |
| 1015 "then": {"type": None}} | 1015 "then": {"$type": None}} |
| 1016 ]}) | 1016 ]}) |
| 1017 r = data_schema.process_schema_conditionals(schema, self._ctx) | 1017 r = data_schema.process_schema_conditionals(schema, self._ctx) |
| 1018 self.assertIsNot(r, schema) | 1018 self.assertIsNot(r, schema) |
| 1019 self.assertEqual("string", r["type"]) | 1019 self.assertEqual("string", r["$type"]) |
| 1020 | 1020 |
| 1021 def test_anyOf_false(self): | 1021 def test_anyOf_false(self): |
| 1022 schema = data_schema._Schema( | 1022 schema = data_schema._Schema( |
| 1023 None, True, {"cond": [ | 1023 None, True, {"cond": [ |
| 1024 {"when": {"any-of": [ | 1024 {"when": {"any-of": [ |
| 1025 False, | 1025 False, |
| 1026 {"ref-exists": '#foo2-non'}, | 1026 {"ref-exists": '#foo2-non'}, |
| 1027 {"ref-true": '#foo2'}]}, | 1027 {"ref-true": '#foo2'}]}, |
| 1028 "then": {"type": "string"}}, | 1028 "then": {"$type": "string"}}, |
| 1029 {"when": True, | 1029 {"when": True, |
| 1030 "then": {"type": None}} | 1030 "then": {"$type": None}} |
| 1031 ]}) | 1031 ]}) |
| 1032 r = data_schema.process_schema_conditionals(schema, self._ctx) | 1032 r = data_schema.process_schema_conditionals(schema, self._ctx) |
| 1033 self.assertIsNot(r, schema) | 1033 self.assertIsNot(r, schema) |
| 1034 self.assertIsNone(r["type"]) | 1034 self.assertIsNone(r["$type"]) |
| 1035 | 1035 |
| 1036 def test_oneOf_true(self): | 1036 def test_oneOf_true(self): |
| 1037 schema = data_schema._Schema( | 1037 schema = data_schema._Schema( |
| 1038 None, True, {"cond": [ | 1038 None, True, {"cond": [ |
| 1039 {"when": {"one-of": [ | 1039 {"when": {"one-of": [ |
| 1040 False, | 1040 False, |
| 1041 {"ref-exists": '#foo2'}, | 1041 {"ref-exists": '#foo2'}, |
| 1042 {"not": {"ref-true": '#foo'}}]}, | 1042 {"not": {"ref-true": '#foo'}}]}, |
| 1043 "then": {"type": "string"}}, | 1043 "then": {"$type": "string"}}, |
| 1044 {"when": True, | 1044 {"when": True, |
| 1045 "then": {"type": None}} | 1045 "then": {"$type": None}} |
| 1046 ]}) | 1046 ]}) |
| 1047 r = data_schema.process_schema_conditionals(schema, self._ctx) | 1047 r = data_schema.process_schema_conditionals(schema, self._ctx) |
| 1048 self.assertIsNot(r, schema) | 1048 self.assertIsNot(r, schema) |
| 1049 self.assertEqual("string", r["type"]) | 1049 self.assertEqual("string", r["$type"]) |
| 1050 | 1050 |
| 1051 def test_oneOf_false(self): | 1051 def test_oneOf_false(self): |
| 1052 schema = data_schema._Schema( | 1052 schema = data_schema._Schema( |
| 1053 None, True, {"cond": [ | 1053 None, True, {"cond": [ |
| 1054 {"when": {"one-of": [ | 1054 {"when": {"one-of": [ |
| 1055 False, | 1055 False, |
| 1056 {"ref-exists": '#foo2'}, | 1056 {"ref-exists": '#foo2'}, |
| 1057 {"ref-true": '#foo'}]}, | 1057 {"ref-true": '#foo'}]}, |
| 1058 "then": {"type": "string"}}, | 1058 "then": {"$type": "string"}}, |
| 1059 {"when": True, | 1059 {"when": True, |
| 1060 "then": {"type": None}} | 1060 "then": {"$type": None}} |
| 1061 ]}) | 1061 ]}) |
| 1062 r = data_schema.process_schema_conditionals(schema, self._ctx) | 1062 r = data_schema.process_schema_conditionals(schema, self._ctx) |
| 1063 self.assertIsNot(r, schema) | 1063 self.assertIsNot(r, schema) |
| 1064 self.assertIsNone(r["type"]) | 1064 self.assertIsNone(r["$type"]) |
| 1065 | 1065 |
| 1066 def test_oneOf_false_2(self): | 1066 def test_oneOf_false_2(self): |
| 1067 schema = data_schema._Schema( | 1067 schema = data_schema._Schema( |
| 1068 None, True, {"cond": [ | 1068 None, True, {"cond": [ |
| 1069 {"when": {"one-of": [ | 1069 {"when": {"one-of": [ |
| 1070 False, | 1070 False, |
| 1071 {"not": {"ref-exists": '#foo2'}}, | 1071 {"not": {"ref-exists": '#foo2'}}, |
| 1072 {"not": {"ref-true": '#foo'}}]}, | 1072 {"not": {"ref-true": '#foo'}}]}, |
| 1073 "then": {"type": "string"}}, | 1073 "then": {"$type": "string"}}, |
| 1074 {"when": True, | 1074 {"when": True, |
| 1075 "then": {"type": None}} | 1075 "then": {"$type": None}} |
| 1076 ]}) | 1076 ]}) |
| 1077 r = data_schema.process_schema_conditionals(schema, self._ctx) | 1077 r = data_schema.process_schema_conditionals(schema, self._ctx) |
| 1078 self.assertIsNot(r, schema) | 1078 self.assertIsNot(r, schema) |
| 1079 self.assertIsNone(r["type"]) | 1079 self.assertIsNone(r["$type"]) |
| 1080 | 1080 |
| 1081 def test_match_nothing(self): | 1081 def test_match_nothing(self): |
| 1082 schema = data_schema._Schema( | 1082 schema = data_schema._Schema( |
| 1083 None, | 1083 None, |
| 1084 True, | 1084 True, |
| 1215 def test_equal_no_list(self): | 1215 def test_equal_no_list(self): |
| 1216 schema = data_schema._Schema( | 1216 schema = data_schema._Schema( |
| 1217 None, True, {"foos": "bar", | 1217 None, True, {"foos": "bar", |
| 1218 "match": [{ | 1218 "match": [{ |
| 1219 "when": { | 1219 "when": { |
| 1220 "equals": {"type": None}, | 1220 "equals": {"$type": None}, |
| 1221 "then-replace": { | 1221 "then-replace": { |
| 1222 "foos": "new-bar"}}}] | 1222 "foos": "new-bar"}}}] |
| 1223 }) | 1223 }) |
| 1224 self.assertRaises( | 1224 self.assertRaises( |
| 1225 data_schema.SchemaError, | 1225 data_schema.SchemaError, |
| 1343 data_schema.process_schema_references(schema, ctx) | 1343 data_schema.process_schema_references(schema, ctx) |
| 1344 | 1344 |
| 1345 def test_raise_if_scheme_ref_is_not_the_single_key(self): | 1345 def test_raise_if_scheme_ref_is_not_the_single_key(self): |
| 1346 schema = data_schema._Schema( | 1346 schema = data_schema._Schema( |
| 1347 None, True, {"$ref": "schema:#/", | 1347 None, True, {"$ref": "schema:#/", |
| 1348 "type": None | 1348 "$type": None |
| 1349 }) | 1349 }) |
| 1350 ctx = data_schema.Context( | 1350 ctx = data_schema.Context( |
| 1351 None, root_schema=schema, settings=None) | 1351 None, root_schema=schema, settings=None) |
| 1352 self.assertRaises( | 1352 self.assertRaises( |
| 1353 data_schema.SchemaError, | 1353 data_schema.SchemaError, |
| 1357 | 1357 |
| 1358 def test_raise_if_scheme_ref_is_not_the_single_key_root(self): | 1358 def test_raise_if_scheme_ref_is_not_the_single_key_root(self): |
| 1359 schema = data_schema._Schema( | 1359 schema = data_schema._Schema( |
| 1360 None, True, {"$ref": "schema:#/subschema", | 1360 None, True, {"$ref": "schema:#/subschema", |
| 1361 "subschema": { | 1361 "subschema": { |
| 1362 "type": None | 1362 "$type": None |
| 1363 } | 1363 } |
| 1364 }) | 1364 }) |
| 1365 ctx = data_schema.Context( | 1365 ctx = data_schema.Context( |
| 1366 None, root_schema=schema, settings=None) | 1366 None, root_schema=schema, settings=None) |
| 1367 r = data_schema.process_schema_references( | 1367 r = data_schema.process_schema_references( |
| 1368 schema, | 1368 schema, |
| 1369 ctx, | 1369 ctx, |
| 1370 check_single_ref_key=False) | 1370 check_single_ref_key=False) |
| 1371 self.assertEqual({"type": None}, r) | 1371 self.assertEqual({"$type": None}, r) |
| 1372 | 1372 |
| 1373 def test_recursive_schema_scheme(self): | 1373 def test_recursive_schema_scheme(self): |
| 1374 barschema = { | 1374 barschema = { |
| 1375 "type": "null" | 1375 "$type": "null" |
| 1376 } | 1376 } |
| 1377 fooschema = { | 1377 fooschema = { |
| 1378 "$ref": "schema:#/bar" | 1378 "$ref": "schema:#/bar" |
| 1379 } | 1379 } |
| 1380 schema = data_schema._Schema( | 1380 schema = data_schema._Schema( |
| 1386 None, root_schema=schema, settings=None) | 1386 None, root_schema=schema, settings=None) |
| 1387 r = data_schema.process_schema_references( | 1387 r = data_schema.process_schema_references( |
| 1388 schema, | 1388 schema, |
| 1389 ctx, | 1389 ctx, |
| 1390 check_single_ref_key=False) | 1390 check_single_ref_key=False) |
| 1391 self.assertEqual({"type": "null"}, r) | 1391 self.assertEqual({"$type": "null"}, r) |
| 1392 | 1392 |
| 1393 def test_recursive_schema_scheme_raises_if_non_root_is_not_single_key(self): | 1393 def test_recursive_schema_scheme_raises_if_non_root_is_not_single_key(self): |
| 1394 barschema = { | 1394 barschema = { |
| 1395 "type": "null" | 1395 "$type": "null" |
| 1396 } | 1396 } |
| 1397 fooschema = { | 1397 fooschema = { |
| 1398 "$ref": "schema:#/bar", | 1398 "$ref": "schema:#/bar", |
| 1399 "type": "dict", | 1399 "$type": "dict", |
| 1400 } | 1400 } |
| 1401 schema = data_schema._Schema( | 1401 schema = data_schema._Schema( |
| 1402 None, True, { | 1402 None, True, { |
| 1403 "foo": fooschema, | 1403 "foo": fooschema, |
| 1404 "bar": barschema, | 1404 "bar": barschema, |
| 1413 ctx, | 1413 ctx, |
| 1414 check_single_ref_key=False) | 1414 check_single_ref_key=False) |
| 1415 | 1415 |
| 1416 def test_recursive_schema_scheme_ref_to_non_existing_schema_raises(self): | 1416 def test_recursive_schema_scheme_ref_to_non_existing_schema_raises(self): |
| 1417 barschema = { | 1417 barschema = { |
| 1418 "type": "null" | 1418 "$type": "null" |
| 1419 } | 1419 } |
| 1420 fooschema = { | 1420 fooschema = { |
| 1421 "$ref": "schema:#/non-bar", | 1421 "$ref": "schema:#/non-bar", |
| 1422 } | 1422 } |
| 1423 schema = data_schema._Schema( | 1423 schema = data_schema._Schema( |
| 1474 def test_warning_ctor(self): | 1474 def test_warning_ctor(self): |
| 1475 v = data_schema.ValidationProblem(code=WARNINGS.W80000) | 1475 v = data_schema.ValidationProblem(code=WARNINGS.W80000) |
| 1476 self.assertEqual(SEVERITY.WARNING, v.severity) | 1476 self.assertEqual(SEVERITY.WARNING, v.severity) |
| 1477 | 1477 |
| 1478 def test_d1(self): | 1478 def test_d1(self): |
| 1479 x = list(data_schema.validate({}, {"type": "dict"})) | 1479 x = list(data_schema.validate({}, {"$type": "dict"})) |
| 1480 self.assertEqual(0, len(x)) | 1480 self.assertEqual(0, len(x)) |
| 1481 | 1481 |
| 1482 def test_d1_not_nullable(self): | 1482 def test_d1_not_nullable(self): |
| 1483 x = list(data_schema.validate(None, {"type": "dict"})) | 1483 x = list(data_schema.validate(None, {"$type": "dict"})) |
| 1484 self.assertEqual(1, len(x)) | 1484 self.assertEqual(1, len(x)) |
| 1485 self.assertEqual(ERRORS.E10000, x[0].code) | 1485 self.assertEqual(ERRORS.E10000, x[0].code) |
| 1486 | 1486 |
| 1487 def test_d1_nullable(self): | 1487 def test_d1_nullable(self): |
| 1488 x = list(data_schema.validate(None, {"type": "dict", | 1488 x = list(data_schema.validate(None, {"$type": "dict", |
| 1489 "nullable": True})) | 1489 "nullable": True})) |
| 1490 self.assertEqual(0, len(x)) | 1490 self.assertEqual(0, len(x)) |
| 1491 | 1491 |
| 1492 def test_d2(self): | 1492 def test_d2(self): |
| 1493 x = list(data_schema.validate([], {"type": "map"})) | 1493 x = list(data_schema.validate([], {"$type": "map"})) |
| 1494 self.assertEqual(1, len(x)) | 1494 self.assertEqual(1, len(x)) |
| 1495 self.assertEqual(SEVERITY.ERROR, x[0].severity) | 1495 self.assertEqual(SEVERITY.ERROR, x[0].severity) |
| 1496 self.assertEqual(ERRORS.E10000, x[0].code) | 1496 self.assertEqual(ERRORS.E10000, x[0].code) |
| 1497 | 1497 |
| 1498 def test_d3(self): | 1498 def test_d3(self): |
| 1499 x = list(data_schema.validate( | 1499 x = list(data_schema.validate( |
| 1500 {"key": "value"}, | 1500 {"key": "value"}, |
| 1501 {"type": "dict", | 1501 {"$type": "dict", |
| 1502 "required": ["key2"]})) | 1502 "required": ["key2"]})) |
| 1503 self.assertEqual(2, len(x)) | 1503 self.assertEqual(2, len(x)) |
| 1504 self.assertEqual(SEVERITY.ERROR, x[0].severity) | 1504 self.assertEqual(SEVERITY.ERROR, x[0].severity) |
| 1505 self.assertEqual(ERRORS.E10004, x[0].code) | 1505 self.assertEqual(ERRORS.E10004, x[0].code) |
| 1506 self.assertEqual("key", x[0].hint) | 1506 self.assertEqual("key", x[0].hint) |
| 1509 self.assertEqual(["key2"], x[1].hint) | 1509 self.assertEqual(["key2"], x[1].hint) |
| 1510 | 1510 |
| 1511 def test_d4(self): | 1511 def test_d4(self): |
| 1512 x = list(data_schema.validate( | 1512 x = list(data_schema.validate( |
| 1513 {"key": "value"}, | 1513 {"key": "value"}, |
| 1514 {"type": "dict", | 1514 {"$type": "dict", |
| 1515 "keys": { | 1515 "keys": { |
| 1516 "key": {"type": "string"}, | 1516 "key": {"$type": "string"}, |
| 1517 }, | 1517 }, |
| 1518 "required": ["key"]})) | 1518 "required": ["key"]})) |
| 1519 self.assertEqual(0, len(x)) | 1519 self.assertEqual(0, len(x)) |
| 1520 | 1520 |
| 1521 def test_d5(self): | 1521 def test_d5(self): |
| 1522 x = list(data_schema.validate( | 1522 x = list(data_schema.validate( |
| 1523 {"key": "value"}, | 1523 {"key": "value"}, |
| 1524 {"type": "dict", | 1524 {"$type": "dict", |
| 1525 "additional-keys": False})) | 1525 "additional-keys": False})) |
| 1526 self.assertEqual(1, len(x)) | 1526 self.assertEqual(1, len(x)) |
| 1527 self.assertEqual(ERRORS.E10004, x[0].code) | 1527 self.assertEqual(ERRORS.E10004, x[0].code) |
| 1528 self.assertEqual("key", x[0].hint) | 1528 self.assertEqual("key", x[0].hint) |
| 1529 | 1529 |
| 1530 def test_d5_2(self): | 1530 def test_d5_2(self): |
| 1531 x = list(data_schema.validate( | 1531 x = list(data_schema.validate( |
| 1532 {"key": "value"}, | 1532 {"key": "value"}, |
| 1533 {"type": "dict", | 1533 {"$type": "dict", |
| 1534 "additional-keys": False}, | 1534 "additional-keys": False}, |
| 1535 skip_keys=["key"])) | 1535 skip_keys=["key"])) |
| 1536 self.assertEqual(0, len(x)) | 1536 self.assertEqual(0, len(x)) |
| 1537 | 1537 |
| 1538 def test_d5_3(self): | 1538 def test_d5_3(self): |
| 1539 x = list(data_schema.validate( | 1539 x = list(data_schema.validate( |
| 1540 {"key": "value", | 1540 {"key": "value", |
| 1541 "key2": "value"}, | 1541 "key2": "value"}, |
| 1542 {"type": "dict", | 1542 {"$type": "dict", |
| 1543 "additional-keys": False}, | 1543 "additional-keys": False}, |
| 1544 skip_keys=[re.compile(r"\Akey\d*\Z")])) | 1544 skip_keys=[re.compile(r"\Akey\d*\Z")])) |
| 1545 self.assertEqual(0, len(x)) | 1545 self.assertEqual(0, len(x)) |
| 1546 | 1546 |
| 1547 def test_d5_4(self): | 1547 def test_d5_4(self): |
| 1548 x = list(data_schema.validate( | 1548 x = list(data_schema.validate( |
| 1549 {"key": "value", | 1549 {"key": "value", |
| 1550 "key2": "value"}, | 1550 "key2": "value"}, |
| 1551 {"type": "dict", | 1551 {"$type": "dict", |
| 1552 "additional-keys": False}, | 1552 "additional-keys": False}, |
| 1553 skip_keys=[re.compile(r"\A__.+"), re.compile(r"\Akey\d+\Z")])) | 1553 skip_keys=[re.compile(r"\A__.+"), re.compile(r"\Akey\d+\Z")])) |
| 1554 self.assertEqual(1, len(x)) | 1554 self.assertEqual(1, len(x)) |
| 1555 self.assertEqual(ERRORS.E10004, x[0].code) | 1555 self.assertEqual(ERRORS.E10004, x[0].code) |
| 1556 self.assertEqual("key", x[0].hint) | 1556 self.assertEqual("key", x[0].hint) |
| 1557 | 1557 |
| 1558 def test_d6(self): | 1558 def test_d6(self): |
| 1559 x = list(data_schema.validate( | 1559 x = list(data_schema.validate( |
| 1560 {"key": "value"}, | 1560 {"key": "value"}, |
| 1561 {"type": "dict", | 1561 {"$type": "dict", |
| 1562 "additional-keys": True})) | 1562 "additional-keys": True})) |
| 1563 self.assertEqual(0, len(x)) | 1563 self.assertEqual(0, len(x)) |
| 1564 | 1564 |
| 1565 def test_d7(self): | 1565 def test_d7(self): |
| 1566 x = list(data_schema.validate( | 1566 x = list(data_schema.validate( |
| 1567 {"key": "value"}, | 1567 {"key": "value"}, |
| 1568 {"type": "dict", | 1568 {"$type": "dict", |
| 1569 "additional-keys": { | 1569 "additional-keys": { |
| 1570 "type": "string"}})) | 1570 "$type": "string"}})) |
| 1571 self.assertEqual(0, len(x)) | 1571 self.assertEqual(0, len(x)) |
| 1572 | 1572 |
| 1573 def test_d8(self): | 1573 def test_d8(self): |
| 1574 x = list(data_schema.validate( | 1574 x = list(data_schema.validate( |
| 1575 {"key": 1234}, | 1575 {"key": 1234}, |
| 1576 {"type": "dict", | 1576 {"$type": "dict", |
| 1577 "additional-keys": { | 1577 "additional-keys": { |
| 1578 "type": "string"}})) | 1578 "$type": "string"}})) |
| 1579 self.assertEqual(1, len(x)) | 1579 self.assertEqual(1, len(x)) |
| 1580 self.assertEqual(ERRORS.E10002, x[0].code) | 1580 self.assertEqual(ERRORS.E10002, x[0].code) |
| 1581 self.assertEqual(1234, x[0].hint) | 1581 self.assertEqual(1234, x[0].hint) |
| 1582 | 1582 |
| 1583 def test_d8_2(self): | 1583 def test_d8_2(self): |
| 1584 x = list(data_schema.validate( | 1584 x = list(data_schema.validate( |
| 1585 {"key": 1234}, | 1585 {"key": 1234}, |
| 1586 {"type": "dict", | 1586 {"$type": "dict", |
| 1587 "additional-keys": { | 1587 "additional-keys": { |
| 1588 "type": "string"}}, | 1588 "$type": "string"}}, |
| 1589 skip_keys=["key"])) | 1589 skip_keys=["key"])) |
| 1590 self.assertEqual(0, len(x)) | 1590 self.assertEqual(0, len(x)) |
| 1591 | 1591 |
| 1592 def test_d9_non_string_keys(self): | 1592 def test_d9_non_string_keys(self): |
| 1593 pr = list(data_schema.validate( | 1593 pr = list(data_schema.validate( |
| 1594 {0: "value"}, | 1594 {0: "value"}, |
| 1595 {"type": "dict", | 1595 {"$type": "dict", |
| 1596 "additional-keys": True})) | 1596 "additional-keys": True})) |
| 1597 self.assertEqual(1, len(pr)) | 1597 self.assertEqual(1, len(pr)) |
| 1598 self.assertEqual(ERRORS.E10003, pr[0].code) | 1598 self.assertEqual(ERRORS.E10003, pr[0].code) |
| 1599 | 1599 |
| 1600 def test_d10_int_dict_keys(self): | 1600 def test_d10_int_dict_keys(self): |
| 1601 pr = list(data_schema.validate( | 1601 pr = list(data_schema.validate( |
| 1602 {1: "value", 2: "value2"}, | 1602 {1: "value", 2: "value2"}, |
| 1603 {"type": "dict", | 1603 {"$type": "dict", |
| 1604 "keys": { | 1604 "keys": { |
| 1605 1: {"type": "string"}}, | 1605 1: {"$type": "string"}}, |
| 1606 "additional-keys": True, | 1606 "additional-keys": True, |
| 1607 "key-names": {"type": "int"}})) | 1607 "key-names": {"$type": "int"}})) |
| 1608 self.assertEqual(0, len(pr)) | 1608 self.assertEqual(0, len(pr)) |
| 1609 | 1609 |
| 1610 def test_error_message(self): | 1610 def test_error_message(self): |
| 1611 self.assertEqual("dict expected", | 1611 self.assertEqual("dict expected", |
| 1612 data_schema.problem_message(ERRORS.E10000)) | 1612 data_schema.problem_message(ERRORS.E10000)) |
| 1622 self.assertRaises(KeyError, data_schema.problem_message, 12345) | 1622 self.assertRaises(KeyError, data_schema.problem_message, 12345) |
| 1623 | 1623 |
| 1624 def test_str_enum(self): | 1624 def test_str_enum(self): |
| 1625 pr = list(data_schema.validate( | 1625 pr = list(data_schema.validate( |
| 1626 "e1", | 1626 "e1", |
| 1627 {"type": "string", | 1627 {"$type": "string", |
| 1628 "enum": ["e1", "e2"]})) | 1628 "enum": ["e1", "e2"]})) |
| 1629 self.assertEqual(0, len(pr)) | 1629 self.assertEqual(0, len(pr)) |
| 1630 | 1630 |
| 1631 pr = list(data_schema.validate( | 1631 pr = list(data_schema.validate( |
| 1632 "e2", | 1632 "e2", |
| 1633 {"type": "string", | 1633 {"$type": "string", |
| 1634 "enum": ["e1", "e2"]})) | 1634 "enum": ["e1", "e2"]})) |
| 1635 self.assertEqual(0, len(pr)) | 1635 self.assertEqual(0, len(pr)) |
| 1636 | 1636 |
| 1637 def test_str_not_in_enum(self): | 1637 def test_str_not_in_enum(self): |
| 1638 pr = list(data_schema.validate( | 1638 pr = list(data_schema.validate( |
| 1639 "e3", | 1639 "e3", |
| 1640 {"type": "string", | 1640 {"$type": "string", |
| 1641 "enum": ["e1", "e2"]})) | 1641 "enum": ["e1", "e2"]})) |
| 1642 self.assertEqual(1, len(pr)) | 1642 self.assertEqual(1, len(pr)) |
| 1643 self.assertEqual(ERRORS.E10043, pr[0].code) | 1643 self.assertEqual(ERRORS.E10043, pr[0].code) |
| 1644 | 1644 |
| 1645 def test_str_minlen(self): | 1645 def test_str_minlen(self): |
| 1646 pr = list(data_schema.validate( | 1646 pr = list(data_schema.validate( |
| 1647 "", | 1647 "", |
| 1648 {"type": "string", | 1648 {"$type": "string", |
| 1649 "min-length": 0})) | 1649 "min-length": 0})) |
| 1650 self.assertEqual(0, len(pr)) | 1650 self.assertEqual(0, len(pr)) |
| 1651 | 1651 |
| 1652 pr = list(data_schema.validate( | 1652 pr = list(data_schema.validate( |
| 1653 "", | 1653 "", |
| 1654 {"type": "string", | 1654 {"$type": "string", |
| 1655 "min-length": 1})) | 1655 "min-length": 1})) |
| 1656 self.assertEqual(1, len(pr)) | 1656 self.assertEqual(1, len(pr)) |
| 1657 self.assertEqual(ERRORS.E10006, pr[0].code) | 1657 self.assertEqual(ERRORS.E10006, pr[0].code) |
| 1658 | 1658 |
| 1659 pr = list(data_schema.validate( | 1659 pr = list(data_schema.validate( |
| 1660 "x", | 1660 "x", |
| 1661 {"type": "string", | 1661 {"$type": "string", |
| 1662 "min-length": 1})) | 1662 "min-length": 1})) |
| 1663 self.assertEqual(0, len(pr)) | 1663 self.assertEqual(0, len(pr)) |
| 1664 | 1664 |
| 1665 def test_str_maxlen(self): | 1665 def test_str_maxlen(self): |
| 1666 pr = list(data_schema.validate( | 1666 pr = list(data_schema.validate( |
| 1667 "", | 1667 "", |
| 1668 {"type": "string", | 1668 {"$type": "string", |
| 1669 "max-length": 0})) | 1669 "max-length": 0})) |
| 1670 self.assertEqual(0, len(pr)) | 1670 self.assertEqual(0, len(pr)) |
| 1671 | 1671 |
| 1672 pr = list(data_schema.validate( | 1672 pr = list(data_schema.validate( |
| 1673 "x", | 1673 "x", |
| 1674 {"type": "string", | 1674 {"$type": "string", |
| 1675 "max-length": 0})) | 1675 "max-length": 0})) |
| 1676 self.assertEqual(1, len(pr)) | 1676 self.assertEqual(1, len(pr)) |
| 1677 self.assertEqual(ERRORS.E10007, pr[0].code) | 1677 self.assertEqual(ERRORS.E10007, pr[0].code) |
| 1678 | 1678 |
| 1679 pr = list(data_schema.validate( | 1679 pr = list(data_schema.validate( |
| 1680 "x", | 1680 "x", |
| 1681 {"type": "string", | 1681 {"$type": "string", |
| 1682 "max-length": 1})) | 1682 "max-length": 1})) |
| 1683 self.assertEqual(0, len(pr)) | 1683 self.assertEqual(0, len(pr)) |
| 1684 | 1684 |
| 1685 pr = list(data_schema.validate( | 1685 pr = list(data_schema.validate( |
| 1686 b"x", | 1686 b"x", |
| 1687 {"type": "string", | 1687 {"$type": "string", |
| 1688 "max-length": 1})) | 1688 "max-length": 1})) |
| 1689 self.assertEqual(1, len(pr)) | 1689 self.assertEqual(1, len(pr)) |
| 1690 self.assertEqual(ERRORS.E10002, pr[0].code) | 1690 self.assertEqual(ERRORS.E10002, pr[0].code) |
| 1691 | 1691 |
| 1692 @staticmethod | 1692 @staticmethod |
| 1695 yield data_schema.ValidationProblem(code=ERRORS.E10009) | 1695 yield data_schema.ValidationProblem(code=ERRORS.E10009) |
| 1696 | 1696 |
| 1697 def test_str_re(self): | 1697 def test_str_re(self): |
| 1698 pr = list(data_schema.validate( | 1698 pr = list(data_schema.validate( |
| 1699 "abc", | 1699 "abc", |
| 1700 {"type": "string", | 1700 {"$type": "string", |
| 1701 "pattern": r'\A[0-9]+\Z'})) | 1701 "pattern": r'\A[0-9]+\Z'})) |
| 1702 self.assertEqual(1, len(pr)) | 1702 self.assertEqual(1, len(pr)) |
| 1703 self.assertEqual(ERRORS.E10008, pr[0].code) | 1703 self.assertEqual(ERRORS.E10008, pr[0].code) |
| 1704 | 1704 |
| 1705 pr = list(data_schema.validate( | 1705 pr = list(data_schema.validate( |
| 1706 "123", | 1706 "123", |
| 1707 {"type": "string", | 1707 {"$type": "string", |
| 1708 "pattern": re.compile(r'\A[a-z]+\Z')})) | 1708 "pattern": re.compile(r'\A[a-z]+\Z')})) |
| 1709 self.assertEqual(1, len(pr)) | 1709 self.assertEqual(1, len(pr)) |
| 1710 self.assertEqual(ERRORS.E10008, pr[0].code) | 1710 self.assertEqual(ERRORS.E10008, pr[0].code) |
| 1711 | 1711 |
| 1712 pr = list(data_schema.validate( | 1712 pr = list(data_schema.validate( |
| 1713 "123", | 1713 "123", |
| 1714 {"type": "string", | 1714 {"$type": "string", |
| 1715 "pattern": self._pattern_check_function})) | 1715 "pattern": self._pattern_check_function})) |
| 1716 self.assertEqual(0, len(pr)) | 1716 self.assertEqual(0, len(pr)) |
| 1717 | 1717 |
| 1718 pr = list(data_schema.validate( | 1718 pr = list(data_schema.validate( |
| 1719 " 5 ", | 1719 " 5 ", |
| 1720 {"type": "string", | 1720 {"$type": "string", |
| 1721 "pattern": self._pattern_check_function})) | 1721 "pattern": self._pattern_check_function})) |
| 1722 self.assertEqual(1, len(pr)) | 1722 self.assertEqual(1, len(pr)) |
| 1723 self.assertEqual(ERRORS.E10009, pr[0].code) | 1723 self.assertEqual(ERRORS.E10009, pr[0].code) |
| 1724 | 1724 |
| 1725 def test_binary_basic(self): | 1725 def test_binary_basic(self): |
| 1726 pr = list(data_schema.validate( | 1726 pr = list(data_schema.validate( |
| 1727 b"", | 1727 b"", |
| 1728 {"type": "binary"})) | 1728 {"$type": "binary"})) |
| 1729 self.assertEqual(0, len(pr)) | 1729 self.assertEqual(0, len(pr)) |
| 1730 | 1730 |
| 1731 def test_str_is_not_binary(self): | 1731 def test_str_is_not_binary(self): |
| 1732 pr = list(data_schema.validate( | 1732 pr = list(data_schema.validate( |
| 1733 "", | 1733 "", |
| 1734 {"type": "binary"})) | 1734 {"$type": "binary"})) |
| 1735 self.assertEqual(1, len(pr)) | 1735 self.assertEqual(1, len(pr)) |
| 1736 self.assertEqual(ERRORS.E10035, pr[0].code) | 1736 self.assertEqual(ERRORS.E10035, pr[0].code) |
| 1737 | 1737 |
| 1738 @staticmethod | 1738 @staticmethod |
| 1739 def _binary_pattern_check_function(obj, schema, context=None): | 1739 def _binary_pattern_check_function(obj, schema, context=None): |
| 1741 yield data_schema.ValidationProblem(code=ERRORS.E10009) | 1741 yield data_schema.ValidationProblem(code=ERRORS.E10009) |
| 1742 | 1742 |
| 1743 def test_binary_pattern_check(self): | 1743 def test_binary_pattern_check(self): |
| 1744 pr = list(data_schema.validate( | 1744 pr = list(data_schema.validate( |
| 1745 b"\x00", | 1745 b"\x00", |
| 1746 {"type": "binary", | 1746 {"$type": "binary", |
| 1747 "pattern": self._binary_pattern_check_function})) | 1747 "pattern": self._binary_pattern_check_function})) |
| 1748 self.assertEqual(0, len(pr)) | 1748 self.assertEqual(0, len(pr)) |
| 1749 | 1749 |
| 1750 pr = list(data_schema.validate( | 1750 pr = list(data_schema.validate( |
| 1751 b"\x01", | 1751 b"\x01", |
| 1752 {"type": "binary", | 1752 {"$type": "binary", |
| 1753 "pattern": self._binary_pattern_check_function})) | 1753 "pattern": self._binary_pattern_check_function})) |
| 1754 self.assertEqual(1, len(pr)) | 1754 self.assertEqual(1, len(pr)) |
| 1755 self.assertEqual(ERRORS.E10009, pr[0].code) | 1755 self.assertEqual(ERRORS.E10009, pr[0].code) |
| 1756 | 1756 |
| 1757 def test_binary_re_str_match(self): | 1757 def test_binary_re_str_match(self): |
| 1758 pr = list(data_schema.validate( | 1758 pr = list(data_schema.validate( |
| 1759 b"\x00\x00\x00", | 1759 b"\x00\x00\x00", |
| 1760 {"type": "binary", | 1760 {"$type": "binary", |
| 1761 "pattern": u"\\x00+"})) | 1761 "pattern": u"\\x00+"})) |
| 1762 self.assertEqual(0, len(pr)) | 1762 self.assertEqual(0, len(pr)) |
| 1763 | 1763 |
| 1764 def test_binary_re_bytes_match(self): | 1764 def test_binary_re_bytes_match(self): |
| 1765 pr = list(data_schema.validate( | 1765 pr = list(data_schema.validate( |
| 1766 b"\x00\x00\x00", | 1766 b"\x00\x00\x00", |
| 1767 {"type": "binary", | 1767 {"$type": "binary", |
| 1768 "pattern": b"\x00+"})) | 1768 "pattern": b"\x00+"})) |
| 1769 self.assertEqual(0, len(pr)) | 1769 self.assertEqual(0, len(pr)) |
| 1770 | 1770 |
| 1771 def test_binary_re_str_mismatch(self): | 1771 def test_binary_re_str_mismatch(self): |
| 1772 pr = list(data_schema.validate( | 1772 pr = list(data_schema.validate( |
| 1773 b"\x00\x00\x00", | 1773 b"\x00\x00\x00", |
| 1774 {"type": "binary", | 1774 {"$type": "binary", |
| 1775 "pattern": u"\\x01+"})) | 1775 "pattern": u"\\x01+"})) |
| 1776 self.assertEqual(1, len(pr)) | 1776 self.assertEqual(1, len(pr)) |
| 1777 self.assertEqual(ERRORS.E10047, pr[0].code) | 1777 self.assertEqual(ERRORS.E10047, pr[0].code) |
| 1778 | 1778 |
| 1779 def test_binary_re_bytes_mismatch(self): | 1779 def test_binary_re_bytes_mismatch(self): |
| 1780 pr = list(data_schema.validate( | 1780 pr = list(data_schema.validate( |
| 1781 b"\x00\x00\x00", | 1781 b"\x00\x00\x00", |
| 1782 {"type": "binary", | 1782 {"$type": "binary", |
| 1783 "pattern": b"\x01+"})) | 1783 "pattern": b"\x01+"})) |
| 1784 self.assertEqual(1, len(pr)) | 1784 self.assertEqual(1, len(pr)) |
| 1785 self.assertEqual(ERRORS.E10047, pr[0].code) | 1785 self.assertEqual(ERRORS.E10047, pr[0].code) |
| 1786 | 1786 |
| 1787 def test_binary_length(self): | 1787 def test_binary_length(self): |
| 1788 pr = list(data_schema.validate( | 1788 pr = list(data_schema.validate( |
| 1789 b"", | 1789 b"", |
| 1790 {"type": "binary", | 1790 {"$type": "binary", |
| 1791 "min-length": 1})) | 1791 "min-length": 1})) |
| 1792 self.assertEqual(1, len(pr)) | 1792 self.assertEqual(1, len(pr)) |
| 1793 self.assertEqual(ERRORS.E10036, pr[0].code) | 1793 self.assertEqual(ERRORS.E10036, pr[0].code) |
| 1794 | 1794 |
| 1795 pr = list(data_schema.validate( | 1795 pr = list(data_schema.validate( |
| 1796 b"1", | 1796 b"1", |
| 1797 {"type": "binary", | 1797 {"$type": "binary", |
| 1798 "max-length": 0})) | 1798 "max-length": 0})) |
| 1799 self.assertEqual(1, len(pr)) | 1799 self.assertEqual(1, len(pr)) |
| 1800 self.assertEqual(ERRORS.E10037, pr[0].code) | 1800 self.assertEqual(ERRORS.E10037, pr[0].code) |
| 1801 | 1801 |
| 1802 def test_deny(self): | 1802 def test_deny(self): |
| 1803 pr = list(data_schema.validate("abc", {"type": "deny"})) | 1803 pr = list(data_schema.validate("abc", {"$type": "deny"})) |
| 1804 self.assertEqual(1, len(pr)) | 1804 self.assertEqual(1, len(pr)) |
| 1805 self.assertEqual(ERRORS.E10010, pr[0].code) | 1805 self.assertEqual(ERRORS.E10010, pr[0].code) |
| 1806 | 1806 |
| 1807 def test_accept(self): | 1807 def test_accept(self): |
| 1808 pr = list(data_schema.validate("abc", {"type": "accept"})) | 1808 pr = list(data_schema.validate("abc", {"$type": "accept"})) |
| 1809 self.assertEqual(0, len(pr)) | 1809 self.assertEqual(0, len(pr)) |
| 1810 | 1810 |
| 1811 pr = list(data_schema.validate(None, {"type": "accept"})) | 1811 pr = list(data_schema.validate(None, {"$type": "accept"})) |
| 1812 self.assertEqual(0, len(pr)) | 1812 self.assertEqual(0, len(pr)) |
| 1813 | 1813 |
| 1814 def test_null(self): | 1814 def test_null(self): |
| 1815 pr = list(data_schema.validate(None, {"type": "none"})) | 1815 pr = list(data_schema.validate(None, {"$type": "none"})) |
| 1816 self.assertEqual(0, len(pr)) | 1816 self.assertEqual(0, len(pr)) |
| 1817 | 1817 |
| 1818 pr = list(data_schema.validate(None, {"type": "null"})) | 1818 pr = list(data_schema.validate(None, {"$type": "null"})) |
| 1819 self.assertEqual(0, len(pr)) | 1819 self.assertEqual(0, len(pr)) |
| 1820 | 1820 |
| 1821 pr = list(data_schema.validate(None, {"type": "nil"})) | 1821 pr = list(data_schema.validate(None, {"$type": "nil"})) |
| 1822 self.assertEqual(0, len(pr)) | 1822 self.assertEqual(0, len(pr)) |
| 1823 | 1823 |
| 1824 pr = list(data_schema.validate(None, {"type": None})) | 1824 pr = list(data_schema.validate(None, {"$type": None})) |
| 1825 self.assertEqual(0, len(pr)) | 1825 self.assertEqual(0, len(pr)) |
| 1826 | 1826 |
| 1827 pr = list(data_schema.validate({}, {"type": None})) | 1827 pr = list(data_schema.validate({}, {"$type": None})) |
| 1828 self.assertEqual(1, len(pr)) | 1828 self.assertEqual(1, len(pr)) |
| 1829 self.assertEqual(ERRORS.E10011, pr[0].code) | 1829 self.assertEqual(ERRORS.E10011, pr[0].code) |
| 1830 | 1830 |
| 1831 def test_l1(self): | 1831 def test_l1(self): |
| 1832 pr = list(data_schema.validate([], {"type": "list"})) | 1832 pr = list(data_schema.validate([], {"$type": "list"})) |
| 1833 self.assertEqual(0, len(pr)) | 1833 self.assertEqual(0, len(pr)) |
| 1834 | 1834 |
| 1835 pr = list(data_schema.validate(tuple(), {"type": "list"})) | 1835 pr = list(data_schema.validate(tuple(), {"$type": "list"})) |
| 1836 self.assertEqual(0, len(pr)) | 1836 self.assertEqual(0, len(pr)) |
| 1837 | 1837 |
| 1838 def test_l1_not_nullable(self): | 1838 def test_l1_not_nullable(self): |
| 1839 pr = list(data_schema.validate(None, {"type": "list"})) | 1839 pr = list(data_schema.validate(None, {"$type": "list"})) |
| 1840 self.assertEqual(1, len(pr)) | 1840 self.assertEqual(1, len(pr)) |
| 1841 self.assertEqual(ERRORS.E10001, pr[0].code) | 1841 self.assertEqual(ERRORS.E10001, pr[0].code) |
| 1842 | 1842 |
| 1843 def test_l1_nullable(self): | 1843 def test_l1_nullable(self): |
| 1844 pr = list(data_schema.validate( | 1844 pr = list(data_schema.validate( |
| 1845 None, {"type": "list", "nullable": True})) | 1845 None, {"$type": "list", "nullable": True})) |
| 1846 self.assertEqual(0, len(pr)) | 1846 self.assertEqual(0, len(pr)) |
| 1847 | 1847 |
| 1848 def test_l2_default_schema_for_items_is_deny(self): | 1848 def test_l2_default_schema_for_items_is_deny(self): |
| 1849 pr = list(data_schema.validate(["a", "b", "c"], {"type": "list"})) | 1849 pr = list(data_schema.validate(["a", "b", "c"], {"$type": "list"})) |
| 1850 self.assertEqual(3, len(pr)) | 1850 self.assertEqual(3, len(pr)) |
| 1851 for i in range(0, 3): | 1851 for i in range(0, 3): |
| 1852 self.assertEqual(ERRORS.E10010, pr[i].code) | 1852 self.assertEqual(ERRORS.E10010, pr[i].code) |
| 1853 | 1853 |
| 1854 def test_l3_schema_for_items(self): | 1854 def test_l3_schema_for_items(self): |
| 1855 pr = list(data_schema.validate( | 1855 pr = list(data_schema.validate( |
| 1856 ["a", "b", "c"], | 1856 ["a", "b", "c"], |
| 1857 {"type": "array", | 1857 {"$type": "array", |
| 1858 "items": {"type": "string"}})) | 1858 "items": {"$type": "string"}})) |
| 1859 self.assertEqual(0, len(pr)) | 1859 self.assertEqual(0, len(pr)) |
| 1860 | 1860 |
| 1861 def test_t1(self): | 1861 def test_t1(self): |
| 1862 pr = list(data_schema.validate([], {"type": "tuple"})) | 1862 pr = list(data_schema.validate([], {"$type": "tuple"})) |
| 1863 self.assertEqual(0, len(pr)) | 1863 self.assertEqual(0, len(pr)) |
| 1864 | 1864 |
| 1865 pr = list(data_schema.validate(tuple(), {"type": "tuple"})) | 1865 pr = list(data_schema.validate(tuple(), {"$type": "tuple"})) |
| 1866 self.assertEqual(0, len(pr)) | 1866 self.assertEqual(0, len(pr)) |
| 1867 | 1867 |
| 1868 def test_t1_not_nullable(self): | 1868 def test_t1_not_nullable(self): |
| 1869 pr = list(data_schema.validate(None, {"type": "tuple"})) | 1869 pr = list(data_schema.validate(None, {"$type": "tuple"})) |
| 1870 self.assertEqual(1, len(pr)) | 1870 self.assertEqual(1, len(pr)) |
| 1871 self.assertEqual(ERRORS.E10014, pr[0].code) | 1871 self.assertEqual(ERRORS.E10014, pr[0].code) |
| 1872 | 1872 |
| 1873 def test_t1_nullable(self): | 1873 def test_t1_nullable(self): |
| 1874 pr = list(data_schema.validate( | 1874 pr = list(data_schema.validate( |
| 1875 None, {"type": "tuple", "nullable": True})) | 1875 None, {"$type": "tuple", "nullable": True})) |
| 1876 self.assertEqual(0, len(pr)) | 1876 self.assertEqual(0, len(pr)) |
| 1877 | 1877 |
| 1878 def test_t2(self): | 1878 def test_t2(self): |
| 1879 pr = list(data_schema.validate( | 1879 pr = list(data_schema.validate( |
| 1880 ["a", None, {"key": "value"}], | 1880 ["a", None, {"key": "value"}], |
| 1881 {"type": "tuple", | 1881 {"$type": "tuple", |
| 1882 "items": [ | 1882 "items": [ |
| 1883 {"type": "string"}, | 1883 {"$type": "string"}, |
| 1884 {"type": None}, | 1884 {"$type": None}, |
| 1885 {"type": "accept"}]})) | 1885 {"$type": "accept"}]})) |
| 1886 self.assertEqual(0, len(pr)) | 1886 self.assertEqual(0, len(pr)) |
| 1887 | 1887 |
| 1888 def test_t3(self): | 1888 def test_t3(self): |
| 1889 pr = list(data_schema.validate( | 1889 pr = list(data_schema.validate( |
| 1890 ["a", None, {"key": "value"}], | 1890 ["a", None, {"key": "value"}], |
| 1891 {"type": "tuple", | 1891 {"$type": "tuple", |
| 1892 "items": [ | 1892 "items": [ |
| 1893 {"type": "string"}, | 1893 {"$type": "string"}, |
| 1894 {"type": None}, | 1894 {"$type": None}, |
| 1895 {"type": "deny"}]})) | 1895 {"$type": "deny"}]})) |
| 1896 self.assertEqual(1, len(pr)) | 1896 self.assertEqual(1, len(pr)) |
| 1897 self.assertEqual(ERRORS.E10010, pr[0].code) | 1897 self.assertEqual(ERRORS.E10010, pr[0].code) |
| 1898 self.assertEqual(2, pr[0].context.index) | 1898 self.assertEqual(2, pr[0].context.index) |
| 1899 | 1899 |
| 1900 def test_t4(self): | 1900 def test_t4(self): |
| 1901 pr = list(data_schema.validate( | 1901 pr = list(data_schema.validate( |
| 1902 ["a", None, {"key": "value"}], | 1902 ["a", None, {"key": "value"}], |
| 1903 {"type": "tuple", | 1903 {"$type": "tuple", |
| 1904 "items": [ | 1904 "items": [ |
| 1905 {"type": "string"}, | 1905 {"$type": "string"}, |
| 1906 {"type": None}]})) | 1906 {"$type": None}]})) |
| 1907 self.assertEqual(1, len(pr)) | 1907 self.assertEqual(1, len(pr)) |
| 1908 self.assertEqual(ERRORS.E10017, pr[0].code) | 1908 self.assertEqual(ERRORS.E10017, pr[0].code) |
| 1909 self.assertEqual(2, pr[0].context.index) | 1909 self.assertEqual(2, pr[0].context.index) |
| 1910 | 1910 |
| 1911 def test_t5(self): | 1911 def test_t5(self): |
| 1912 pr = list(data_schema.validate( | 1912 pr = list(data_schema.validate( |
| 1913 ["a", None, {"key": "value"}], | 1913 ["a", None, {"key": "value"}], |
| 1914 {"type": "tuple", | 1914 {"$type": "tuple", |
| 1915 "items": [ | 1915 "items": [ |
| 1916 {"type": "string"}, | 1916 {"$type": "string"}, |
| 1917 {"type": None}], | 1917 {"$type": None}], |
| 1918 "additional-items": True})) | 1918 "additional-items": True})) |
| 1919 self.assertEqual(0, len(pr)) | 1919 self.assertEqual(0, len(pr)) |
| 1920 | 1920 |
| 1921 def test_t6(self): | 1921 def test_t6(self): |
| 1922 pr = list(data_schema.validate( | 1922 pr = list(data_schema.validate( |
| 1923 ["a", None, {"key": "value"}, {"key": "value"}], | 1923 ["a", None, {"key": "value"}, {"key": "value"}], |
| 1924 {"type": "tuple", | 1924 {"$type": "tuple", |
| 1925 "items": [ | 1925 "items": [ |
| 1926 {"type": "string"}, | 1926 {"$type": "string"}, |
| 1927 {"type": None}], | 1927 {"$type": None}], |
| 1928 "additional-items": { | 1928 "additional-items": { |
| 1929 "type": "dict", | 1929 "$type": "dict", |
| 1930 "keys": {"key": {"type": "string"}} | 1930 "keys": {"key": {"$type": "string"}} |
| 1931 }})) | 1931 }})) |
| 1932 self.assertEqual(0, len(pr)) | 1932 self.assertEqual(0, len(pr)) |
| 1933 | 1933 |
| 1934 def test_t7(self): | 1934 def test_t7(self): |
| 1935 # do not check anything that exceeds max-length | 1935 # do not check anything that exceeds max-length |
| 1936 pr = list(data_schema.validate( | 1936 pr = list(data_schema.validate( |
| 1937 ["a", None, {"key": "value"}, {"key": "value"}, {"key2": "value"}], | 1937 ["a", None, {"key": "value"}, {"key": "value"}, {"key2": "value"}], |
| 1938 {"type": "tuple", | 1938 {"$type": "tuple", |
| 1939 "max-length": 4, | 1939 "max-length": 4, |
| 1940 "items": [ | 1940 "items": [ |
| 1941 {"type": "string"}, | 1941 {"$type": "string"}, |
| 1942 {"type": None}], | 1942 {"$type": None}], |
| 1943 "additional-items": { | 1943 "additional-items": { |
| 1944 "type": "dict", | 1944 "$type": "dict", |
| 1945 "keys": {"key": {"type": "string"}} | 1945 "keys": {"key": {"$type": "string"}} |
| 1946 }})) | 1946 }})) |
| 1947 self.assertEqual(1, len(pr)) | 1947 self.assertEqual(1, len(pr)) |
| 1948 self.assertEqual(ERRORS.E10016, pr[0].code) | 1948 self.assertEqual(ERRORS.E10016, pr[0].code) |
| 1949 | 1949 |
| 1950 def test_t8(self): | 1950 def test_t8(self): |
| 1951 # do not check anything that exceeds max-length | 1951 # do not check anything that exceeds max-length |
| 1952 pr = list(data_schema.validate( | 1952 pr = list(data_schema.validate( |
| 1953 ["a", None, {"key": "value"}, {"key": "value"}, {"key2": "value"}], | 1953 ["a", None, {"key": "value"}, {"key": "value"}, {"key2": "value"}], |
| 1954 {"type": "tuple", | 1954 {"$type": "tuple", |
| 1955 "min-length": 6, | 1955 "min-length": 6, |
| 1956 "max-length": 4, | 1956 "max-length": 4, |
| 1957 "items": [ | 1957 "items": [ |
| 1958 {"type": "string"}, | 1958 {"$type": "string"}, |
| 1959 {"type": None}], | 1959 {"$type": None}], |
| 1960 "additional-items": { | 1960 "additional-items": { |
| 1961 "type": "dict", | 1961 "$type": "dict", |
| 1962 "keys": {"key": {"type": "string"}} | 1962 "keys": {"key": {"$type": "string"}} |
| 1963 }})) | 1963 }})) |
| 1964 self.assertEqual(2, len(pr)) | 1964 self.assertEqual(2, len(pr)) |
| 1965 self.assertEqual(ERRORS.E10015, pr[0].code) | 1965 self.assertEqual(ERRORS.E10015, pr[0].code) |
| 1966 self.assertEqual(ERRORS.E10016, pr[1].code) | 1966 self.assertEqual(ERRORS.E10016, pr[1].code) |
| 1967 | 1967 |
| 1968 def test_set1(self): | 1968 def test_set1(self): |
| 1969 # do not check anything that exceeds max-length | 1969 # do not check anything that exceeds max-length |
| 1970 pr = list(data_schema.validate( | 1970 pr = list(data_schema.validate( |
| 1971 set(["a", None, "b"]), | 1971 set(["a", None, "b"]), |
| 1972 {"type": "set", | 1972 {"$type": "set", |
| 1973 "min-length": 3, | 1973 "min-length": 3, |
| 1974 "items": {"any-of": [ | 1974 "items": {"any-of": [ |
| 1975 {"type": "string"}, | 1975 {"$type": "string"}, |
| 1976 {"type": None}]}} | 1976 {"$type": None}]}} |
| 1977 )) | 1977 )) |
| 1978 self.assertEqual(0, len(pr)) | 1978 self.assertEqual(0, len(pr)) |
| 1979 | 1979 |
| 1980 def test_set1_not_nullable(self): | 1980 def test_set1_not_nullable(self): |
| 1981 # do not check anything that exceeds max-length | 1981 # do not check anything that exceeds max-length |
| 1982 pr = list(data_schema.validate( | 1982 pr = list(data_schema.validate( |
| 1983 None, | 1983 None, |
| 1984 {"type": "set"})) | 1984 {"$type": "set"})) |
| 1985 self.assertEqual(1, len(pr)) | 1985 self.assertEqual(1, len(pr)) |
| 1986 self.assertEqual(ERRORS.E10038, pr[0].code) | 1986 self.assertEqual(ERRORS.E10038, pr[0].code) |
| 1987 | 1987 |
| 1988 def test_set1_nullable(self): | 1988 def test_set1_nullable(self): |
| 1989 # do not check anything that exceeds max-length | 1989 # do not check anything that exceeds max-length |
| 1990 pr = list(data_schema.validate( | 1990 pr = list(data_schema.validate( |
| 1991 None, | 1991 None, |
| 1992 {"type": "set", "nullable": True})) | 1992 {"$type": "set", "nullable": True})) |
| 1993 self.assertEqual(0, len(pr)) | 1993 self.assertEqual(0, len(pr)) |
| 1994 | 1994 |
| 1995 def test_set2(self): | 1995 def test_set2(self): |
| 1996 # do not check anything that exceeds max-length | 1996 # do not check anything that exceeds max-length |
| 1997 pr = list(data_schema.validate( | 1997 pr = list(data_schema.validate( |
| 1998 set(["a", None, "b"]), | 1998 set(["a", None, "b"]), |
| 1999 {"type": "set", | 1999 {"$type": "set", |
| 2000 "min-length": 4, | 2000 "min-length": 4, |
| 2001 "items": {"any-of": [ | 2001 "items": {"any-of": [ |
| 2002 {"type": "string"}, | 2002 {"$type": "string"}, |
| 2003 {"type": None}]}} | 2003 {"$type": None}]}} |
| 2004 )) | 2004 )) |
| 2005 self.assertEqual(1, len(pr)) | 2005 self.assertEqual(1, len(pr)) |
| 2006 self.assertEqual(ERRORS.E10039, pr[0].code) | 2006 self.assertEqual(ERRORS.E10039, pr[0].code) |
| 2007 | 2007 |
| 2008 def test_set3(self): | 2008 def test_set3(self): |
| 2009 # do not check anything that exceeds max-length | 2009 # do not check anything that exceeds max-length |
| 2010 pr = list(data_schema.validate( | 2010 pr = list(data_schema.validate( |
| 2011 set(["a", None, "b"]), | 2011 set(["a", None, "b"]), |
| 2012 {"type": "set", | 2012 {"$type": "set", |
| 2013 "max-length": 2, | 2013 "max-length": 2, |
| 2014 "items": {"any-of": [ | 2014 "items": {"any-of": [ |
| 2015 {"type": "string"}, | 2015 {"$type": "string"}, |
| 2016 {"type": None}]}} | 2016 {"$type": None}]}} |
| 2017 )) | 2017 )) |
| 2018 self.assertEqual(1, len(pr)) | 2018 self.assertEqual(1, len(pr)) |
| 2019 self.assertEqual(ERRORS.E10040, pr[0].code) | 2019 self.assertEqual(ERRORS.E10040, pr[0].code) |
| 2020 | 2020 |
| 2021 def test_set4_itemschema(self): | 2021 def test_set4_itemschema(self): |
| 2022 pr = list(data_schema.validate( | 2022 pr = list(data_schema.validate( |
| 2023 set(["a", None, "b"]), | 2023 set(["a", None, "b"]), |
| 2024 {"type": "set", | 2024 {"$type": "set", |
| 2025 "items": {"any-of": [ | 2025 "items": {"any-of": [ |
| 2026 {"type": "string"}, | 2026 {"$type": "string"}, |
| 2027 {"type": "int"}]}} | 2027 {"$type": "int"}]}} |
| 2028 )) | 2028 )) |
| 2029 codes = set([p.code for p in pr]) | 2029 codes = set([p.code for p in pr]) |
| 2030 | 2030 |
| 2031 self.assertEqual(1, len(pr)) | 2031 self.assertEqual(1, len(pr)) |
| 2032 self.assertEqual(ERRORS.E10055, pr[0].code) | 2032 self.assertEqual(ERRORS.E10055, pr[0].code) |
| 2037 self.assertEqual(ERRORS.E10056, pr[0].cause[1].code) | 2037 self.assertEqual(ERRORS.E10056, pr[0].cause[1].code) |
| 2038 self.assertEqual(1, len(pr[0].cause[1].cause)) | 2038 self.assertEqual(1, len(pr[0].cause[1].cause)) |
| 2039 self.assertEqual(ERRORS.E10020, pr[0].cause[1].cause[0].code) | 2039 self.assertEqual(ERRORS.E10020, pr[0].cause[1].cause[0].code) |
| 2040 | 2040 |
| 2041 def test_empty(self): | 2041 def test_empty(self): |
| 2042 pr = list(data_schema.validate(None, {"type": "empty"})) | 2042 pr = list(data_schema.validate(None, {"$type": "empty"})) |
| 2043 self.assertEqual(0, len(pr)) | 2043 self.assertEqual(0, len(pr)) |
| 2044 | 2044 |
| 2045 pr = list(data_schema.validate([], {"type": "empty"})) | 2045 pr = list(data_schema.validate([], {"$type": "empty"})) |
| 2046 self.assertEqual(0, len(pr)) | 2046 self.assertEqual(0, len(pr)) |
| 2047 | 2047 |
| 2048 pr = list(data_schema.validate(["a"], {"type": "empty"})) | 2048 pr = list(data_schema.validate(["a"], {"$type": "empty"})) |
| 2049 self.assertEqual(1, len(pr)) | 2049 self.assertEqual(1, len(pr)) |
| 2050 self.assertEqual(ERRORS.E10018, pr[0].code) | 2050 self.assertEqual(ERRORS.E10018, pr[0].code) |
| 2051 | 2051 |
| 2052 pr = list(data_schema.validate(tuple(), {"type": "empty"})) | 2052 pr = list(data_schema.validate(tuple(), {"$type": "empty"})) |
| 2053 self.assertEqual(0, len(pr)) | 2053 self.assertEqual(0, len(pr)) |
| 2054 | 2054 |
| 2055 pr = list(data_schema.validate(set(), {"type": "empty"})) | 2055 pr = list(data_schema.validate(set(), {"$type": "empty"})) |
| 2056 self.assertEqual(0, len(pr)) | 2056 self.assertEqual(0, len(pr)) |
| 2057 | 2057 |
| 2058 pr = list(data_schema.validate(frozenset(), {"type": "empty"})) | 2058 pr = list(data_schema.validate(frozenset(), {"$type": "empty"})) |
| 2059 self.assertEqual(0, len(pr)) | 2059 self.assertEqual(0, len(pr)) |
| 2060 | 2060 |
| 2061 pr = list(data_schema.validate(tuple(["a"]), {"type": "empty"})) | 2061 pr = list(data_schema.validate(tuple(["a"]), {"$type": "empty"})) |
| 2062 self.assertEqual(1, len(pr)) | 2062 self.assertEqual(1, len(pr)) |
| 2063 self.assertEqual(ERRORS.E10018, pr[0].code) | 2063 self.assertEqual(ERRORS.E10018, pr[0].code) |
| 2064 | 2064 |
| 2065 pr = list(data_schema.validate({}, {"type": "empty"})) | 2065 pr = list(data_schema.validate({}, {"$type": "empty"})) |
| 2066 self.assertEqual(0, len(pr)) | 2066 self.assertEqual(0, len(pr)) |
| 2067 | 2067 |
| 2068 pr = list(data_schema.validate({"key": "value"}, {"type": "empty"})) | 2068 pr = list(data_schema.validate({"key": "value"}, {"$type": "empty"})) |
| 2069 self.assertEqual(1, len(pr)) | 2069 self.assertEqual(1, len(pr)) |
| 2070 self.assertEqual(ERRORS.E10018, pr[0].code) | 2070 self.assertEqual(ERRORS.E10018, pr[0].code) |
| 2071 | 2071 |
| 2072 pr = list(data_schema.validate("", {"type": "empty"})) | 2072 pr = list(data_schema.validate("", {"$type": "empty"})) |
| 2073 self.assertEqual(1, len(pr)) | 2073 self.assertEqual(1, len(pr)) |
| 2074 self.assertEqual(ERRORS.E10018, pr[0].code) | 2074 self.assertEqual(ERRORS.E10018, pr[0].code) |
| 2075 | 2075 |
| 2076 def test_allOf(self): | 2076 def test_allOf(self): |
| 2077 pr = list(data_schema.validate( | 2077 pr = list(data_schema.validate( |
| 2078 None, | 2078 None, |
| 2079 {"type": { | 2079 {"$type": { |
| 2080 "all-of": [ | 2080 "all-of": [ |
| 2081 {"type": None}, | 2081 {"$type": None}, |
| 2082 {"type": "accept"}, | 2082 {"$type": "accept"}, |
| 2083 ] | 2083 ] |
| 2084 }})) | 2084 }})) |
| 2085 self.assertEqual(0, len(pr)) | 2085 self.assertEqual(0, len(pr)) |
| 2086 | 2086 |
| 2087 pr = list(data_schema.validate( | 2087 pr = list(data_schema.validate( |
| 2088 None, | 2088 None, |
| 2089 {"type": { | 2089 {"$type": { |
| 2090 "all-of": [ | 2090 "all-of": [ |
| 2091 {"type": None}, | 2091 {"$type": None}, |
| 2092 {"type": "accept"}, | 2092 {"$type": "accept"}, |
| 2093 {"type": "deny"}, | 2093 {"$type": "deny"}, |
| 2094 ] | 2094 ] |
| 2095 }})) | 2095 }})) |
| 2096 self.assertEqual(1, len(pr)) | 2096 self.assertEqual(1, len(pr)) |
| 2097 self.assertEqual(ERRORS.E10057, pr[0].code) | 2097 self.assertEqual(ERRORS.E10057, pr[0].code) |
| 2098 self.assertEqual(1, len(pr[0].cause)) | 2098 self.assertEqual(1, len(pr[0].cause)) |
| 2101 self.assertEqual(ERRORS.E10010, pr[0].cause[0].cause[0].code) | 2101 self.assertEqual(ERRORS.E10010, pr[0].cause[0].cause[0].code) |
| 2102 | 2102 |
| 2103 def test_anyOf(self): | 2103 def test_anyOf(self): |
| 2104 pr = list(data_schema.validate( | 2104 pr = list(data_schema.validate( |
| 2105 None, | 2105 None, |
| 2106 {"type": { | 2106 {"$type": { |
| 2107 "any-of": [ | 2107 "any-of": [ |
| 2108 {"type": "deny"}, | 2108 {"$type": "deny"}, |
| 2109 {"type": None}, | 2109 {"$type": None}, |
| 2110 ] | 2110 ] |
| 2111 }})) | 2111 }})) |
| 2112 self.assertEqual(0, len(pr)) | 2112 self.assertEqual(0, len(pr)) |
| 2113 | 2113 |
| 2114 pr = list(data_schema.validate( | 2114 pr = list(data_schema.validate( |
| 2115 None, | 2115 None, |
| 2116 {"type": { | 2116 {"$type": { |
| 2117 "any-of": [ | 2117 "any-of": [ |
| 2118 {"type": "string"}, | 2118 {"$type": "string"}, |
| 2119 {"type": "deny"}, | 2119 {"$type": "deny"}, |
| 2120 ] | 2120 ] |
| 2121 }})) | 2121 }})) |
| 2122 self.assertEqual(1, len(pr)) | 2122 self.assertEqual(1, len(pr)) |
| 2123 self.assertEqual(ERRORS.E10055, pr[0].code) | 2123 self.assertEqual(ERRORS.E10055, pr[0].code) |
| 2124 self.assertEqual(2, len(pr[0].cause)) | 2124 self.assertEqual(2, len(pr[0].cause)) |
| 2130 self.assertEqual(ERRORS.E10010, pr[0].cause[1].cause[0].code) | 2130 self.assertEqual(ERRORS.E10010, pr[0].cause[1].cause[0].code) |
| 2131 | 2131 |
| 2132 def test_anyOf_with_list(self): | 2132 def test_anyOf_with_list(self): |
| 2133 pr = list(data_schema.validate( | 2133 pr = list(data_schema.validate( |
| 2134 None, | 2134 None, |
| 2135 {"type": [ | 2135 {"$type": [ |
| 2136 {"type": "deny"}, | 2136 {"$type": "deny"}, |
| 2137 {"type": None}, | 2137 {"$type": None}, |
| 2138 ]})) | 2138 ]})) |
| 2139 self.assertEqual(0, len(pr)) | 2139 self.assertEqual(0, len(pr)) |
| 2140 | 2140 |
| 2141 pr = list(data_schema.validate( | 2141 pr = list(data_schema.validate( |
| 2142 None, | 2142 None, |
| 2143 {"type": [ | 2143 {"$type": [ |
| 2144 {"type": "string"}, | 2144 {"$type": "string"}, |
| 2145 {"type": "deny"}, | 2145 {"$type": "deny"}, |
| 2146 ]})) | 2146 ]})) |
| 2147 self.assertEqual(1, len(pr)) | 2147 self.assertEqual(1, len(pr)) |
| 2148 self.assertEqual(ERRORS.E10055, pr[0].code) | 2148 self.assertEqual(ERRORS.E10055, pr[0].code) |
| 2149 self.assertEqual(2, len(pr[0].cause)) | 2149 self.assertEqual(2, len(pr[0].cause)) |
| 2150 self.assertEqual(ERRORS.E10056, pr[0].cause[0].code) | 2150 self.assertEqual(ERRORS.E10056, pr[0].cause[0].code) |
| 2155 self.assertEqual(ERRORS.E10010, pr[0].cause[1].cause[0].code) | 2155 self.assertEqual(ERRORS.E10010, pr[0].cause[1].cause[0].code) |
| 2156 | 2156 |
| 2157 def test_oneOf(self): | 2157 def test_oneOf(self): |
| 2158 pr = list(data_schema.validate( | 2158 pr = list(data_schema.validate( |
| 2159 None, | 2159 None, |
| 2160 {"type": { | 2160 {"$type": { |
| 2161 "one-of": [ | 2161 "one-of": [ |
| 2162 {"type": "deny"}, | 2162 {"$type": "deny"}, |
| 2163 {"type": None}, | 2163 {"$type": None}, |
| 2164 ] | 2164 ] |
| 2165 }})) | 2165 }})) |
| 2166 self.assertEqual(0, len(pr)) | 2166 self.assertEqual(0, len(pr)) |
| 2167 | 2167 |
| 2168 pr = list(data_schema.validate( | 2168 pr = list(data_schema.validate( |
| 2169 None, | 2169 None, |
| 2170 {"type": { | 2170 {"$type": { |
| 2171 "one-of": [ | 2171 "one-of": [ |
| 2172 {"type": "string"}, | 2172 {"$type": "string"}, |
| 2173 {"type": "deny"}, | 2173 {"$type": "deny"}, |
| 2174 ] | 2174 ] |
| 2175 }})) | 2175 }})) |
| 2176 | 2176 |
| 2177 self.assertEqual(1, len(pr)) | 2177 self.assertEqual(1, len(pr)) |
| 2178 self.assertEqual(ERRORS.E10053, pr[0].code) | 2178 self.assertEqual(ERRORS.E10053, pr[0].code) |
| 2184 self.assertEqual(1, len(pr[0].cause[1].cause)) | 2184 self.assertEqual(1, len(pr[0].cause[1].cause)) |
| 2185 self.assertEqual(ERRORS.E10010, pr[0].cause[1].cause[0].code) | 2185 self.assertEqual(ERRORS.E10010, pr[0].cause[1].cause[0].code) |
| 2186 | 2186 |
| 2187 pr = list(data_schema.validate( | 2187 pr = list(data_schema.validate( |
| 2188 None, | 2188 None, |
| 2189 {"type": { | 2189 {"$type": { |
| 2190 "one-of": [ | 2190 "one-of": [ |
| 2191 {"type": "string"}, | 2191 {"$type": "string"}, |
| 2192 {"type": "deny"}, | 2192 {"$type": "deny"}, |
| 2193 {"type": "empty"}, | 2193 {"$type": "empty"}, |
| 2194 {"type": None}, | 2194 {"$type": None}, |
| 2195 ] | 2195 ] |
| 2196 }})) | 2196 }})) |
| 2197 self.assertEqual(1, len(pr)) | 2197 self.assertEqual(1, len(pr)) |
| 2198 self.assertEqual(ERRORS.E10019, pr[0].code) | 2198 self.assertEqual(ERRORS.E10019, pr[0].code) |
| 2199 self.assertEqual("2,3", pr[0].hint) | 2199 self.assertEqual("2,3", pr[0].hint) |
| 2200 | 2200 |
| 2201 def test_not(self): | 2201 def test_not(self): |
| 2202 pr = list(data_schema.validate( | 2202 pr = list(data_schema.validate( |
| 2203 None, | 2203 None, |
| 2204 {"type": { | 2204 {"$type": { |
| 2205 "not": { | 2205 "not": { |
| 2206 "type": "empty"}}})) | 2206 "$type": "empty"}}})) |
| 2207 self.assertEqual(1, len(pr)) | 2207 self.assertEqual(1, len(pr)) |
| 2208 self.assertEqual(ERRORS.E10029, pr[0].code) | 2208 self.assertEqual(ERRORS.E10029, pr[0].code) |
| 2209 | 2209 |
| 2210 pr = list(data_schema.validate( | 2210 pr = list(data_schema.validate( |
| 2211 None, | 2211 None, |
| 2212 {"type": { | 2212 {"$type": { |
| 2213 "not": { | 2213 "not": { |
| 2214 "type": { | 2214 "$type": { |
| 2215 "not": { | 2215 "not": { |
| 2216 "type": "empty"}}}}})) | 2216 "$type": "empty"}}}}})) |
| 2217 self.assertEqual(0, len(pr)) | 2217 self.assertEqual(0, len(pr)) |
| 2218 | 2218 |
| 2219 pr = list(data_schema.validate( | 2219 pr = list(data_schema.validate( |
| 2220 2, | 2220 2, |
| 2221 {"type": { | 2221 {"$type": { |
| 2222 "not": { | 2222 "not": { |
| 2223 "type": "int"}}})) | 2223 "$type": "int"}}})) |
| 2224 self.assertEqual(1, len(pr)) | 2224 self.assertEqual(1, len(pr)) |
| 2225 self.assertEqual(ERRORS.E10029, pr[0].code) | 2225 self.assertEqual(ERRORS.E10029, pr[0].code) |
| 2226 | 2226 |
| 2227 pr = list(data_schema.validate( | 2227 pr = list(data_schema.validate( |
| 2228 1, | 2228 1, |
| 2229 {"type": { | 2229 {"$type": { |
| 2230 "not": { | 2230 "not": { |
| 2231 "type": { | 2231 "$type": { |
| 2232 "not": { | 2232 "not": { |
| 2233 "type": "int"}}}}})) | 2233 "$type": "int"}}}}})) |
| 2234 self.assertEqual(0, len(pr)) | 2234 self.assertEqual(0, len(pr)) |
| 2235 | 2235 |
| 2236 pr = list(data_schema.validate( | 2236 pr = list(data_schema.validate( |
| 2237 2.0, | 2237 2.0, |
| 2238 {"type": { | 2238 {"$type": { |
| 2239 "not": { | 2239 "not": { |
| 2240 "type": "int"}}})) | 2240 "$type": "int"}}})) |
| 2241 self.assertEqual(0, len(pr)) | 2241 self.assertEqual(0, len(pr)) |
| 2242 | 2242 |
| 2243 def test_not_shortcut(self): | 2243 def test_not_shortcut(self): |
| 2244 pr = list(data_schema.validate( | 2244 pr = list(data_schema.validate( |
| 2245 None, | 2245 None, |
| 2246 {"not": { | 2246 {"not": { |
| 2247 "type": "empty"}})) | 2247 "$type": "empty"}})) |
| 2248 self.assertEqual(1, len(pr)) | 2248 self.assertEqual(1, len(pr)) |
| 2249 self.assertEqual(ERRORS.E10029, pr[0].code) | 2249 self.assertEqual(ERRORS.E10029, pr[0].code) |
| 2250 | 2250 |
| 2251 pr = list(data_schema.validate( | 2251 pr = list(data_schema.validate( |
| 2252 None, | 2252 None, |
| 2253 {"not": { | 2253 {"not": { |
| 2254 "not": { | 2254 "not": { |
| 2255 "type": "empty"}}})) | 2255 "$type": "empty"}}})) |
| 2256 self.assertEqual(0, len(pr)) | 2256 self.assertEqual(0, len(pr)) |
| 2257 | 2257 |
| 2258 pr = list(data_schema.validate( | 2258 pr = list(data_schema.validate( |
| 2259 2, | 2259 2, |
| 2260 {"not": { | 2260 {"not": { |
| 2261 "type": "int"}})) | 2261 "$type": "int"}})) |
| 2262 self.assertEqual(1, len(pr)) | 2262 self.assertEqual(1, len(pr)) |
| 2263 self.assertEqual(ERRORS.E10029, pr[0].code) | 2263 self.assertEqual(ERRORS.E10029, pr[0].code) |
| 2264 | 2264 |
| 2265 pr = list(data_schema.validate( | 2265 pr = list(data_schema.validate( |
| 2266 1, | 2266 1, |
| 2267 {"not": { | 2267 {"not": { |
| 2268 "not": { | 2268 "not": { |
| 2269 "type": "int"}}})) | 2269 "$type": "int"}}})) |
| 2270 self.assertEqual(0, len(pr)) | 2270 self.assertEqual(0, len(pr)) |
| 2271 | 2271 |
| 2272 pr = list(data_schema.validate( | 2272 pr = list(data_schema.validate( |
| 2273 2.0, | 2273 2.0, |
| 2274 {"not": { | 2274 {"not": { |
| 2275 "type": "int"}})) | 2275 "$type": "int"}})) |
| 2276 self.assertEqual(0, len(pr)) | 2276 self.assertEqual(0, len(pr)) |
| 2277 | 2277 |
| 2278 def test_integer(self): | 2278 def test_integer(self): |
| 2279 pr = list(data_schema.validate(1, {"type": "integer"})) | 2279 pr = list(data_schema.validate(1, {"$type": "integer"})) |
| 2280 self.assertEqual(0, len(pr)) | 2280 self.assertEqual(0, len(pr)) |
| 2281 | 2281 |
| 2282 pr = list(data_schema.validate(1, {"type": "float"})) | 2282 pr = list(data_schema.validate(1, {"$type": "float"})) |
| 2283 self.assertEqual(1, len(pr)) | 2283 self.assertEqual(1, len(pr)) |
| 2284 self.assertEqual(ERRORS.E10023, pr[0].code) | 2284 self.assertEqual(ERRORS.E10023, pr[0].code) |
| 2285 | 2285 |
| 2286 pr = list(data_schema.validate( | 2286 pr = list(data_schema.validate( |
| 2287 2, | 2287 2, |
| 2288 {"type": "int", | 2288 {"$type": "int", |
| 2289 "min-value": 3, | 2289 "min-value": 3, |
| 2290 "max-value": 1})) | 2290 "max-value": 1})) |
| 2291 | 2291 |
| 2292 self.assertEqual(2, len(pr)) | 2292 self.assertEqual(2, len(pr)) |
| 2293 self.assertEqual(ERRORS.E10021, pr[0].code) | 2293 self.assertEqual(ERRORS.E10021, pr[0].code) |
| 2294 self.assertEqual(ERRORS.E10022, pr[1].code) | 2294 self.assertEqual(ERRORS.E10022, pr[1].code) |
| 2295 | 2295 |
| 2296 def test_float(self): | 2296 def test_float(self): |
| 2297 pr = list(data_schema.validate(1.8, {"type": "float"})) | 2297 pr = list(data_schema.validate(1.8, {"$type": "float"})) |
| 2298 self.assertEqual(0, len(pr)) | 2298 self.assertEqual(0, len(pr)) |
| 2299 | 2299 |
| 2300 pr = list(data_schema.validate(1, {"type": "float"})) | 2300 pr = list(data_schema.validate(1, {"$type": "float"})) |
| 2301 self.assertEqual(1, len(pr)) | 2301 self.assertEqual(1, len(pr)) |
| 2302 self.assertEqual(ERRORS.E10023, pr[0].code) | 2302 self.assertEqual(ERRORS.E10023, pr[0].code) |
| 2303 | 2303 |
| 2304 pr = list(data_schema.validate( | 2304 pr = list(data_schema.validate( |
| 2305 2.0, | 2305 2.0, |
| 2306 {"type": "real", | 2306 {"$type": "real", |
| 2307 "min-value": 2.1, | 2307 "min-value": 2.1, |
| 2308 "max-value": 1.9})) | 2308 "max-value": 1.9})) |
| 2309 | 2309 |
| 2310 self.assertEqual(2, len(pr)) | 2310 self.assertEqual(2, len(pr)) |
| 2311 self.assertEqual(ERRORS.E10024, pr[0].code) | 2311 self.assertEqual(ERRORS.E10024, pr[0].code) |
| 2312 self.assertEqual(ERRORS.E10025, pr[1].code) | 2312 self.assertEqual(ERRORS.E10025, pr[1].code) |
| 2313 | 2313 |
| 2314 def test_number(self): | 2314 def test_number(self): |
| 2315 pr = list(data_schema.validate(1.8, {"type": "number"})) | 2315 pr = list(data_schema.validate(1.8, {"$type": "number"})) |
| 2316 self.assertEqual(0, len(pr)) | 2316 self.assertEqual(0, len(pr)) |
| 2317 pr = list(data_schema.validate(1, {"type": "num"})) | 2317 pr = list(data_schema.validate(1, {"$type": "num"})) |
| 2318 self.assertEqual(0, len(pr)) | 2318 self.assertEqual(0, len(pr)) |
| 2319 | 2319 |
| 2320 pr = list(data_schema.validate( | 2320 pr = list(data_schema.validate( |
| 2321 2.0, | 2321 2.0, |
| 2322 {"type": "number", | 2322 {"$type": "number", |
| 2323 "min-value": 3, | 2323 "min-value": 3, |
| 2324 "max-value": 1.3})) | 2324 "max-value": 1.3})) |
| 2325 | 2325 |
| 2326 self.assertEqual(2, len(pr)) | 2326 self.assertEqual(2, len(pr)) |
| 2327 self.assertEqual(ERRORS.E10031, pr[0].code) | 2327 self.assertEqual(ERRORS.E10031, pr[0].code) |
| 2328 self.assertEqual(ERRORS.E10032, pr[1].code) | 2328 self.assertEqual(ERRORS.E10032, pr[1].code) |
| 2329 | 2329 |
| 2330 pr = list(data_schema.validate({}, {"type": "number"})) | 2330 pr = list(data_schema.validate({}, {"$type": "number"})) |
| 2331 self.assertEqual(1, len(pr)) | 2331 self.assertEqual(1, len(pr)) |
| 2332 self.assertEqual(ERRORS.E10030, pr[0].code) | 2332 self.assertEqual(ERRORS.E10030, pr[0].code) |
| 2333 | 2333 |
| 2334 def test_bool(self): | 2334 def test_bool(self): |
| 2335 pr = list(data_schema.validate(True, {"type": "bool"})) | 2335 pr = list(data_schema.validate(True, {"$type": "bool"})) |
| 2336 self.assertEqual(0, len(pr)) | 2336 self.assertEqual(0, len(pr)) |
| 2337 | 2337 |
| 2338 pr = list(data_schema.validate(True, {"type": "boolean", | 2338 pr = list(data_schema.validate(True, {"$type": "boolean", |
| 2339 "value": True})) | 2339 "value": True})) |
| 2340 self.assertEqual(0, len(pr)) | 2340 self.assertEqual(0, len(pr)) |
| 2341 | 2341 |
| 2342 pr = list(data_schema.validate(True, {"type": "boolean", | 2342 pr = list(data_schema.validate(True, {"$type": "boolean", |
| 2343 "value": False})) | 2343 "value": False})) |
| 2344 self.assertEqual(1, len(pr)) | 2344 self.assertEqual(1, len(pr)) |
| 2345 self.assertEqual(ERRORS.E10028, pr[0].code) | 2345 self.assertEqual(ERRORS.E10028, pr[0].code) |
| 2346 | 2346 |
| 2347 pr = list(data_schema.validate(False, {"type": "boolean"})) | 2347 pr = list(data_schema.validate(False, {"$type": "boolean"})) |
| 2348 self.assertEqual(0, len(pr)) | 2348 self.assertEqual(0, len(pr)) |
| 2349 | 2349 |
| 2350 pr = list(data_schema.validate(False, {"type": "boolean", | 2350 pr = list(data_schema.validate(False, {"$type": "boolean", |
| 2351 "value": False})) | 2351 "value": False})) |
| 2352 self.assertEqual(0, len(pr)) | 2352 self.assertEqual(0, len(pr)) |
| 2353 | 2353 |
| 2354 pr = list(data_schema.validate(False, {"type": "boolean", | 2354 pr = list(data_schema.validate(False, {"$type": "boolean", |
| 2355 "value": True})) | 2355 "value": True})) |
| 2356 self.assertEqual(1, len(pr)) | 2356 self.assertEqual(1, len(pr)) |
| 2357 self.assertEqual(ERRORS.E10027, pr[0].code) | 2357 self.assertEqual(ERRORS.E10027, pr[0].code) |
| 2358 | 2358 |
| 2359 def test_bool_real(self): | 2359 def test_bool_real(self): |
| 2360 pr = list(data_schema.validate([1, 2], {"type": "bool"})) | 2360 pr = list(data_schema.validate([1, 2], {"$type": "bool"})) |
| 2361 self.assertEqual(1, len(pr)) | 2361 self.assertEqual(1, len(pr)) |
| 2362 self.assertEqual(ERRORS.E10026, pr[0].code) | 2362 self.assertEqual(ERRORS.E10026, pr[0].code) |
| 2363 | 2363 |
| 2364 pr = list(data_schema.validate([], {"type": "bool"})) | 2364 pr = list(data_schema.validate([], {"$type": "bool"})) |
| 2365 self.assertEqual(1, len(pr)) | 2365 self.assertEqual(1, len(pr)) |
| 2366 self.assertEqual(ERRORS.E10026, pr[0].code) | 2366 self.assertEqual(ERRORS.E10026, pr[0].code) |
| 2367 | 2367 |
| 2368 pr = list(data_schema.validate(None, {"type": "bool"})) | 2368 pr = list(data_schema.validate(None, {"$type": "bool"})) |
| 2369 self.assertEqual(1, len(pr)) | 2369 self.assertEqual(1, len(pr)) |
| 2370 self.assertEqual(ERRORS.E10026, pr[0].code) | 2370 self.assertEqual(ERRORS.E10026, pr[0].code) |
| 2371 | 2371 |
| 2372 @staticmethod | 2372 @staticmethod |
| 2373 def _check_value_ts(obj, schema, context): | 2373 def _check_value_ts(obj, schema, context): |
| 2376 code=ERRORS.E10042, hint=obj, context=context) | 2376 code=ERRORS.E10042, hint=obj, context=context) |
| 2377 | 2377 |
| 2378 def test_timestamp(self): | 2378 def test_timestamp(self): |
| 2379 pr = list(data_schema.validate( | 2379 pr = list(data_schema.validate( |
| 2380 datetime.datetime.utcnow(), | 2380 datetime.datetime.utcnow(), |
| 2381 {"type": "timestamp"})) | 2381 {"$type": "timestamp"})) |
| 2382 | 2382 |
| 2383 pr = list(data_schema.validate( | 2383 pr = list(data_schema.validate( |
| 2384 datetime.datetime.fromtimestamp(180000), | 2384 datetime.datetime.fromtimestamp(180000), |
| 2385 {"type": "datetime", | 2385 {"$type": "datetime", |
| 2386 "value": self._check_value_ts})) | 2386 "value": self._check_value_ts})) |
| 2387 self.assertEqual(0, len(pr)) | 2387 self.assertEqual(0, len(pr)) |
| 2388 | 2388 |
| 2389 pr = list(data_schema.validate( | 2389 pr = list(data_schema.validate( |
| 2390 datetime.datetime.fromtimestamp(0), | 2390 datetime.datetime.fromtimestamp(0), |
| 2391 {"type": "datetime", | 2391 {"$type": "datetime", |
| 2392 "value": self._check_value_ts})) | 2392 "value": self._check_value_ts})) |
| 2393 self.assertEqual(1, len(pr)) | 2393 self.assertEqual(1, len(pr)) |
| 2394 self.assertEqual(ERRORS.E10042, pr[0].code) | 2394 self.assertEqual(ERRORS.E10042, pr[0].code) |
| 2395 | 2395 |
| 2396 def test_scalar(self): | 2396 def test_scalar(self): |
| 2397 pr = list(data_schema.validate(1, {"type": "scalar"})) | 2397 pr = list(data_schema.validate(1, {"$type": "scalar"})) |
| 2398 self.assertEqual(0, len(pr)) | 2398 self.assertEqual(0, len(pr)) |
| 2399 | 2399 |
| 2400 pr = list(data_schema.validate("", {"type": "scalar"})) | 2400 pr = list(data_schema.validate("", {"$type": "scalar"})) |
| 2401 self.assertEqual(0, len(pr)) | 2401 self.assertEqual(0, len(pr)) |
| 2402 | 2402 |
| 2403 pr = list(data_schema.validate(False, {"type": "scalar"})) | 2403 pr = list(data_schema.validate(False, {"$type": "scalar"})) |
| 2404 self.assertEqual(0, len(pr)) | 2404 self.assertEqual(0, len(pr)) |
| 2405 | 2405 |
| 2406 pr = list(data_schema.validate(datetime.datetime.utcnow(), | 2406 pr = list(data_schema.validate(datetime.datetime.utcnow(), |
| 2407 {"type": "scalar"})) | 2407 {"$type": "scalar"})) |
| 2408 self.assertEqual(0, len(pr)) | 2408 self.assertEqual(0, len(pr)) |
| 2409 | 2409 |
| 2410 pr = list(data_schema.validate(None, {"type": "scalar"})) | 2410 pr = list(data_schema.validate(None, {"$type": "scalar"})) |
| 2411 self.assertEqual(1, len(pr)) | 2411 self.assertEqual(1, len(pr)) |
| 2412 self.assertEqual(ERRORS.E10033, pr[0].code) | 2412 self.assertEqual(ERRORS.E10033, pr[0].code) |
| 2413 | 2413 |
| 2414 pr = list(data_schema.validate({}, {"type": "scalar"})) | 2414 pr = list(data_schema.validate({}, {"$type": "scalar"})) |
| 2415 self.assertEqual(1, len(pr)) | 2415 self.assertEqual(1, len(pr)) |
| 2416 self.assertEqual(ERRORS.E10033, pr[0].code) | 2416 self.assertEqual(ERRORS.E10033, pr[0].code) |
| 2417 | 2417 |
| 2418 pr = list(data_schema.validate([], {"type": "scalar"})) | 2418 pr = list(data_schema.validate([], {"$type": "scalar"})) |
| 2419 self.assertEqual(1, len(pr)) | 2419 self.assertEqual(1, len(pr)) |
| 2420 self.assertEqual(ERRORS.E10033, pr[0].code) | 2420 self.assertEqual(ERRORS.E10033, pr[0].code) |
| 2421 | 2421 |
| 2422 pr = list(data_schema.validate(tuple(), {"type": "scalar"})) | 2422 pr = list(data_schema.validate(tuple(), {"$type": "scalar"})) |
| 2423 self.assertEqual(1, len(pr)) | 2423 self.assertEqual(1, len(pr)) |
| 2424 self.assertEqual(ERRORS.E10033, pr[0].code) | 2424 self.assertEqual(ERRORS.E10033, pr[0].code) |
| 2425 | 2425 |
| 2426 pr = list(data_schema.validate(set(), {"type": "scalar"})) | 2426 pr = list(data_schema.validate(set(), {"$type": "scalar"})) |
| 2427 self.assertEqual(1, len(pr)) | 2427 self.assertEqual(1, len(pr)) |
| 2428 self.assertEqual(ERRORS.E10033, pr[0].code) | 2428 self.assertEqual(ERRORS.E10033, pr[0].code) |
| 2429 | 2429 |
| 2430 pr = list(data_schema.validate(frozenset(), {"type": "scalar"})) | 2430 pr = list(data_schema.validate(frozenset(), {"$type": "scalar"})) |
| 2431 self.assertEqual(1, len(pr)) | 2431 self.assertEqual(1, len(pr)) |
| 2432 self.assertEqual(ERRORS.E10033, pr[0].code) | 2432 self.assertEqual(ERRORS.E10033, pr[0].code) |
| 2433 | 2433 |
| 2434 pr = list(data_schema.validate( | 2434 pr = list(data_schema.validate( |
| 2435 None, | 2435 None, |
| 2436 {"type": { | 2436 {"$type": { |
| 2437 "one-of": [ | 2437 "one-of": [ |
| 2438 {"type": "scalar"}, | 2438 {"$type": "scalar"}, |
| 2439 {"type": None}, | 2439 {"$type": None}, |
| 2440 ]}})) | 2440 ]}})) |
| 2441 self.assertEqual(0, len(pr)) | 2441 self.assertEqual(0, len(pr)) |
| 2442 | 2442 |
| 2443 | 2443 |
| 2444 if __name__ == "__main__": | 2444 if __name__ == "__main__": |
