start adding @plain_data() decorator
[nmutil.git] / src / nmutil / test / test_plain_data.py
1 # SPDX-License-Identifier: LGPL-3-or-later
2 # Copyright 2022 Jacob Lifshay programmerjake@gmail.com
3
4 import unittest
5 from nmutil.plain_data import FrozenPlainDataError, plain_data
6
7
8 @plain_data()
9 class PlainData0:
10 __slots__ = ()
11
12
13 @plain_data()
14 class PlainData1:
15 __slots__ = "a", "b", "x", "y"
16
17 def __init__(self, a, b, *, x, y):
18 self.a = a
19 self.b = b
20 self.x = x
21 self.y = y
22
23
24 @plain_data()
25 class PlainData2(PlainData1):
26 __slots__ = "a", "z"
27
28 def __init__(self, a, b, *, x, y, z):
29 super().__init__(a, b, x=x, y=y)
30 self.z = z
31
32
33 @plain_data(frozen=True, unsafe_hash=True)
34 class PlainDataF0:
35 __slots__ = ()
36
37
38 @plain_data(frozen=True, unsafe_hash=True)
39 class PlainDataF1:
40 __slots__ = "a", "b", "x", "y"
41
42 def __init__(self, a, b, *, x, y):
43 self.a = a
44 self.b = b
45 self.x = x
46 self.y = y
47
48
49 class TestPlainData(unittest.TestCase):
50 def test_repr(self):
51 self.assertEqual(repr(PlainData0()), "PlainData0()")
52 self.assertEqual(repr(PlainData1(1, 2, x="x", y="y")),
53 "PlainData1(a=1, b=2, x='x', y='y')")
54 self.assertEqual(repr(PlainData2(1, 2, x="x", y="y", z=3)),
55 "PlainData2(a=1, b=2, x='x', y='y', z=3)")
56
57 def test_eq(self):
58 self.assertTrue(PlainData0() == PlainData0())
59 self.assertFalse('a' == PlainData0())
60 self.assertTrue(PlainData1(1, 2, x="x", y="y")
61 == PlainData1(1, 2, x="x", y="y"))
62 self.assertFalse(PlainData1(1, 2, x="x", y="y")
63 == PlainData1(1, 2, x="x", y="z"))
64 self.assertFalse(PlainData1(1, 2, x="x", y="y")
65 == PlainData2(1, 2, x="x", y="y", z=3))
66
67 def test_frozen(self):
68 not_frozen = PlainData0()
69 not_frozen.a = 1
70 frozen0 = PlainDataF0()
71 with self.assertRaises(AttributeError):
72 frozen0.a = 1
73 frozen1 = PlainDataF1(1, 2, x="x", y="y")
74 with self.assertRaises(FrozenPlainDataError):
75 frozen1.a = 1
76
77 # FIXME: add more tests
78
79
80 if __name__ == "__main__":
81 unittest.main()