@codingame/monaco-vscode-testing-service-override 30.0.1 → 31.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -4
- package/vscode/src/vs/workbench/contrib/debug/browser/callStackWidget.js +5 -5
- package/vscode/src/vs/workbench/contrib/testing/browser/codeCoverageDecorations.js +46 -27
- package/vscode/src/vs/workbench/contrib/testing/browser/codeCoverageDisplayUtils.d.ts +4 -1
- package/vscode/src/vs/workbench/contrib/testing/browser/codeCoverageDisplayUtils.js +15 -6
- package/vscode/src/vs/workbench/contrib/testing/browser/icons.js +29 -29
- package/vscode/src/vs/workbench/contrib/testing/browser/testCoverageBars.js +3 -3
- package/vscode/src/vs/workbench/contrib/testing/browser/testCoverageView.js +16 -16
- package/vscode/src/vs/workbench/contrib/testing/browser/testExplorerActions.js +72 -72
- package/vscode/src/vs/workbench/contrib/testing/browser/testResultsView/testResultsOutput.js +5 -5
- package/vscode/src/vs/workbench/contrib/testing/browser/testResultsView/testResultsTree.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/testing/browser/testResultsView/testResultsTree.js +41 -24
- package/vscode/src/vs/workbench/contrib/testing/browser/testResultsView/testResultsViewContent.js +3 -3
- package/vscode/src/vs/workbench/contrib/testing/browser/testing.contribution.js +8 -8
- package/vscode/src/vs/workbench/contrib/testing/browser/testingConfigurationUi.js +2 -2
- package/vscode/src/vs/workbench/contrib/testing/browser/testingDecorations.js +27 -22
- package/vscode/src/vs/workbench/contrib/testing/browser/testingExplorerFilter.js +11 -11
- package/vscode/src/vs/workbench/contrib/testing/browser/testingExplorerView.js +19 -17
- package/vscode/src/vs/workbench/contrib/testing/browser/testingOutputPeek.js +14 -11
- package/vscode/src/vs/workbench/contrib/testing/browser/testingViewPaneContainer.js +1 -1
- package/vscode/src/vs/workbench/contrib/testing/browser/theme.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/testing/browser/theme.js +45 -33
- package/vscode/src/vs/workbench/contrib/testing/common/configuration.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/testing/common/configuration.js +30 -24
- package/vscode/src/vs/workbench/contrib/testing/common/testExplorerFilterState.js +7 -1
- package/vscode/src/vs/workbench/contrib/testing/common/testServiceImpl.js +4 -4
- package/vscode/src/vs/workbench/contrib/testing/common/testingChatAgentTool.d.ts +11 -4
- package/vscode/src/vs/workbench/contrib/testing/common/testingChatAgentTool.js +75 -17
- package/vscode/src/vs/workbench/contrib/testing/common/testingContentProvider.js +1 -1
- package/vscode/src/vs/workbench/contrib/testing/common/testingContextKeys.js +31 -31
- package/vscode/src/vs/workbench/contrib/testing/common/testingProgressMessages.js +5 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codingame/monaco-vscode-testing-service-override",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "31.0.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "VSCode public API plugged on the monaco editor - testing service-override",
|
|
6
6
|
"keywords": [],
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
},
|
|
16
16
|
"type": "module",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@codingame/monaco-vscode-api": "
|
|
19
|
-
"@codingame/monaco-vscode-terminal-service-override": "
|
|
20
|
-
"@codingame/monaco-vscode-xterm-addons-common": "
|
|
18
|
+
"@codingame/monaco-vscode-api": "31.0.0",
|
|
19
|
+
"@codingame/monaco-vscode-terminal-service-override": "31.0.0",
|
|
20
|
+
"@codingame/monaco-vscode-xterm-addons-common": "31.0.0"
|
|
21
21
|
},
|
|
22
22
|
"main": "index.js",
|
|
23
23
|
"module": "index.js",
|
|
@@ -180,7 +180,7 @@ let StackAccessibilityProvider = class StackAccessibilityProvider {
|
|
|
180
180
|
if (e instanceof CallStackFrame) {
|
|
181
181
|
if (e.source && e.line) {
|
|
182
182
|
return localize(
|
|
183
|
-
|
|
183
|
+
8295,
|
|
184
184
|
"{0}, line {1} in {2}",
|
|
185
185
|
e.name,
|
|
186
186
|
e.line,
|
|
@@ -194,7 +194,7 @@ let StackAccessibilityProvider = class StackAccessibilityProvider {
|
|
|
194
194
|
assertNever();
|
|
195
195
|
}
|
|
196
196
|
getWidgetAriaLabel() {
|
|
197
|
-
return localize(
|
|
197
|
+
return localize(8296, "Stack Trace");
|
|
198
198
|
}
|
|
199
199
|
};
|
|
200
200
|
StackAccessibilityProvider = ( __decorate([( __param(0, ILabelService))], StackAccessibilityProvider));
|
|
@@ -473,7 +473,7 @@ let MissingCodeRenderer = class MissingCodeRenderer {
|
|
|
473
473
|
const cast = element;
|
|
474
474
|
templateData.label.element.setResource({
|
|
475
475
|
name: cast.name,
|
|
476
|
-
description: ( localize(
|
|
476
|
+
description: ( localize(8297, "Line {0} column {1}", cast.line, cast.column)),
|
|
477
477
|
range: {
|
|
478
478
|
startLineNumber: cast.line,
|
|
479
479
|
startColumn: cast.column,
|
|
@@ -557,7 +557,7 @@ let SkippedRenderer = class SkippedRenderer {
|
|
|
557
557
|
}
|
|
558
558
|
button.enabled = false;
|
|
559
559
|
this.loadFrames(data.current).catch(e => {
|
|
560
|
-
this.notificationService.error(( localize(
|
|
560
|
+
this.notificationService.error(( localize(8298, "Failed to load stack frames: {0}", e.message)));
|
|
561
561
|
});
|
|
562
562
|
}));
|
|
563
563
|
return data;
|
|
@@ -637,7 +637,7 @@ registerAction2(class extends Action2 {
|
|
|
637
637
|
constructor() {
|
|
638
638
|
super({
|
|
639
639
|
id: "callStackWidget.goToFile",
|
|
640
|
-
title: ( localize2(
|
|
640
|
+
title: ( localize2(8299, "Open File")),
|
|
641
641
|
icon: Codicon.goToFile,
|
|
642
642
|
menu: {
|
|
643
643
|
id: MenuId.DebugCallStackToolbar,
|
|
@@ -21,7 +21,7 @@ import { ICodeEditorService } from '@codingame/monaco-vscode-api/vscode/vs/edito
|
|
|
21
21
|
import { EditorOption } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/config/editorOptions';
|
|
22
22
|
import { Position } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/core/position';
|
|
23
23
|
import { Range } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/core/range';
|
|
24
|
-
import { InjectedTextCursorStops } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/model';
|
|
24
|
+
import { MinimapPosition, InjectedTextCursorStops } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/model';
|
|
25
25
|
import { localize, localize2 } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
26
26
|
import { Categories } from '@codingame/monaco-vscode-api/vscode/vs/platform/action/common/actionCommonCategories';
|
|
27
27
|
import { MenuId, registerAction2, Action2 } from '@codingame/monaco-vscode-api/vscode/vs/platform/actions/common/actions';
|
|
@@ -36,6 +36,7 @@ import { KeybindingWeight } from '@codingame/monaco-vscode-api/vscode/vs/platfor
|
|
|
36
36
|
import { ILogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service';
|
|
37
37
|
import { bindContextKey, observableConfigValue } from '@codingame/monaco-vscode-api/vscode/vs/platform/observable/common/platformObservableUtils';
|
|
38
38
|
import { IQuickInputService } from '@codingame/monaco-vscode-api/vscode/vs/platform/quickinput/common/quickInput.service';
|
|
39
|
+
import { themeColorFromId } from '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/themeService';
|
|
39
40
|
import { ActiveEditorContext } from '@codingame/monaco-vscode-api/vscode/vs/workbench/common/contextkeys';
|
|
40
41
|
import { TEXT_FILE_EDITOR_ID } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/files/common/files';
|
|
41
42
|
import { TestingConfigKeys, getTestingConfiguration } from '../common/configuration.js';
|
|
@@ -49,6 +50,7 @@ import { TestingContextKeys } from '../common/testingContextKeys.js';
|
|
|
49
50
|
import { labels, getLabelForItem } from './codeCoverageDisplayUtils.js';
|
|
50
51
|
import { testingCoverageMissingBranch, testingCoverageReport, testingFilterIcon, testingRerunIcon } from './icons.js';
|
|
51
52
|
import { ManagedTestCoverageBars } from './testCoverageBars.js';
|
|
53
|
+
import { testingCoveredMinimapBackground, testingUncoveredMinimapBackground } from './theme.js';
|
|
52
54
|
import { observableValue } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableValue';
|
|
53
55
|
import { observableFromEvent } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableFromEvent';
|
|
54
56
|
import { derived } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/derived';
|
|
@@ -56,11 +58,11 @@ import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/obse
|
|
|
56
58
|
|
|
57
59
|
const CLASS_HIT = "coverage-deco-hit";
|
|
58
60
|
const CLASS_MISS = "coverage-deco-miss";
|
|
59
|
-
const TOGGLE_INLINE_COMMAND_TEXT = ( localize(
|
|
61
|
+
const TOGGLE_INLINE_COMMAND_TEXT = ( localize(14492, "Toggle Inline"));
|
|
60
62
|
const TOGGLE_INLINE_COMMAND_ID = "testing.toggleInlineCoverage";
|
|
61
63
|
const BRANCH_MISS_INDICATOR_CHARS = 4;
|
|
62
|
-
const GO_TO_NEXT_MISSED_LINE_TITLE = ( localize2(
|
|
63
|
-
const GO_TO_PREVIOUS_MISSED_LINE_TITLE = ( localize2(
|
|
64
|
+
const GO_TO_NEXT_MISSED_LINE_TITLE = ( localize2(14493, "Go to Next Uncovered Line"));
|
|
65
|
+
const GO_TO_PREVIOUS_MISSED_LINE_TITLE = ( localize2(14494, "Go to Previous Uncovered Line"));
|
|
64
66
|
let CodeCoverageDecorations = class CodeCoverageDecorations extends Disposable {
|
|
65
67
|
static {
|
|
66
68
|
this.ID = Testing.CoverageDecorationsContributionId;
|
|
@@ -120,10 +122,17 @@ let CodeCoverageDecorations = class CodeCoverageDecorations extends Disposable {
|
|
|
120
122
|
contextKeyService,
|
|
121
123
|
reader => this.hasInlineCoverageDetails.read(reader)
|
|
122
124
|
));
|
|
125
|
+
const minimapEnabled = observableConfigValue(TestingConfigKeys.CoverageMinimapEnabled, true, configurationService);
|
|
123
126
|
this._register(autorun(reader => {
|
|
124
127
|
const c = fileCoverage.read(reader);
|
|
125
128
|
if (c) {
|
|
126
|
-
this.apply(
|
|
129
|
+
this.apply(
|
|
130
|
+
editor.getModel(),
|
|
131
|
+
c.file,
|
|
132
|
+
c.testId,
|
|
133
|
+
coverage.showInline.read(reader),
|
|
134
|
+
minimapEnabled.read(reader)
|
|
135
|
+
);
|
|
127
136
|
} else {
|
|
128
137
|
this.clear();
|
|
129
138
|
}
|
|
@@ -295,7 +304,7 @@ let CodeCoverageDecorations = class CodeCoverageDecorations extends Disposable {
|
|
|
295
304
|
}
|
|
296
305
|
return false;
|
|
297
306
|
}
|
|
298
|
-
async apply(model, coverage, testId, showInlineByDefault) {
|
|
307
|
+
async apply(model, coverage, testId, showInlineByDefault, showMinimap) {
|
|
299
308
|
const details = this.details = await this.loadDetails(coverage, testId, model);
|
|
300
309
|
if (!details) {
|
|
301
310
|
this.hasInlineCoverageDetails.set(false, undefined);
|
|
@@ -320,7 +329,11 @@ let CodeCoverageDecorations = class CodeCoverageDecorations extends Disposable {
|
|
|
320
329
|
const options = {
|
|
321
330
|
showIfCollapsed: showMissIndicator,
|
|
322
331
|
description: "coverage-gutter",
|
|
323
|
-
lineNumberClassName: `coverage-deco-gutter ${cls}
|
|
332
|
+
lineNumberClassName: `coverage-deco-gutter ${cls}`,
|
|
333
|
+
minimap: showMinimap ? {
|
|
334
|
+
color: themeColorFromId(hits ? testingCoveredMinimapBackground : testingUncoveredMinimapBackground),
|
|
335
|
+
position: MinimapPosition.Gutter
|
|
336
|
+
} : undefined
|
|
324
337
|
};
|
|
325
338
|
const applyHoverOptions = target => {
|
|
326
339
|
target.hoverMessage = description;
|
|
@@ -351,7 +364,13 @@ let CodeCoverageDecorations = class CodeCoverageDecorations extends Disposable {
|
|
|
351
364
|
const options = {
|
|
352
365
|
showIfCollapsed: false,
|
|
353
366
|
description: "coverage-inline",
|
|
354
|
-
lineNumberClassName: `coverage-deco-gutter ${cls}
|
|
367
|
+
lineNumberClassName: `coverage-deco-gutter ${cls}`,
|
|
368
|
+
minimap: showMinimap ? {
|
|
369
|
+
color: themeColorFromId(
|
|
370
|
+
detail.count ? testingCoveredMinimapBackground : testingUncoveredMinimapBackground
|
|
371
|
+
),
|
|
372
|
+
position: MinimapPosition.Gutter
|
|
373
|
+
} : undefined
|
|
355
374
|
};
|
|
356
375
|
const applyHoverOptions = target => {
|
|
357
376
|
target.className = `coverage-deco-inline ${cls}`;
|
|
@@ -503,7 +522,7 @@ class CoverageDetailsModel {
|
|
|
503
522
|
if (detail.branches?.length) {
|
|
504
523
|
const covered = detail.branches.filter(b => !!b.count).length;
|
|
505
524
|
return ( new MarkdownString()).appendMarkdown(( localize(
|
|
506
|
-
|
|
525
|
+
14495,
|
|
507
526
|
"{0} of {1} of branches in {2} were covered.",
|
|
508
527
|
covered,
|
|
509
528
|
detail.branches.length,
|
|
@@ -522,11 +541,11 @@ class CoverageDetailsModel {
|
|
|
522
541
|
} = detail.detail.branches[detail.branch];
|
|
523
542
|
const label2 = label ? wrapInBackticks(label) : `#${detail.branch + 1}`;
|
|
524
543
|
if (!count) {
|
|
525
|
-
return ( new MarkdownString()).appendMarkdown(( localize(
|
|
544
|
+
return ( new MarkdownString()).appendMarkdown(( localize(14496, "Branch {0} in {1} was not covered.", label2, text)));
|
|
526
545
|
} else if (count === true) {
|
|
527
|
-
return ( new MarkdownString()).appendMarkdown(( localize(
|
|
546
|
+
return ( new MarkdownString()).appendMarkdown(( localize(14497, "Branch {0} in {1} was executed.", label2, text)));
|
|
528
547
|
} else {
|
|
529
|
-
return ( new MarkdownString()).appendMarkdown(( localize(
|
|
548
|
+
return ( new MarkdownString()).appendMarkdown(( localize(14498, "Branch {0} in {1} was executed {2} time(s).", label2, text, count)));
|
|
530
549
|
}
|
|
531
550
|
}
|
|
532
551
|
assertNever();
|
|
@@ -534,7 +553,7 @@ class CoverageDetailsModel {
|
|
|
534
553
|
}
|
|
535
554
|
function namedDetailLabel(name, detail) {
|
|
536
555
|
return ( new MarkdownString()).appendMarkdown(
|
|
537
|
-
!detail.count ? ( localize(
|
|
556
|
+
!detail.count ? ( localize(14499, "`{0}` was not executed.", name)) : typeof detail.count === "number" ? ( localize(14500, "`{0}` was executed {1} time(s).", name, detail.count)) : ( localize(14501, "`{0}` was executed.", name)));
|
|
538
557
|
}
|
|
539
558
|
function tidyLocation(location) {
|
|
540
559
|
if (location instanceof Position) {
|
|
@@ -650,7 +669,7 @@ let CoverageToolbarWidget = class CoverageToolbarWidget extends Disposable {
|
|
|
650
669
|
if (!current) {
|
|
651
670
|
return;
|
|
652
671
|
}
|
|
653
|
-
const toggleAction = ( new ActionWithIcon("toggleInline", this.coverage.showInline.get() ? ( localize(
|
|
672
|
+
const toggleAction = ( new ActionWithIcon("toggleInline", this.coverage.showInline.get() ? ( localize(14502, "Hide Inline")) : ( localize(14503, "Show Inline")), testingCoverageReport, undefined, () => this.coverage.showInline.set(!this.coverage.showInline.get(), undefined)));
|
|
654
673
|
toggleAction.tooltip = this.keybindingService.appendKeybinding(TOGGLE_INLINE_COMMAND_TEXT, TOGGLE_INLINE_COMMAND_ID);
|
|
655
674
|
const hasUncoveredStmt = current.coverage.statement.covered < current.coverage.statement.total;
|
|
656
675
|
this.actionBar.push(( new ActionWithIcon(
|
|
@@ -682,12 +701,12 @@ let CoverageToolbarWidget = class CoverageToolbarWidget extends Disposable {
|
|
|
682
701
|
)));
|
|
683
702
|
} else if (current.coverage.perTestData?.size) {
|
|
684
703
|
this.actionBar.push(( new ActionWithIcon("perTestFilter", ( localize(
|
|
685
|
-
|
|
704
|
+
14504,
|
|
686
705
|
"{0} test(s) ran code in this file",
|
|
687
706
|
current.coverage.perTestData.size
|
|
688
707
|
)), testingFilterIcon, undefined, () => this.commandService.executeCommand(TestCommandId.CoverageFilterToTestInEditor, this.current, this.editor))));
|
|
689
708
|
}
|
|
690
|
-
this.actionBar.push(( new ActionWithIcon("rerun", ( localize(
|
|
709
|
+
this.actionBar.push(( new ActionWithIcon("rerun", ( localize(14505, "Rerun")), testingRerunIcon, !this.isRunning, () => this.rerunTest())));
|
|
691
710
|
}
|
|
692
711
|
show() {
|
|
693
712
|
if (this.registered) {
|
|
@@ -739,7 +758,7 @@ registerAction2(class ToggleInlineCoverage extends Action2 {
|
|
|
739
758
|
constructor() {
|
|
740
759
|
super({
|
|
741
760
|
id: TOGGLE_INLINE_COMMAND_ID,
|
|
742
|
-
title: ( localize2(
|
|
761
|
+
title: ( localize2(14506, "Toggle Inline Coverage")),
|
|
743
762
|
category: Categories.Test,
|
|
744
763
|
keybinding: {
|
|
745
764
|
weight: KeybindingWeight.WorkbenchContrib,
|
|
@@ -750,7 +769,7 @@ registerAction2(class ToggleInlineCoverage extends Action2 {
|
|
|
750
769
|
},
|
|
751
770
|
toggled: {
|
|
752
771
|
condition: TestingContextKeys.inlineCoverageEnabled,
|
|
753
|
-
title: ( localize(
|
|
772
|
+
title: ( localize(14507, "Hide Inline Coverage"))
|
|
754
773
|
},
|
|
755
774
|
icon: testingCoverageReport,
|
|
756
775
|
menu: [{
|
|
@@ -772,9 +791,9 @@ registerAction2(class ToggleCoverageToolbar extends Action2 {
|
|
|
772
791
|
constructor() {
|
|
773
792
|
super({
|
|
774
793
|
id: TestCommandId.CoverageToggleToolbar,
|
|
775
|
-
title: ( localize2(
|
|
794
|
+
title: ( localize2(14508, "Show Test Coverage Toolbar")),
|
|
776
795
|
metadata: {
|
|
777
|
-
description: ( localize2(
|
|
796
|
+
description: ( localize2(14509, "Toggle the sticky coverage bar in the editor."))
|
|
778
797
|
},
|
|
779
798
|
category: Categories.Test,
|
|
780
799
|
toggled: {
|
|
@@ -804,7 +823,7 @@ registerAction2(class FilterCoverageToTestInEditor extends Action2 {
|
|
|
804
823
|
constructor() {
|
|
805
824
|
super({
|
|
806
825
|
id: TestCommandId.CoverageFilterToTestInEditor,
|
|
807
|
-
title: ( localize2(
|
|
826
|
+
title: ( localize2(14510, "Filter Coverage to Test")),
|
|
808
827
|
category: Categories.Test,
|
|
809
828
|
icon: Codicon.filter,
|
|
810
829
|
toggled: {
|
|
@@ -849,7 +868,7 @@ registerAction2(class FilterCoverageToTestInEditor extends Action2 {
|
|
|
849
868
|
}, {
|
|
850
869
|
type: "separator"
|
|
851
870
|
}, ...( tests.map(id => ({
|
|
852
|
-
|
|
871
|
+
...getLabelForItem(result, id, commonPrefix),
|
|
853
872
|
testId: id,
|
|
854
873
|
buttons
|
|
855
874
|
})))];
|
|
@@ -894,14 +913,14 @@ registerAction2(class ToggleCoverageInExplorer extends Action2 {
|
|
|
894
913
|
constructor() {
|
|
895
914
|
super({
|
|
896
915
|
id: TestCommandId.CoverageToggleInExplorer,
|
|
897
|
-
title: ( localize2(
|
|
916
|
+
title: ( localize2(14511, "Toggle Coverage in Explorer")),
|
|
898
917
|
metadata: {
|
|
899
|
-
description: ( localize2(
|
|
918
|
+
description: ( localize2(14512, "Toggle the display of test coverage in the File Explorer view."))
|
|
900
919
|
},
|
|
901
920
|
category: Categories.Test,
|
|
902
921
|
toggled: {
|
|
903
922
|
condition: ( ContextKeyExpr.equals("config.testing.showCoverageInExplorer", true)),
|
|
904
|
-
title: ( localize(
|
|
923
|
+
title: ( localize(14513, "Hide Coverage in Explorer"))
|
|
905
924
|
},
|
|
906
925
|
menu: [{
|
|
907
926
|
id: MenuId.CommandPalette,
|
|
@@ -921,7 +940,7 @@ registerAction2(class GoToNextMissedCoverageLine extends Action2 {
|
|
|
921
940
|
id: TestCommandId.CoverageGoToNextMissedLine,
|
|
922
941
|
title: GO_TO_NEXT_MISSED_LINE_TITLE,
|
|
923
942
|
metadata: {
|
|
924
|
-
description: ( localize2(
|
|
943
|
+
description: ( localize2(14514, "Navigate to the next line that is not covered by tests."))
|
|
925
944
|
},
|
|
926
945
|
category: Categories.Test,
|
|
927
946
|
icon: Codicon.arrowDown,
|
|
@@ -958,7 +977,7 @@ registerAction2(class GoToPreviousMissedCoverageLine extends Action2 {
|
|
|
958
977
|
id: TestCommandId.CoverageGoToPreviousMissedLine,
|
|
959
978
|
title: GO_TO_PREVIOUS_MISSED_LINE_TITLE,
|
|
960
979
|
metadata: {
|
|
961
|
-
description: ( localize2(
|
|
980
|
+
description: ( localize2(14515, "Navigate to the previous line that is not covered by tests."))
|
|
962
981
|
},
|
|
963
982
|
category: Categories.Test,
|
|
964
983
|
icon: Codicon.arrowUp,
|
|
@@ -7,7 +7,10 @@ export declare const percent: (cc: ICoverageCount) => number;
|
|
|
7
7
|
export declare const getCoverageColor: (pct: number, thresholds: ITestingCoverageBarThresholds) => `var(${string})`;
|
|
8
8
|
export declare const displayPercent: (value: number, precision?: number) => string;
|
|
9
9
|
export declare const calculateDisplayedStat: (coverage: CoverageBarSource, method: TestingDisplayedCoveragePercent) => number;
|
|
10
|
-
export declare function getLabelForItem(result: LiveTestResult, testId: TestId, commonPrefixLen: number):
|
|
10
|
+
export declare function getLabelForItem(result: LiveTestResult, testId: TestId, commonPrefixLen: number): {
|
|
11
|
+
label: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
};
|
|
11
14
|
export declare namespace labels {
|
|
12
15
|
const showingFilterFor: (label: string) => string;
|
|
13
16
|
const clickToChangeFiltering: string;
|
|
@@ -80,15 +80,24 @@ function getLabelForItem(result, testId, commonPrefixLen) {
|
|
|
80
80
|
}
|
|
81
81
|
parts.push(item.label);
|
|
82
82
|
}
|
|
83
|
-
|
|
83
|
+
const relevant = parts.slice(commonPrefixLen);
|
|
84
|
+
if (relevant.length <= 1) {
|
|
85
|
+
return {
|
|
86
|
+
label: relevant[0] ?? ""
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
label: relevant[relevant.length - 1],
|
|
91
|
+
description: relevant.slice(0, -1).join(" › ")
|
|
92
|
+
};
|
|
84
93
|
}
|
|
85
94
|
var labels;
|
|
86
95
|
(function(labels) {
|
|
87
|
-
labels.showingFilterFor = label => ( localize(
|
|
88
|
-
labels.clickToChangeFiltering = ( localize(
|
|
89
|
-
labels.percentCoverage = (percent, precision) => ( localize(
|
|
90
|
-
labels.allTests = ( localize(
|
|
91
|
-
labels.pickShowCoverage = ( localize(
|
|
96
|
+
labels.showingFilterFor = label => ( localize(14516, "Showing \"{0}\"", label));
|
|
97
|
+
labels.clickToChangeFiltering = ( localize(14517, "Click to view coverage for a single test"));
|
|
98
|
+
labels.percentCoverage = (percent, precision) => ( localize(14518, "{0} Coverage", displayPercent(percent, precision)));
|
|
99
|
+
labels.allTests = ( localize(14519, "Entire run"));
|
|
100
|
+
labels.pickShowCoverage = ( localize(14520, "Pick a test to show coverage for"));
|
|
92
101
|
})(labels || (labels = {}));
|
|
93
102
|
|
|
94
103
|
export { calculateDisplayedStat, displayPercent, getCoverageColor, getLabelForItem, labels, percent };
|
|
@@ -7,47 +7,47 @@ import { ThemeIcon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/th
|
|
|
7
7
|
import { testStatesToIconColors, testStatesToRetiredIconColors, testingColorRunAction } from './theme.js';
|
|
8
8
|
import { TestResultState } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/testing/common/testTypes';
|
|
9
9
|
|
|
10
|
-
const testingViewIcon = registerIcon("test-view-icon", Codicon.beaker, ( localize(
|
|
11
|
-
const testingResultsIcon = registerIcon("test-results-icon", Codicon.checklist, ( localize(
|
|
12
|
-
const testingRunIcon = registerIcon("testing-run-icon", Codicon.run, ( localize(
|
|
13
|
-
const testingRerunIcon = registerIcon("testing-rerun-icon", Codicon.debugRerun, ( localize(
|
|
14
|
-
const testingRunAllIcon = registerIcon("testing-run-all-icon", Codicon.runAll, ( localize(
|
|
15
|
-
const testingDebugAllIcon = registerIcon("testing-debug-all-icon", Codicon.debugAltSmall, ( localize(
|
|
16
|
-
const testingDebugIcon = registerIcon("testing-debug-icon", Codicon.debugAltSmall, ( localize(
|
|
17
|
-
const testingCoverageIcon = registerIcon("testing-coverage-icon", Codicon.runCoverage, ( localize(
|
|
18
|
-
const testingCoverageAllIcon = registerIcon("testing-coverage-all-icon", Codicon.runAllCoverage, ( localize(
|
|
19
|
-
const testingCancelIcon = registerIcon("testing-cancel-icon", Codicon.debugStop, ( localize(
|
|
20
|
-
const testingFilterIcon = registerIcon("testing-filter", Codicon.filter, ( localize(
|
|
21
|
-
const testingHiddenIcon = registerIcon("testing-hidden", Codicon.eyeClosed, ( localize(
|
|
22
|
-
registerIcon("testing-show-as-list-icon", Codicon.listTree, ( localize(
|
|
23
|
-
registerIcon("testing-show-as-list-icon", Codicon.listFlat, ( localize(
|
|
24
|
-
const testingUpdateProfiles = registerIcon("testing-update-profiles", Codicon.gear, ( localize(
|
|
25
|
-
const testingRefreshTests = registerIcon("testing-refresh-tests", Codicon.refresh, ( localize(
|
|
26
|
-
const testingTurnContinuousRunOn = registerIcon("testing-turn-continuous-run-on", Codicon.eye, ( localize(
|
|
27
|
-
const testingTurnContinuousRunOff = registerIcon("testing-turn-continuous-run-off", Codicon.eyeClosed, ( localize(
|
|
28
|
-
const testingContinuousIsOn = registerIcon("testing-continuous-is-on", Codicon.eye, ( localize(
|
|
29
|
-
const testingCancelRefreshTests = registerIcon("testing-cancel-refresh-tests", Codicon.stop, ( localize(
|
|
30
|
-
const testingCoverageReport = registerIcon("testing-coverage", Codicon.coverage, ( localize(
|
|
31
|
-
const testingWasCovered = registerIcon("testing-was-covered", Codicon.check, ( localize(
|
|
32
|
-
const testingCoverageMissingBranch = registerIcon("testing-missing-branch", Codicon.question, ( localize(
|
|
10
|
+
const testingViewIcon = registerIcon("test-view-icon", Codicon.beaker, ( localize(14521, "View icon of the test view.")));
|
|
11
|
+
const testingResultsIcon = registerIcon("test-results-icon", Codicon.checklist, ( localize(14522, "Icons for test results.")));
|
|
12
|
+
const testingRunIcon = registerIcon("testing-run-icon", Codicon.run, ( localize(14523, "Icon of the \"run test\" action.")));
|
|
13
|
+
const testingRerunIcon = registerIcon("testing-rerun-icon", Codicon.debugRerun, ( localize(14524, "Icon of the \"rerun tests\" action.")));
|
|
14
|
+
const testingRunAllIcon = registerIcon("testing-run-all-icon", Codicon.runAll, ( localize(14525, "Icon of the \"run all tests\" action.")));
|
|
15
|
+
const testingDebugAllIcon = registerIcon("testing-debug-all-icon", Codicon.debugAltSmall, ( localize(14526, "Icon of the \"debug all tests\" action.")));
|
|
16
|
+
const testingDebugIcon = registerIcon("testing-debug-icon", Codicon.debugAltSmall, ( localize(14527, "Icon of the \"debug test\" action.")));
|
|
17
|
+
const testingCoverageIcon = registerIcon("testing-coverage-icon", Codicon.runCoverage, ( localize(14528, "Icon of the \"run test with coverage\" action.")));
|
|
18
|
+
const testingCoverageAllIcon = registerIcon("testing-coverage-all-icon", Codicon.runAllCoverage, ( localize(14529, "Icon of the \"run all tests with coverage\" action.")));
|
|
19
|
+
const testingCancelIcon = registerIcon("testing-cancel-icon", Codicon.debugStop, ( localize(14530, "Icon to cancel ongoing test runs.")));
|
|
20
|
+
const testingFilterIcon = registerIcon("testing-filter", Codicon.filter, ( localize(14531, "Icon for the 'Filter' action in the testing view.")));
|
|
21
|
+
const testingHiddenIcon = registerIcon("testing-hidden", Codicon.eyeClosed, ( localize(14532, "Icon shown beside hidden tests, when they've been shown.")));
|
|
22
|
+
registerIcon("testing-show-as-list-icon", Codicon.listTree, ( localize(14533, "Icon shown when the test explorer is disabled as a tree.")));
|
|
23
|
+
registerIcon("testing-show-as-list-icon", Codicon.listFlat, ( localize(14534, "Icon shown when the test explorer is disabled as a list.")));
|
|
24
|
+
const testingUpdateProfiles = registerIcon("testing-update-profiles", Codicon.gear, ( localize(14535, "Icon shown to update test profiles.")));
|
|
25
|
+
const testingRefreshTests = registerIcon("testing-refresh-tests", Codicon.refresh, ( localize(14536, "Icon on the button to refresh tests.")));
|
|
26
|
+
const testingTurnContinuousRunOn = registerIcon("testing-turn-continuous-run-on", Codicon.eye, ( localize(14537, "Icon to turn continuous test runs on.")));
|
|
27
|
+
const testingTurnContinuousRunOff = registerIcon("testing-turn-continuous-run-off", Codicon.eyeClosed, ( localize(14538, "Icon to turn continuous test runs off.")));
|
|
28
|
+
const testingContinuousIsOn = registerIcon("testing-continuous-is-on", Codicon.eye, ( localize(14539, "Icon when continuous run is on for a test ite,.")));
|
|
29
|
+
const testingCancelRefreshTests = registerIcon("testing-cancel-refresh-tests", Codicon.stop, ( localize(14540, "Icon on the button to cancel refreshing tests.")));
|
|
30
|
+
const testingCoverageReport = registerIcon("testing-coverage", Codicon.coverage, ( localize(14541, "Icon representing test coverage")));
|
|
31
|
+
const testingWasCovered = registerIcon("testing-was-covered", Codicon.check, ( localize(14542, "Icon representing that an element was covered")));
|
|
32
|
+
const testingCoverageMissingBranch = registerIcon("testing-missing-branch", Codicon.question, ( localize(14543, "Icon representing a uncovered block without a range")));
|
|
33
33
|
const testingStatesToIcons = ( new Map([[
|
|
34
34
|
TestResultState.Errored,
|
|
35
|
-
registerIcon("testing-error-icon", Codicon.issues, ( localize(
|
|
35
|
+
registerIcon("testing-error-icon", Codicon.issues, ( localize(14544, "Icon shown for tests that have an error.")))
|
|
36
36
|
], [
|
|
37
37
|
TestResultState.Failed,
|
|
38
|
-
registerIcon("testing-failed-icon", Codicon.error, ( localize(
|
|
38
|
+
registerIcon("testing-failed-icon", Codicon.error, ( localize(14545, "Icon shown for tests that failed.")))
|
|
39
39
|
], [
|
|
40
40
|
TestResultState.Passed,
|
|
41
|
-
registerIcon("testing-passed-icon", Codicon.pass, ( localize(
|
|
41
|
+
registerIcon("testing-passed-icon", Codicon.pass, ( localize(14546, "Icon shown for tests that passed.")))
|
|
42
42
|
], [
|
|
43
43
|
TestResultState.Queued,
|
|
44
|
-
registerIcon("testing-queued-icon", Codicon.history, ( localize(
|
|
44
|
+
registerIcon("testing-queued-icon", Codicon.history, ( localize(14547, "Icon shown for tests that are queued.")))
|
|
45
45
|
], [TestResultState.Running, spinningLoading], [
|
|
46
46
|
TestResultState.Skipped,
|
|
47
|
-
registerIcon("testing-skipped-icon", Codicon.debugStepOver, ( localize(
|
|
47
|
+
registerIcon("testing-skipped-icon", Codicon.debugStepOver, ( localize(14548, "Icon shown for tests that are skipped.")))
|
|
48
48
|
], [
|
|
49
49
|
TestResultState.Unset,
|
|
50
|
-
registerIcon("testing-unset-icon", Codicon.circleOutline, ( localize(
|
|
50
|
+
registerIcon("testing-unset-icon", Codicon.circleOutline, ( localize(14549, "Icon shown for tests that are in an unset state.")))
|
|
51
51
|
]]));
|
|
52
52
|
registerThemingParticipant((theme, collector) => {
|
|
53
53
|
for (const [state, icon] of testingStatesToIcons.entries()) {
|
|
@@ -140,21 +140,21 @@ const renderBar = (bar, pct, isZero, thresholds) => {
|
|
|
140
140
|
};
|
|
141
141
|
const nf = safeIntl.NumberFormat();
|
|
142
142
|
const stmtCoverageText = coverage => ( localize(
|
|
143
|
-
|
|
143
|
+
14550,
|
|
144
144
|
"{0}/{1} statements covered ({2})",
|
|
145
145
|
nf.value.format(coverage.statement.covered),
|
|
146
146
|
nf.value.format(coverage.statement.total),
|
|
147
147
|
displayPercent(percent(coverage.statement))
|
|
148
148
|
));
|
|
149
149
|
const fnCoverageText = coverage => coverage.declaration && ( localize(
|
|
150
|
-
|
|
150
|
+
14551,
|
|
151
151
|
"{0}/{1} functions covered ({2})",
|
|
152
152
|
nf.value.format(coverage.declaration.covered),
|
|
153
153
|
nf.value.format(coverage.declaration.total),
|
|
154
154
|
displayPercent(percent(coverage.declaration))
|
|
155
155
|
));
|
|
156
156
|
const branchCoverageText = coverage => coverage.branch && ( localize(
|
|
157
|
-
|
|
157
|
+
14552,
|
|
158
158
|
"{0}/{1} branches covered ({2})",
|
|
159
159
|
nf.value.format(coverage.branch.covered),
|
|
160
160
|
nf.value.format(coverage.branch.total),
|
|
@@ -203,7 +203,7 @@ class DeclarationCoverageNode {
|
|
|
203
203
|
DeclarationCoverageNode.__decorator = ( __decorate([memoize], DeclarationCoverageNode.prototype, "attributableCoverage", null));
|
|
204
204
|
class RevealUncoveredDeclarations {
|
|
205
205
|
get label() {
|
|
206
|
-
return localize(
|
|
206
|
+
return localize(14553, "{0} declarations without coverage...", this.n);
|
|
207
207
|
}
|
|
208
208
|
constructor(n) {
|
|
209
209
|
this.n = n;
|
|
@@ -212,7 +212,7 @@ class RevealUncoveredDeclarations {
|
|
|
212
212
|
}
|
|
213
213
|
class CurrentlyFilteredTo {
|
|
214
214
|
get label() {
|
|
215
|
-
return localize(
|
|
215
|
+
return localize(14554, "Showing coverage for \"{0}\"", this.testItem.label);
|
|
216
216
|
}
|
|
217
217
|
constructor(testItem) {
|
|
218
218
|
this.testItem = testItem;
|
|
@@ -222,7 +222,7 @@ class CurrentlyFilteredTo {
|
|
|
222
222
|
class LoadingDetails {
|
|
223
223
|
constructor() {
|
|
224
224
|
this.id = String(fnNodeId++);
|
|
225
|
-
this.label = ( localize(
|
|
225
|
+
this.label = ( localize(14555, "Loading Coverage Details..."));
|
|
226
226
|
}
|
|
227
227
|
}
|
|
228
228
|
const isFileCoverage = c => typeof c === "object" && "value" in c;
|
|
@@ -266,13 +266,13 @@ let TestCoverageTree = class TestCoverageTree extends Disposable {
|
|
|
266
266
|
getAriaLabel(element) {
|
|
267
267
|
if (isFileCoverage(element)) {
|
|
268
268
|
const name = basenameOrAuthority(element.value.uri);
|
|
269
|
-
return localize(
|
|
269
|
+
return localize(14556, "{0} coverage: {0}%", name, (element.value.tpc * 100).toFixed(2));
|
|
270
270
|
} else {
|
|
271
271
|
return element.label;
|
|
272
272
|
}
|
|
273
273
|
},
|
|
274
274
|
getWidgetAriaLabel() {
|
|
275
|
-
return localize(
|
|
275
|
+
return localize(14557, "Test Coverage Explorer");
|
|
276
276
|
}
|
|
277
277
|
},
|
|
278
278
|
identityProvider: ( new TestCoverageIdentityProvider())
|
|
@@ -648,7 +648,7 @@ registerAction2(class TestCoverageChangePerTestFilterAction extends Action2 {
|
|
|
648
648
|
super({
|
|
649
649
|
id: TestCommandId.CoverageFilterToTest,
|
|
650
650
|
category: Categories.Test,
|
|
651
|
-
title: ( localize2(
|
|
651
|
+
title: ( localize2(14558, "Filter Coverage by Test")),
|
|
652
652
|
icon: Codicon.filter,
|
|
653
653
|
toggled: {
|
|
654
654
|
icon: Codicon.filterFilled,
|
|
@@ -685,7 +685,7 @@ registerAction2(class TestCoverageChangePerTestFilterAction extends Action2 {
|
|
|
685
685
|
}, {
|
|
686
686
|
type: "separator"
|
|
687
687
|
}, ...( tests.map(testId => ({
|
|
688
|
-
|
|
688
|
+
...getLabelForItem(result, testId, commonPrefix),
|
|
689
689
|
testId
|
|
690
690
|
})))];
|
|
691
691
|
quickInputService.pick(items, {
|
|
@@ -706,7 +706,7 @@ registerAction2(class TestCoverageChangeSortingAction extends ViewAction {
|
|
|
706
706
|
super({
|
|
707
707
|
id: TestCommandId.CoverageViewChangeSorting,
|
|
708
708
|
viewId: Testing.CoverageViewId,
|
|
709
|
-
title: ( localize2(
|
|
709
|
+
title: ( localize2(14559, "Change Sort Order")),
|
|
710
710
|
icon: Codicon.sortPrecedence,
|
|
711
711
|
menu: {
|
|
712
712
|
id: MenuId.ViewTitle,
|
|
@@ -720,22 +720,22 @@ registerAction2(class TestCoverageChangeSortingAction extends ViewAction {
|
|
|
720
720
|
const disposables = ( new DisposableStore());
|
|
721
721
|
const quickInput = disposables.add(accessor.get(IQuickInputService).createQuickPick());
|
|
722
722
|
const items = [{
|
|
723
|
-
label: ( localize(
|
|
723
|
+
label: ( localize(14560, "Sort by Location")),
|
|
724
724
|
value: CoverageSortOrder.Location,
|
|
725
725
|
description: ( localize(
|
|
726
|
-
|
|
726
|
+
14561,
|
|
727
727
|
"Files are sorted alphabetically, declarations are sorted by position"
|
|
728
728
|
))
|
|
729
729
|
}, {
|
|
730
|
-
label: ( localize(
|
|
730
|
+
label: ( localize(14562, "Sort by Coverage")),
|
|
731
731
|
value: CoverageSortOrder.Coverage,
|
|
732
|
-
description: ( localize(
|
|
732
|
+
description: ( localize(14563, "Files and declarations are sorted by total coverage"))
|
|
733
733
|
}, {
|
|
734
|
-
label: ( localize(
|
|
734
|
+
label: ( localize(14564, "Sort by Name")),
|
|
735
735
|
value: CoverageSortOrder.Name,
|
|
736
|
-
description: ( localize(
|
|
736
|
+
description: ( localize(14565, "Files and declarations are sorted alphabetically"))
|
|
737
737
|
}];
|
|
738
|
-
quickInput.placeholder = ( localize(
|
|
738
|
+
quickInput.placeholder = ( localize(14566, "Sort the Test Coverage view..."));
|
|
739
739
|
quickInput.items = items;
|
|
740
740
|
quickInput.show();
|
|
741
741
|
disposables.add(quickInput.onDidHide(() => disposables.dispose()));
|
|
@@ -753,7 +753,7 @@ registerAction2(class TestCoverageCollapseAllAction extends ViewAction {
|
|
|
753
753
|
super({
|
|
754
754
|
id: TestCommandId.CoverageViewCollapseAll,
|
|
755
755
|
viewId: Testing.CoverageViewId,
|
|
756
|
-
title: ( localize2(
|
|
756
|
+
title: ( localize2(14567, "Collapse All Coverage")),
|
|
757
757
|
icon: Codicon.collapseAll,
|
|
758
758
|
menu: {
|
|
759
759
|
id: MenuId.ViewTitle,
|