1import abc
2
3
4class FinderTests(metaclass=abc.ABCMeta):
5
6    """Basic tests for a finder to pass."""
7
8    @abc.abstractmethod
9    def test_module(self):
10        # Test importing a top-level module.
11        pass
12
13    @abc.abstractmethod
14    def test_package(self):
15        # Test importing a package.
16        pass
17
18    @abc.abstractmethod
19    def test_module_in_package(self):
20        # Test importing a module contained within a package.
21        # A value for 'path' should be used if for a meta_path finder.
22        pass
23
24    @abc.abstractmethod
25    def test_package_in_package(self):
26        # Test importing a subpackage.
27        # A value for 'path' should be used if for a meta_path finder.
28        pass
29
30    @abc.abstractmethod
31    def test_package_over_module(self):
32        # Test that packages are chosen over modules.
33        pass
34
35    @abc.abstractmethod
36    def test_failure(self):
37        # Test trying to find a module that cannot be handled.
38        pass
39
40
41class LoaderTests(metaclass=abc.ABCMeta):
42
43    @abc.abstractmethod
44    def test_module(self):
45        """A module should load without issue.
46
47        After the loader returns the module should be in sys.modules.
48
49        Attributes to verify:
50
51            * __file__
52            * __loader__
53            * __name__
54            * No __path__
55
56        """
57        pass
58
59    @abc.abstractmethod
60    def test_package(self):
61        """Loading a package should work.
62
63        After the loader returns the module should be in sys.modules.
64
65        Attributes to verify:
66
67            * __name__
68            * __file__
69            * __package__
70            * __path__
71            * __loader__
72
73        """
74        pass
75
76    @abc.abstractmethod
77    def test_lacking_parent(self):
78        """A loader should not be dependent on it's parent package being
79        imported."""
80        pass
81
82    @abc.abstractmethod
83    def test_state_after_failure(self):
84        """If a module is already in sys.modules and a reload fails
85        (e.g. a SyntaxError), the module should be in the state it was before
86        the reload began."""
87        pass
88
89    @abc.abstractmethod
90    def test_unloadable(self):
91        """Test ImportError is raised when the loader is asked to load a module
92        it can't."""
93        pass
94