From cc5d57a1925cc7108744de169cbf4a4677110304 Mon Sep 17 00:00:00 2001 From: Karthik Nadig Date: Fri, 16 Nov 2018 13:59:25 -0800 Subject: [PATCH] Migrate to pytests from tests\ptvsd (#1024) * Migrate parse args tests * Remove old parse args tests * Run only pytests * Migrate internals filter tests * Remove old internal filter tests * Migrate pathutils tests * Remove old pathutils tests * Revert "Run only pytests" This reverts commit eaed6de3c64e102a540b751b06d774dab0930427. * Remove old _local.py tests --- pytests/test_internals_filter.py | 41 +++ pytests/test_parse_args.py | 382 ++++++++++++++++++++++++++ pytests/test_pathutils.py | 94 +++++++ tests/ptvsd/test___main__.py | 388 --------------------------- tests/ptvsd/test_internals_filter.py | 56 ---- tests/ptvsd/test_local.py | 349 ------------------------ tests/ptvsd/test_pathutils.py | 98 ------- 7 files changed, 517 insertions(+), 891 deletions(-) create mode 100644 pytests/test_internals_filter.py create mode 100644 pytests/test_parse_args.py create mode 100644 pytests/test_pathutils.py delete mode 100644 tests/ptvsd/test___main__.py delete mode 100644 tests/ptvsd/test_internals_filter.py delete mode 100644 tests/ptvsd/test_local.py delete mode 100644 tests/ptvsd/test_pathutils.py diff --git a/pytests/test_internals_filter.py b/pytests/test_internals_filter.py new file mode 100644 index 00000000..04dbeaf7 --- /dev/null +++ b/pytests/test_internals_filter.py @@ -0,0 +1,41 @@ +import os +import pytest +import ptvsd.untangle + +from ptvsd.wrapper import InternalsFilter +from ptvsd.wrapper import dont_trace_ptvsd_files + +INTERNAL_DIR = os.path.dirname(os.path.abspath(ptvsd.untangle.__file__)) +@pytest.mark.parametrize('path', [ + os.path.abspath(ptvsd.untangle.__file__), + # File used by VS/VSC to launch ptvsd + os.path.join('somepath', 'ptvsd_launcher.py'), + # Any file under ptvsd + os.path.join(INTERNAL_DIR, 'somefile.py'), +]) +def test_internal_paths(path): + int_filter = InternalsFilter() + assert int_filter.is_internal_path(path) + +@pytest.mark.parametrize('path', [ + __file__, + os.path.join('somepath', 'somefile.py'), +]) +def test_user_file_paths(path): + int_filter = InternalsFilter() + assert not int_filter.is_internal_path(path) + +@pytest.mark.parametrize('path, val', [ + (os.path.join(INTERNAL_DIR, 'wrapper.py'), True), + (os.path.join(INTERNAL_DIR, 'abcd', 'ptvsd', 'wrapper.py'), True), + (os.path.join(INTERNAL_DIR, 'ptvsd', 'wrapper.py'), True), + (os.path.join(INTERNAL_DIR, 'abcd', 'wrapper.py'), True), + (os.path.join('usr', 'abcd', 'ptvsd', 'wrapper.py'), False), + (os.path.join('C:', 'ptvsd', 'wrapper1.py'), False), + (os.path.join('C:', 'abcd', 'ptvsd', 'ptvsd.py'), False), + (os.path.join('usr', 'ptvsd', 'w.py'), False), + (os.path.join('ptvsd', 'w.py'), False), + (os.path.join('usr', 'abcd', 'ptvsd', 'tangle.py'), False), +]) +def test_ptvsd_paths(path, val): + assert val == dont_trace_ptvsd_files(path) diff --git a/pytests/test_parse_args.py b/pytests/test_parse_args.py new file mode 100644 index 00000000..79a5702b --- /dev/null +++ b/pytests/test_parse_args.py @@ -0,0 +1,382 @@ +import pytest +from ptvsd.socket import Address +from ptvsd.__main__ import parse_args + +EXPECTED_EXTRA = ['--'] + +def test_host_required(): + with pytest.raises(SystemExit): + parse_args([ + 'eggs', + '--port', '8888', + '-m', 'spam', + ]) + +def test_module_server(): + args, extra = parse_args([ + 'eggs', + '--host', '10.0.1.1', + '--port', '8888', + '-m', 'spam', + ]) + + assert vars(args) == { + 'kind': 'module', + 'name': 'spam', + 'address': Address.as_server('10.0.1.1', 8888), + 'nodebug': False, + 'single_session': False, + 'wait': False, + 'multiprocess': False, + } + assert extra == EXPECTED_EXTRA + +def test_module_nodebug(): + args, extra = parse_args([ + 'eggs', + '--nodebug', + '--client', + '--host', 'localhost', + '--port', '8888', + '-m', 'spam', + ]) + + assert vars(args) == { + 'kind': 'module', + 'name': 'spam', + 'address': Address.as_client('localhost', 8888), + 'nodebug': True, + 'single_session': False, + 'wait': False, + 'multiprocess': False, + } + assert extra == EXPECTED_EXTRA + +def test_script(): + args, extra = parse_args([ + 'eggs', + '--host', 'localhost', + '--port', '8888', + 'spam.py', + ]) + + assert vars(args) == { + 'kind': 'script', + 'name': 'spam.py', + 'address': Address.as_server('localhost', 8888), + 'nodebug': False, + 'single_session': False, + 'wait': False, + 'multiprocess': False, + } + assert extra == EXPECTED_EXTRA + +def test_script_server(): + args, extra = parse_args([ + 'eggs', + '--host', '10.0.1.1', + '--port', '8888', + 'spam.py', + ]) + + assert vars(args) == { + 'kind': 'script', + 'name': 'spam.py', + 'address': Address.as_server('10.0.1.1', 8888), + 'nodebug': False, + 'single_session': False, + 'wait': False, + 'multiprocess': False, + } + assert extra == EXPECTED_EXTRA + +def test_script_nodebug(): + args, extra = parse_args([ + 'eggs', + '--nodebug', + '--client', + '--host', 'localhost', + '--port', '8888', + 'spam.py', + ]) + + assert vars(args) == { + 'kind': 'script', + 'name': 'spam.py', + 'address': Address.as_client('localhost', 8888), + 'nodebug': True, + 'single_session': False, + 'wait': False, + 'multiprocess': False, + } + assert extra == EXPECTED_EXTRA + +def test_remote(): + args, extra = parse_args([ + 'eggs', + '--client', + '--host', '1.2.3.4', + '--port', '8888', + 'spam.py', + ]) + + assert vars(args) == { + 'kind': 'script', + 'name': 'spam.py', + 'address': Address.as_client('1.2.3.4', 8888), + 'nodebug': False, + 'single_session': False, + 'wait': False, + 'multiprocess': False, + } + assert extra == EXPECTED_EXTRA + +def test_remote_localhost(): + args, extra = parse_args([ + 'eggs', + '--client', + '--host', 'localhost', + '--port', '8888', + 'spam.py', + ]) + + assert vars(args) == { + 'kind': 'script', + 'name': 'spam.py', + 'address': Address.as_client('localhost', 8888), + 'nodebug': False, + 'single_session': False, + 'wait': False, + 'multiprocess': False, + } + assert extra == EXPECTED_EXTRA + +def test_remote_nodebug(): + args, extra = parse_args([ + 'eggs', + '--nodebug', + '--client', + '--host', '1.2.3.4', + '--port', '8888', + 'spam.py', + ]) + + assert vars(args) == { + 'kind': 'script', + 'name': 'spam.py', + 'address': Address.as_client('1.2.3.4', 8888), + 'nodebug': True, + 'single_session': False, + 'wait': False, + 'multiprocess': False, + } + assert extra == EXPECTED_EXTRA + +def test_remote_single_session(): + args, extra = parse_args([ + 'eggs', + '--single-session', + '--host', 'localhost', + '--port', '8888', + 'spam.py', + ]) + + assert vars(args) == { + 'kind': 'script', + 'name': 'spam.py', + 'address': Address.as_server('localhost', 8888), + 'nodebug': False, + 'single_session': True, + 'wait': False, + 'multiprocess': False, + } + assert extra == EXPECTED_EXTRA + +def test_local_single_session(): + args, extra = parse_args([ + 'eggs', + '--single-session', + '--host', '1.2.3.4', + '--port', '8888', + 'spam.py', + ]) + + assert vars(args) == { + 'kind': 'script', + 'name': 'spam.py', + 'address': Address.as_server('1.2.3.4', 8888), + 'nodebug': False, + 'single_session': True, + 'wait': False, + 'multiprocess': False, + } + assert extra == EXPECTED_EXTRA + +def test_remote_wait(): + args, extra = parse_args([ + 'eggs', + '--client', + '--host', '1.2.3.4', + '--port', '8888', + '--wait', + 'spam.py', + ]) + + assert vars(args) == { + 'kind': 'script', + 'name': 'spam.py', + 'address': Address.as_client('1.2.3.4', 8888), + 'nodebug': False, + 'single_session': False, + 'wait': True, + 'multiprocess': False, + } + assert extra == EXPECTED_EXTRA + +def test_extra(): + args, extra = parse_args([ + 'eggs', + '--DEBUG', + '--host', 'localhost', + '--port', '8888', + '--vm_type', '???', + 'spam.py', + '--xyz', '123', + 'abc', + '--cmd-line', + '--', + 'foo', + '--server', + '--bar' + ]) + + assert vars(args) == { + 'kind': 'script', + 'name': 'spam.py', + 'address': Address.as_server('localhost', 8888), + 'nodebug': False, + 'single_session': False, + 'wait': False, + 'multiprocess': False, + } + assert extra == [ + '--DEBUG', + '--vm_type', '???', + '--', # Expected pydevd defaults separator + '--xyz', '123', + 'abc', + '--cmd-line', + 'foo', + '--server', + '--bar', + ] + +def test_extra_nodebug(): + args, extra = parse_args([ + 'eggs', + '--DEBUG', + '--nodebug', + '--client', + '--host', 'localhost', + '--port', '8888', + '--vm_type', '???', + 'spam.py', + '--xyz', '123', + 'abc', + '--cmd-line', + '--', + 'foo', + '--server', + '--bar' + ]) + + assert vars(args) == { + 'kind': 'script', + 'name': 'spam.py', + 'address': Address.as_client('localhost', 8888), + 'nodebug': True, + 'single_session': False, + 'wait': False, + 'multiprocess': False, + } + assert extra == [ + '--DEBUG', + '--vm_type', '???', + '--', # Expected pydevd defaults separator + '--xyz', '123', + 'abc', + '--cmd-line', + 'foo', + '--server', + '--bar', + ] + +def test_empty_host(): + args, extra = parse_args([ + 'eggs', + '--host', '', + '--port', '8888', + 'spam.py', + ]) + + assert vars(args) == { + 'kind': 'script', + 'name': 'spam.py', + 'address': Address.as_server('', 8888), + 'nodebug': False, + 'single_session': False, + 'wait': False, + 'multiprocess': False, + } + assert extra == EXPECTED_EXTRA + +def test_unsupported_arg(): + with pytest.raises(SystemExit): + parse_args([ + 'eggs', + '--port', '8888', + '--xyz', '123', + 'spam.py', + ]) + +def test_pseudo_backward_compatibility(): + args, extra = parse_args([ + 'eggs', + '--host', 'localhost', + '--port', '8888', + '--module', + '--file', 'spam', + ]) + + assert vars(args) == { + 'kind': 'script', + 'name': 'spam', + 'address': Address.as_server('localhost', 8888), + 'nodebug': False, + 'single_session': False, + 'wait': False, + 'multiprocess': False, + } + assert extra == ['--module'] + EXPECTED_EXTRA + +def test_pseudo_backward_compatibility_nodebug(): + args, extra = parse_args([ + 'eggs', + '--nodebug', + '--client', + '--host', 'localhost', + '--port', '8888', + '--module', + '--file', 'spam', + ]) + + assert vars(args) == { + 'kind': 'script', + 'name': 'spam', + 'address': Address.as_client('localhost', 8888), + 'nodebug': True, + 'single_session': False, + 'wait': False, + 'multiprocess': False, + } + assert extra == ['--module'] + EXPECTED_EXTRA diff --git a/pytests/test_pathutils.py b/pytests/test_pathutils.py new file mode 100644 index 00000000..c9698e48 --- /dev/null +++ b/pytests/test_pathutils.py @@ -0,0 +1,94 @@ +import os +import os.path +import platform +import pytest +from ptvsd.pathutils import PathUnNormcase + + +def _find_file(filename): + filename = os.path.normcase(os.path.normpath(filename)) + drive = os.path.splitdrive(filename)[0] + found = [] + while True: + dirname, basename = os.path.split(filename) + for name in os.listdir(dirname or '.'): + if os.path.normcase(name) == basename: + found.insert(0, name) + break + else: + raise Exception('oops: {}'.format(dirname)) + + if not dirname or dirname == drive or dirname == drive + os.path.sep: + return dirname.upper() + os.path.sep.join(found) + filename = dirname + + +FILENAME = __file__ +ACTUAL = _find_file(FILENAME) + + +def test_invalid_path_names(): + tool = PathUnNormcase() + file_path = 'x:/this is an/invalid/file/invalid_file_.csv' + result = tool.un_normcase(file_path) + assert result == file_path + + +def test_empty_path_names(): + tool = PathUnNormcase() + file_path = '' + result = tool.un_normcase(file_path) + assert result == file_path + + +def test_valid_names(): + tool = PathUnNormcase() + result = tool.un_normcase(FILENAME) + assert result == FILENAME + + +def test_path_names_normcased(): + tool = PathUnNormcase() + tool.enable() + result = tool.un_normcase( + os.path.normcase(FILENAME)) + assert result == ACTUAL + + +@pytest.mark.skipif(platform.system() != 'Windows', reason='Windows OS specific test') +def test_path_names_uppercase_disabled(): + tool = PathUnNormcase() + expected = FILENAME.upper() + result = tool.un_normcase(expected) + + # Since path tool is disabled we should get the same + # path back + assert result == expected + + +@pytest.mark.skipif(platform.system() != 'Windows', reason='Windows OS specific test') +def test_path_names_uppercase_enabled(): + tool = PathUnNormcase() + tool.enable() + result = tool.un_normcase(FILENAME.upper()) + assert result == ACTUAL + + +@pytest.mark.skipif(platform.system() != 'Windows', reason='Windows OS specific test') +def test_path_names_lowercase_disabled(): + tool = PathUnNormcase() + expected = FILENAME.lower() + result = tool.un_normcase(expected) + + # Since path tool is disabled we should get the same + # path back + assert result == expected + + +@pytest.mark.skipif(platform.system() != 'Windows', reason='Windows OS specific test') +def test_path_names_lowercase_enabled(): + tool = PathUnNormcase() + tool.enable() + result = tool.un_normcase(FILENAME.lower()) + + assert result == ACTUAL diff --git a/tests/ptvsd/test___main__.py b/tests/ptvsd/test___main__.py deleted file mode 100644 index b225d474..00000000 --- a/tests/ptvsd/test___main__.py +++ /dev/null @@ -1,388 +0,0 @@ -import unittest - -from ptvsd.socket import Address -from ptvsd.__main__ import parse_args -from tests.helpers._io import captured_stdio - - -class ParseArgsTests(unittest.TestCase): - - EXPECTED_EXTRA = ['--'] - - def test_host_required(self): - with self.assertRaises(SystemExit): - parse_args([ - 'eggs', - '--port', '8888', - '-m', 'spam', - ]) - - def test_module_server(self): - args, extra = parse_args([ - 'eggs', - '--host', '10.0.1.1', - '--port', '8888', - '-m', 'spam', - ]) - - self.assertEqual(vars(args), { - 'kind': 'module', - 'name': 'spam', - 'address': Address.as_server('10.0.1.1', 8888), - 'nodebug': False, - 'single_session': False, - 'wait': False, - 'multiprocess': False, - }) - self.assertEqual(extra, self.EXPECTED_EXTRA) - - def test_module_nodebug(self): - args, extra = parse_args([ - 'eggs', - '--nodebug', - '--client', - '--host', 'localhost', - '--port', '8888', - '-m', 'spam', - ]) - - self.assertEqual(vars(args), { - 'kind': 'module', - 'name': 'spam', - 'address': Address.as_client('localhost', 8888), - 'nodebug': True, - 'single_session': False, - 'wait': False, - 'multiprocess': False, - }) - self.assertEqual(extra, self.EXPECTED_EXTRA) - - def test_script(self): - args, extra = parse_args([ - 'eggs', - '--host', 'localhost', - '--port', '8888', - 'spam.py', - ]) - - self.assertEqual(vars(args), { - 'kind': 'script', - 'name': 'spam.py', - 'address': Address.as_server('localhost', 8888), - 'nodebug': False, - 'single_session': False, - 'wait': False, - 'multiprocess': False, - }) - self.assertEqual(extra, self.EXPECTED_EXTRA) - - def test_script_server(self): - args, extra = parse_args([ - 'eggs', - '--host', '10.0.1.1', - '--port', '8888', - 'spam.py', - ]) - - self.assertEqual(vars(args), { - 'kind': 'script', - 'name': 'spam.py', - 'address': Address.as_server('10.0.1.1', 8888), - 'nodebug': False, - 'single_session': False, - 'wait': False, - 'multiprocess': False, - }) - self.assertEqual(extra, self.EXPECTED_EXTRA) - - def test_script_nodebug(self): - args, extra = parse_args([ - 'eggs', - '--nodebug', - '--client', - '--host', 'localhost', - '--port', '8888', - 'spam.py', - ]) - - self.assertEqual(vars(args), { - 'kind': 'script', - 'name': 'spam.py', - 'address': Address.as_client('localhost', 8888), - 'nodebug': True, - 'single_session': False, - 'wait': False, - 'multiprocess': False, - }) - self.assertEqual(extra, self.EXPECTED_EXTRA) - - def test_remote(self): - args, extra = parse_args([ - 'eggs', - '--client', - '--host', '1.2.3.4', - '--port', '8888', - 'spam.py', - ]) - - self.assertEqual(vars(args), { - 'kind': 'script', - 'name': 'spam.py', - 'address': Address.as_client('1.2.3.4', 8888), - 'nodebug': False, - 'single_session': False, - 'wait': False, - 'multiprocess': False, - }) - self.assertEqual(extra, self.EXPECTED_EXTRA) - - def test_remote_localhost(self): - args, extra = parse_args([ - 'eggs', - '--client', - '--host', 'localhost', - '--port', '8888', - 'spam.py', - ]) - - self.assertEqual(vars(args), { - 'kind': 'script', - 'name': 'spam.py', - 'address': Address.as_client('localhost', 8888), - 'nodebug': False, - 'single_session': False, - 'wait': False, - 'multiprocess': False, - }) - self.assertEqual(extra, self.EXPECTED_EXTRA) - - def test_remote_nodebug(self): - args, extra = parse_args([ - 'eggs', - '--nodebug', - '--client', - '--host', '1.2.3.4', - '--port', '8888', - 'spam.py', - ]) - - self.assertEqual(vars(args), { - 'kind': 'script', - 'name': 'spam.py', - 'address': Address.as_client('1.2.3.4', 8888), - 'nodebug': True, - 'single_session': False, - 'wait': False, - 'multiprocess': False, - }) - self.assertEqual(extra, self.EXPECTED_EXTRA) - - def test_remote_single_session(self): - args, extra = parse_args([ - 'eggs', - '--single-session', - '--host', 'localhost', - '--port', '8888', - 'spam.py', - ]) - - self.assertEqual(vars(args), { - 'kind': 'script', - 'name': 'spam.py', - 'address': Address.as_server('localhost', 8888), - 'nodebug': False, - 'single_session': True, - 'wait': False, - 'multiprocess': False, - }) - self.assertEqual(extra, self.EXPECTED_EXTRA) - - def test_local_single_session(self): - args, extra = parse_args([ - 'eggs', - '--single-session', - '--host', '1.2.3.4', - '--port', '8888', - 'spam.py', - ]) - - self.assertEqual(vars(args), { - 'kind': 'script', - 'name': 'spam.py', - 'address': Address.as_server('1.2.3.4', 8888), - 'nodebug': False, - 'single_session': True, - 'wait': False, - 'multiprocess': False, - }) - self.assertEqual(extra, self.EXPECTED_EXTRA) - - def test_remote_wait(self): - args, extra = parse_args([ - 'eggs', - '--client', - '--host', '1.2.3.4', - '--port', '8888', - '--wait', - 'spam.py', - ]) - - self.assertEqual(vars(args), { - 'kind': 'script', - 'name': 'spam.py', - 'address': Address.as_client('1.2.3.4', 8888), - 'nodebug': False, - 'single_session': False, - 'wait': True, - 'multiprocess': False, - }) - self.assertEqual(extra, self.EXPECTED_EXTRA) - - def test_extra(self): - args, extra = parse_args([ - 'eggs', - '--DEBUG', - '--host', 'localhost', - '--port', '8888', - '--vm_type', '???', - 'spam.py', - '--xyz', '123', - 'abc', - '--cmd-line', - '--', - 'foo', - '--server', - '--bar' - ]) - - self.assertEqual(vars(args), { - 'kind': 'script', - 'name': 'spam.py', - 'address': Address.as_server('localhost', 8888), - 'nodebug': False, - 'single_session': False, - 'wait': False, - 'multiprocess': False, - }) - self.assertEqual(extra, [ - '--DEBUG', - '--vm_type', '???', - '--', # Expected pydevd defaults separator - '--xyz', '123', - 'abc', - '--cmd-line', - 'foo', - '--server', - '--bar', - ]) - - def test_extra_nodebug(self): - args, extra = parse_args([ - 'eggs', - '--DEBUG', - '--nodebug', - '--client', - '--host', 'localhost', - '--port', '8888', - '--vm_type', '???', - 'spam.py', - '--xyz', '123', - 'abc', - '--cmd-line', - '--', - 'foo', - '--server', - '--bar' - ]) - - self.assertEqual(vars(args), { - 'kind': 'script', - 'name': 'spam.py', - 'address': Address.as_client('localhost', 8888), - 'nodebug': True, - 'single_session': False, - 'wait': False, - 'multiprocess': False, - }) - self.assertEqual(extra, [ - '--DEBUG', - '--vm_type', '???', - '--', # Expected pydevd defaults separator - '--xyz', '123', - 'abc', - '--cmd-line', - 'foo', - '--server', - '--bar', - ]) - - def test_empty_host(self): - args, extra = parse_args([ - 'eggs', - '--host', '', - '--port', '8888', - 'spam.py', - ]) - - self.assertEqual(vars(args), { - 'kind': 'script', - 'name': 'spam.py', - 'address': Address.as_server('', 8888), - 'nodebug': False, - 'single_session': False, - 'wait': False, - 'multiprocess': False, - }) - self.assertEqual(extra, self.EXPECTED_EXTRA) - - def test_unsupported_arg(self): - with self.assertRaises(SystemExit): - with captured_stdio(): - parse_args([ - 'eggs', - '--port', '8888', - '--xyz', '123', - 'spam.py', - ]) - - def test_pseudo_backward_compatibility(self): - args, extra = parse_args([ - 'eggs', - '--host', 'localhost', - '--port', '8888', - '--module', - '--file', 'spam', - ]) - - self.assertEqual(vars(args), { - 'kind': 'script', - 'name': 'spam', - 'address': Address.as_server('localhost', 8888), - 'nodebug': False, - 'single_session': False, - 'wait': False, - 'multiprocess': False, - }) - self.assertEqual(extra, ['--module'] + self.EXPECTED_EXTRA) - - def test_pseudo_backward_compatibility_nodebug(self): - args, extra = parse_args([ - 'eggs', - '--nodebug', - '--client', - '--host', 'localhost', - '--port', '8888', - '--module', - '--file', 'spam', - ]) - - self.assertEqual(vars(args), { - 'kind': 'script', - 'name': 'spam', - 'address': Address.as_client('localhost', 8888), - 'nodebug': True, - 'single_session': False, - 'wait': False, - 'multiprocess': False, - }) - self.assertEqual(extra, ['--module'] + self.EXPECTED_EXTRA) diff --git a/tests/ptvsd/test_internals_filter.py b/tests/ptvsd/test_internals_filter.py deleted file mode 100644 index 49010921..00000000 --- a/tests/ptvsd/test_internals_filter.py +++ /dev/null @@ -1,56 +0,0 @@ -import os -import unittest -import ptvsd.untangle - -from ptvsd.wrapper import InternalsFilter -from ptvsd.wrapper import dont_trace_ptvsd_files - - -class InternalsFilterTests(unittest.TestCase): - def test_internal_paths(self): - int_filter = InternalsFilter() - internal_dir = os.path.dirname( - os.path.abspath(ptvsd.untangle.__file__) - ) - internal_files = [ - os.path.abspath(ptvsd.untangle.__file__), - # File used by VS Only - os.path.join('somepath', 'ptvsd_launcher.py'), - # Any file under ptvsd - os.path.join(internal_dir, 'somefile.py'), - ] - for fp in internal_files: - self.assertTrue(int_filter.is_internal_path(fp)) - - def test_user_file_paths(self): - int_filter = InternalsFilter() - files = [ - __file__, - os.path.join('somepath', 'somefile.py'), - ] - for fp in files: - self.assertFalse(int_filter.is_internal_path(fp)) - - -class PtvsdFileTraceFilter(unittest.TestCase): - def test_basic(self): - internal_dir = os.path.dirname( - os.path.abspath(ptvsd.untangle.__file__)) - - test_paths = { - os.path.join(internal_dir, 'wrapper.py'): True, - os.path.join(internal_dir, 'abcd', 'ptvsd', 'wrapper.py'): True, - os.path.join(internal_dir, 'ptvsd', 'wrapper.py'): True, - os.path.join(internal_dir, 'abcd', 'wrapper.py'): True, - os.path.join('usr', 'abcd', 'ptvsd', 'wrapper.py'): False, - os.path.join('C:', 'ptvsd', 'wrapper1.py'): False, - os.path.join('C:', 'abcd', 'ptvsd', 'ptvsd.py'): False, - os.path.join('usr', 'ptvsd', 'w.py'): False, - os.path.join('ptvsd', 'w.py'): False, - os.path.join('usr', 'abcd', 'ptvsd', 'tangle.py'): False, - } - - for path, val in test_paths.items(): - self.assertTrue(val == dont_trace_ptvsd_files(path), - msg='Path : %s\nActual: %s' % (path, - internal_dir)) diff --git a/tests/ptvsd/test_local.py b/tests/ptvsd/test_local.py deleted file mode 100644 index 6dcf2bf6..00000000 --- a/tests/ptvsd/test_local.py +++ /dev/null @@ -1,349 +0,0 @@ -import sys -import unittest - -from _pydevd_bundle import pydevd_comm - -import ptvsd.pydevd_hooks -from ptvsd.socket import Address -from ptvsd._local import run_module, run_file, run_main -from tests.helpers.argshelper import _get_args - - -class FakePyDevd(object): - - def __init__(self, __file__, handle_main): - self.__file__ = __file__ - self.handle_main = handle_main - - @property - def __name__(self): - return object.__repr__(self) - - def main(self): - self.handle_main() - - -class RunBase(object): - - def setUp(self): - super(RunBase, self).setUp() - self.argv = None - self.addr = None - self.kwargs = None - - def _run(self, argv, addr, **kwargs): - self.argv = argv - self.addr = addr - self.kwargs = kwargs - - def _no_debug_runner(self, addr, filename, is_module, *extras, **kwargs): - self.addr = addr - self.argv = sys.argv - self.filename = filename - self.is_module = is_module - self.args = extras - self.kwargs = kwargs - - -class RunModuleTests(RunBase, unittest.TestCase): - - def test_local(self): - addr = (None, 8888) - run_module(addr, 'spam', _run=self._run, _prog='eggs') - - self.assertEqual(self.argv, - _get_args('--module', '--file', 'spam:')) - - self.assertEqual(self.addr, Address.as_server(*addr)) - self.assertEqual(self.kwargs, {}) - - def test_server(self): - addr = Address.as_server('10.0.1.1', 8888) - run_module(addr, 'spam', _run=self._run, _prog='eggs') - - self.assertEqual(self.argv, - _get_args('--module', '--file', 'spam:')) - - self.assertEqual(self.addr, Address.as_server(*addr)) - self.assertEqual(self.kwargs, {}) - - def test_remote(self): - addr = ('1.2.3.4', 8888) - run_module(addr, 'spam', _run=self._run, _prog='eggs') - - self.assertEqual(self.argv, - _get_args('--module', '--file', 'spam:', - ptvsd_extras=['--client', '1.2.3.4'])) - - self.assertEqual(self.addr, Address.as_client(*addr)) - self.assertEqual(self.kwargs, { - 'singlesession': True, - }) - - def test_remote_localhost(self): - addr = Address.as_client(None, 8888) - run_module(addr, 'spam', _run=self._run, _prog='eggs') - - self.assertEqual(self.argv, - _get_args( - '--module', '--file', 'spam:', - ptvsd_extras=['--client', 'localhost'])) - - self.assertEqual(self.addr, Address.as_client(*addr)) - self.assertEqual(self.kwargs, { - 'singlesession': True, - }) - - def test_extra(self): - addr = (None, 8888) - run_module(addr, 'spam', '--vm_type', 'xyz', '--', '--DEBUG', - _run=self._run, _prog='eggs') - - self.assertEqual(self.argv, - _get_args( - '--module', '--file', 'spam:', '--DEBUG', - ptvsd_extras=['--vm_type', 'xyz'])) - - self.assertEqual(self.addr, Address.as_server(*addr)) - self.assertEqual(self.kwargs, {}) - - def test_executable(self): - addr = (None, 8888) - run_module(addr, 'spam', _run=self._run) - - self.assertEqual(self.argv, - _get_args( - '--module', '--file', 'spam:', - prog=sys.argv[0])) - - self.assertEqual(self.addr, Address.as_server(*addr)) - self.assertEqual(self.kwargs, {}) - - -class RunScriptTests(RunBase, unittest.TestCase): - - def test_local(self): - addr = (None, 8888) - run_file(addr, 'spam.py', _run=self._run, _prog='eggs') - - self.assertEqual(self.argv, - _get_args('--file', 'spam.py')) - - self.assertEqual(self.addr, Address.as_server(*addr)) - self.assertEqual(self.kwargs, {}) - - def test_server(self): - addr = Address.as_server('10.0.1.1', 8888) - run_file(addr, 'spam.py', _run=self._run, _prog='eggs') - - self.assertEqual(self.argv, - _get_args('--file', 'spam.py')) - - self.assertEqual(self.addr, Address.as_server(*addr)) - self.assertEqual(self.kwargs, {}) - - def test_remote(self): - addr = ('1.2.3.4', 8888) - run_file(addr, 'spam.py', _run=self._run, _prog='eggs') - - self.assertEqual(self.argv, - _get_args( - '--file', 'spam.py', - ptvsd_extras=['--client', '1.2.3.4'])) - - self.assertEqual(self.addr, Address.as_client(*addr)) - self.assertEqual(self.kwargs, { - 'singlesession': True, - }) - - def test_remote_localhost(self): - addr = Address.as_client(None, 8888) - run_file(addr, 'spam.py', _run=self._run, _prog='eggs') - - self.assertEqual(self.argv, - _get_args( - '--file', 'spam.py', - ptvsd_extras=['--client', 'localhost'])) - - self.assertEqual(self.addr, Address.as_client(*addr)) - self.assertEqual(self.kwargs, { - 'singlesession': True, - }) - - def test_extra(self): - addr = (None, 8888) - run_file(addr, 'spam.py', '--vm_type', 'xyz', '--', '--DEBUG', - _run=self._run, _prog='eggs') - - self.assertEqual(self.argv, - _get_args( - '--file', 'spam.py', '--DEBUG', - ptvsd_extras=['--vm_type', 'xyz'])) - - self.assertEqual(self.addr, Address.as_server(*addr)) - self.assertEqual(self.kwargs, {}) - - def test_executable(self): - addr = (None, 8888) - run_file(addr, 'spam.py', _run=self._run) - - self.assertEqual(self.argv, - _get_args('--file', 'spam.py', prog=sys.argv[0])) - - self.assertEqual(self.addr, Address.as_server(*addr)) - self.assertEqual(self.kwargs, {}) - - -class IntegratedRunTests(unittest.TestCase): - - def setUp(self): - super(IntegratedRunTests, self).setUp() - self.___main__ = sys.modules['__main__'] - self._argv = sys.argv - self._start_server = pydevd_comm.start_server - self._start_client = pydevd_comm.start_client - - self.pydevd = None - self.addr = None - self.kwargs = None - self.maincalls = 0 - self.mainexc = None - self.exitcode = -1 - - def tearDown(self): - sys.argv[:] = self._argv - sys.modules['__main__'] = self.___main__ - sys.modules.pop('__main___orig', None) - pydevd_comm.start_server = self._start_server - pydevd_comm.start_client = self._start_client - # We shouldn't need to restore __main__.start_*. - super(IntegratedRunTests, self).tearDown() - - def _install(self, pydevd, addr, **kwargs): - self.pydevd = pydevd - self.addr = addr - self.kwargs = kwargs - return self - - def _main(self): - self.maincalls += 1 - if self.mainexc is not None: - raise self.mainexc - - def test_run(self): - pydevd = FakePyDevd('pydevd/pydevd.py', self._main) - addr = (None, 8888) - run_file(addr, 'spam.py', _pydevd=pydevd, _install=self._install) - - self.assertEqual(self.pydevd, pydevd) - self.assertEqual(self.addr, Address.as_server(*addr)) - self.assertEqual(self.kwargs, {}) - self.assertEqual(self.maincalls, 1) - self.assertEqual(sys.argv, - _get_args('--file', 'spam.py', prog=sys.argv[0])) - self.assertEqual(self.exitcode, -1) - - def test_failure(self): - self.mainexc = RuntimeError('boom!') - pydevd = FakePyDevd('pydevd/pydevd.py', self._main) - addr = (None, 8888) - with self.assertRaises(RuntimeError) as cm: - run_file(addr, 'spam.py', _pydevd=pydevd, _install=self._install) - exc = cm.exception - - self.assertEqual(self.pydevd, pydevd) - self.assertEqual(self.addr, Address.as_server(*addr)) - self.assertEqual(self.kwargs, {}) - self.assertEqual(self.maincalls, 1) - self.assertEqual(sys.argv, - _get_args('--file', 'spam.py', prog=sys.argv[0])) - self.assertEqual(self.exitcode, -1) # TODO: Is this right? - self.assertIs(exc, self.mainexc) - - def test_exit(self): - self.mainexc = SystemExit(1) - pydevd = FakePyDevd('pydevd/pydevd.py', self._main) - addr = (None, 8888) - with self.assertRaises(SystemExit): - run_file(addr, 'spam.py', _pydevd=pydevd, _install=self._install) - - self.assertEqual(self.pydevd, pydevd) - self.assertEqual(self.addr, Address.as_server(*addr)) - self.assertEqual(self.kwargs, {}) - self.assertEqual(self.maincalls, 1) - self.assertEqual(sys.argv, - _get_args('--file', 'spam.py', prog=sys.argv[0])) - self.assertEqual(self.exitcode, 1) - - def test_installed(self): - pydevd = FakePyDevd('pydevd/pydevd.py', self._main) - addr = (None, 8888) - run_file(addr, 'spam.py', _pydevd=pydevd) - - __main__ = sys.modules['__main__'] - expected_server = ptvsd.pydevd_hooks.start_server - expected_client = ptvsd.pydevd_hooks.start_client - for mod in (pydevd_comm, pydevd, __main__): - start_server = getattr(mod, 'start_server') - if hasattr(start_server, 'orig'): - start_server = start_server.orig - start_client = getattr(mod, 'start_client') - if hasattr(start_client, 'orig'): - start_client = start_client.orig - - self.assertIs(start_server, expected_server, - '(module {})'.format(mod.__name__)) - self.assertIs(start_client, expected_client, - '(module {})'.format(mod.__name__)) - - -class NoDebugRunTests(RunBase, unittest.TestCase): - def test_nodebug_script_args(self): - addr = (None, 8888) - args = ('--one', '--two', '--three') - run_main(addr, 'spam.py', 'script', *args, - _runner=self._no_debug_runner) - - self.assertEqual(self.argv, ['spam.py'] + list(args)) - - self.assertEqual(self.addr, Address.as_server(*addr)) - self.assertFalse(self.is_module) - self.assertEqual(self.args, args) - self.assertEqual(self.kwargs, {}) - - def test_nodebug_script_no_args(self): - addr = Address.as_server('10.0.1.1', 8888) - run_main(addr, 'spam.py', 'script', - _runner=self._no_debug_runner) - - self.assertEqual(self.argv, ['spam.py']) - - self.assertEqual(self.addr, Address.as_server(*addr)) - self.assertFalse(self.is_module) - self.assertEqual(self.args, ()) - self.assertEqual(self.kwargs, {}) - - def test_nodebug_module_args(self): - addr = (None, 8888) - args = ('--one', '--two', '--three') - run_main(addr, 'spam.py', 'module', *args, - _runner=self._no_debug_runner) - - self.assertEqual(self.argv, ['spam.py'] + list(args)) - - self.assertEqual(self.addr, Address.as_server(*addr)) - self.assertTrue(self.is_module) - self.assertEqual(self.args, args) - self.assertEqual(self.kwargs, {}) - - def test_nodebug_module_no_args(self): - addr = Address.as_server('10.0.1.1', 8888) - run_main(addr, 'spam.py', 'module', - _runner=self._no_debug_runner) - - self.assertEqual(self.argv, ['spam.py']) - - self.assertEqual(self.addr, Address.as_server(*addr)) - self.assertTrue(self.is_module) - self.assertEqual(self.args, ()) - self.assertEqual(self.kwargs, {}) diff --git a/tests/ptvsd/test_pathutils.py b/tests/ptvsd/test_pathutils.py deleted file mode 100644 index 88833c66..00000000 --- a/tests/ptvsd/test_pathutils.py +++ /dev/null @@ -1,98 +0,0 @@ -import os -import os.path -import platform -import unittest - -from ptvsd.pathutils import PathUnNormcase - - -def _find_file(filename): - filename = os.path.normcase(os.path.normpath(filename)) - drive = os.path.splitdrive(filename)[0] - found = [] - while True: - dirname, basename = os.path.split(filename) - for name in os.listdir(dirname or '.'): - if os.path.normcase(name) == basename: - found.insert(0, name) - break - else: - raise Exception('oops: {}'.format(dirname)) - - if not dirname or dirname == drive or dirname == drive + os.path.sep: - return dirname.upper() + os.path.sep.join(found) - filename = dirname - - -FILENAME = __file__ -ACTUAL = _find_file(FILENAME) - - -class PathUtilTests(unittest.TestCase): - def test_invalid_path_names(self): - tool = PathUnNormcase() - file_path = 'x:/this is an/invalid/file/invalid_file_.csv' - result = tool.un_normcase(file_path) - - self.assertEqual(result, file_path) - - def test_empty_path_names(self): - tool = PathUnNormcase() - file_path = '' - result = tool.un_normcase(file_path) - - self.assertEqual(result, file_path) - - def test_valid_names(self): - tool = PathUnNormcase() - result = tool.un_normcase(FILENAME) - - self.assertEqual(result, FILENAME) - - def test_path_names_normcased(self): - tool = PathUnNormcase() - tool.enable() - result = tool.un_normcase( - os.path.normcase(FILENAME)) - - self.assertEqual(result, ACTUAL) - - @unittest.skipIf(platform.system() != 'Windows', - "Windows OS specific test") - def test_path_names_uppercase_disabled(self): - tool = PathUnNormcase() - expected = FILENAME.upper() - result = tool.un_normcase(expected) - - # Since path tool is disabled we should get the same - # path back - self.assertEqual(result, expected) - - @unittest.skipIf(platform.system() != 'Windows', - "Windows OS specific test") - def test_path_names_uppercase_enabled(self): - tool = PathUnNormcase() - tool.enable() - result = tool.un_normcase(FILENAME.upper()) - - self.assertEqual(result, ACTUAL) - - @unittest.skipIf(platform.system() != 'Windows', - "Windows OS specific test") - def test_path_names_lowercase_disabled(self): - tool = PathUnNormcase() - expected = FILENAME.lower() - result = tool.un_normcase(expected) - - # Since path tool is disabled we should get the same - # path back - self.assertEqual(result, expected) - - @unittest.skipIf(platform.system() != 'Windows', - "Windows OS specific test") - def test_path_names_lowercase_enabled(self): - tool = PathUnNormcase() - tool.enable() - result = tool.un_normcase(FILENAME.lower()) - - self.assertEqual(result, ACTUAL)