def test_process_file_not_Found(self): if current_version() >= 3.0: exc = FileNotFoundError else: exc = Exception with self.assertRaises(exc): process_individual(("nonexistent", self.config))
def test_process_runtests_py(self): (path, mins, text, bps) = process_individual( (sys.argv[0], self.config)) self.assertEqual(basename(path), "runtests.py") self.assertEqual(mins, [(2, 7), (3, 0)]) self.assertEmpty(text) self.assertEmpty(bps)
def test_process_file_using_backport(self): fp = ScopedTemporaryFile() fp.writeln(b"import typing") fp.close() proc_res = process_individual((fp.path(), self.config)) self.assertEmpty(proc_res.text) self.assertEqualItems(["typing"], proc_res.bps)
def test_process_file_using_backport(self): fp = NamedTemporaryFile(suffix=".py", delete=False) fp.write(b"import typing\n") fp.close() (path, mins, text, bps) = process_individual((fp.name, self.config)) self.assertEmpty(text) self.assertEqualItems(["typing"], bps) os.remove(fp.name)
def test_process_value_error(self): # (Py3) ValueError: source code string cannot contain null bytes # (Py2) TypeError: compile() expected string without null bytes fp = ScopedTemporaryFile() fp.write(b'\0') fp.close() proc_res = process_individual((fp.path(), self.config)) self.assertEqual(proc_res, None)
def test_process_syntax_error(self): # Syntax error triggers minimum versions [0, 0]. fp = ScopedTemporaryFile() fp.write(b'(') # SyntaxError: unexpected EOF while parsing fp.close() proc_res = process_individual((fp.path(), self.config)) self.assertEqual(proc_res.mins, [(0, 0), (0, 0)]) self.assertEmpty(proc_res.text) self.assertEmpty(proc_res.bps)
def test_process_invalid_versions(self): fp = NamedTemporaryFile(suffix=".py", delete=False) fp.write(b"long(42)\n") # long is a v2 feature: 2.0 !3 fp.write(b"breakpoint()\n") # breakpoint(): !2, 3.7 fp.close() (path, mins, text) = process_individual((fp.name, self.config)) self.assertEqual(mins, None) self.assertTrue(text.startswith("Versions could not be combined")) os.remove(fp.name)
def test_process_syntax_error(self): # Syntax error triggers minimum versions [0, 0]. fp = NamedTemporaryFile(suffix=".py", delete=False) fp.write(b"(") # SyntaxError: unexpected EOF while parsing fp.close() (path, mins, text) = process_individual((fp.name, self.config)) self.assertEqual(mins, [0, 0]) self.assertEmpty(text) os.remove(fp.name)
def test_process_invalid_versions(self): with ScopedTemporaryFile() as fp: fp.write(b"""long(42) breakpoint() """) fp.close() proc_res = process_individual((fp.path(), self.config)) self.assertEqual(proc_res.mins, None) msg = "'long' member (requires 2.0, !3) vs. 'breakpoint' member (requires !2, 3.7)" self.assertEqual(proc_res.text, msg) self.assertEmpty(proc_res.bps) with ScopedTemporaryFile() as fp: fp.write(b"""try: import socketserver except ImportError: import SocketServer """) fp.close() proc_res = process_individual((fp.path(), self.config)) self.assertEqual(proc_res.mins, None) msg = "'socketserver' module (requires !2, 3.0) vs. 'SocketServer' module (requires 2.0, !3)" self.assertEqual(proc_res.text, msg) self.assertEmpty(proc_res.bps) with ScopedTemporaryFile() as fp: fp.write(b"""import time time.strftime("%u", gmtime()) from urllib import urlopen urlopen(context=None) """) fp.close() proc_res = process_individual((fp.path(), self.config)) self.assertEqual(proc_res.mins, None) msg =\ "strftime directive 'u' (requires !2, 3.6) vs. 'urllib.urlopen(context)' (requires 2.7, !3)" self.assertEqual(proc_res.text, msg) self.assertEmpty(proc_res.bps)
def test_process_runtests_py(self): proc_res = process_individual((sys.argv[0], self.config)) self.assertEqual(basename(proc_res.path), "runtests.py") self.assertEqual(proc_res.mins, [(2, 7), (3, 2)]) self.assertEmpty(proc_res.text) self.assertEmpty(proc_res.bps)
def test_process_runtests_py(self): (path, mins, text) = process_individual((sys.argv[0], self.config)) self.assertEqual(basename(path), "runtests.py") self.assertEqual(mins, [2.7, 3.0]) self.assertEmpty(text)