1
+ '''
2
+ Created on June 3, 2019
3
+ @author: Andrew Habib
4
+ '''
5
+
6
+ import unittest
7
+
8
+ from jsonsubschema import isSubschema
9
+ from jsonsubschema .exceptions import UnexpectedCanonicalization
10
+
11
+
12
+ class TestEnum (unittest .TestCase ):
13
+
14
+ def test_enum_simple1 (self ):
15
+ s1 = {'enum' : [1 ]}
16
+ s2 = {'enum' : [1 , 2 ]}
17
+
18
+ with self .subTest ('LHS < RHS' ):
19
+ self .assertTrue (isSubschema (s1 , s2 ))
20
+ with self .subTest ('LHS > RHS' ):
21
+ self .assertFalse (isSubschema (s2 , s1 ))
22
+
23
+ def test_enum_simple2 (self ):
24
+ s1 = {'enum' : [True ]}
25
+ s2 = {'enum' : [1 , 2 ]}
26
+
27
+ with self .subTest ('LHS < RHS' ):
28
+ self .assertFalse (isSubschema (s1 , s2 ))
29
+ with self .subTest ('LHS > RHS' ):
30
+ self .assertFalse (isSubschema (s2 , s1 ))
31
+
32
+ def test_enum_simple3 (self ):
33
+ s1 = {'type' : 'integer' , 'enum' : [1 , 2 ]}
34
+ s2 = {'type' : 'boolean' , 'enum' : [True ]}
35
+
36
+ with self .subTest ('LHS < RHS' ):
37
+ self .assertFalse (isSubschema (s1 , s2 ))
38
+ with self .subTest ('LHS > RHS' ):
39
+ self .assertFalse (isSubschema (s2 , s1 ))
40
+
41
+ def test_enum_simple4 (self ):
42
+ s1 = {'enum' : ['1' , 2 ]}
43
+ s2 = {'enum' : [1 , '2' ]}
44
+
45
+ with self .subTest ('LHS < RHS' ):
46
+ self .assertFalse (isSubschema (s1 , s2 ))
47
+ with self .subTest ('LHS > RHS' ):
48
+ self .assertFalse (isSubschema (s2 , s1 ))
49
+
50
+ def test_enum_uninhabited1 (self ):
51
+ s1 = {'type' : 'string' , 'enum' : [1 , 2 ]}
52
+ s2 = {'type' : 'string' }
53
+
54
+ with self .subTest ('LHS < RHS' ):
55
+ self .assertTrue (isSubschema (s1 , s2 ))
56
+ with self .subTest ('LHS > RHS' ):
57
+ self .assertFalse (isSubschema (s2 , s1 ))
58
+
59
+ def test_enum_uninhabited2 (self ):
60
+ s1 = {'type' : 'string' , 'enum' : [0 , 1 ]}
61
+ s2 = {'type' : 'boolean' , 'enum' : [0 ]}
62
+
63
+ with self .subTest ('LHS < RHS' ):
64
+ self .assertTrue (isSubschema (s1 , s2 ))
65
+ with self .subTest ('LHS > RHS' ):
66
+ self .assertTrue (isSubschema (s2 , s1 ))
67
+
68
+ def test_enum_uninhabited3 (self ):
69
+ s1 = {'enum' : []}
70
+ s2 = {'type' : 'boolean' }
71
+
72
+ with self .subTest ('LHS < RHS' ):
73
+ self .assertTrue (isSubschema (s1 , s2 ))
74
+ with self .subTest ('LHS > RHS' ):
75
+ self .assertFalse (isSubschema (s2 , s1 ))
76
+
77
+ def test_enum_uninhabited4 (self ):
78
+ s1 = {'enum' : []}
79
+ s2 = {'not' : {}}
80
+
81
+ with self .subTest ('LHS < RHS' ):
82
+ self .assertTrue (isSubschema (s1 , s2 ))
83
+ with self .subTest ('LHS > RHS' ):
84
+ self .assertTrue (isSubschema (s2 , s1 ))
85
+
86
+
87
+ class TestEnumNotSupported (unittest .TestCase ):
88
+
89
+ def test_array (self ):
90
+ s1 = {'enum' : [[]]}
91
+ s2 = {'type' : 'array' }
92
+
93
+ with self .subTest ():
94
+ self .assertRaises (UnexpectedCanonicalization , isSubschema , s1 , s2 )
95
+
96
+ with self .subTest (): # To test prining the exception msg
97
+ with self .assertRaises (UnexpectedCanonicalization ) as ctxt :
98
+ isSubschema (s2 , s1 )
99
+ print (ctxt .exception )
100
+
101
+ def test_object (self ):
102
+ s1 = {'enum' : [{'foo' : 1 }]}
103
+ s2 = {'type' : 'object' }
104
+
105
+ with self .subTest ():
106
+ self .assertRaises (UnexpectedCanonicalization , isSubschema , s1 , s2 )
107
+
108
+ with self .subTest (): # To test prining the exception msg
109
+ with self .assertRaises (UnexpectedCanonicalization ) as ctxt :
110
+ isSubschema (s2 , s1 )
111
+ print (ctxt .exception )
0 commit comments