New submission from Jason Vas Dias <jason.vas.d...@gmail.com>:

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 <rep...@bugs.python.org>
<http://bugs.python.org/issue11956>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to