def test_required_with_defaults(self) -> None: re = easy(val=10) x = mixed(req_easy_ref=re) self.assertEqual(x.opt_field, "optional") self.assertEqual(x.req_field, "required") self.assertEqual(x.unq_field, "unqualified") self.assertTrue(x) y = mixed(req_field="foo", opt_field="bar", unq_field="baz", req_easy_ref=re) self.assertTrue(x) z = y(req_field=None, opt_field=None, unq_field=None) self.assertEqual(x, z) self.assertTrue(x) self.assertIsNone(x.opt_easy_ref) self.assertIsNone(y.opt_easy_ref) self.assertIsNone(z.opt_easy_ref) e = easy(val=5) z = x(opt_easy_ref=e, req_easy_ref=re) self.assertEqual(z.opt_easy_ref, e) self.assertNotEqual(x, y) y = z(opt_easy_ref=None) self.assertIsNone(y.opt_easy_ref) self.assertEqual(y, x) with self.assertRaises(TypeError): z(req_easy_ref=None) # type: ignore