1 # SPDX-License-Identifier: LGPL-3-or-later
2 # Copyright 2022 Jacob Lifshay programmerjake@gmail.com
5 from nmutil
.plain_data
import FrozenPlainDataError
, plain_data
15 __slots__
= "a", "b", "x", "y"
17 def __init__(self
, a
, b
, *, x
, y
):
25 class PlainData2(PlainData1
):
28 def __init__(self
, a
, b
, *, x
, y
, z
):
29 super().__init
__(a
, b
, x
=x
, y
=y
)
33 @plain_data(frozen
=True, unsafe_hash
=True)
38 @plain_data(frozen
=True, unsafe_hash
=True)
40 __slots__
= "a", "b", "x", "y"
42 def __init__(self
, a
, b
, *, x
, y
):
49 class TestPlainData(unittest
.TestCase
):
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)")
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))
67 def test_frozen(self
):
68 not_frozen
= PlainData0()
70 frozen0
= PlainDataF0()
71 with self
.assertRaises(AttributeError):
73 frozen1
= PlainDataF1(1, 2, x
="x", y
="y")
74 with self
.assertRaises(FrozenPlainDataError
):
77 # FIXME: add more tests
80 if __name__
== "__main__":