home · contact · privacy
Extend and refactor tests.
[plomtask] / tests / misc.py
index b0fb872bbdc2f34b65f2c3f843762c451c34baa0..3aa13140bc1cd2380098ea4bfe5d0fec1827b466 100644 (file)
@@ -8,150 +8,165 @@ from plomtask.exceptions import BadFormatException
 class TestsSansServer(TestCase):
     """Tests that do not require DB setup or a server."""
 
-    def test_InputsParser_get_str(self) -> None:
-        """Test InputsParser.get_str on strict and non-strictk."""
-        parser = InputsParser({}, False)
-        self.assertEqual('', parser.get_str('foo'))
-        self.assertEqual('bar', parser.get_str('foo', 'bar'))
-        parser.strict = True
+    def test_InputsParser_get_str_or_fail(self) -> None:
+        """Test InputsParser.get_str."""
+        parser = InputsParser({})
         with self.assertRaises(BadFormatException):
-            parser.get_str('foo')
+            parser.get_str_or_fail('foo')
+        self.assertEqual('bar', parser.get_str_or_fail('foo', 'bar'))
+        parser = InputsParser({'foo': []})
         with self.assertRaises(BadFormatException):
-            parser.get_str('foo', 'bar')
-        parser = InputsParser({'foo': []}, False)
-        self.assertEqual('bar', parser.get_str('foo', 'bar'))
-        with self.assertRaises(BadFormatException):
-            InputsParser({'foo': []}, True).get_str('foo', 'bar')
-        for strictness in (False, True):
-            parser = InputsParser({'foo': ['baz']}, strictness)
-            self.assertEqual('baz', parser.get_str('foo', 'bar'))
-            parser = InputsParser({'foo': ['baz', 'quux']}, strictness)
-            self.assertEqual('baz', parser.get_str('foo', 'bar'))
+            parser.get_str_or_fail('foo')
+        self.assertEqual('bar', parser.get_str_or_fail('foo', 'bar'))
+        parser = InputsParser({'foo': ['baz']})
+        self.assertEqual('baz', parser.get_str_or_fail('foo', 'bar'))
+        parser = InputsParser({'foo': ['baz', 'quux']})
+        self.assertEqual('baz', parser.get_str_or_fail('foo', 'bar'))
 
-    def test_InputsParser_get_first_strings_starting(self) -> None:
-        """Test InputsParser.get_first_strings_starting [non-]strict."""
-        for strictness in (False, True):
-            parser = InputsParser({}, strictness)
-            self.assertEqual({},
-                             parser.get_first_strings_starting(''))
-            parser = InputsParser({}, strictness)
-            self.assertEqual({},
-                             parser.get_first_strings_starting('foo'))
-            parser = InputsParser({'foo': ['bar']}, strictness)
-            self.assertEqual({'foo': 'bar'},
-                             parser.get_first_strings_starting(''))
-            parser = InputsParser({'x': ['y']}, strictness)
-            self.assertEqual({'x': 'y'},
-                             parser.get_first_strings_starting('x'))
-            parser = InputsParser({'xx': ['y']}, strictness)
-            self.assertEqual({'xx': 'y'},
-                             parser.get_first_strings_starting('x'))
-            parser = InputsParser({'xx': ['y']}, strictness)
-            self.assertEqual({},
-                             parser.get_first_strings_starting('xxx'))
-            d = {'xxx': ['x'], 'xxy': ['y'], 'xyy': ['z']}
-            parser = InputsParser(d, strictness)
-            self.assertEqual({'xxx': 'x', 'xxy': 'y'},
-                             parser.get_first_strings_starting('xx'))
-            d = {'xxx': ['x', 'y', 'z'], 'xxy': ['y', 'z']}
-            parser = InputsParser(d, strictness)
-            self.assertEqual({'xxx': 'x', 'xxy': 'y'},
-                             parser.get_first_strings_starting('xx'))
+    def test_InputsParser_get_str(self) -> None:
+        """Test InputsParser.get_str."""
+        parser = InputsParser({})
+        self.assertEqual(None, parser.get_str('foo'))
+        self.assertEqual('bar', parser.get_str('foo', 'bar'))
+        parser = InputsParser({'foo': []})
+        self.assertEqual(None, parser.get_str('foo'))
+        self.assertEqual('bar', parser.get_str('foo', 'bar'))
+        parser = InputsParser({'foo': ['baz']})
+        self.assertEqual('baz', parser.get_str('foo', 'bar'))
+        parser = InputsParser({'foo': ['baz', 'quux']})
+        self.assertEqual('baz', parser.get_str('foo', 'bar'))
 
