- self.assertEqual(PlainData0._fields, ())
- self.assertEqual(PlainData1._fields, ("a", "b", "x", "y"))
- self.assertEqual(PlainData2._fields, ("a", "b", "x", "y", "z"))
- self.assertEqual(PlainDataF0._fields, ())
- self.assertEqual(PlainDataF1._fields, ("a", "b", "x", "y"))
- self.assertEqual(PlainDataF2._fields, ("a", "b", "x", "y", "z"))
+ self.assertEqual(fields(PlainData0), ())
+ self.assertEqual(fields(PlainData0()), ())
+ self.assertEqual(fields(PlainData1), ("a", "b", "x", "y"))
+ self.assertEqual(fields(PlainData1(1, 2, x="x", y="y")),
+ ("a", "b", "x", "y"))
+ self.assertEqual(fields(PlainData2), ("a", "b", "x", "y", "z"))
+ self.assertEqual(fields(PlainData2(1, 2, x="x", y="y", z=3)),
+ ("a", "b", "x", "y", "z"))
+ self.assertEqual(fields(PlainDataF0), ())
+ self.assertEqual(fields(PlainDataF0()), ())
+ self.assertEqual(fields(PlainDataF1), ("a", "b", "x", "y"))
+ self.assertEqual(fields(PlainDataF1(1, 2, x="x", y="y")),
+ ("a", "b", "x", "y"))
+ self.assertEqual(fields(PlainDataF2), ("a", "b", "x", "y", "z"))
+ self.assertEqual(fields(PlainDataF2(1, 2, x="x", y="y", z=3)),
+ ("a", "b", "x", "y", "z"))
+ with self.assertRaisesRegex(
+ TypeError,
+ r"the passed-in object must be a class or an instance of a "
+ r"class decorated with @plain_data\(\)"):
+ fields(type)
+
+ def test_replace(self):
+ with self.assertRaisesRegex(
+ TypeError,
+ r"the passed-in object must be a class or an instance of a "
+ r"class decorated with @plain_data\(\)"):
+ replace(PlainData0)
+ with self.assertRaisesRegex(TypeError, "can't set unknown field 'a'"):
+ replace(PlainData0(), a=1)
+ with self.assertRaisesRegex(TypeError, "can't set unknown field 'z'"):
+ replace(PlainDataF1(1, 2, x="x", y="y"), a=3, z=1)
+ self.assertEqual(replace(PlainData0()), PlainData0())
+ self.assertEqual(replace(PlainDataF1(1, 2, x="x", y="y")),
+ PlainDataF1(1, 2, x="x", y="y"))
+ self.assertEqual(replace(PlainDataF1(1, 2, x="x", y="y"), a=3),
+ PlainDataF1(3, 2, x="x", y="y"))
+ self.assertEqual(replace(PlainDataF1(1, 2, x="x", y="y"), x=5, a=3),
+ PlainDataF1(3, 2, x=5, y="y"))