diff tests/test_schema.py @ 44:ea8c2d01a9d9

Begin pickling support for ValidatenProblems, _Schema and Context
author Franz Glasner <fzglas.hg@dom66.de>
date Wed, 02 Aug 2023 09:31:49 +0200
parents 4ca530618303
children 92ae1e882cef
line wrap: on
line diff
--- a/tests/test_schema.py	Thu Jul 20 09:37:22 2023 +0200
+++ b/tests/test_schema.py	Wed Aug 02 09:31:49 2023 +0200
@@ -2,6 +2,7 @@
 import copy
 import datetime
 import functools
+import pickle
 import re
 import unittest
 
@@ -22,6 +23,54 @@
     yield from ()
 
 
+class Pickling(unittest.TestCase):
+
+    def test_severity(self):
+        for sev in SEVERITY:
+            b = pickle.dumps(sev)
+            sev2 = pickle.loads(b)
+            self.assertEqual(sev, sev2)
+
+    def test_errors(self):
+        for err in ERRORS:
+            b = pickle.dumps(err)
+            err2 = pickle.loads(b)
+            self.assertEqual(err, err2)
+
+    def test_warnings(self):
+        for warn in ERRORS:
+            b = pickle.dumps(warn)
+            warn2 = pickle.loads(b)
+            self.assertEqual(warn, warn2)
+
+    def test_combination(self):
+        obj = (SEVERITY.ERROR, ERRORS.E10001, WARNINGS.W80000)
+        b = pickle.dumps(obj)
+        obj2 = pickle.loads(b)
+        self.assertEqual(obj, obj2)
+
+    def test_problem_1(self):
+        problem = data_schema.ValidationProblem(
+            code=ERRORS.E10002,
+            severity=SEVERITY.ERROR,
+            hint="a-hint")
+        b = pickle.dumps(problem)
+        problem2 = pickle.loads(b)
+        self.assertIsInstance(problem2, data_schema.ValidationProblem)
+        self.assertEqual(problem, problem2)
+
+    def test_problem_2(self):
+        problem = data_schema.ValidationProblem(
+            code=ERRORS.E10002,
+            severity=SEVERITY.ERROR,
+            hint="a-hint")
+
+        def _cmp(a, b):
+            return a == b
+
+        self.assertFalse(_cmp(problem, 1))
+
+
 class YAML(unittest.TestCase):
 
     """Tests to load Python objects from YAML with complex Python-specific
@@ -2483,6 +2532,25 @@
         self.assertEqual(1, len(pr))
         self.assertEqual(ERRORS.E10030, pr[0].code)
 
+    def test_number_pickle(self):
+        pr = list(data_schema.validate(1.8, {"$type": "number"}))
+        self.assertEqual(0, len(pr))
+        pr = list(data_schema.validate(1, {"$type": "num"}))
+        self.assertEqual(0, len(pr))
+
+        pr = list(data_schema.validate(
+            2.0,
+            {"$type": "number",
+             "min-value": 3,
+             "max-value": 1.3}))
+
+        pr2 = pickle.loads(pickle.dumps(pr))
+        self.assertEqual(2, len(pr2))
+        self.assertEqual(ERRORS.E10031, pr2[0].code)
+        self.assertEqual(ERRORS.E10032, pr2[1].code)
+        self.maxDiff = None
+        self.assertEqual(repr(pr), repr(pr2))
+
     def test_bool(self):
         pr = list(data_schema.validate(True, {"$type": "bool"}))
         self.assertEqual(0, len(pr))