inspect: Fix getsource() to load updated source of reloaded module

Issue #1218234. Initial patch by Berker Peksag.
This commit is contained in:
Yury Selivanov 2014-12-08 18:00:25 -05:00
parent f8b44a4f37
commit 7de29687f2
3 changed files with 46 additions and 6 deletions

View file

@ -12,6 +12,7 @@ import re
import shutil
import sys
import types
import textwrap
import unicodedata
import unittest
import unittest.mock
@ -27,6 +28,8 @@ from test.script_helper import assert_python_ok, assert_python_failure
from test import inspect_fodder as mod
from test import inspect_fodder2 as mod2
from test.test_import import _ready_to_import
# Functions tested in this suite:
# ismodule, isclass, ismethod, isfunction, istraceback, isframe, iscode,
@ -3087,6 +3090,34 @@ class TestMain(unittest.TestCase):
self.assertEqual(err, b'')
class TestReload(unittest.TestCase):
src_before = textwrap.dedent("""\
def foo():
print("Bla")
""")
src_after = textwrap.dedent("""\
def foo():
print("Oh no!")
""")
def assertInspectEqual(self, path, source):
inspected_src = inspect.getsource(source)
with open(path) as src:
self.assertEqual(
src.read().splitlines(True),
inspected_src.splitlines(True)
)
def test_getsource_reload(self):
# see issue 1218234
with _ready_to_import('reload_bug', self.src_before) as (name, path):
module = importlib.import_module(name)
self.assertInspectEqual(path, module)
with open(path, 'w') as src:
src.write(self.src_after)
self.assertInspectEqual(path, module)
def test_main():
@ -3097,7 +3128,7 @@ def test_main():
TestGetcallargsUnboundMethods, TestGetattrStatic, TestGetGeneratorState,
TestNoEOL, TestSignatureObject, TestSignatureBind, TestParameterObject,
TestBoundArguments, TestSignaturePrivateHelpers, TestGetClosureVars,
TestUnwrap, TestMain
TestUnwrap, TestMain, TestReload
)
if __name__ == "__main__":