-    def test_InputsParser_get_int(self) -> None:
-        """Test InputsParser.get_int on strict and non-strict."""
-        for strictness in (False, True):
-            with self.assertRaises(BadFormatException):
-                InputsParser({}, strictness).get_int('foo')
-            with self.assertRaises(BadFormatException):
-                InputsParser({'foo': []}, strictness).get_int('foo')
-            with self.assertRaises(BadFormatException):
-                InputsParser({'foo': ['']}, strictness).get_int('foo')
-            with self.assertRaises(BadFormatException):
-                InputsParser({'foo': ['bar']}, strictness).get_int('foo')
-            with self.assertRaises(BadFormatException):
-                InputsParser({'foo': ['0.1']}).get_int('foo')
-            parser = InputsParser({'foo': ['0']}, strictness)
-            self.assertEqual(0, parser.get_int('foo'))
-            parser = InputsParser({'foo': ['17', '23']}, strictness)
-            self.assertEqual(17, parser.get_int('foo'))
+    def test_InputsParser_get_all_of_key_prefixed(self) -> None:
+        """Test InputsParser.get_all_of_key_prefixed."""
+        parser = InputsParser({})
+        self.assertEqual({},
+                         parser.get_all_of_key_prefixed(''))
+        self.assertEqual({},
+                         parser.get_all_of_key_prefixed('foo'))
+        parser = InputsParser({'foo': ['bar']})
+        self.assertEqual({'foo': ['bar']},
+                         parser.get_all_of_key_prefixed(''))
+        parser = InputsParser({'x': ['y', 'z']})
+        self.assertEqual({'': ['y', 'z']},
+                         parser.get_all_of_key_prefixed('x'))
+        parser = InputsParser({'xx': ['y', 'Z']})
+        self.assertEqual({'x': ['y', 'Z']},
+                         parser.get_all_of_key_prefixed('x'))
+        parser = InputsParser({'xx': ['y']})
+        self.assertEqual({},
+                         parser.get_all_of_key_prefixed('xxx'))
+        parser = InputsParser({'xxx': ['x'], 'xxy': ['y'], 'xyy': ['z']})
+        self.assertEqual({'x': ['x'], 'y': ['y']},
+                         parser.get_all_of_key_prefixed('xx'))
+        parser = InputsParser({'xxx': ['x', 'y'], 'xxy': ['y', 'z']})
+        self.assertEqual({'x': ['x', 'y'], 'y': ['y', 'z']},
+                         parser.get_all_of_key_prefixed('xx'))
 
     def test_InputsParser_get_int_or_none(self) -> None:
-        """Test InputsParser.get_int_or_none on strict and non-strict."""
-        for strictness in (False, True):
-            parser = InputsParser({}, strictness)
-            self.assertEqual(None, parser.get_int_or_none('foo'))
-            parser = InputsParser({'foo': []}, strictness)
-            self.assertEqual(None, parser.get_int_or_none('foo'))
-            parser = InputsParser({'foo': ['']}, strictness)
-            self.assertEqual(None, parser.get_int_or_none('foo'))
-            parser = InputsParser({'foo': ['0']}, strictness)
-            self.assertEqual(0, parser.get_int_or_none('foo'))
-            with self.assertRaises(BadFormatException):
-                InputsParser({'foo': ['None']},
-                             strictness).get_int_or_none('foo')
-            with self.assertRaises(BadFormatException):
-                InputsParser({'foo': ['0.1']},
-                             strictness).get_int_or_none('foo')
-            parser = InputsParser({'foo': ['23']}, strictness)
-            self.assertEqual(23, parser.get_int_or_none('foo'))
+        """Test InputsParser.get_int_or_none."""
+        parser = InputsParser({})
+        self.assertEqual(None, parser.get_int_or_none('foo'))
+        parser = InputsParser({'foo': []})
+        self.assertEqual(None, parser.get_int_or_none('foo'))
+        parser = InputsParser({'foo': ['']})
+        self.assertEqual(None, parser.get_int_or_none('foo'))
+        parser = InputsParser({'foo': ['0']})
+        self.assertEqual(0, parser.get_int_or_none('foo'))
+        with self.assertRaises(BadFormatException):
+            InputsParser({'foo': ['None']}).get_int_or_none('foo')
+        with self.assertRaises(BadFormatException):
+            InputsParser({'foo': ['0.1']}).get_int_or_none('foo')
+        parser = InputsParser({'foo': ['23']})
+        self.assertEqual(23, parser.get_int_or_none('foo'))
 
