1"""Test for PEP 562 backport."""
2from __future__ import unicode_literals
3import unittest
4import warnings
5
6
7class TestPep562(unittest.TestCase):
8    """Tests for the PEP 562 package."""
9
10    def test_overrides(self):
11        """Test overrides."""
12
13        from . import overridden
14
15        # Capture overridden `__dir__` results
16        self.assertEqual(['__version__', 'version'], dir(overridden))
17
18        # Capture a successful attribute access
19        self.assertEqual((1, 0, 0), overridden.__version__)
20
21        # Capture the overridden deprecation
22        with warnings.catch_warnings(record=True) as w:
23            # Cause all warnings to always be triggered.
24            warnings.simplefilter("always")
25            # Trigger a warning.
26            version = overridden.version
27            # Verify some things
28            self.assertTrue(len(w) == 1)
29            self.assertTrue(issubclass(w[-1].category, DeprecationWarning))
30            self.assertEqual(overridden.__version__, version)
31
32        # Capture a failed attribute access
33        with self.assertRaises(AttributeError):
34            overridden.not_here
35
36    def test_overrides_helper(self):
37        """Test overrides with helper."""
38
39        from . import overridden_helper
40
41        # Capture overridden `__dir__` results
42        self.assertEqual(['__version__', 'version'], dir(overridden_helper))
43
44        # Capture a successful attribute access
45        self.assertEqual((1, 0, 0), overridden_helper.__version__)
46
47        # Capture the overridden deprecation
48        with warnings.catch_warnings(record=True) as w:
49            # Cause all warnings to always be triggered.
50            warnings.simplefilter("always")
51            # Trigger a warning.
52            version = overridden_helper.version
53            # Verify some things
54            self.assertTrue(len(w) == 1)
55            self.assertTrue(issubclass(w[-1].category, DeprecationWarning))
56            self.assertEqual(overridden_helper.__version__, version)
57
58        # Capture a failed attribute access
59        with self.assertRaises(AttributeError):
60            overridden_helper.not_here
61
62    def test_no_overrides(self):
63        """Test no overrides."""
64
65        from . import not_overridden
66
67        # Capture `__dir__` results
68        self.assertNotEqual(['__version__'], dir(not_overridden))
69        self.assertTrue('__version__' in dir(not_overridden))
70
71        # Capture a successful attribute access
72        self.assertEqual((1, 0, 0), not_overridden.__version__)
73
74        # Capture a failed attribute access
75        with self.assertRaises(AttributeError):
76            not_overridden.not_here
77