summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_import.py30
1 files changed, 29 insertions, 1 deletions
diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py
index 7f1e37f..44e67c3 100644
--- a/Lib/test/test_import.py
+++ b/Lib/test/test_import.py
@@ -1,5 +1,6 @@
import unittest
import os
+import stat
import random
import shutil
import sys
@@ -7,7 +8,7 @@ import py_compile
import warnings
import imp
import marshal
-from test.support import unlink, TESTFN, unload, run_unittest
+from test.support import unlink, TESTFN, unload, run_unittest, TestFailed
def remove_files(name):
@@ -80,6 +81,32 @@ class ImportTest(unittest.TestCase):
finally:
del sys.path[0]
+ @unittest.skipUnless(os.name == 'posix', "test meaningful only on posix systems")
+ def test_execute_bit_not_copied(self):
+ # Issue 6070: under posix .pyc files got their execute bit set if
+ # the .py file had the execute bit set, but they aren't executable.
+ oldmask = os.umask(0o022)
+ sys.path.insert(0, os.curdir)
+ try:
+ fname = TESTFN + os.extsep + "py"
+ f = open(fname, 'w').close()
+ os.chmod(fname, (stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH |
+ stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH))
+ __import__(TESTFN)
+ fn = fname + 'c'
+ if not os.path.exists(fn):
+ fn = fname + 'o'
+ if not os.path.exists(fn): raise TestFailed("__import__ did "
+ "not result in creation of either a .pyc or .pyo file")
+ s = os.stat(fn)
+ self.assertEquals(stat.S_IMODE(s.st_mode),
+ stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)
+ finally:
+ os.umask(oldmask)
+ remove_files(TESTFN)
+ if TESTFN in sys.modules: del sys.modules[TESTFN]
+ del sys.path[0]
+
def testImpModule(self):
# Verify that the imp module can correctly load and find .py files
import imp
@@ -230,6 +257,7 @@ class ImportTest(unittest.TestCase):
else:
self.fail("import by path didn't raise an exception")
+
class TestPycRewriting(unittest.TestCase):
# Test that the `co_filename` attribute on code objects always points
# to the right file, even when various things happen (e.g. both the .py