diff -r 2a18f6b85da2 Lib/unittest/main.py --- a/Lib/unittest/main.py Sun Apr 12 18:47:56 2015 -0400 +++ b/Lib/unittest/main.py Mon Apr 13 13:48:17 2015 -0400 @@ -224,6 +224,15 @@ self._initArgParsers() self._discovery_parser.parse_args(argv, self) + # Issue 22812, strip quotes from quoted args on windows + # If the arg gets here with quotes on a non-windows system, + # then we should respect the caller's command line foo + if sys.platform[:3] == 'win': + QUOTE_CHARS = '\'"' + if self.pattern[0] in QUOTE_CHARS and \ + self.pattern[0]==self.pattern[-1]: + self.pattern = self.pattern[1:-1] + loader = self.testLoader if Loader is None else Loader() self.test = loader.discover(self.start, self.pattern, self.top) diff -r 2a18f6b85da2 Lib/unittest/test/test_discovery.py --- a/Lib/unittest/test/test_discovery.py Sun Apr 12 18:47:56 2015 -0400 +++ b/Lib/unittest/test/test_discovery.py Mon Apr 13 13:48:17 2015 -0400 @@ -9,6 +9,7 @@ import unittest import unittest.test +import unittest.mock class TestableTestProgram(unittest.TestProgram): @@ -668,6 +669,25 @@ self.assertTrue(program.failfast) self.assertTrue(program.catchbreak) + # Issue 22812, strip leading/trailing quotes (non-windows) + Loader.args = [] + program = TestableTestProgram() + program._do_discovery(['-p', "'test*.py'"], Loader=Loader) + self.assertEqual(program.test, 'tests') + self.assertEqual(Loader.args, [('.', "'test*.py'", None)]) + self.assertFalse(program.failfast) + self.assertFalse(program.catchbreak) + + # Issue 22812, strip leading/trailing quotes (non-windows) + Loader.args = [] + program = TestableTestProgram() + with unittest.mock.patch('sys.platform',new="win32"): + program._do_discovery(['-p', "'test*.py'"], Loader=Loader) + self.assertEqual(program.test, 'tests') + self.assertEqual(Loader.args, [('.', 'test*.py', None)]) + self.assertFalse(program.failfast) + self.assertFalse(program.catchbreak) + def setup_module_clash(self): class Module(object): __file__ = 'bar/foo.py'