blob: 86ac065e64c4042ccf7d0d15efb684ca999a3eea [file] [log] [blame]
Brett Cannond720b362009-02-01 04:28:04 +00001import functools
Brett Cannon6d2bb7f2009-08-27 23:44:18 +00002import importlib
Brett Cannon6d2bb7f2009-08-27 23:44:18 +00003import unittest
Brett Cannond720b362009-02-01 04:28:04 +00004
5
6using___import__ = False
7
8
9def import_(*args, **kwargs):
10 """Delegate to allow for injecting different implementations of import."""
11 if using___import__:
12 return __import__(*args, **kwargs)
Brett Cannon32732e32009-02-15 05:48:13 +000013 else:
Brett Cannona6503602009-08-30 18:40:23 +000014 return importlib.__import__(*args, **kwargs)
Brett Cannond720b362009-02-01 04:28:04 +000015
16
Brett Cannon44b28a92009-08-30 18:59:21 +000017def importlib_only(fxn):
18 """Decorator to skip a test if using __builtins__.__import__."""
19 return unittest.skipIf(using___import__, "importlib-specific test")(fxn)
Brett Cannond720b362009-02-01 04:28:04 +000020
21
22def mock_path_hook(*entries, importer):
23 """A mock sys.path_hooks entry."""
24 def hook(entry):
25 if entry not in entries:
26 raise ImportError
27 return importer
28 return hook