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
This commit is contained in:
Karthik Nadig 2018-11-16 13:59:25 -08:00 committed by GitHub
parent bd03d3a523
commit cc5d57a192
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 517 additions and 891 deletions

View file

@ -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)

382
pytests/test_parse_args.py Normal file
View file

@ -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

94
pytests/test_pathutils.py Normal file
View file

@ -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

View file

@ -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)

View file

@ -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))

View file

@ -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, {})

View file

@ -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)