mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 10:44:56 +00:00
Bug 1628205 - Convert nsinstall.py to python 3. r=rstewart
Also enable all config/tests with python3. unit-nsinstall.py was the last one that didn't pass with python 3. Switch the test to using @unittest.skipIf and disable the subprocess test because we purposely broke running nsinstall.py independently with python 2. Differential Revision: https://phabricator.services.mozilla.com/D70160 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
ac5b6e6cd0
commit
5944220eee
@ -333,7 +333,7 @@ endif
|
||||
PWD := $(CURDIR)
|
||||
endif
|
||||
|
||||
NSINSTALL_PY := $(PYTHON) $(abspath $(MOZILLA_DIR)/config/nsinstall.py)
|
||||
NSINSTALL_PY := $(PYTHON3) $(abspath $(MOZILLA_DIR)/config/nsinstall.py)
|
||||
ifneq (,$(or $(filter WINNT,$(HOST_OS_ARCH)),$(if $(COMPILE_ENVIRONMENT),,1)))
|
||||
NSINSTALL = $(NSINSTALL_PY)
|
||||
else
|
||||
|
@ -15,6 +15,7 @@ from optparse import OptionParser
|
||||
import mozfile
|
||||
import os
|
||||
import os.path
|
||||
import six
|
||||
import sys
|
||||
import shutil
|
||||
|
||||
@ -154,36 +155,8 @@ def _nsinstall_internal(argv):
|
||||
|
||||
|
||||
def nsinstall(argv):
|
||||
return _nsinstall_internal([unicode(arg, "utf-8") for arg in argv])
|
||||
return _nsinstall_internal([six.ensure_text(arg, "utf-8") for arg in argv])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# sys.argv corrupts characters outside the system code page on Windows
|
||||
# <http://bugs.python.org/issue2128>. Use ctypes instead. This is also
|
||||
# useful because switching to Unicode strings makes python use the wide
|
||||
# Windows APIs, which is what we want here since the wide APIs normally do a
|
||||
# better job at handling long paths and such.
|
||||
if sys.platform == "win32":
|
||||
import ctypes
|
||||
from ctypes import wintypes
|
||||
GetCommandLine = ctypes.windll.kernel32.GetCommandLineW
|
||||
GetCommandLine.argtypes = []
|
||||
GetCommandLine.restype = wintypes.LPWSTR
|
||||
|
||||
CommandLineToArgv = ctypes.windll.shell32.CommandLineToArgvW
|
||||
CommandLineToArgv.argtypes = [
|
||||
wintypes.LPWSTR, ctypes.POINTER(ctypes.c_int)]
|
||||
CommandLineToArgv.restype = ctypes.POINTER(wintypes.LPWSTR)
|
||||
|
||||
argc = ctypes.c_int(0)
|
||||
argv_arr = CommandLineToArgv(GetCommandLine(), ctypes.byref(argc))
|
||||
# The first argv will be "python", the second will be the .py file
|
||||
argv = argv_arr[1:argc.value]
|
||||
else:
|
||||
# For consistency, do it on Unix as well
|
||||
if sys.stdin.encoding is not None:
|
||||
argv = [unicode(arg, sys.stdin.encoding) for arg in sys.argv]
|
||||
else:
|
||||
argv = [unicode(arg) for arg in sys.argv]
|
||||
|
||||
sys.exit(_nsinstall_internal(argv[1:]))
|
||||
sys.exit(_nsinstall_internal(sys.argv[1:]))
|
||||
|
@ -1,6 +1,5 @@
|
||||
[DEFAULT]
|
||||
subsuite = mozbuild
|
||||
skip-if = python == 3
|
||||
|
||||
[test_mozbuild_reading.py]
|
||||
[unit-mozunit.py]
|
||||
|
@ -2,6 +2,7 @@ from __future__ import absolute_import
|
||||
import unittest
|
||||
|
||||
import os
|
||||
import six
|
||||
import sys
|
||||
import os.path
|
||||
import time
|
||||
@ -34,9 +35,9 @@ class TestNsinstall(unittest.TestCase):
|
||||
# Unicode strings means non-ASCII children can be deleted properly on
|
||||
# Windows
|
||||
if sys.stdin.encoding is None:
|
||||
tmpdir = unicode(self.tmpdir)
|
||||
tmpdir = six.ensure_text(self.tmpdir)
|
||||
else:
|
||||
tmpdir = unicode(self.tmpdir, sys.stdin.encoding)
|
||||
tmpdir = six.ensure_text(self.tmpdir, sys.stdin.encoding)
|
||||
rmtree(tmpdir)
|
||||
|
||||
# utility methods for tests
|
||||
@ -121,20 +122,19 @@ class TestNsinstall(unittest.TestCase):
|
||||
self.assertEqual(os.stat(testfile).st_mtime,
|
||||
os.stat(destfile).st_mtime)
|
||||
|
||||
if sys.platform != "win32":
|
||||
# can't run this test on windows, don't have real file modes there
|
||||
def test_nsinstall_m(self):
|
||||
"Test that nsinstall -m works (set mode)"
|
||||
testfile = self.touch("testfile")
|
||||
mode = 0o600
|
||||
os.chmod(testfile, mode)
|
||||
testdir = self.mkdirs("testdir")
|
||||
self.assertEqual(nsinstall(["-m", "{0:04o}"
|
||||
.format(mode), testfile, testdir]), 0)
|
||||
destfile = os.path.join(testdir, "testfile")
|
||||
self.assert_(os.path.isfile(destfile))
|
||||
self.assertEqual(os.stat(testfile).st_mode,
|
||||
os.stat(destfile).st_mode)
|
||||
@unittest.skipIf(sys.platform == "win32", "Windows doesn't have real file modes")
|
||||
def test_nsinstall_m(self):
|
||||
"Test that nsinstall -m works (set mode)"
|
||||
testfile = self.touch("testfile")
|
||||
mode = 0o600
|
||||
os.chmod(testfile, mode)
|
||||
testdir = self.mkdirs("testdir")
|
||||
self.assertEqual(nsinstall(["-m", "{0:04o}"
|
||||
.format(mode), testfile, testdir]), 0)
|
||||
destfile = os.path.join(testdir, "testfile")
|
||||
self.assert_(os.path.isfile(destfile))
|
||||
self.assertEqual(os.stat(testfile).st_mode,
|
||||
os.stat(destfile).st_mode)
|
||||
|
||||
def test_nsinstall_d(self):
|
||||
"Test that nsinstall -d works (create directories in target)"
|
||||
@ -145,35 +145,38 @@ class TestNsinstall(unittest.TestCase):
|
||||
self.assertEqual(nsinstall(["-d", testfile, destdir]), 0)
|
||||
self.assert_(os.path.isdir(os.path.join(destdir, "testfile")))
|
||||
|
||||
if RUN_NON_ASCII_TESTS:
|
||||
def test_nsinstall_non_ascii(self):
|
||||
"Test that nsinstall handles non-ASCII files"
|
||||
filename = u"\u2325\u3452\u2415\u5081"
|
||||
testfile = self.touch(filename)
|
||||
testdir = self.mkdirs(u"\u4241\u1D04\u1414")
|
||||
self.assertEqual(nsinstall([testfile.encode("utf-8"),
|
||||
testdir.encode("utf-8")]), 0)
|
||||
@unittest.skipIf(not RUN_NON_ASCII_TESTS, "Skipping non ascii tests")
|
||||
def test_nsinstall_non_ascii(self):
|
||||
"Test that nsinstall handles non-ASCII files"
|
||||
filename = u"\u2325\u3452\u2415\u5081"
|
||||
testfile = self.touch(filename)
|
||||
testdir = self.mkdirs(u"\u4241\u1D04\u1414")
|
||||
self.assertEqual(nsinstall([testfile.encode("utf-8"),
|
||||
testdir.encode("utf-8")]), 0)
|
||||
|
||||
destfile = os.path.join(testdir, filename)
|
||||
self.assert_(os.path.isfile(destfile))
|
||||
destfile = os.path.join(testdir, filename)
|
||||
self.assert_(os.path.isfile(destfile))
|
||||
|
||||
def test_nsinstall_non_ascii_subprocess(self):
|
||||
"Test that nsinstall as a subprocess handles non-ASCII files"
|
||||
filename = u"\u2325\u3452\u2415\u5081"
|
||||
testfile = self.touch(filename)
|
||||
testdir = self.mkdirs(u"\u4241\u1D04\u1414")
|
||||
# We don't use subprocess because it can't handle Unicode on
|
||||
# Windows <http://bugs.python.org/issue1759845>. mozprocess calls
|
||||
# CreateProcessW directly so it's perfect.
|
||||
p = processhandler.ProcessHandlerMixin([sys.executable,
|
||||
NSINSTALL_PATH,
|
||||
testfile, testdir])
|
||||
p.run()
|
||||
rv = p.wait()
|
||||
# Executing nsinstall.py with python 2 is not supported.
|
||||
@unittest.skipIf(not RUN_NON_ASCII_TESTS or sys.version_info[0] == 2,
|
||||
"Skipping non ascii tests")
|
||||
def test_nsinstall_non_ascii_subprocess(self):
|
||||
"Test that nsinstall as a subprocess handles non-ASCII files"
|
||||
filename = u"\u2325\u3452\u2415\u5081"
|
||||
testfile = self.touch(filename)
|
||||
testdir = self.mkdirs(u"\u4241\u1D04\u1414")
|
||||
# We don't use subprocess because it can't handle Unicode on
|
||||
# Windows <http://bugs.python.org/issue1759845>. mozprocess calls
|
||||
# CreateProcessW directly so it's perfect.
|
||||
p = processhandler.ProcessHandlerMixin([sys.executable,
|
||||
NSINSTALL_PATH,
|
||||
testfile, testdir])
|
||||
p.run()
|
||||
rv = p.wait()
|
||||
|
||||
self.assertEqual(rv, 0)
|
||||
destfile = os.path.join(testdir, filename)
|
||||
self.assert_(os.path.isfile(destfile))
|
||||
self.assertEqual(rv, 0)
|
||||
destfile = os.path.join(testdir, filename)
|
||||
self.assert_(os.path.isfile(destfile))
|
||||
|
||||
# TODO: implement -R, -l, -L and test them!
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user