예제 #1
0
 def test_NaN_values(self):
     with self.assertRaises(ValidationError):  # <- NaN values should not be caught!
         with allowed_deviation(0):
             raise ValidationError(Deviation(float('nan'), 0))
예제 #2
0
    def test_integration_examples(self):
        # Test allowance of +/- 2 OR +/- 6%.
        with self.assertRaises(ValidationError) as cm:
            differences = [
                Deviation(+2, 1),   # 200%
                Deviation(+4, 8),   #  50%
                Deviation(+8, 32),  #  25%
            ]
            with allowed_deviation(2) | allowed_percent(0.25):
                raise ValidationError(differences)

        remaining = cm.exception.differences
        self.assertEqual(remaining, [Deviation(+4, 8)])

        # Test missing-type AND matching-value.
        with self.assertRaises(ValidationError) as cm:
            differences = [
                Missing('A'),
                Missing('B'),
                Extra('C'),
            ]
            with allowed_missing() & allowed_args(lambda x: x == 'A'):
                raise ValidationError(differences)

        remaining = cm.exception.differences
        self.assertEqual(remaining, [Missing('B'), Extra('C')])

        # Test missing-type OR allowed-limit.
        with self.assertRaises(ValidationError) as cm:
            differences = [
                Extra('A'),
                Missing('B'),
                Extra('C'),
                Missing('D'),
            ]
            with allowed_limit(1) | allowed_missing():
                raise ValidationError(differences)

        remaining = cm.exception.differences
        self.assertEqual(remaining, [Extra('C')])

        # Test missing-type AND allowed-limit.
        with self.assertRaises(ValidationError) as cm:
            differences = [
                Extra('A'),
                Missing('B'),
                Missing('C'),
            ]
            with allowed_limit(1) & allowed_missing():  # Allows only 1 missing.
                raise ValidationError(differences)

        remaining = cm.exception.differences
        self.assertEqual(remaining, [Extra('A'), Missing('C')])

        # Test missing-type OR allowed-limit.
        with self.assertRaises(ValidationError) as cm:
            differences = [
                Extra('A'),
                Missing('B'),
                Extra('C'),
                Missing('D'),
            ]
            with allowed_limit(1) | allowed_specific(Extra('A')):
                raise ValidationError(differences)

        remaining = cm.exception.differences
        self.assertEqual(remaining, [Extra('C'), Missing('D')])
예제 #3
0
    def test_empty_string(self):
        with allowed_deviation(0):  # <- Pass without failure.
            raise ValidationError(Deviation('', 0))

        with allowed_deviation(0):  # <- Pass without failure.
            raise ValidationError(Deviation(0, ''))
예제 #4
0
 def test_invalid_tolerance(self):
     with self.assertRaises(AssertionError) as cm:
         with allowed_deviation(-5):  # <- invalid
             pass
     exc = str(cm.exception)
     self.assertTrue(exc.startswith('tolerance should not be negative'))
예제 #5
0
 def test_same_value_case(self):
     with self.assertRaises(ValidationError) as cm:
         with allowed_deviation(3, 3):  # <- Allows off-by-3 only.
             raise ValidationError(self.differences)
     result_diffs = cm.exception.differences
     self.assertEqual({'aaa': Deviation(-1, 10), 'ccc': Deviation(+2, 10)}, result_diffs)
예제 #6
0
 def test_lower_upper_syntax(self):
     with self.assertRaises(ValidationError) as cm:
         with allowed_deviation(0, 3):  # <- Allows from 0 to 3.
             raise ValidationError(self.differences)
     result_diffs = cm.exception.differences
     self.assertEqual({'aaa': Deviation(-1, 10)}, result_diffs)
예제 #7
0
 def test_tolerance_syntax(self):
     with self.assertRaises(ValidationError) as cm:
         with allowed_deviation(2):  # <- Allows +/- 2.
             raise ValidationError(self.differences)
     remaining = cm.exception.differences
     self.assertEqual(remaining, {'bbb': Deviation(+3, 10)})