@@ -510,11 +510,24 @@ def test_maxItems(self):
510
510
self .assertEqual (message , "[1, 2, 3] is too long" )
511
511
512
512
def test_prefixItems_with_items (self ):
513
+ message = self .message_for (
514
+ instance = [1 , 2 , "foo" ],
515
+ schema = {"items" : False , "prefixItems" : [{}, {}]},
516
+ )
517
+ self .assertEqual (
518
+ message ,
519
+ "Expected at most 2 items but found 1 extra: 'foo'"
520
+ )
521
+
522
+ def test_prefixItems_with_multiple_extra_items (self ):
513
523
message = self .message_for (
514
524
instance = [1 , 2 , "foo" , 5 ],
515
525
schema = {"items" : False , "prefixItems" : [{}, {}]},
516
526
)
517
- self .assertEqual (message , "Expected at most 2 items, but found 4" )
527
+ self .assertEqual (
528
+ message ,
529
+ "Expected at most 2 items but found 2 extra: ['foo', 5]"
530
+ )
518
531
519
532
def test_minLength (self ):
520
533
message = self .message_for (
@@ -655,7 +668,7 @@ def test_unevaluated_items(self):
655
668
message = self .message_for (instance = ["foo" , "bar" ], schema = schema )
656
669
self .assertIn (
657
670
message ,
658
- "Unevaluated items are not allowed ('bar ', 'foo ' were unexpected)" ,
671
+ "Unevaluated items are not allowed ('foo ', 'bar ' were unexpected)" ,
659
672
)
660
673
661
674
def test_unevaluated_items_on_invalid_type (self ):
@@ -702,6 +715,79 @@ def test_unevaluated_properties_on_invalid_type(self):
702
715
message = self .message_for (instance = "foo" , schema = schema )
703
716
self .assertEqual (message , "'foo' is not of type 'object'" )
704
717
718
+ def test_single_item (self ):
719
+ schema = {"prefixItems" : [{}], "items" : False }
720
+ message = self .message_for (
721
+ instance = ["foo" , "bar" , "baz" ],
722
+ schema = schema ,
723
+ )
724
+ self .assertEqual (
725
+ message ,
726
+ "Expected at most 1 item but found 2 extra: ['bar', 'baz']" ,
727
+ )
728
+
729
+ def test_heterogeneous_additionalItems_with_Items (self ):
730
+ schema = {"items" : [{}], "additionalItems" : False }
731
+ message = self .message_for (
732
+ instance = ["foo" , "bar" , 37 ],
733
+ schema = schema ,
734
+ cls = validators .Draft7Validator ,
735
+ )
736
+ self .assertEqual (
737
+ message ,
738
+ "Additional items are not allowed ('bar', 37 were unexpected)"
739
+ )
740
+
741
+ def test_heterogeneous_items_prefixItems (self ):
742
+ schema = {"prefixItems" : [{}], "items" : False }
743
+ message = self .message_for (
744
+ instance = ["foo" , "bar" , 37 ],
745
+ schema = schema ,
746
+ )
747
+ self .assertEqual (
748
+ message ,
749
+ "Expected at most 1 item but found 2 extra: ['bar', 37]" ,
750
+ )
751
+
752
+ def test_heterogeneous_unevaluatedItems_prefixItems (self ):
753
+ schema = {"prefixItems" : [{}], "unevaluatedItems" : False }
754
+ message = self .message_for (
755
+ instance = ["foo" , "bar" , 37 ],
756
+ schema = schema ,
757
+ )
758
+ self .assertEqual (
759
+ message ,
760
+ "Unevaluated items are not allowed ('bar', 37 were unexpected)" ,
761
+ )
762
+
763
+ def test_heterogeneous_properties_additionalProperties (self ):
764
+ """
765
+ Not valid deserialized JSON, but this should not blow up.
766
+ """
767
+ schema = {"properties" : {"foo" : {}}, "additionalProperties" : False }
768
+ message = self .message_for (
769
+ instance = {"foo" : {}, "a" : "baz" , 37 : 12 },
770
+ schema = schema ,
771
+ )
772
+ self .assertEqual (
773
+ message ,
774
+ "Additional properties are not allowed (37, 'a' were unexpected)" ,
775
+ )
776
+
777
+ def test_heterogeneous_properties_unevaluatedProperties (self ):
778
+ """
779
+ Not valid deserialized JSON, but this should not blow up.
780
+ """
781
+ schema = {"properties" : {"foo" : {}}, "unevaluatedProperties" : False }
782
+ message = self .message_for (
783
+ instance = {"foo" : {}, "a" : "baz" , 37 : 12 },
784
+ schema = schema ,
785
+ )
786
+ self .assertEqual (
787
+ message ,
788
+ "Unevaluated properties are not allowed (37, 'a' were unexpected)" ,
789
+ )
790
+
705
791
706
792
class TestValidationErrorDetails (TestCase ):
707
793
# TODO: These really need unit tests for each individual keyword, rather
0 commit comments