-    def test_InputsParser_get_float(self) -> None:
-        """Test InputsParser.get_float on strict and non-strict."""
-        for strictness in (False, True):
-            with self.assertRaises(BadFormatException):
-                InputsParser({}, strictness).get_float('foo')
-            with self.assertRaises(BadFormatException):
-                InputsParser({'foo': []}, strictness).get_float('foo')
-            with self.assertRaises(BadFormatException):
-                InputsParser({'foo': ['']}, strictness).get_float('foo')
-            with self.assertRaises(BadFormatException):
-                InputsParser({'foo': ['bar']}, strictness).get_float('foo')
-            parser = InputsParser({'foo': ['0']}, strictness)
-            self.assertEqual(0, parser.get_float('foo'))
-            parser = InputsParser({'foo': ['0.1']}, strictness)
-            self.assertEqual(0.1, parser.get_float('foo'))
-            parser = InputsParser({'foo': ['1.23', '456']}, strictness)
-            self.assertEqual(1.23, parser.get_float('foo'))
+    def test_InputsParser_get_float_or_fail(self) -> None:
+        """Test InputsParser.get_float_or_fail."""
+        with self.assertRaises(BadFormatException):
+            InputsParser({}).get_float_or_fail('foo')
+        with self.assertRaises(BadFormatException):
+            InputsParser({'foo': ['']}).get_float_or_fail('foo')
+        with self.assertRaises(BadFormatException):
+            InputsParser({'foo': ['bar']}).get_float_or_fail('foo')
+        parser = InputsParser({'foo': ['0']})
+        self.assertEqual(0, parser.get_float_or_fail('foo'))
+        parser = InputsParser({'foo': ['0.1']})
+        self.assertEqual(0.1, parser.get_float_or_fail('foo'))
+        parser = InputsParser({'foo': ['1.23', '456']})
+        self.assertEqual(1.23, parser.get_float_or_fail('foo'))
+        with self.assertRaises(BadFormatException):
+            InputsParser({}).get_float_or_fail('foo')
+        with self.assertRaises(BadFormatException):
+            InputsParser({'foo': []}).get_float_or_fail('foo')
+
+    def test_InputsParser_get_bool_or_none(self) -> None:
+        """Test InputsParser.get_all_str."""
+        parser = InputsParser({})
+        self.assertEqual(None, parser.get_bool_or_none('foo'))
+        parser = InputsParser({'val': ['foo']})
+        self.assertEqual(None, parser.get_bool_or_none('foo'))
+        parser = InputsParser({'val': ['True']})
+        self.assertEqual(None, parser.get_bool_or_none('foo'))
+        parser = InputsParser({'foo': []})
+        self.assertEqual(None, parser.get_bool_or_none('foo'))
+        parser = InputsParser({'foo': ['None']})
+        self.assertEqual(False, parser.get_bool_or_none('foo'))
+        parser = InputsParser({'foo': ['0']})
+        self.assertEqual(False, parser.get_bool_or_none('foo'))
+        parser = InputsParser({'foo': ['']})
+        self.assertEqual(False, parser.get_bool_or_none('foo'))
+        parser = InputsParser({'foo': ['bar']})
+        self.assertEqual(False, parser.get_bool_or_none('foo'))
+        parser = InputsParser({'foo': ['bar', 'baz']})
+        self.assertEqual(False, parser.get_bool_or_none('foo'))
+        parser = InputsParser({'foo': ['False']})
+        self.assertEqual(False, parser.get_bool_or_none('foo'))
+        parser = InputsParser({'foo': ['true']})
+        self.assertEqual(True, parser.get_bool_or_none('foo'))
+        parser = InputsParser({'foo': ['True']})
+        self.assertEqual(True, parser.get_bool_or_none('foo'))
+        parser = InputsParser({'foo': ['1']})
+        self.assertEqual(True, parser.get_bool_or_none('foo'))
+        parser = InputsParser({'foo': ['on']})
+        self.assertEqual(True, parser.get_bool_or_none('foo'))
 
     def test_InputsParser_get_all_str(self) -> None:
