Skip to content

Commit 86154dd

Browse files
vladistandalito
authored andcommitted
Convert test for inlined as dict forms to pytest
1 parent b916ecb commit 86154dd

File tree

1 file changed

+141
-137
lines changed

1 file changed

+141
-137
lines changed
Lines changed: 141 additions & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -1,142 +1,146 @@
1-
import unittest
2-
1+
import pytest
32
from jsonasobj2 import JsonObj
43

54
from tests.test_utils.input.inlined_as_dict import E, EInst
65

76

8-
class InlinedAsDictTestcase(unittest.TestCase):
9-
"""Test the various YAML forms for inlined_as_dict entries"""
10-
11-
def test_list_variations(self):
12-
v = E()
13-
self.assertEqual(v.ev, {}, "No entries, period")
14-
v = E({})
15-
self.assertEqual(v.ev, {}, "Default is empty dictionary")
16-
v = E([])
17-
self.assertEqual(v.ev, {}, "Empty list becomes empty dictionary")
18-
v = E(JsonObj())
19-
self.assertEqual(v.ev, {}, "Empty JsonObj becomes empty dictionary")
20-
# Form 5 -- list of keys
21-
v1 = JsonObj(["k1", "k2"])
22-
v = E(v1)
23-
self.assertEqual(v.ev, {"k1": EInst(s1="k1"), "k2": EInst(s1="k2")})
24-
# Form 4: -- list of key/object pairs
25-
v = E([{"k1": {"s1": "k1", "s2": "v21", "s3": "v23"}}, {"k2": {"s2": "v22", "s3": "v23"}}, {"k3": {}}])
26-
self.assertEqual(
27-
v.ev,
28-
{
29-
"k1": EInst(s1="k1", s2="v21", s3="v23"),
30-
"k2": EInst(s1="k2", s2="v22", s3="v23"),
31-
"k3": EInst(s1="k3", s2=None, s3=None),
32-
},
33-
"List of key value constructors",
34-
)
35-
36-
with self.assertRaises(ValueError) as e:
37-
E([{"k1": None}, {"k1": "v2"}])
38-
self.assertIn("k1: duplicate key", str(e.exception))
39-
with self.assertRaises(ValueError) as e:
40-
E([{"k1": {"s1": "k2"}}])
41-
self.assertIn("Slot: ev - attribute s1 value (k2) does not match key (k1)", str(e.exception))
42-
43-
# Form 5 variations
44-
v = E([{"k1": EInst(s1="k1", s2="v21", s3="v23")}, {"k2": JsonObj({"s2": "v22", "s3": "v23"})}, {"k3": None}])
45-
self.assertEqual(
46-
v.ev,
47-
{
48-
"k1": EInst(s1="k1", s2="v21", s3="v23"),
49-
"k2": EInst(s1="k2", s2="v22", s3="v23"),
50-
"k3": EInst(s1="k3", s2=None, s3=None),
51-
},
52-
)
53-
54-
# More Form 5 variations
55-
v = E(["k1", "k2", {"k3": "v3"}, ["k4", "v4"], {"s1": "k5", "s2": "v52"}])
56-
self.assertEqual(
57-
v.ev,
58-
{
59-
"k1": EInst(s1="k1", s2=None, s3=None),
60-
"k2": EInst(s1="k2", s2=None, s3=None),
61-
"k3": EInst(s1="k3", s2="v3", s3=None),
62-
"k4": EInst(s1="k4", s2="v4", s3=None),
63-
"k5": EInst(s1="k5", s2="v52", s3=None),
64-
},
65-
"Key value tuples",
66-
)
67-
68-
# Form 6 - list of positional object values
69-
v = E([["k1", "v12", "v13"], ["k2", "v22"], ["k3"]])
70-
self.assertEqual(
71-
v.ev,
72-
{
73-
"k1": EInst(s1="k1", s2="v12", s3="v13"),
74-
"k2": EInst(s1="k2", s2="v22", s3=None),
75-
"k3": EInst(s1="k3", s2=None, s3=None),
76-
},
77-
"Positional objects",
78-
)
79-
80-
# Form 7 - list of kv dictionaries
81-
v = E([{"s1": "v11", "s2": "v12"}, {"s1": "v21", "s2": "v22", "s3": "v23"}])
82-
self.assertEqual(
83-
v.ev,
84-
{"v11": EInst(s1="v11", s2="v12", s3=None), "v21": EInst(s1="v21", s2="v22", s3="v23")},
85-
"List of dictionaries",
86-
)
87-
88-
def test_dict_variations(self):
89-
"""Test various forms of inlined as dict entries"""
90-
# Form 1: key / object
91-
v = E(
92-
{
93-
"k1": EInst(s1="k1", s2="v21", s3="v23"),
94-
"k2": JsonObj({"s2": "v22", "s3": "v23"}),
95-
"k3": {"s2": "v32", "s3": "v33"},
96-
"k4": {"s1": "k4"},
97-
}
98-
)
99-
self.assertEqual(
100-
v.ev,
101-
{
102-
"k1": EInst(s1="k1", s2="v21", s3="v23"),
103-
"k2": EInst(s1="k2", s2="v22", s3="v23"),
104-
"k3": EInst(s1="k3", s2="v32", s3="v33"),
105-
"k4": EInst(s1="k4", s2=None, s3=None),
106-
},
107-
"Dictionary of key/object entries",
108-
)
109-
110-
# Form 2: key/value tuples (only works when at most two values are required
111-
v = E(ev={"k1": "v11", "k2": "v21", "k3": {}})
112-
self.assertEqual(
113-
v.ev,
114-
{
115-
"k1": EInst(s1="k1", s2="v11", s3=None),
116-
"k2": EInst(s1="k2", s2="v21", s3=None),
117-
"k3": EInst(s1="k3", s2=None, s3=None),
118-
},
119-
"Dictionary of two-key entries",
120-
)
121-
122-
# Form 3: Basic single object (differentiated from form2 by the presence of the key name
123-
v = E({"s1": "k1"})
124-
self.assertEqual(v.ev, {"k1": EInst(s1="k1", s2=None, s3=None)}, "Single entry dictionary")
125-
v = E({"s1": "k1", "s2": "v12"})
126-
self.assertEqual(v.ev, {"k1": EInst(s1="k1", s2="v12", s3=None)}, "Single entry dictionary")
127-
128-
def test_isempties(self):
129-
base = E()
130-
self.assertTrue(base._is_empty(None))
131-
self.assertTrue(base._is_empty([]))
132-
self.assertTrue(base._is_empty({}))
133-
self.assertTrue(base._is_empty(JsonObj()))
134-
self.assertTrue(base._is_empty(JsonObj([])))
135-
self.assertFalse(base._is_empty(0))
136-
self.assertFalse(base._is_empty(""))
137-
self.assertFalse(base._is_empty(JsonObj({"k": 0})))
138-
self.assertFalse(base._is_empty(JsonObj([None])))
139-
140-
141-
if __name__ == "__main__":
142-
unittest.main()
7+
def test_empty_dict_forms():
8+
"""Test various empty dictionary forms"""
9+
v = E()
10+
assert v.ev == {}, "No entries, period"
11+
12+
v = E({})
13+
assert v.ev == {}, "Default is empty dictionary"
14+
15+
v = E([])
16+
assert v.ev == {}, "Empty list becomes empty dictionary"
17+
18+
v = E(JsonObj())
19+
assert v.ev == {}, "Empty JsonObj becomes empty dictionary"
20+
21+
22+
def test_list_of_keys():
23+
"""Test Form 5: list of keys"""
24+
v1 = JsonObj(["k1", "k2"])
25+
v = E(v1)
26+
assert v.ev == {"k1": EInst(s1="k1"), "k2": EInst(s1="k2")}
27+
28+
29+
def test_list_of_key_object_pairs():
30+
"""Test Form 4: list of key/object pairs"""
31+
v = E([{"k1": {"s1": "k1", "s2": "v21", "s3": "v23"}}, {"k2": {"s2": "v22", "s3": "v23"}}, {"k3": {}}])
32+
assert v.ev == {
33+
"k1": EInst(s1="k1", s2="v21", s3="v23"),
34+
"k2": EInst(s1="k2", s2="v22", s3="v23"),
35+
"k3": EInst(s1="k3", s2=None, s3=None),
36+
}
37+
38+
39+
def test_duplicate_keys_error():
40+
"""Test error handling for duplicate keys"""
41+
with pytest.raises(ValueError) as e:
42+
E([{"k1": None}, {"k1": "v2"}])
43+
assert "k1: duplicate key" in str(e.value)
44+
45+
46+
def test_key_mismatch_error():
47+
"""Test error handling for key/attribute mismatch"""
48+
with pytest.raises(ValueError) as e:
49+
E([{"k1": {"s1": "k2"}}])
50+
assert "Slot: ev - attribute s1 value (k2) does not match key (k1)" in str(e.value)
51+
52+
53+
def test_form5_variations():
54+
"""Test Form 5 variations with different object types"""
55+
v = E([{"k1": EInst(s1="k1", s2="v21", s3="v23")}, {"k2": JsonObj({"s2": "v22", "s3": "v23"})}, {"k3": None}])
56+
assert v.ev == {
57+
"k1": EInst(s1="k1", s2="v21", s3="v23"),
58+
"k2": EInst(s1="k2", s2="v22", s3="v23"),
59+
"k3": EInst(s1="k3", s2=None, s3=None),
60+
}
61+
62+
63+
def test_mixed_form5_variations():
64+
"""Test more Form 5 variations with mixed types"""
65+
v = E(["k1", "k2", {"k3": "v3"}, ["k4", "v4"], {"s1": "k5", "s2": "v52"}])
66+
assert v.ev == {
67+
"k1": EInst(s1="k1", s2=None, s3=None),
68+
"k2": EInst(s1="k2", s2=None, s3=None),
69+
"k3": EInst(s1="k3", s2="v3", s3=None),
70+
"k4": EInst(s1="k4", s2="v4", s3=None),
71+
"k5": EInst(s1="k5", s2="v52", s3=None),
72+
}
73+
74+
75+
def test_positional_object_values():
76+
"""Test Form 6: list of positional object values"""
77+
v = E([["k1", "v12", "v13"], ["k2", "v22"], ["k3"]])
78+
assert v.ev == {
79+
"k1": EInst(s1="k1", s2="v12", s3="v13"),
80+
"k2": EInst(s1="k2", s2="v22", s3=None),
81+
"k3": EInst(s1="k3", s2=None, s3=None),
82+
}
83+
84+
85+
def test_list_of_kv_dictionaries():
86+
"""Test Form 7: list of key-value dictionaries"""
87+
v = E([{"s1": "v11", "s2": "v12"}, {"s1": "v21", "s2": "v22", "s3": "v23"}])
88+
assert v.ev == {"v11": EInst(s1="v11", s2="v12", s3=None), "v21": EInst(s1="v21", s2="v22", s3="v23")}
89+
90+
91+
def test_dict_key_object_form():
92+
"""Test Form 1: dictionary with key/object pairs"""
93+
v = E(
94+
{
95+
"k1": EInst(s1="k1", s2="v21", s3="v23"),
96+
"k2": JsonObj({"s2": "v22", "s3": "v23"}),
97+
"k3": {"s2": "v32", "s3": "v33"},
98+
"k4": {"s1": "k4"},
99+
}
100+
)
101+
assert v.ev == {
102+
"k1": EInst(s1="k1", s2="v21", s3="v23"),
103+
"k2": EInst(s1="k2", s2="v22", s3="v23"),
104+
"k3": EInst(s1="k3", s2="v32", s3="v33"),
105+
"k4": EInst(s1="k4", s2=None, s3=None),
106+
}
107+
108+
109+
def test_dict_key_value_tuples():
110+
"""Test Form 2: dictionary with key/value tuples (max two values)"""
111+
v = E(ev={"k1": "v11", "k2": "v21", "k3": {}})
112+
assert v.ev == {
113+
"k1": EInst(s1="k1", s2="v11", s3=None),
114+
"k2": EInst(s1="k2", s2="v21", s3=None),
115+
"k3": EInst(s1="k3", s2=None, s3=None),
116+
}
117+
118+
119+
def test_single_object_dict():
120+
"""Test Form 3: Basic single object dictionary"""
121+
v = E({"s1": "k1"})
122+
assert v.ev == {"k1": EInst(s1="k1", s2=None, s3=None)}
123+
124+
125+
def test_single_object_dict_multiple_fields():
126+
"""Test Form 3: Single object dictionary with multiple fields"""
127+
v = E({"s1": "k1", "s2": "v12"})
128+
assert v.ev == {"k1": EInst(s1="k1", s2="v12", s3=None)}
129+
130+
131+
def test_is_empty_method():
132+
"""Test _is_empty method with various inputs"""
133+
base = E()
134+
135+
# Test empty values
136+
assert base._is_empty(None)
137+
assert base._is_empty([])
138+
assert base._is_empty({})
139+
assert base._is_empty(JsonObj())
140+
assert base._is_empty(JsonObj([]))
141+
142+
# Test non-empty values
143+
assert not base._is_empty(0)
144+
assert not base._is_empty("")
145+
assert not base._is_empty(JsonObj({"k": 0}))
146+
assert not base._is_empty(JsonObj([None]))

0 commit comments

Comments
 (0)