Blame tools/extra/packager/jsonschema-2.3.0/jsonschema/tests/test_format.py

Packit 534379
"""
Packit 534379
Tests for the parts of jsonschema related to the :validator:`format` property.
Packit 534379
Packit 534379
"""
Packit 534379
Packit 534379
from jsonschema.tests.compat import mock, unittest
Packit 534379
Packit 534379
from jsonschema import FormatError, ValidationError, FormatChecker
Packit 534379
from jsonschema.validators import Draft4Validator
Packit 534379
Packit 534379
Packit 534379
class TestFormatChecker(unittest.TestCase):
Packit 534379
    def setUp(self):
Packit 534379
        self.fn = mock.Mock()
Packit 534379
Packit 534379
    def test_it_can_validate_no_formats(self):
Packit 534379
        checker = FormatChecker(formats=())
Packit 534379
        self.assertFalse(checker.checkers)
Packit 534379
Packit 534379
    def test_it_raises_a_key_error_for_unknown_formats(self):
Packit 534379
        with self.assertRaises(KeyError):
Packit 534379
            FormatChecker(formats=["o noes"])
Packit 534379
Packit 534379
    def test_it_can_register_cls_checkers(self):
Packit 534379
        with mock.patch.dict(FormatChecker.checkers, clear=True):
Packit 534379
            FormatChecker.cls_checks("new")(self.fn)
Packit 534379
            self.assertEqual(FormatChecker.checkers, {"new": (self.fn, ())})
Packit 534379
Packit 534379
    def test_it_can_register_checkers(self):
Packit 534379
        checker = FormatChecker()
Packit 534379
        checker.checks("new")(self.fn)
Packit 534379
        self.assertEqual(
Packit 534379
            checker.checkers,
Packit 534379
            dict(FormatChecker.checkers, new=(self.fn, ()))
Packit 534379
        )
Packit 534379
Packit 534379
    def test_it_catches_registered_errors(self):
Packit 534379
        checker = FormatChecker()
Packit 534379
        cause = self.fn.side_effect = ValueError()
Packit 534379
Packit 534379
        checker.checks("foo", raises=ValueError)(self.fn)
Packit 534379
Packit 534379
        with self.assertRaises(FormatError) as cm:
Packit 534379
            checker.check("bar", "foo")
Packit 534379
Packit 534379
        self.assertIs(cm.exception.cause, cause)
Packit 534379
        self.assertIs(cm.exception.__cause__, cause)
Packit 534379
Packit 534379
        # Unregistered errors should not be caught
Packit 534379
        self.fn.side_effect = AttributeError
Packit 534379
        with self.assertRaises(AttributeError):
Packit 534379
            checker.check("bar", "foo")
Packit 534379
Packit 534379
    def test_format_error_causes_become_validation_error_causes(self):
Packit 534379
        checker = FormatChecker()
Packit 534379
        checker.checks("foo", raises=ValueError)(self.fn)
Packit 534379
        cause = self.fn.side_effect = ValueError()
Packit 534379
        validator = Draft4Validator({"format": "foo"}, format_checker=checker)
Packit 534379
Packit 534379
        with self.assertRaises(ValidationError) as cm:
Packit 534379
            validator.validate("bar")
Packit 534379
Packit 534379
        self.assertIs(cm.exception.__cause__, cause)