New submission from Jason Vas Dias <[email protected]>:
Hi - I've been experiencing many errors trying to build any version
of Python that will pass its test suite - see issues : #11946 , #11954 -
and now I've been advised to raise bugs about each test failure -
hence this bug. For details of my config and build procedure, please
see : issue #11954 .
So, running the new ./python fails test_import.py :
$ LD_LIBRARY_PATH=`pwd` LD_PRELINK=`pwd`/libpython3.3.so.1.0 \
./python /usr/src/cpython/Lib/test/test_import.py
======================================================================
FAIL: test_unwritable_directory (test.test_import.PycacheTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/src/cpython/Lib/test/test_import.py", line 545, in
test_unwritable_directory
'__pycache__', '{}.{}.pyc'.format(TESTFN, self.tag))))
AssertionError: True is not false
----------------------------------------------------------------------
Ran 40 tests in 0.851s
FAILED (failures=1)
Traceback (most recent call last):
File "/usr/src/cpython/Lib/test/test_import.py", line 658, in <module>
test_main()
File "/usr/src/cpython/Lib/test/test_import.py", line 652, in test_main
RelativeImportFromImportlibTests)
File "/usr/src/cpython/Lib/test/support.py", line 1208, in run_unittest
_run_suite(suite)
File "/usr/src/cpython/Lib/test/support.py", line 1191, in _run_suite
raise TestFailed(err)
test.support.TestFailed: Traceback (most recent call last):
File "/usr/src/cpython/Lib/test/test_import.py", line 545, in
test_unwritable_directory
'__pycache__', '{}.{}.pyc'.format(TESTFN, self.tag))))
AssertionError: True is not false
Thanks for the helpful error backtrace !
This function is somehow failing (test_import.py @ line 545 ):
@unittest.skipUnless(os.name == 'posix',
"test meaningful only on posix systems")
def test_unwritable_directory(self):
# When the umask causes the new __pycache__ directory to be
# unwritable, the import still succeeds but no .pyc file is written.
with temp_umask(0o222):
__import__(TESTFN)
self.assertTrue(os.path.exists('__pycache__'))
self.assertFalse(os.path.exists(os.path.join(
'__pycache__', '{}.{}.pyc'.format(TESTFN, self.tag))))
Running the same command under strace shows what the test is trying
to assert shouldn't exist really doesn't :
umask(022) = 0222
stat("__pycache__", {st_mode=S_IFDIR|S_ISGID|0555, st_size=4096, ...}) = 0
stat("__pycache__/@test_9634_tmp.cpython-32.pyc", {st_mode=S_IFREG|0444,
st_size=110, ...}) = 0
unlink("/usr/src/cpython/Lib/test/@test_9634_tmp.pyc") = -1 ENOENT (No such
file or directory)
unlink("/usr/src/cpython/Lib/test/@test_9634_tmp.pyo") = -1 ENOENT (No such
file or directory)
unlink("/usr/src/cpython/Lib/test/__pycache__/@test_9634_tmp.cpython-32.pyc") =
-1 ENOENT (No such file or directory)
unlink("/usr/src/cpython/Lib/test/__pycache__/@test_9634_tmp.cpython-32.pyo") =
-1 ENOENT (No such file or directory)
unlink("/usr/lib/python33.zip/@test_9634_tmp.pyc") = -1 ENOENT (No such file or
directory)
unlink("/usr/lib/python33.zip/@test_9634_tmp.pyo") = -1 ENOENT (No such file or
directory)
unlink("/usr/lib/python33.zip/__pycache__/@test_9634_tmp.cpython-32.pyc") = -1
ENOENT (No such file or directory)
unlink("/usr/lib/python33.zip/__pycache__/@test_9634_tmp.cpython-32.pyo") = -1
ENOENT (No such file or directory)
unlink("/usr/src/cpython/Lib/@test_9634_tmp.pyc") = -1 ENOENT (No such file or
directory)
unlink("/usr/src/cpython/Lib/@test_9634_tmp.pyo") = -1 ENOENT (No such file or
directory)
(see full listing below)
umask(022) = 0222
stat("__pycache__", {st_mode=S_IFDIR|S_ISGID|0555, st_size=4096, ...}) = 0
stat("__pycache__/@test_9634_tmp.cpython-32.pyc", {st_mode=S_IFREG|0444,
st_size=110, ...}) = 0
unlink("/usr/src/cpython/Lib/test/@test_9634_tmp.pyc") = -1 ENOENT (No such
file or directory)
unlink("/usr/src/cpython/Lib/test/@test_9634_tmp.pyo") = -1 ENOENT (No such
file or directory)
unlink("/usr/src/cpython/Lib/test/__pycache__/@test_9634_tmp.cpython-32.pyc") =
-1 ENOENT (No such file or directory)
unlink("/usr/src/cpython/Lib/test/__pycache__/@test_9634_tmp.cpython-32.pyo") =
-1 ENOENT (No such file or directory)
unlink("/usr/lib/python33.zip/@test_9634_tmp.pyc") = -1 ENOENT (No such file or
directory)
unlink("/usr/lib/python33.zip/@test_9634_tmp.pyo") = -1 ENOENT (No such file or
directory)
unlink("/usr/lib/python33.zip/__pycache__/@test_9634_tmp.cpython-32.pyc") = -1
ENOENT (No such file or directory)
unlink("/usr/lib/python33.zip/__pycache__/@test_9634_tmp.cpython-32.pyo") = -1
ENOENT (No such file or directory)
unlink("/usr/src/cpython/Lib/@test_9634_tmp.pyc") = -1 ENOENT (No such file or
directory)
unlink("/usr/src/cpython/Lib/@test_9634_tmp.pyo") = -1 ENOENT (No such file or
directory)
unlink("/usr/src/cpython/Lib/__pycache__/@test_9634_tmp.cpython-32.pyc") = -1
ENOENT (No such file or directory)
unlink("/usr/src/cpython/Lib/__pycache__/@test_9634_tmp.cpython-32.pyo") = -1
ENOENT (No such file or directory)
unlink("/usr/src/cpython/Lib/plat-linux2/@test_9634_tmp.pyc") = -1 ENOENT (No
such file or directory)
unlink("/usr/src/cpython/Lib/plat-linux2/@test_9634_tmp.pyo") = -1 ENOENT (No
such file or directory)
unlink("/usr/src/cpython/Lib/plat-linux2/__pycache__/@test_9634_tmp.cpython-32.pyc")
= -1 ENOENT (No such file or directory)
unlink("/usr/src/cpython/Lib/plat-linux2/__pycache__/@test_9634_tmp.cpython-32.pyo")
= -1 ENOENT (No such file or directory)
unlink("/mnt/sda3/Python-2.7/build/lib.linux-x86_64-3.3/@test_9634_tmp.pyc") =
-1 ENOENT (No such file or directory)
unlink("/mnt/sda3/Python-2.7/build/lib.linux-x86_64-3.3/@test_9634_tmp.pyo") =
-1 ENOENT (No such file or directory)
unlink("/mnt/sda3/Python-2.7/build/lib.linux-x86_64-3.3/__pycache__/@test_9634_tmp.cpython-32.pyc")
= -1 ENOENT (No such file or directory)
unlink("/mnt/sda3/Python-2.7/build/lib.linux-x86_64-3.3/__pycache__/@test_9634_tmp.cpython-32.pyo")
= -1 ENOENT (No such file or directory)
unlink("/home/root/.local/lib/python3.3/site-packages/@test_9634_tmp.pyc") = -1
ENOENT (No such file or directory)
unlink("/home/root/.local/lib/python3.3/site-packages/@test_9634_tmp.pyo") = -1
ENOENT (No such file or directory)
unlink("/home/root/.local/lib/python3.3/site-packages/__pycache__/@test_9634_tmp.cpython-32.pyc")
= -1 ENOENT (No such file or directory)
unlink("/home/root/.local/lib/python3.3/site-packages/__pycache__/@test_9634_tmp.cpython-32.pyo")
= -1 ENOENT (No such file or directory)
lstat("__pycache__", {st_mode=S_IFDIR|S_ISGID|0555, st_size=4096, ...}) = 0
open("__pycache__", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
getdents64(3, /* 3 entries */, 32768) = 104
getdents64(3, /* 0 entries */, 32768) = 0
close(3) = 0
lstat("__pycache__/@test_9634_tmp.cpython-32.pyc", {st_mode=S_IFREG|0444,
st_size=110, ...}) = 0
unlink("__pycache__/@test_9634_tmp.cpython-32.pyc") = 0
rmdir("__pycache__") = 0
unlink("@test_9634_tmp.py") = 0
stat("/usr/src/cpython/Lib/test/test_import.py", {st_mode=S_IFREG|0644,
st_size=24532, ...}) = 0
open("/usr/src/cpython/Lib/test/test_import.py", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=24532, ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS,
0x7fff7ef66e98) = -1 ENOTTY (Inappropriate ioctl for device)
fstat(3, {st_mode=S_IFREG|0644, st_size=24532, ...}) = 0
lseek(3, 0, SEEK_CUR) = 0
read(3, "import builtins\nimport imp\nfrom importlib.test.import_ import
test_relative_imports\nfrom importlib.test.import_ import util as
importlib_util\nimport marshal\nimport os\nimport py_compile\nimport
random\nimport stat\nimport sys\nimport unittest\nimport textwrap\n\nfrom
test.support import (\n EnvironmentVarGuard, TESTFN, check_warnings, forget,
is_jython,\n make_legacy_pyc, rmtree, run_unittest, swap_attr, swap_item,
temp_umask,\n unlink, unload)\nfrom test import script_helper\n\n\ndef
remove_files(name):\n for f in (name + \".py\",\n name +
\".pyc\",\n name + \".pyo\",\n name + \".pyw\",\n
name + \"$py.class\"):\n unlink(f)\n
rmtree('__pycache__')\n\n\nclass ImportTests(unittest.TestCase):\n\n def
setUp(self):\n remove_files(TESTFN)\n\n def tearDown(self):\n
unload(TESTFN)\n\n setUp = tearDown\n\n def
test_case_sensitivity(self):\n # Brief digression to tes
t that import is case-sensitive: if we got\n # this far, we know for
sure that \"random\" exists.\n with self.assertRaises(ImportError):\n
import RAnDoM\n\n def test_double_const(self):\n # Another
brief digression to test the accuracy of manifest float\n # constants.\n
from test import double_const # don't blink -- that *was* the test\n\n
def test_import(self):\n def test_with_extension(ext):\n #
The extension is normally \".py\", perhaps \".pyw\".\n source =
TESTFN + ext\n pyo = TESTFN + \".pyo\"\n if is_jython:\n
pyc = TESTFN + \"$py.class\"\n else:\n
pyc = TESTFN + \".pyc\"\n\n with open(source, \"w\") as f:\n
print(\"# This tests Python's ability to import a\",\n
ext, \"file.\", file=f)\n a = random.randrange(1000)\n
b = random.randrange(1000)\n
print(\"a =\", a, file=f)\n print(\"b =\", b,
file=f)\n\n if TESTFN in sys.modules:\n del
sys.modules[TESTFN]\n try:\n try:\n
mod = __import__(TESTFN)\n except ImportError as err:\n
self.fail(\"import from %s failed: %s\" % (ext, err))\n\n
self.assertEqual(mod.a, a,\n \"module loaded (%s) but
contents invalid\" % mod)\n self.assertEqual(mod.b, b,\n
\"module loaded (%s) but contents invalid\" % mod)\n
finally:\n forget(TESTFN)\n unlink(source)\n
unlink(pyc)\n unlink(pyo)\n\n
sys.path.insert(0, os.curdir)\n try:\n
test_with_extension(\".py\")\n if
sys.platform.startswith(\"win\"):\n for ext in [\".PY\",
\".Py\", \".pY\", \".pyw\", \".PYW\", \".pYw\"]:\n
test_with_extension(ext)\n finally:\n del
sys.path[0]\n\n @unittest.skipUnless(os.name == 'posix',\n
\"test meaningful only on posix systems\")\n def
test_execute_bit_not_copied(self):\n # Issue 6070: under posix .pyc
files got their execute bit set if\n # the .py file had the execute bit
set, but they aren't executable.\n with temp_umask(0o022):\n
sys.path.insert(0, os.curdir)\n try:\n fname = TESTFN
+ os.extsep + \"py\"\n open(fname, 'w').close()\n
os.chmod(fname, (stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH |\n
stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH))\n
__import__(TESTFN)\n fn = imp.cache_from_source(fname)\n
if not os.path.exists(fn):\n self.fail(\"__import__
did not result in creation of \"\n \"either
a .pyc or .pyo file\")\n s = os.stat(fn)\n
self.assertEqual(\n stat.S_IMODE(s.st_mode),\n
stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)\n
finally:\n del sys.path[0]\n
remove_files(TESTFN)\n u", 4096) = 4096
lseek(3, 0, SEEK_CUR) = 4096
read(3, "nload(TESTFN)\n\n def test_imp_module(self):\n # Verify that
the imp module can correctly load and find .py files\n # XXX (ncoghlan):
It would be nice to use support.CleanImport\n # here, but that breaks
because the os module registers some\n # handlers in copy_reg on import.
Since CleanImport doesn't\n # revert that registration, the module is
left in a broken\n # state after reversion. Reinitialising the module
contents\n # and just reverting os.environ to its previous state is an
OK\n # workaround\n orig_path = os.path\n orig_getenv =
os.getenv\n with EnvironmentVarGuard():\n x =
imp.find_module(\"os\")\n self.addCleanup(x[0].close)\n
new_os = imp.load_module(\"os\", *x)\n self.assertIs(os, new_os)\n
self.assertIs(orig_path, new_os.path)\n
self.assertIsNot(orig_getenv, new_os.getenv)\n\n def
test_module_with_large_sta
ck(self, module='longlist'):\n # Regression test for
http://bugs.python.org/issue561858.\n filename = module + '.py'\n\n
# Create a file with a list of 65000 elements.\n with open(filename,
'w') as f:\n f.write('d = [\\n')\n for i in
range(65000):\n f.write('\"\",\\n')\n
f.write(']')\n\n try:\n # Compile & remove .py file; we only
need .pyc (or .pyo).\n # Bytecode must be relocated from the PEP
3147 bytecode-only location.\n py_compile.compile(filename)\n
finally:\n unlink(filename)\n\n # Need to be able to load
from current dir.\n sys.path.append('')\n\n try:\n
make_legacy_pyc(filename)\n # This used to crash.\n
exec('import ' + module)\n finally:\n # Cleanup.\n
del sys.path[-1]\n unlink(filename + 'c')\n
unlink(filename + 'o')\n\n def
test_failing_import_sticks(self):\n source = TESTFN + \".py\"\n
with open(source, \"w\") as f:\n print(\"a = 1/0\", file=f)\n\n
# New in 2.4, we shouldn't be able to import that no matter how often\n
# we try.\n sys.path.insert(0, os.curdir)\n if TESTFN in
sys.modules:\n del sys.modules[TESTFN]\n try:\n
for i in [1, 2, 3]:\n self.assertRaises(ZeroDivisionError,
__import__, TESTFN)\n self.assertNotIn(TESTFN, sys.modules,\n
\"damaged module in sys.modules on %i try\" % i)\n
finally:\n del sys.path[0]\n
remove_files(TESTFN)\n\n def test_import_name_binding(self):\n #
import x.y.z binds x in the current namespace\n import test as x\n
import test.support\n self.assertTrue(x is test, x.__name__)\n
self.assertTrue(hasattr(test.support, \"__file__\"))\n\n # import x.y.
z as w binds z as w\n import test.support as y\n
self.assertTrue(y is test.support, y.__name__)\n\n def
test_failing_reload(self):\n # A failing reload should leave the module
object in sys.modules.\n source = TESTFN + os.extsep + \"py\"\n
with open(source, \"w\") as f:\n f.write(\"a = 1\\nb=2\\n\")\n\n
sys.path.insert(0, os.curdir)\n try:\n mod =
__import__(TESTFN)\n self.assertIn(TESTFN, sys.modules)\n
self.assertEqual(mod.a, 1, \"module has wrong attribute values\")\n
self.assertEqual(mod.b, 2, \"module has wrong attribute values\")\n\n
# On WinXP, just replacing the .py file wasn't enough to\n #
convince reload() to reparse it. Maybe the timestamp didn't\n #
move enough. We force it to get reparsed by removing the\n #
compiled file too.\n remove_files(TESTFN)\n\n # Now
damage the module.\n
with open(source, \"w\") as f:\n f.write(\"a =
10\\nb=20//0\\n\")\n\n self.assertRaises(ZeroDivisionError,
imp.reload, mod)\n # But we still expect the module to be in
sys.modules.\n mod = sys.modules.get(TESTFN)\n
self.assertIsNot", 4096) = 4096
read(3, "(mod, None, \"expected module to be in sys.modules\")\n\n #
We should have replaced a w/ 10, but the old b value should\n #
stick.\n self.assertEqual(mod.a, 10, \"module has wrong attribute
values\")\n self.assertEqual(mod.b, 2, \"module has wrong attribute
values\")\n\n finally:\n del sys.path[0]\n
remove_files(TESTFN)\n unload(TESTFN)\n\n def
test_file_to_source(self):\n # check if __file__ points to the source
file where available\n source = TESTFN + \".py\"\n with
open(source, \"w\") as f:\n f.write(\"test = None\\n\")\n\n
sys.path.insert(0, os.curdir)\n try:\n mod =
__import__(TESTFN)\n self.assertTrue(mod.__file__.endswith('.py'))\n
os.remove(source)\n del sys.modules[TESTFN]\n
make_legacy_pyc(source)\n mod = __import__(TESTFN)\n
base, ext = os.path.split
ext(mod.__file__)\n self.assertIn(ext, ('.pyc', '.pyo'))\n
finally:\n del sys.path[0]\n remove_files(TESTFN)\n
if TESTFN in sys.modules:\n del sys.modules[TESTFN]\n\n
def test_import_name_binding(self):\n # import x.y.z binds x in the
current namespace.\n import test as x\n import test.support\n
self.assertIs(x, test, x.__name__)\n
self.assertTrue(hasattr(test.support, \"__file__\"))\n\n # import x.y.z
as w binds z as w.\n import test.support as y\n self.assertIs(y,
test.support, y.__name__)\n\n def
test_import_initless_directory_warning(self):\n with check_warnings(('',
ImportWarning)):\n # Just a random non-package directory we always
expect to be\n # somewhere in sys.path...\n
self.assertRaises(ImportError, __import__, \"site-packages\")\n\n def
test_import_by_filename(self):\n path = os.path.absp
ath(TESTFN)\n encoding = sys.getfilesystemencoding()\n try:\n
path.encode(encoding)\n except UnicodeEncodeError:\n
self.skipTest('path is not encodable to {}'.format(encoding))\n with
self.assertRaises(ImportError) as c:\n __import__(path)\n\n def
test_import_in_del_does_not_crash(self):\n # Issue 4236\n testfn
= script_helper.make_script('', TESTFN, textwrap.dedent(\"\"\"\\\n
import sys\n class C:\n def __del__(self):\n
import imp\n sys.argv.insert(0, C())\n \"\"\"))\n
script_helper.assert_python_ok(testfn)\n\n\nclass
PycRewritingTests(unittest.TestCase):\n # Test that the `co_filename`
attribute on code objects always points\n # to the right file, even when
various things happen (e.g. both the .py\n # and the .pyc file are
renamed).\n\n module_name = \"unlikely_module_name\"\n module_source =
\"\"\"\n
import sys\ncode_filename =
sys._getframe().f_code.co_filename\nmodule_filename = __file__\nconstant =
1\ndef func():\n pass\nfunc_filename = func.__code__.co_filename\n\"\"\"\n
dir_name = os.path.abspath(TESTFN)\n file_name = os.path.join(dir_name,
module_name) + os.extsep + \"py\"\n compiled_name =
imp.cache_from_source(file_name)\n\n def setUp(self):\n self.sys_path
= sys.path[:]\n self.orig_module = sys.modules.pop(self.module_name,
None)\n os.mkdir(self.dir_name)\n with open(self.file_name,
\"w\") as f:\n f.write(self.module_source)\n
sys.path.insert(0, self.dir_name)\n\n def tearDown(self):\n
sys.path[:] = self.sys_path\n if self.orig_module is not None:\n
sys.modules[self.module_name] = self.orig_module\n else:\n
unload(self.module_name)\n unlink(self.file_name)\n
unlink(self.compiled_name)\n rmtree(self.dir_name)\n\n def
import_module(sel
f):\n ns = globals()\n __import__(self.module_name, ns, ns)\n
return sys.modules[self.module_name]\n\n def test_basics(self):\n
mod = self.import_module()\n self.assertEqual(mod.module_filename,
self.file_name)\n self.assertEqual(mod.code_filename, self.fil", 4096) =
4096
read(3, "e_name)\n self.assertEqual(mod.func_filename, self.file_name)\n
del sys.modules[self.module_name]\n mod = self.import_module()\n
self.assertEqual(mod.module_filename, self.file_name)\n
self.assertEqual(mod.code_filename, self.file_name)\n
self.assertEqual(mod.func_filename, self.file_name)\n\n def
test_incorrect_code_name(self):\n py_compile.compile(self.file_name,
dfile=\"another_module.py\")\n mod = self.import_module()\n
self.assertEqual(mod.module_filename, self.file_name)\n
self.assertEqual(mod.code_filename, self.file_name)\n
self.assertEqual(mod.func_filename, self.file_name)\n\n def
test_module_without_source(self):\n target = \"another_module.py\"\n
py_compile.compile(self.file_name, dfile=target)\n
os.remove(self.file_name)\n pyc_file = make_legacy_pyc(self.file_name)\n
mod = self.import_module()\n self.assertEqual(mod.module_filename
, pyc_file)\n self.assertEqual(mod.code_filename, target)\n
self.assertEqual(mod.func_filename, target)\n\n def
test_foreign_code(self):\n py_compile.compile(self.file_name)\n
with open(self.compiled_name, \"rb\") as f:\n header = f.read(8)\n
code = marshal.load(f)\n constants = list(code.co_consts)\n
foreign_code = test_main.__code__\n pos = constants.index(1)\n
constants[pos] = foreign_code\n code = type(code)(code.co_argcount,
code.co_kwonlyargcount,\n code.co_nlocals,
code.co_stacksize,\n code.co_flags, code.co_code,
tuple(constants),\n code.co_names, code.co_varnames,
code.co_filename,\n code.co_name, code.co_firstlineno,
code.co_lnotab,\n code.co_freevars,
code.co_cellvars)\n with open(self.compiled_name, \"wb\") as f:\n
f.write(header)\n
marshal.dump(code, f)\n mod = self.import_module()\n
self.assertEqual(mod.constant.co_filename, foreign_code.co_filename)\n\n\nclass
PathsTests(unittest.TestCase):\n SAMPLES = ('test',
'test\\u00e4\\u00f6\\u00fc\\u00df', 'test\\u00e9\\u00e8',\n
'test\\u00b0\\u00b3\\u00b2')\n path = TESTFN\n\n def setUp(self):\n
os.mkdir(self.path)\n self.syspath = sys.path[:]\n\n def
tearDown(self):\n rmtree(self.path)\n sys.path[:] =
self.syspath\n\n # Regression test for http://bugs.python.org/issue1293.\n
def test_trailing_slash(self):\n with open(os.path.join(self.path,
'test_trailing_slash.py'), 'w') as f:\n f.write(\"testdata =
'test_trailing_slash'\")\n sys.path.append(self.path+'/')\n mod =
__import__(\"test_trailing_slash\")\n self.assertEqual(mod.testdata,
'test_trailing_slash')\n unload(\"test_trailing_slash\")\n\n #
Regression test for http://bugs.pyt
hon.org/issue3677.\n def _test_UNC_path(self):\n with
open(os.path.join(self.path, 'test_trailing_slash.py'), 'w') as f:\n
f.write(\"testdata = 'test_trailing_slash'\")\n # Create the UNC path,
like \\\\myhost\\c$\\foo\\bar.\n path = os.path.abspath(self.path)\n
import socket\n hn = socket.gethostname()\n drive = path[0]\n
unc = \"\\\\\\\\%s\\\\%s$\"%(hn, drive)\n unc += path[2:]\n
sys.path.append(path)\n mod = __import__(\"test_trailing_slash\")\n
self.assertEqual(mod.testdata, 'test_trailing_slash')\n
unload(\"test_trailing_slash\")\n\n if sys.platform == \"win32\":\n
test_UNC_path = _test_UNC_path\n\n\nclass
RelativeImportTests(unittest.TestCase):\n\n def tearDown(self):\n
unload(\"test.relimport\")\n setUp = tearDown\n\n def
test_relimport_star(self):\n # This will import * from .test_import.\n
from . import relimport\n self.ass
ertTrue(hasattr(relimport, \"RelativeImportTests\"))\n\n def
test_issue3221(self):\n # Note for mergers: the 'absolute' tests from
the 2.x branch\n # are missing in Py3k because implicit relative imports
are\n # a thing of the past\n #\n # Regression test for
htt", 4096) = 4096
read(3, "p://bugs.python.org/issue3221.\n def check_relative():\n
exec(\"from . import relimport\", ns)\n\n # Check relative import OK
with __package__ and __name__ correct\n ns = dict(__package__='test',
__name__='test.notarealmodule')\n check_relative()\n\n # Check
relative import OK with only __name__ wrong\n ns =
dict(__package__='test', __name__='notarealpkg.notarealmodule')\n
check_relative()\n\n # Check relative import fails with only __package__
wrong\n ns = dict(__package__='foo', __name__='test.notarealmodule')\n
self.assertRaises(SystemError, check_relative)\n\n # Check relative
import fails with __package__ and __name__ wrong\n ns =
dict(__package__='foo', __name__='notarealpkg.notarealmodule')\n
self.assertRaises(SystemError, check_relative)\n\n # Check relative
import fails with package set to a non-string\n ns =
dict(__package__=object())\n
self.assertRaises(ValueError, check_relative)\n\n def
test_absolute_import_without_future(self):\n # If explicit relative
import syntax is used, then do not try\n # to perform an absolute import
in the face of failure.\n # Issue #7902.\n with
self.assertRaises(ImportError):\n from .os import sep\n
self.fail(\"explicit relative import triggered an \"\n
\"implicit absolute import\")\n\n\nclass
OverridingImportBuiltinTests(unittest.TestCase):\n def
test_override_builtin(self):\n # Test that overriding
builtins.__import__ can bypass sys.modules.\n import os\n\n def
foo():\n import os\n return os\n
self.assertEqual(foo(), os) # Quick sanity check.\n\n with
swap_attr(builtins, \"__import__\", lambda *x: 5):\n
self.assertEqual(foo(), 5)\n\n # Test what happens when we shadow
__import__ in globals(); this\n # currently does
not impact the import process, but if this changes,\n # other code will
need to change, so keep this test as a tripwire.\n with
swap_item(globals(), \"__import__\", lambda *x: 5):\n
self.assertEqual(foo(), os)\n\n\nclass PycacheTests(unittest.TestCase):\n #
Test the various PEP 3147 related behaviors.\n\n tag = imp.get_tag()\n\n
def _clean(self):\n forget(TESTFN)\n rmtree('__pycache__')\n
unlink(self.source)\n\n def setUp(self):\n self.source = TESTFN +
'.py'\n self._clean()\n with open(self.source, 'w') as fp:\n
print('# This is a test file written by test_import.py', file=fp)\n
sys.path.insert(0, os.curdir)\n\n def tearDown(self):\n assert
sys.path[0] == os.curdir, 'Unexpected sys.path[0]'\n del sys.path[0]\n
self._clean()\n\n def test_import_pyc_path(self):\n
self.assertFalse(os.path.exists('__pycache__'))\n __import__(TESTFN)\n
self.assertTrue(os.path.exists('__pycache__'))\n
self.assertTrue(os.path.exists(os.path.join(\n '__pycache__',
'{}.{}.py{}'.format(\n TESTFN, self.tag, __debug__ and 'c' or
'o'))))\n\n @unittest.skipUnless(os.name == 'posix',\n
\"test meaningful only on posix systems\")\n def
test_unwritable_directory(self):\n # When the umask causes the new
__pycache__ directory to be\n # unwritable, the import still succeeds
but no .pyc file is written.\n with temp_umask(0o222):\n
__import__(TESTFN)\n self.assertTrue(os.path.exists('__pycache__'))\n
self.assertFalse(os.path.exists(os.path.join(\n '__pycache__',
'{}.{}.pyc'.format(TESTFN, self.tag))))\n\n def test_missing_source(self):\n
# With PEP 3147 cache layout, removing the source but leaving the pyc\n
# file does not satisfy the import.\n __import__(TESTFN)\n
pyc_file = imp.cache_from_sour
ce(self.source)\n self.assertTrue(os.path.exists(pyc_file))\n
os.remove(self.source)\n forget(TESTFN)\n
self.assertRaises(ImportError, __import__, TESTFN)\n\n def
test_missing_source_legacy(self):\n # Like test_missing_source() ",
4096) = 4096
read(3, "except that for backward compatibility,\n # when the pyc file
lives where the py file would have been (and named\n # without the tag),
it is importable. The __file__ of the imported\n # module is the pyc
location.\n __import__(TESTFN)\n # pyc_file gets removed in
_clean() via tearDown().\n pyc_file = make_legacy_pyc(self.source)\n
os.remove(self.source)\n unload(TESTFN)\n m =
__import__(TESTFN)\n self.assertEqual(m.__file__,\n
os.path.join(os.curdir, os.path.relpath(pyc_file)))\n\n def
test___cached__(self):\n # Modules now also have an __cached__ that
points to the pyc file.\n m = __import__(TESTFN)\n pyc_file =
imp.cache_from_source(TESTFN + '.py')\n self.assertEqual(m.__cached__,
os.path.join(os.curdir, pyc_file))\n\n def
test___cached___legacy_pyc(self):\n # Like test___cached__() except that
for backward compatibility,\n
# when the pyc file lives where the py file would have been (and named\n
# without the tag), it is importable. The __cached__ of the imported\n
# module is the pyc location.\n __import__(TESTFN)\n # pyc_file
gets removed in _clean() via tearDown().\n pyc_file =
make_legacy_pyc(self.source)\n os.remove(self.source)\n
unload(TESTFN)\n m = __import__(TESTFN)\n
self.assertEqual(m.__cached__,\n
os.path.join(os.curdir, os.path.relpath(pyc_file)))\n\n def
test_package___cached__(self):\n # Like test___cached__ but for
packages.\n def cleanup():\n rmtree('pep3147')\n
os.mkdir('pep3147')\n self.addCleanup(cleanup)\n # Touch the
__init__.py\n with open(os.path.join('pep3147', '__init__.py'), 'w'):\n
pass\n with open(os.path.join('pep3147', 'foo.py'), 'w'):\n
pass\n unload('pep3147.foo')\n unload('pep3
147')\n m = __import__('pep3147.foo')\n init_pyc =
imp.cache_from_source(\n os.path.join('pep3147', '__init__.py'))\n
self.assertEqual(m.__cached__, os.path.join(os.curdir, init_pyc))\n
foo_pyc = imp.cache_from_source(os.path.join('pep3147', 'foo.py'))\n
self.assertEqual(sys.modules['pep3147.foo'].__cached__,\n
os.path.join(os.curdir, foo_pyc))\n\n def
test_package___cached___from_pyc(self):\n # Like test___cached__ but
ensuring __cached__ when imported from a\n # PEP 3147 pyc file.\n
def cleanup():\n rmtree('pep3147')\n os.mkdir('pep3147')\n
self.addCleanup(cleanup)\n unload('pep3147.foo')\n
unload('pep3147')\n # Touch the __init__.py\n with
open(os.path.join('pep3147', '__init__.py'), 'w'):\n pass\n
with open(os.path.join('pep3147', 'foo.py'), 'w'):\n pass\n m
= __import__('pep3147.foo')\n
unload('pep3147.foo')\n unload('pep3147')\n m =
__import__('pep3147.foo')\n init_pyc = imp.cache_from_source(\n
os.path.join('pep3147', '__init__.py'))\n
self.assertEqual(m.__cached__, os.path.join(os.curdir, init_pyc))\n
foo_pyc = imp.cache_from_source(os.path.join('pep3147', 'foo.py'))\n
self.assertEqual(sys.modules['pep3147.foo'].__cached__,\n
os.path.join(os.curdir, foo_pyc))\n\n\nclass
RelativeImportFromImportlibTests(test_relative_imports.RelativeImports):\n\n
def setUp(self):\n self._importlib_util_flag =
importlib_util.using___import__\n importlib_util.using___import__ =
True\n\n def tearDown(self):\n importlib_util.using___import__ =
self._importlib_util_flag\n\n\ndef test_main(verbose=None):\n
run_unittest(ImportTests, PycacheTests,\n PycRewritingTests,
PathsTests, RelativeImportTests,\n
OverridingImportBuiltinTests,\n
RelativeImportFromImportlibTests)\n\n\nif __name__ == '__main__':\n
# Test needs to be a package, so we can do relative imports.\n from
test.test_import import test_main\n test_main()\n", 4096) = 4052
read(3, "", 4096) = 0
close(3) = 0
write(1, "FAIL\ntest_basics (test.test_import.PycRewritingTests) ... ", 58FAIL
----------
messages: 134781
nosy: Jason.Vas.Dias
priority: normal
severity: normal
status: open
title: 3.3 : test_import.py causes 'make test' to fail
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue11956>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com