summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2022-03-18 03:24:59 (GMT)
committerGitHub <noreply@github.com>2022-03-18 03:24:59 (GMT)
commit1cab44d8650ae3eece90b04fca373908205e7ee0 (patch)
tree727dc1f496b57558387a3585edde0678b67a8494
parente808c9d5c78e5a7a9d804eced013a02c0c7df1a5 (diff)
downloadcpython-1cab44d8650ae3eece90b04fca373908205e7ee0.zip
cpython-1cab44d8650ae3eece90b04fca373908205e7ee0.tar.gz
cpython-1cab44d8650ae3eece90b04fca373908205e7ee0.tar.bz2
[3.9] bpo-46421: Fix unittest filename evaluation when called as a module (GH-30654) (GH-31970)
(cherry picked from commit a0db11b10fca0fee6bb2b8d6277e266bad8c0fdb) Co-authored-by: Bader Zaidan <bader@zaidan.pw>
-rw-r--r--Lib/test/test_cmd_line.py11
-rw-r--r--Lib/unittest/main.py2
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS.d/next/Library/2022-01-18-01-29-38.bpo-46421.9LdmNr.rst3
4 files changed, 16 insertions, 1 deletions
diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py
index 712d861..4b3e33c 100644
--- a/Lib/test/test_cmd_line.py
+++ b/Lib/test/test_cmd_line.py
@@ -136,6 +136,17 @@ class CmdLineTest(unittest.TestCase):
self.assertTrue(data.find(b'1 loop') != -1)
self.assertTrue(data.find(b'__main__.Timer') != -1)
+ def test_relativedir_bug46421(self):
+ # Test `python -m unittest` with a relative directory beginning with ./
+ # Note: We have to switch to the project's top module's directory, as per
+ # the python unittest wiki. We will switch back when we are done.
+ defaultwd = os.getcwd()
+ projectlibpath = os.path.dirname(__file__).removesuffix("test")
+ with support.change_cwd(projectlibpath):
+ # Testing with and without ./
+ assert_python_ok('-m', 'unittest', "test/test_longexp.py")
+ assert_python_ok('-m', 'unittest', "./test/test_longexp.py")
+
def test_run_code(self):
# Test expected operation of the '-c' switch
# Switch needs an argument
diff --git a/Lib/unittest/main.py b/Lib/unittest/main.py
index e62469a..88a188c 100644
--- a/Lib/unittest/main.py
+++ b/Lib/unittest/main.py
@@ -39,7 +39,7 @@ def _convert_name(name):
name = rel_path
# on Windows both '\' and '/' are used as path
# separators. Better to replace both than rely on os.path.sep
- return name[:-3].replace('\\', '.').replace('/', '.')
+ return os.path.normpath(name)[:-3].replace('\\', '.').replace('/', '.')
return name
def _convert_names(names):
diff --git a/Misc/ACKS b/Misc/ACKS
index 2a26fdc..d043195 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -1947,6 +1947,7 @@ Masazumi Yoshikawa
Arnaud Ysmal
Bernard Yue
Moshe Zadka
+Bader Zaidan
Elias Zamaria
Milan Zamazal
Artur Zaprzala
diff --git a/Misc/NEWS.d/next/Library/2022-01-18-01-29-38.bpo-46421.9LdmNr.rst b/Misc/NEWS.d/next/Library/2022-01-18-01-29-38.bpo-46421.9LdmNr.rst
new file mode 100644
index 0000000..03ff27f
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-01-18-01-29-38.bpo-46421.9LdmNr.rst
@@ -0,0 +1,3 @@
+Fix a unittest issue where if the command was invoked as ``python -m
+unittest`` and the filename(s) began with a dot (.), a ``ValueError`` is
+returned.