-        """Test InputsParser.get_all_str on strict and non-strict."""
-        for strictness in (False, True):
-            parser = InputsParser({}, strictness)
-            self.assertEqual([], parser.get_all_str('foo'))
-            parser = InputsParser({'foo': []}, strictness)
-            self.assertEqual([], parser.get_all_str('foo'))
-            parser = InputsParser({'foo': ['bar']}, strictness)
-            self.assertEqual(['bar'], parser.get_all_str('foo'))
-            parser = InputsParser({'foo': ['bar', 'baz']}, strictness)
-            self.assertEqual(['bar', 'baz'], parser.get_all_str('foo'))
+        """Test InputsParser.get_all_str."""
+        parser = InputsParser({})
+        self.assertEqual([], parser.get_all_str('foo'))
+        parser = InputsParser({'foo': []})
+        self.assertEqual([], parser.get_all_str('foo'))
+        parser = InputsParser({'foo': ['bar']})
+        self.assertEqual(['bar'], parser.get_all_str('foo'))
+        parser = InputsParser({'foo': ['bar', 'baz']})
+        self.assertEqual(['bar', 'baz'], parser.get_all_str('foo'))
 
-    def test_InputsParser_strict_get_all_int(self) -> None:
-        """Test InputsParser.get_all_int on strict and non-strict."""
-        for strictness in (False, True):
-            parser = InputsParser({}, strictness)
-            self.assertEqual([], parser.get_all_int('foo'))
-            parser = InputsParser({'foo': []}, strictness)
-            self.assertEqual([], parser.get_all_int('foo'))
-            parser = InputsParser({'foo': ['']}, strictness)
-            self.assertEqual([], parser.get_all_int('foo'))
-            parser = InputsParser({'foo': ['0']}, strictness)
-            self.assertEqual([0], parser.get_all_int('foo'))
-            parser = InputsParser({'foo': ['0', '17']}, strictness)
-            self.assertEqual([0, 17], parser.get_all_int('foo'))
-            parser = InputsParser({'foo': ['0.1', '17']}, strictness)
-            with self.assertRaises(BadFormatException):
-                parser.get_all_int('foo')
-            parser = InputsParser({'foo': ['None', '17']}, strictness)
-            with self.assertRaises(BadFormatException):
-                parser.get_all_int('foo')
+    def test_InputsParser_get_all_int(self) -> None:
+        """Test InputsParser.get_all_int."""
+        parser = InputsParser({})
+        self.assertEqual([], parser.get_all_int('foo'))
+        parser = InputsParser({'foo': []})
+        self.assertEqual([], parser.get_all_int('foo'))
+        parser = InputsParser({'foo': ['']})
+        parser.get_all_int('foo')
+        with self.assertRaises(BadFormatException):
+            parser.get_all_int('foo', fail_on_empty=True)
+        parser = InputsParser({'foo': ['0']})
+        self.assertEqual([0], parser.get_all_int('foo'))
+        parser = InputsParser({'foo': ['0', '17']})
+        self.assertEqual([0, 17], parser.get_all_int('foo'))
+        parser = InputsParser({'foo': ['0.1', '17']})
+        with self.assertRaises(BadFormatException):
+            parser.get_all_int('foo')
+        parser = InputsParser({'foo': ['None', '17']})
+        with self.assertRaises(BadFormatException):
+            parser.get_all_int('foo')
 
 
 class TestsWithServer(TestCaseWithServer):
     """Tests against our HTTP server/handler (and database)."""
 
     def test_do_GET(self) -> None:
-        """Test / redirect, and unknown targets failing."""
+        """Test GET / redirect, and unknown targets failing."""
         self.conn.request('GET', '/')
         self.check_redirect('/day')
         self.check_get('/foo', 404)