forked from palantir/python-language-server
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_workspace.py
More file actions
121 lines (87 loc) · 3.6 KB
/
Copy pathtest_workspace.py
File metadata and controls
121 lines (87 loc) · 3.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# Copyright 2017 Palantir Technologies, Inc.
import os
import sys
import pytest
from pyls import uris
PY2 = sys.version_info.major == 2
if PY2:
import pathlib2 as pathlib
else:
import pathlib
DOC_URI = uris.from_fs_path(__file__)
def path_as_uri(path):
return pathlib.Path(os.path.abspath(path)).as_uri()
def test_local(pyls):
""" Since the workspace points to the test directory """
assert pyls.workspace.is_local()
def test_put_document(pyls):
pyls.workspace.put_document(DOC_URI, 'content')
assert DOC_URI in pyls.workspace._docs
def test_get_document(pyls):
pyls.workspace.put_document(DOC_URI, 'TEXT')
assert pyls.workspace.get_document(DOC_URI).source == 'TEXT'
def test_get_missing_document(tmpdir, pyls):
source = 'TEXT'
doc_path = tmpdir.join("test_document.py")
doc_path.write(source)
doc_uri = uris.from_fs_path(str(doc_path))
assert pyls.workspace.get_document(doc_uri).source == 'TEXT'
def test_rm_document(pyls):
pyls.workspace.put_document(DOC_URI, 'TEXT')
assert pyls.workspace.get_document(DOC_URI).source == 'TEXT'
pyls.workspace.rm_document(DOC_URI)
assert pyls.workspace.get_document(DOC_URI)._source is None
@pytest.mark.parametrize('metafiles', [('setup.py',), ('pyproject.toml',), ('setup.py', 'pyproject.toml')])
def test_non_root_project(pyls, metafiles):
repo_root = os.path.join(pyls.workspace.root_path, 'repo-root')
os.mkdir(repo_root)
project_root = os.path.join(repo_root, 'project-root')
os.mkdir(project_root)
for metafile in metafiles:
with open(os.path.join(project_root, metafile), 'w+') as f:
f.write('# ' + metafile)
test_uri = uris.from_fs_path(os.path.join(project_root, 'hello/test.py'))
pyls.workspace.put_document(test_uri, 'assert True')
test_doc = pyls.workspace.get_document(test_uri)
assert project_root in test_doc.sys_path()
def test_root_project_with_no_setup_py(pyls):
"""Default to workspace root."""
workspace_root = pyls.workspace.root_path
test_uri = uris.from_fs_path(os.path.join(workspace_root, 'hello/test.py'))
pyls.workspace.put_document(test_uri, 'assert True')
test_doc = pyls.workspace.get_document(test_uri)
assert workspace_root in test_doc.sys_path()
def test_multiple_workspaces(tmpdir, pyls):
workspace1_dir = tmpdir.mkdir('workspace1')
workspace2_dir = tmpdir.mkdir('workspace2')
file1 = workspace1_dir.join('file1.py')
file2 = workspace2_dir.join('file1.py')
file1.write('import os')
file2.write('import sys')
msg = {
'uri': path_as_uri(str(file1)),
'version': 1,
'text': 'import os'
}
pyls.m_text_document__did_open(textDocument=msg)
assert msg['uri'] in pyls.workspace._docs
added_workspaces = [{'uri': path_as_uri(str(x))}
for x in (workspace1_dir, workspace2_dir)]
pyls.m_workspace__did_change_workspace_folders(
added=added_workspaces, removed=[])
for workspace in added_workspaces:
assert workspace['uri'] in pyls.workspaces
workspace1_uri = added_workspaces[0]['uri']
assert msg['uri'] not in pyls.workspace._docs
assert msg['uri'] in pyls.workspaces[workspace1_uri]._docs
msg = {
'uri': path_as_uri(str(file2)),
'version': 1,
'text': 'import sys'
}
pyls.m_text_document__did_open(textDocument=msg)
workspace2_uri = added_workspaces[1]['uri']
assert msg['uri'] in pyls.workspaces[workspace2_uri]._docs
pyls.m_workspace__did_change_workspace_folders(
added=[], removed=[added_workspaces[0]])
assert workspace1_uri not in pyls.workspaces