@ -1,5 +1,6 @@
# We import importlib *ASAP* in order to test #15386
import importlib
from importlib._bootstrap import _get_sourcefile
import builtins
import imp
from test.test_importlib.import_ import util as importlib_util
@ -11,6 +12,7 @@ import random
import stat
import sys
import unittest
import unittest.mock as mock
import textwrap
import errno
import shutil
@ -864,6 +866,40 @@ class ImportlibBootstrapTests(unittest.TestCase):
self . assertIs ( imp . new_module , mod . new_module )
@cpython_only
class GetSourcefileTests ( unittest . TestCase ) :
""" Test importlib._bootstrap._get_sourcefile() as used by the C API.
Because of the peculiarities of the need of this function , the tests are
knowingly whitebox tests .
"""
def test_get_sourcefile ( self ) :
# Given a valid bytecode path, return the path to the corresponding
# source file if it exists.
with mock . patch ( ' importlib._bootstrap._path_isfile ' ) as _path_isfile :
_path_isfile . return_value = True ;
path = TESTFN + ' .pyc '
expect = TESTFN + ' .py '
self . assertEqual ( _get_sourcefile ( path ) , expect )
def test_get_sourcefile_no_source ( self ) :
# Given a valid bytecode path without a corresponding source path,
# return the original bytecode path.
with mock . patch ( ' importlib._bootstrap._path_isfile ' ) as _path_isfile :
_path_isfile . return_value = False ;
path = TESTFN + ' .pyc '
self . assertEqual ( _get_sourcefile ( path ) , path )
def test_get_sourcefile_bad_ext ( self ) :
# Given a path with an invalid bytecode extension, return the
# bytecode path passed as the argument.
path = TESTFN + ' .bad_ext '
self . assertEqual ( _get_sourcefile ( path ) , path )
class ImportTracebackTests ( unittest . TestCase ) :
def setUp ( self ) :
@ -1028,7 +1064,7 @@ def test_main(verbose=None):
run_unittest ( ImportTests , PycacheTests , FilePermissionTests ,
PycRewritingTests , PathsTests , RelativeImportTests ,
OverridingImportBuiltinTests ,
ImportlibBootstrapTests ,
ImportlibBootstrapTests , GetSourcefileTests ,
TestSymbolicallyLinkedPackage ,
ImportTracebackTests )