Skip to content

Commit bbaca65

Browse files
committed
enable code coverage for tests, implement some more tests for TextDocument
1 parent f003d07 commit bbaca65

File tree

9 files changed

+246
-47
lines changed

9 files changed

+246
-47
lines changed

.vscode/launch.json

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,32 @@
3333
"port": "${input:portNumber}"
3434
}
3535
},
36+
{
37+
"name": "Python: Pytest All Test",
38+
"type": "python",
39+
"request": "launch",
40+
"module": "pytest",
41+
"args": [
42+
"."
43+
],
44+
"console": "integratedTerminal",
45+
"justMyCode": false,
46+
"cwd": "${workspaceFolder}",
47+
},
48+
{
49+
"name": "Python: Pytest All Test Coverage",
50+
"type": "python",
51+
"request": "launch",
52+
"module": "pytest",
53+
"args": [
54+
"--cov-report=xml",
55+
"--cov=robotcode",
56+
"."
57+
],
58+
"console": "integratedTerminal",
59+
"justMyCode": false,
60+
"cwd": "${workspaceFolder}",
61+
},
3662
{
3763
"name": "Python: Pytest Current File",
3864
"type": "python",

pyproject.toml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,15 @@ profile = "black"
8080
src_paths = ["robotcode", "tests"]
8181
skip_gitignore = true
8282
skip = ['external']
83+
84+
[tool.coverage.run]
85+
omit = ["*tests*"]
86+
source = ["robotcode"]
87+
88+
[tool.coverage.report]
89+
exclude_lines = [
90+
"pragma: no cover",
91+
"if __name__ == .__main__.:",
92+
"raise NotImplementedError",
93+
]
94+
fail_under = 90

robotcode/debugger/dap_types.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,9 @@ class StoppedReason(Enum):
142142
DATA_BREAKPOINT = "data breakpoint"
143143
INSTRUCTION_BREAKPOINT = "instruction breakpoint"
144144

145+
def __repr__(self) -> str: # pragma: no cover
146+
return super().__str__()
147+
145148

146149
@dataclass
147150
class StoppedEventBody(Model):
@@ -223,6 +226,9 @@ class ChecksumAlgorithm(Enum):
223226
SHA256 = "SHA256"
224227
TIMESTAMP = "timestamp"
225228

229+
def __repr__(self) -> str: # pragma: no cover
230+
return super().__str__()
231+
226232

227233
@dataclass
228234
class Checksum(Model):
@@ -248,12 +254,18 @@ class OutputCategory(Enum):
248254
STDERR = "stderr"
249255
TELEMETRY = "telemetry"
250256

257+
def __repr__(self) -> str: # pragma: no cover
258+
return super().__str__()
259+
251260

252261
class OutputGroup(Enum):
253262
START = "start"
254263
STARTCOLLAPSED = "startCollapsed"
255264
END = "end"
256265

266+
def __repr__(self) -> str: # pragma: no cover
267+
return super().__str__()
268+
257269

258270
@dataclass
259271
class OutputEventBody(Model):
@@ -397,6 +409,9 @@ class RunInTerminalKind(Enum):
397409
INTEGRATED = "integrated"
398410
EXTERNAL = "external"
399411

412+
def __repr__(self) -> str: # pragma: no cover
413+
return super().__str__()
414+
400415

401416
@dataclass
402417
class RunInTerminalRequestArguments(Model):
@@ -747,6 +762,9 @@ class SteppingGranularity(Enum):
747762
LINE = "line"
748763
INSTRUCTION = "instruction"
749764

765+
def __repr__(self) -> str: # pragma: no cover
766+
return super().__str__()
767+
750768

751769
@dataclass
752770
class NextArguments(Model):
@@ -915,6 +933,9 @@ class EvaluateArgumentContext(Enum):
915933
HOVER = "hover"
916934
CLIPBOARD = "clipboard"
917935

936+
def __repr__(self) -> str: # pragma: no cover
937+
return super().__str__()
938+
918939

919940
@dataclass
920941
class EvaluateArguments(Model):
@@ -1006,6 +1027,9 @@ class ExceptionBreakMode(Enum):
10061027
UNHANDLED = "unhandled"
10071028
USER_UNHANDLED = "userUnhandled"
10081029

1030+
def __repr__(self) -> str: # pragma: no cover
1031+
return super().__str__()
1032+
10091033

10101034
@dataclass
10111035
class ExceptionPathSegment(Model):

robotcode/language_server/common/lsp_types.py

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class TraceValue(Enum):
4343
MESSAGE = "message"
4444
VERBOSE = "verbose"
4545

46-
def __repr__(self) -> str:
46+
def __repr__(self) -> str: # pragma: no cover
4747
return super().__str__()
4848

4949

@@ -66,7 +66,7 @@ class ResourceOperationKind(Enum):
6666
RENAME = "rename"
6767
DELETE = "delete"
6868

69-
def __repr__(self) -> str:
69+
def __repr__(self) -> str: # pragma: no cover
7070
return super().__str__()
7171

7272

@@ -76,7 +76,7 @@ class FailureHandlingKind(Enum):
7676
TEXT_ONLY_TRANSACTIONAL = "textOnlyTransactional"
7777
UNDO = "undo"
7878

79-
def __repr__(self) -> str:
79+
def __repr__(self) -> str: # pragma: no cover
8080
return super().__str__()
8181

8282

@@ -156,37 +156,37 @@ class MarkupKind(Enum):
156156
PLAINTEXT = "plaintext"
157157
MARKDOWN = "markdown"
158158

159-
def __repr__(self) -> str:
159+
def __repr__(self) -> str: # pragma: no cover
160160
return super().__str__()
161161

162162

163163
class CompletionItemTag(IntEnum):
164164
Deprecated = 1
165165

166-
def __repr__(self) -> str:
166+
def __repr__(self) -> str: # pragma: no cover
167167
return super().__str__()
168168

169169

170170
class SymbolTag(IntEnum):
171171
Deprecated = 1
172172

173-
def __repr__(self) -> str:
173+
def __repr__(self) -> str: # pragma: no cover
174174
return super().__str__()
175175

176176

177177
class InsertTextMode(IntEnum):
178178
AS_IS = 1
179179
ADJUST_INDENTATION = 2
180180

181-
def __repr__(self) -> str:
181+
def __repr__(self) -> str: # pragma: no cover
182182
return super().__str__()
183183

184184

185185
class InsertTextFormat(Enum):
186186
PLAINTEXT = 1
187187
SNIPPET = 2
188188

189-
def __repr__(self) -> str:
189+
def __repr__(self) -> str: # pragma: no cover
190190
return super().__str__()
191191

192192

@@ -234,7 +234,7 @@ class CompletionItemKind(IntEnum):
234234
OPERATOR = 24
235235
TYPE_PARAMETER = 25
236236

237-
def __repr__(self) -> str:
237+
def __repr__(self) -> str: # pragma: no cover
238238
return super().__str__()
239239

240240

@@ -370,7 +370,7 @@ class CodeActionKinds(Enum):
370370
SOURCE = "source"
371371
SOURCEORGANIZEIMPORTS = "source.organizeImports"
372372

373-
def __repr__(self) -> str:
373+
def __repr__(self) -> str: # pragma: no cover
374374
return super().__str__()
375375

376376

@@ -435,7 +435,7 @@ class DocumentOnTypeFormattingClientCapabilities(Model):
435435
class PrepareSupportDefaultBehavior(IntEnum):
436436
Identifier = 1
437437

438-
def __repr__(self) -> str:
438+
def __repr__(self) -> str: # pragma: no cover
439439
return super().__str__()
440440

441441

@@ -451,7 +451,7 @@ class DiagnosticTag(IntEnum):
451451
Unnecessary = 1
452452
Deprecated = 2
453453

454-
def __repr__(self) -> str:
454+
def __repr__(self) -> str: # pragma: no cover
455455
return super().__str__()
456456

457457

@@ -494,7 +494,7 @@ class CallHierarchyClientCapabilities(Model):
494494
class TokenFormat(Enum):
495495
Relative = "relative"
496496

497-
def __repr__(self) -> str:
497+
def __repr__(self) -> str: # pragma: no cover
498498
return super().__str__()
499499

500500

@@ -663,7 +663,7 @@ class FileOperationPatternKind(Enum):
663663
FILE = "file"
664664
FOLDER = "folder"
665665

666-
def __repr__(self) -> str:
666+
def __repr__(self) -> str: # pragma: no cover
667667
return super().__str__()
668668

669669

@@ -1116,7 +1116,7 @@ class MessageType(IntEnum):
11161116
Info = 3
11171117
Log = 4
11181118

1119-
def __repr__(self) -> str:
1119+
def __repr__(self) -> str: # pragma: no cover
11201120
return super().__str__()
11211121

11221122

@@ -1160,7 +1160,7 @@ class TextDocumentSaveReason(IntEnum):
11601160
AfterDelay = 2
11611161
FocusOut = 3
11621162

1163-
def __repr__(self) -> str:
1163+
def __repr__(self) -> str: # pragma: no cover
11641164
return super().__str__()
11651165

11661166

@@ -1188,7 +1188,7 @@ class DiagnosticSeverity(Enum):
11881188
INFORMATION = 3
11891189
HINT = 4
11901190

1191-
def __repr__(self) -> str:
1191+
def __repr__(self) -> str: # pragma: no cover
11921192
return super().__str__()
11931193

11941194

@@ -1257,7 +1257,7 @@ class FoldingRangeKind(Enum):
12571257
Imports = "imports"
12581258
Region = "region"
12591259

1260-
def __repr__(self) -> str:
1260+
def __repr__(self) -> str: # pragma: no cover
12611261
return super().__str__()
12621262

12631263

@@ -1480,7 +1480,7 @@ class FileChangeType(IntEnum):
14801480
CHANGED = 2
14811481
DELETED = 3
14821482

1483-
def __repr__(self) -> str:
1483+
def __repr__(self) -> str: # pragma: no cover
14841484
return super().__str__()
14851485

14861486

@@ -1507,7 +1507,7 @@ class CompletionTriggerKind(Enum):
15071507
TRIGGERCHARACTER = 2
15081508
TRIGGERFORINCOMPLETECOMPLETIONS = 3
15091509

1510-
def __repr__(self) -> str:
1510+
def __repr__(self) -> str: # pragma: no cover
15111511
return super().__str__()
15121512

15131513

@@ -1561,7 +1561,7 @@ class SignatureHelpTriggerKind(Enum):
15611561
TRIGGERCHARACTER = 2
15621562
CONTENTCHANGE = 3
15631563

1564-
def __repr__(self) -> str:
1564+
def __repr__(self) -> str: # pragma: no cover
15651565
return super().__str__()
15661566

15671567

@@ -1769,7 +1769,7 @@ class SemanticTokenTypes(Enum):
17691769
REGEXP = "regexp"
17701770
OPERATOR = "operator"
17711771

1772-
def __repr__(self) -> str:
1772+
def __repr__(self) -> str: # pragma: no cover
17731773
return super().__str__()
17741774

17751775

@@ -1785,5 +1785,5 @@ class SemanticTokenModifiers(Enum):
17851785
DOCUMENTATION = "documentation"
17861786
DEFAULT_LIBRARY = "defaultLibrary"
17871787

1788-
def __repr__(self) -> str:
1788+
def __repr__(self) -> str: # pragma: no cover
17891789
return super().__str__()

robotcode/language_server/common/server.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from ...utils.logging import LoggingDescriptor
66
from .protocol import LanguageServerProtocol
77

8-
__all__ = ["LanguageServerBase", "LanguageServer", "TCP_DEFAULT_PORT"]
8+
__all__ = ["LanguageServerBase", "TCP_DEFAULT_PORT"]
99

1010
TCP_DEFAULT_PORT = 6610
1111

@@ -25,7 +25,6 @@ def __init__(
2525
tcp_params=tcp_params,
2626
)
2727

28-
29-
class LanguageServer(LanguageServerBase[LanguageServerProtocol]):
30-
def create_protocol(self) -> LanguageServerProtocol:
31-
return LanguageServerProtocol(self)
28+
@abc.abstractmethod
29+
def create_protocol(self) -> TProtocol: # pragma: no cover
30+
...

0 commit comments

Comments
 (0)