Mercurial > hgrepos > Python > libs > data-schema
diff tests/test_schema.py @ 46:92ae1e882cef
Enhance pickling support
| author | Franz Glasner <f.glasner@feldmann-mg.com> |
|---|---|
| date | Wed, 02 Aug 2023 16:51:34 +0200 |
| parents | ea8c2d01a9d9 |
| children | 6b8fcd0d2175 |
line wrap: on
line diff
--- a/tests/test_schema.py Wed Aug 02 13:58:25 2023 +0200 +++ b/tests/test_schema.py Wed Aug 02 16:51:34 2023 +0200 @@ -25,6 +25,12 @@ class Pickling(unittest.TestCase): + def test_sentinel_singleinst(self): + s = data_schema._SENTINEL + s2 = pickle.loads(pickle.dumps(s)) + self.assertIs(s, s2) + self.assertIs(s2, s) + def test_severity(self): for sev in SEVERITY: b = pickle.dumps(sev) @@ -112,6 +118,12 @@ self.assertEqual(0, len(schema)) self.assertFalse(schema) + def test_root_creation_pickle(self): + schema = data_schema._Schema(None, True) + self.assertIsInstance(schema, dict) + schema2 = pickle.loads(pickle.dumps(schema)) + self.assertEqual(schema, schema2) + def test_root_creation_wrong(self): self.assertRaises( ValueError, @@ -126,6 +138,14 @@ self.assertTrue(schema.is_sub_root) self.assertIs(schema, schema.SELF) + def test_root_properties_pickle(self): + schema = data_schema._Schema(None, True) + schema2 = pickle.loads(pickle.dumps(schema)) + self.assertIsNone(schema2.parent) + self.assertIs(schema2, schema2.ROOT) + self.assertTrue(schema2.is_sub_root) + self.assertIs(schema2, schema2.SELF) + def test_dict_len_bool(self): schema = data_schema._Schema(None, True, a=1, b=2) self.assertTrue(schema) @@ -137,6 +157,15 @@ self.assertEqual(schema1, schema2) self.assertIsNot(schema1, schema2) + def test_pickle(self): + schema1 = data_schema._Schema(None, True, a=1, b=2) + schema2 = pickle.loads(pickle.dumps(schema1)) + self.assertEqual(schema1, schema2) + self.assertIsNot(schema1, schema2) + self.assertEqual(2, len(schema2)) + self.assertEqual(1, schema2["a"]) + self.assertEqual(2, schema2["b"]) + def test_copy(self): schema = data_schema._Schema(None, True, type="str") schema2 = schema.copy() @@ -200,6 +229,22 @@ self.assertTrue(ctx.root_schema is schema) self.assertTrue(ctx.settings is settings) + def test_root_context_pickle(self): + obj = object() + schema = object() + settings = data_schema.ValidationSettings( + skip_keys=[], break_on_keynames_problems=True, + data_stream_loader=None, + schema_loader=data_schema.default_schema_loader) + ctx = data_schema.Context( + None, root_object=obj, root_schema=schema, settings=settings) + self.assertEqual("<ROOT>", str(ctx)) + self.assertTrue(ctx.root_object is obj) + self.assertTrue(ctx.root_schema is schema) + self.assertTrue(ctx.settings is settings) + ctx2 = pickle.loads(pickle.dumps(ctx)) + self.assertEqual(ctx, ctx2) + def test_parent_of_root_context(self): obj = object() schema = object() @@ -289,6 +334,22 @@ ctx3 = data_schema.Context(ctx2, key="key3") self.assertEqual("<Context path=`key1 / INDEX:2 / key3'>", repr(ctx3)) + def test_repr_pickle(self): + settings = data_schema.ValidationSettings( + skip_keys=[], break_on_keynames_problems=True, + data_stream_loader=None, + schema_loader=data_schema.default_schema_loader) + root = data_schema.Context(None, settings=settings) + ctx1 = data_schema.Context(root, key="key1") + ctx2 = data_schema.Context(ctx1, index=2) + ctx3 = data_schema.Context(ctx2, key="key3") + + ctx3_2 = pickle.loads(pickle.dumps(ctx3)) + + self.assertEqual(ctx3, ctx3_2) + self.assertEqual(repr(ctx3), repr(ctx3_2)) + self.assertEqual("<Context path=`key1 / INDEX:2 / key3'>", repr(ctx3_2)) + def test_root(self): settings = data_schema.ValidationSettings( skip_keys=[], break_on_keynames_problems=True,
