@codingame/monaco-vscode-testing-service-override 3.2.2 → 4.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 +8 -8
- package/testing.js +1 -0
- package/vscode/src/vs/workbench/contrib/testing/browser/codeCoverageDecorations.js +48 -24
- package/vscode/src/vs/workbench/contrib/testing/browser/explorerProjections/treeProjection.js +8 -9
- package/vscode/src/vs/workbench/contrib/testing/browser/icons.js +11 -1
- package/vscode/src/vs/workbench/contrib/testing/browser/media/testMessageColorizer.css.js +6 -0
- package/vscode/src/vs/workbench/contrib/testing/browser/media/testing.css.js +1 -1
- package/vscode/src/vs/workbench/contrib/testing/browser/testCoverageBars.js +18 -5
- package/vscode/src/vs/workbench/contrib/testing/browser/testCoverageView.js +21 -2
- package/vscode/src/vs/workbench/contrib/testing/browser/testExplorerActions.js +23 -12
- package/vscode/src/vs/workbench/contrib/testing/browser/testMessageColorizer.js +73 -0
- package/vscode/src/vs/workbench/contrib/testing/browser/testing.contribution.js +6 -0
- package/vscode/src/vs/workbench/contrib/testing/browser/testingConfigurationUi.js +120 -0
- package/vscode/src/vs/workbench/contrib/testing/browser/testingDecorations.js +2 -2
- package/vscode/src/vs/workbench/contrib/testing/browser/testingExplorerFilter.js +10 -10
- package/vscode/src/vs/workbench/contrib/testing/browser/testingExplorerView.js +33 -19
- package/vscode/src/vs/workbench/contrib/testing/browser/testingOutputPeek.js +50 -31
- package/vscode/src/vs/workbench/contrib/testing/browser/theme.js +80 -2
- package/vscode/src/vs/workbench/contrib/testing/common/configuration.js +4 -1
- package/vscode/src/vs/workbench/contrib/testing/common/observableUtils.js +20 -0
- package/vscode/src/vs/workbench/contrib/testing/common/testingContentProvider.js +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codingame/monaco-vscode-testing-service-override",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"keywords": [],
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "CodinGame",
|
|
@@ -18,12 +18,12 @@
|
|
|
18
18
|
"module": "index.js",
|
|
19
19
|
"types": "index.d.ts",
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"vscode": "npm:@codingame/monaco-vscode-api@
|
|
22
|
-
"@xterm/addon-canvas": "0.
|
|
23
|
-
"@xterm/addon-image": "0.
|
|
24
|
-
"@xterm/addon-search": "0.
|
|
25
|
-
"@xterm/addon-serialize": "0.
|
|
26
|
-
"@xterm/addon-unicode11": "0.
|
|
27
|
-
"@xterm/addon-webgl": "0.
|
|
21
|
+
"vscode": "npm:@codingame/monaco-vscode-api@4.0.0",
|
|
22
|
+
"@xterm/addon-canvas": "0.7.0-beta.12",
|
|
23
|
+
"@xterm/addon-image": "0.8.0-beta.12",
|
|
24
|
+
"@xterm/addon-search": "0.15.0-beta.12",
|
|
25
|
+
"@xterm/addon-serialize": "0.13.0-beta.12",
|
|
26
|
+
"@xterm/addon-unicode11": "0.8.0-beta.12",
|
|
27
|
+
"@xterm/addon-webgl": "0.18.0-beta.12"
|
|
28
28
|
}
|
|
29
29
|
}
|
package/testing.js
CHANGED
|
@@ -12,6 +12,7 @@ import { ITestExplorerFilterState, TestExplorerFilterState } from 'vscode/vscode
|
|
|
12
12
|
import { TestingPeekOpener } from './vscode/src/vs/workbench/contrib/testing/browser/testingOutputPeek.js';
|
|
13
13
|
import { ITestCoverageService, TestCoverageService } from 'vscode/vscode/vs/workbench/contrib/testing/common/testCoverageService';
|
|
14
14
|
import './vscode/src/vs/workbench/contrib/testing/browser/testing.contribution.js';
|
|
15
|
+
import './vscode/src/vs/workbench/contrib/testing/browser/testingConfigurationUi.js';
|
|
15
16
|
|
|
16
17
|
function getServiceOverride() {
|
|
17
18
|
return {
|
|
@@ -2,11 +2,16 @@ import { __decorate, __param } from '../../../../../../../external/tslib/tslib.e
|
|
|
2
2
|
import { $, append, clearNode } from 'vscode/vscode/vs/base/browser/dom';
|
|
3
3
|
import { HoverWidget } from 'vscode/vscode/vs/base/browser/ui/hover/hoverWidget';
|
|
4
4
|
import { mapFindFirst } from 'vscode/vscode/vs/base/common/arraysFind';
|
|
5
|
+
import { assertNever } from 'vscode/vscode/vs/base/common/assert';
|
|
5
6
|
import { CancellationTokenSource } from 'vscode/vscode/vs/base/common/cancellation';
|
|
6
7
|
import { MarkdownString } from 'vscode/vscode/vs/base/common/htmlContent';
|
|
7
8
|
import { KeyChord } from 'vscode/vscode/vs/base/common/keyCodes';
|
|
8
9
|
import { Lazy } from 'vscode/vscode/vs/base/common/lazy';
|
|
9
10
|
import { Disposable, DisposableStore, toDisposable } from 'vscode/vscode/vs/base/common/lifecycle';
|
|
11
|
+
import { observableValue } from 'vscode/vscode/vs/base/common/observableInternal/base';
|
|
12
|
+
import { derived } from 'vscode/vscode/vs/base/common/observableInternal/derived';
|
|
13
|
+
import { autorun } from 'vscode/vscode/vs/base/common/observableInternal/autorun';
|
|
14
|
+
import { observableFromEvent } from 'vscode/vscode/vs/base/common/observableInternal/utils';
|
|
10
15
|
import { ThemeIcon } from 'vscode/vscode/vs/base/common/themables';
|
|
11
16
|
import { MarkdownRenderer } from 'vscode/vscode/vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer';
|
|
12
17
|
import { Position } from 'vscode/vscode/vs/editor/common/core/position';
|
|
@@ -22,10 +27,6 @@ import { ILogService } from 'vscode/vscode/vs/platform/log/common/log';
|
|
|
22
27
|
import { testingCoverageMissingBranch } from './icons.js';
|
|
23
28
|
import { ITestCoverageService } from 'vscode/vscode/vs/workbench/contrib/testing/common/testCoverageService';
|
|
24
29
|
import { TestingContextKeys } from 'vscode/vscode/vs/workbench/contrib/testing/common/testingContextKeys';
|
|
25
|
-
import { observableValue } from 'vscode/vscode/vs/base/common/observableInternal/base';
|
|
26
|
-
import { observableFromEvent } from 'vscode/vscode/vs/base/common/observableInternal/utils';
|
|
27
|
-
import { derived } from 'vscode/vscode/vs/base/common/observableInternal/derived';
|
|
28
|
-
import { autorun } from 'vscode/vscode/vs/base/common/observableInternal/autorun';
|
|
29
30
|
|
|
30
31
|
var CodeCoverageDecorations_1, LineHoverWidget_1;
|
|
31
32
|
const MAX_HOVERED_LINES = 30;
|
|
@@ -63,7 +64,12 @@ let CodeCoverageDecorations = class CodeCoverageDecorations extends Disposable {
|
|
|
63
64
|
if (!model) {
|
|
64
65
|
return;
|
|
65
66
|
}
|
|
66
|
-
|
|
67
|
+
const file = report.getUri(model.uri);
|
|
68
|
+
if (file) {
|
|
69
|
+
return file;
|
|
70
|
+
}
|
|
71
|
+
report.didAddCoverage.read(reader);
|
|
72
|
+
return undefined;
|
|
67
73
|
});
|
|
68
74
|
this._register(autorun(reader => {
|
|
69
75
|
const c = fileCoverage.read(reader);
|
|
@@ -372,20 +378,13 @@ class CoverageDetailsModel {
|
|
|
372
378
|
}
|
|
373
379
|
describe(detail, model) {
|
|
374
380
|
if (detail.type === 0 ) {
|
|
375
|
-
return (
|
|
376
|
-
'vs/workbench/contrib/testing/browser/codeCoverageDecorations',
|
|
377
|
-
'coverage.declExecutedCount',
|
|
378
|
-
'`{0}` was executed {1} time(s).',
|
|
379
|
-
detail.name,
|
|
380
|
-
detail.count
|
|
381
|
-
)));
|
|
381
|
+
return namedDetailLabel(detail.name, detail);
|
|
382
382
|
}
|
|
383
383
|
else if (detail.type === 1 ) {
|
|
384
384
|
const text = wrapName(model.getValueInRange(tidyLocation(detail.location)).trim() || `<empty statement>`);
|
|
385
|
-
const str = ( new MarkdownString());
|
|
386
385
|
if (detail.branches?.length) {
|
|
387
386
|
const covered = detail.branches.filter(b => !!b.count).length;
|
|
388
|
-
|
|
387
|
+
return ( new MarkdownString()).appendMarkdown(( localizeWithPath(
|
|
389
388
|
'vs/workbench/contrib/testing/browser/codeCoverageDecorations',
|
|
390
389
|
'coverage.branches',
|
|
391
390
|
'{0} of {1} of branches in {2} were covered.',
|
|
@@ -395,21 +394,14 @@ class CoverageDetailsModel {
|
|
|
395
394
|
)));
|
|
396
395
|
}
|
|
397
396
|
else {
|
|
398
|
-
|
|
399
|
-
'vs/workbench/contrib/testing/browser/codeCoverageDecorations',
|
|
400
|
-
'coverage.codeExecutedCount',
|
|
401
|
-
'{0} was executed {1} time(s).',
|
|
402
|
-
text,
|
|
403
|
-
detail.count
|
|
404
|
-
)));
|
|
397
|
+
return namedDetailLabel(text, detail);
|
|
405
398
|
}
|
|
406
|
-
return str;
|
|
407
399
|
}
|
|
408
400
|
else if (detail.type === 2 ) {
|
|
409
401
|
const text = wrapName(model.getValueInRange(tidyLocation(detail.detail.location)).trim() || `<empty statement>`);
|
|
410
402
|
const { count, label } = detail.detail.branches[detail.branch];
|
|
411
403
|
const label2 = label ? wrapInBackticks(label) : `#${detail.branch + 1}`;
|
|
412
|
-
if (count
|
|
404
|
+
if (!count) {
|
|
413
405
|
return ( new MarkdownString()).appendMarkdown(( localizeWithPath(
|
|
414
406
|
'vs/workbench/contrib/testing/browser/codeCoverageDecorations',
|
|
415
407
|
'coverage.branchNotCovered',
|
|
@@ -418,6 +410,15 @@ class CoverageDetailsModel {
|
|
|
418
410
|
text
|
|
419
411
|
)));
|
|
420
412
|
}
|
|
413
|
+
else if (count === true) {
|
|
414
|
+
return ( new MarkdownString()).appendMarkdown(( localizeWithPath(
|
|
415
|
+
'vs/workbench/contrib/testing/browser/codeCoverageDecorations',
|
|
416
|
+
'coverage.branchCoveredYes',
|
|
417
|
+
'Branch {0} in {1} was executed.',
|
|
418
|
+
label2,
|
|
419
|
+
text
|
|
420
|
+
)));
|
|
421
|
+
}
|
|
421
422
|
else {
|
|
422
423
|
return ( new MarkdownString()).appendMarkdown(( localizeWithPath(
|
|
423
424
|
'vs/workbench/contrib/testing/browser/codeCoverageDecorations',
|
|
@@ -429,9 +430,32 @@ class CoverageDetailsModel {
|
|
|
429
430
|
)));
|
|
430
431
|
}
|
|
431
432
|
}
|
|
432
|
-
|
|
433
|
+
assertNever();
|
|
433
434
|
}
|
|
434
435
|
}
|
|
436
|
+
function namedDetailLabel(name, detail) {
|
|
437
|
+
return ( new MarkdownString()).appendMarkdown(!detail.count
|
|
438
|
+
? ( localizeWithPath(
|
|
439
|
+
'vs/workbench/contrib/testing/browser/codeCoverageDecorations',
|
|
440
|
+
'coverage.declExecutedNo',
|
|
441
|
+
'`{0}` was not executed.',
|
|
442
|
+
name
|
|
443
|
+
))
|
|
444
|
+
: typeof detail.count === 'number'
|
|
445
|
+
? ( localizeWithPath(
|
|
446
|
+
'vs/workbench/contrib/testing/browser/codeCoverageDecorations',
|
|
447
|
+
'coverage.declExecutedCount',
|
|
448
|
+
'`{0}` was executed {1} time(s).',
|
|
449
|
+
name,
|
|
450
|
+
detail.count
|
|
451
|
+
))
|
|
452
|
+
: ( localizeWithPath(
|
|
453
|
+
'vs/workbench/contrib/testing/browser/codeCoverageDecorations',
|
|
454
|
+
'coverage.declExecutedYes',
|
|
455
|
+
'`{0}` was executed.',
|
|
456
|
+
name
|
|
457
|
+
)));
|
|
458
|
+
}
|
|
435
459
|
function tidyLocation(location) {
|
|
436
460
|
if (location instanceof Position) {
|
|
437
461
|
return Range.fromPositions(location, ( new Position(location.lineNumber, 0x7FFFFFFF)));
|
package/vscode/src/vs/workbench/contrib/testing/browser/explorerProjections/treeProjection.js
CHANGED
|
@@ -162,19 +162,18 @@ let TreeProjection = class TreeProjection extends Disposable {
|
|
|
162
162
|
}
|
|
163
163
|
}
|
|
164
164
|
applyTo(tree) {
|
|
165
|
-
for (const s of [this.changedParents, this.resortedParents]) {
|
|
166
|
-
for (const element of s) {
|
|
167
|
-
if (element && !tree.hasElement(element)) {
|
|
168
|
-
s.delete(element);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
165
|
for (const parent of this.changedParents) {
|
|
173
|
-
|
|
166
|
+
if (!parent || tree.hasElement(parent)) {
|
|
167
|
+
tree.setChildren(parent, getChildrenForParent(this.lastState, this.rootsWithChildren, parent), { diffIdentityProvider: testIdentityProvider });
|
|
168
|
+
}
|
|
174
169
|
}
|
|
175
170
|
for (const parent of this.resortedParents) {
|
|
176
|
-
tree.
|
|
171
|
+
if (!parent || tree.hasElement(parent)) {
|
|
172
|
+
tree.resort(parent, false);
|
|
173
|
+
}
|
|
177
174
|
}
|
|
175
|
+
this.changedParents.clear();
|
|
176
|
+
this.resortedParents.clear();
|
|
178
177
|
}
|
|
179
178
|
expandElement(element, depth) {
|
|
180
179
|
if (!(element instanceof TreeTestItemElement)) {
|
|
@@ -3,7 +3,7 @@ import { localizeWithPath } from 'vscode/vscode/vs/nls';
|
|
|
3
3
|
import { registerIcon, spinningLoading } from 'vscode/vscode/vs/platform/theme/common/iconRegistry';
|
|
4
4
|
import { registerThemingParticipant } from 'vscode/vscode/vs/platform/theme/common/themeService';
|
|
5
5
|
import { ThemeIcon } from 'vscode/vscode/vs/base/common/themables';
|
|
6
|
-
import { testingColorRunAction, testStatesToIconColors } from './theme.js';
|
|
6
|
+
import { testingColorRunAction, testStatesToIconColors, testStatesToRetiredIconColors } from './theme.js';
|
|
7
7
|
|
|
8
8
|
const testingViewIcon = registerIcon('test-view-icon', Codicon.beaker, ( localizeWithPath(
|
|
9
9
|
'vs/workbench/contrib/testing/browser/icons',
|
|
@@ -156,12 +156,22 @@ const testingStatesToIcons = ( new Map([
|
|
|
156
156
|
registerThemingParticipant((theme, collector) => {
|
|
157
157
|
for (const [state, icon] of testingStatesToIcons.entries()) {
|
|
158
158
|
const color = testStatesToIconColors[state];
|
|
159
|
+
const retiredColor = testStatesToRetiredIconColors[state];
|
|
159
160
|
if (!color) {
|
|
160
161
|
continue;
|
|
161
162
|
}
|
|
162
163
|
collector.addRule(`.monaco-workbench ${ThemeIcon.asCSSSelector(icon)} {
|
|
163
164
|
color: ${theme.getColor(color)} !important;
|
|
164
165
|
}`);
|
|
166
|
+
if (!retiredColor) {
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
collector.addRule(`
|
|
170
|
+
.test-explorer .computed-state.retired${ThemeIcon.asCSSSelector(icon)},
|
|
171
|
+
.testing-run-glyph.retired${ThemeIcon.asCSSSelector(icon)}{
|
|
172
|
+
color: ${theme.getColor(retiredColor)} !important;
|
|
173
|
+
}
|
|
174
|
+
`);
|
|
165
175
|
}
|
|
166
176
|
collector.addRule(`
|
|
167
177
|
.monaco-editor ${ThemeIcon.asCSSSelector(testingRunIcon)},
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import n from '../../../../../../../../external/rollup-plugin-styles/dist/runtime/inject-css.js';
|
|
2
|
+
|
|
3
|
+
var css = ".test-output-peek-message-container{.tstm-ansidec-1{font-weight:700}.tstm-ansidec-2{opacity:.7}.tstm-ansidec-3{font-style:italic}.tstm-ansidec-4{text-decoration:underline}.tstm-ansidec-fg30{color:var(--vscode-terminal-ansiBlack)}.tstm-ansidec-fg31{color:var(--vscode-terminal-ansiRed)}.tstm-ansidec-fg32{color:var(--vscode-terminal-ansiGreen)}.tstm-ansidec-fg33{color:var(--vscode-terminal-ansiYellow)}.tstm-ansidec-fg34{color:var(--vscode-terminal-ansiBlue)}.tstm-ansidec-fg35{color:var(--vscode-terminal-ansiMagenta)}.tstm-ansidec-fg36{color:var(--vscode-terminal-ansiCyan)}.tstm-ansidec-fg37{color:var(--vscode-terminal-ansiWhite)}.tstm-ansidec-fg90{color:var(--vscode-terminal-ansiBrightBlack)}.tstm-ansidec-fg91{color:var(--vscode-terminal-ansiBrightRed)}.tstm-ansidec-fg92{color:var(--vscode-terminal-ansiBrightGreen)}.tstm-ansidec-fg93{color:var(--vscode-terminal-ansiBrightYellow)}.tstm-ansidec-fg94{color:var(--vscode-terminal-ansiBrightBlue)}.tstm-ansidec-fg95{color:var(--vscode-terminal-ansiBrightMagenta)}.tstm-ansidec-fg96{color:var(--vscode-terminal-ansiBrightCyan)}.tstm-ansidec-fg97{color:var(--vscode-terminal-ansiBrightWhite)}.tstm-ansidec-bg30{background-color:var(--vscode-terminal-ansiBlack)}.tstm-ansidec-bg31{background-color:var(--vscode-terminal-ansiRed)}.tstm-ansidec-bg32{background-color:var(--vscode-terminal-ansiGreen)}.tstm-ansidec-bg33{background-color:var(--vscode-terminal-ansiYellow)}.tstm-ansidec-bg34{background-color:var(--vscode-terminal-ansiBlue)}.tstm-ansidec-bg35{background-color:var(--vscode-terminal-ansiMagenta)}.tstm-ansidec-bg36{background-color:var(--vscode-terminal-ansiCyan)}.tstm-ansidec-bg37{background-color:var(--vscode-terminal-ansiWhite)}.tstm-ansidec-bg100{background-color:var(--vscode-terminal-ansiBrightBlack)}.tstm-ansidec-bg101{background-color:var(--vscode-terminal-ansiBrightRed)}.tstm-ansidec-bg102{background-color:var(--vscode-terminal-ansiBrightGreen)}.tstm-ansidec-bg103{background-color:var(--vscode-terminal-ansiBrightYellow)}.tstm-ansidec-bg104{background-color:var(--vscode-terminal-ansiBrightBlue)}.tstm-ansidec-bg105{background-color:var(--vscode-terminal-ansiBrightMagenta)}.tstm-ansidec-bg106{background-color:var(--vscode-terminal-ansiBrightCyan)}.tstm-ansidec-bg107{background-color:var(--vscode-terminal-ansiBrightWhite)}}";
|
|
4
|
+
n(css,{});
|
|
5
|
+
|
|
6
|
+
export { css, css as default };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import n from '../../../../../../../../external/rollup-plugin-styles/dist/runtime/inject-css.js';
|
|
2
2
|
|
|
3
|
-
var css = ".monaco-workbench{.codicon-testing-error-icon{color:var(--vscode-testing-iconErrored)}.codicon-testing-failed-icon{color:var(--vscode-testing-iconFailed)}.codicon-testing-passed-icon{color:var(--vscode-testing-iconPassed)}.codicon-testing-queued-icon{color:var(--vscode-testing-iconQueued)}.codicon-testing-skipped-icon{color:var(--vscode-testing-iconSkipped)}.codicon-testing-unset-icon{color:var(--vscode-testing-iconUnset)}}.test-explorer{display:flex;flex-direction:column}.test-explorer>.test-explorer-tree{flex-grow:1;height:0;position:relative}.test-coverage-list-item .name,.test-coverage-list-item-label,.test-explorer .test-item .label,.test-output-peek-tree .test-peek-item .name{flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:0}.test-explorer .test-item .label .codicon,.test-output-peek-tree .test-peek-item .name .codicon{font-size:1em;margin:0 .125em;transform:scale(1.25);vertical-align:middle}.test-explorer .test-item,.test-output-peek-tree .test-peek-item{align-items:center;display:flex}.test-output-peek-tree{border-left:1px solid var(--vscode-panelSection-border);color:var(--vscode-editor-foreground)}.test-explorer .monaco-list-row .codicon-testing-hidden,.test-explorer .monaco-list-row .monaco-action-bar,.test-output-peek-tree .monaco-list-row .monaco-action-bar{display:none;flex-shrink:0;margin-right:.8em}.test-explorer .monaco-list-row .monaco-action-bar .codicon-testing-continuous-is-on{background:var(--vscode-inputOption-activeBackground);border-color:var(--vscode-inputOption-activeBorder);border:1px solid var(--vscode-inputOption-activeBorder);border-radius:3px;color:var(--vscode-inputOption-activeForeground)}.test-explorer .monaco-list-row:not(.focused,:hover) .monaco-action-bar.testing-is-continuous-run .action-item{display:none}.test-explorer .monaco-list-row .monaco-action-bar.testing-is-continuous-run .action-item:last-child{display:block!important}.test-explorer .monaco-list-row .monaco-action-bar.testing-is-continuous-run,.test-explorer .monaco-list-row.focused .monaco-action-bar,.test-explorer .monaco-list-row:hover .monaco-action-bar,.test-output-peek-tree .monaco-list-row.focused .monaco-action-bar,.test-output-peek-tree .monaco-list-row:hover .monaco-action-bar{display:initial}.test-explorer .monaco-list-row .test-is-hidden .codicon-testing-hidden{display:block;margin-right:9px}.test-explorer .monaco-list-row.focused .codicon-testing-hidden,.test-explorer .monaco-list-row:hover .codicon-testing-hidden{display:none}.test-explorer .monaco-list-row .error{background:var(--vscode-inputValidation-errorBackground);border-radius:2px;font-size:12px;height:17px;line-height:17px;margin:3px 12px 3px 3px;outline:1px solid var(--vscode-inputValidation-errorBorder);overflow:hidden;padding:2px 4px}.test-explorer .monaco-list-row .error p{margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.test-explorer .monaco-list-row .error a{color:var(--vscode-textLink-foreground)}.test-explorer .monaco-list-row .error a:hover{color:var(--vscode-textLink-activeForeground)}.test-explorer .computed-state,.test-output-peek-tree .computed-state{margin-right:.25em}.test-explorer .computed-state.retired,.testing-run-glyph.retired{opacity:.7!important}.test-explorer .test-is-hidden{opacity:.8}.test-explorer .result-summary-container{box-sizing:border-box;font-variant-numeric:tabular-nums;height:27px;padding:0 12px 8px}.test-explorer .result-summary{align-items:center;display:flex;gap:2px}.test-explorer .result-summary>span{flex-grow:1}.monaco-workbench .test-explorer .monaco-action-bar .action-item>.action-label{margin-right:2px;padding:1px 2px}.monaco-workbench .part>.title>.title-actions .action-label.codicon-testing-autorun:after{border-radius:100%;content:\"\";display:none;height:.4em;left:50%;margin:.1em 0 0 .05em;position:absolute;top:50%;width:.4em}.monaco-workbench .part>.title>.title-actions .action-label.codicon-testing-autorun.checked:after{display:block}.codicon-testing-loading-icon:before{animation:codicon-spin 1.25s steps(30) infinite}.testing-no-test-placeholder{display:none;left:0;padding:0 20px;position:absolute;right:0;top:0;z-index:1}.testing-no-test-placeholder.visible{display:block}.monaco-editor .zone-widget.test-output-peek .zone-widget-container.peekview-widget{border-bottom-width:2px;border-top-width:2px}.monaco-editor .zone-widget.test-output-peek .type-decoration{background-color:var(--vscode-peekViewEditor-matchHighlightBackground);border:2px solid var(--vscode-peekViewEditor-matchHighlightBorder);box-sizing:border-box}.monaco-editor .zone-widget.test-output-peek .monaco-editor .inputarea.ime-input,.monaco-editor .zone-widget.test-output-peek .monaco-editor .monaco-editor-background,.monaco-editor .zone-widget.test-output-peek .test-output-peek-message-container{background-color:var(--vscode-peekViewEditor-background)}.monaco-editor .zone-widget.test-output-peek .monaco-editor .margin{background-color:var(--vscode-peekViewEditorGutter-background)}.test-output-peek-message-container{overflow:hidden}.test-output-peek-message-container .floating-click-widget{bottom:10px;position:absolute;right:20px}.test-output-peek-message-container,.test-output-peek-tree{height:100%}.test-output-peek-message-container .preview-text{height:calc(100% - 16px);padding:8px 12px 8px 20px}.test-output-peek-message-container .preview-text p:first-child{margin-top:0}.test-output-peek-message-container .preview-text p:last-child{margin-bottom:0}.test-output-peek-message-container .preview-text a{cursor:pointer}.monaco-action-bar.testing-filter-action-bar{flex-shrink:0;height:auto;margin:4px 12px}.testing-filter-action-item{align-items:center;display:flex!important;flex-grow:1;max-width:400px}.testing-filter-action-item>.monaco-action-bar .testing-filter-button.checked{background-color:var(--vscode-inputOption-activeBackground);border-color:var(--vscode-inputOption-activeBorder);color:var(--vscode-inputOption-activeForeground)}.testing-filter-action-bar .testing-filter-action-item{max-width:none}.testing-filter-action-item .testing-filter-wrapper{flex-grow:1}.testing-filter-action-item .testing-filter-wrapper input{padding-right:30px!important}.testing-filter-action-item .monaco-action-bar{align-items:center;bottom:0;display:flex;position:absolute;right:3px;top:0}.monaco-editor .testing-run-glyph{cursor:pointer}.testing-diff-title-widget{display:inline-block;font-size:12px;line-height:19px;overflow:hidden;padding-right:6px;text-overflow:ellipsis;white-space:nowrap}.test-message-inline-content{font-family:var(--testMessageDecorationFontFamily);font-size:var(--testMessageDecorationFontSize)}.test-message-inline-content-clickable{cursor:pointer}.test-label-description{font-size:.9em;margin-left:.5em;opacity:.7;white-space:pre}.testing-diff-lens-widget{color:var(--vscode-editorCodeLens-foreground)}.test-message-inline-content-s0{color:var(--vscode-testing-message-error-decorationForeground)!important}.test-message-inline-content-s1{color:var(--vscode-testing-message-info-decorationForeground)!important}.monaco-editor .testing-inline-message-severity-0{color:var(--vscode-testing-message-error-decorationForeground)!important}.monaco-editor .testing-inline-message-severity-1{color:var(--vscode-testing-message-info-decorationForeground)!important}.test-coverage-bars,.test-coverage-list-item{align-items:center;display:flex}.test-coverage-bars{font-size:11px;gap:4px;margin-right:.8em}.test-coverage-bars .bar{border:1px solid;border-radius:2px;height:8px;overflow:hidden;position:relative}.test-coverage-bars .bar:before{background:currentColor;content:\"\";height:100%;opacity:.7;position:absolute;width:var(--test-bar-width)}.test-coverage-list-item .icon{margin-right:.2em}.test-coverage-list-item.not-covered .name{opacity:.7}.explorer-item-with-test-coverage{display:flex}.explorer-item-with-test-coverage .explorer-item{flex-grow:1}.explorer-item-with-test-coverage .monaco-icon-label:after{margin-right:12px}.coverage-deco-gutter{z-index:0}.coverage-deco-gutter:before{content:\"\";inset:0;position:absolute;z-index:-1}.coverage-deco-gutter.coverage-deco-hit:before{background:var(--vscode-testing-coveredGutterBackground);border-color:var(--vscode-testing-coveredGutterBackground)}.coverage-deco-gutter.coverage-deco-miss:before{background:var(--vscode-testing-uncoveredGutterBackground);border-color:var(--vscode-testing-uncoveredGutterBackground)}.hc-black .coverage-deco-gutter:before,.hc-light .coverage-deco-gutter:before{background:none;border-style:solid;border-width:3px 0 3px 5px}.coverage-deco-gutter.coverage-deco-miss.coverage-deco-hit:before{background-color:transparent;background-image:linear-gradient(45deg,var(--vscode-testing-coveredGutterBackground) 25%,var(--vscode-testing-uncoveredGutterBackground) 25%,var(--vscode-testing-uncoveredGutterBackground) 50%,var(--vscode-testing-coveredGutterBackground) 50%,75%,var(--vscode-testing-uncoveredGutterBackground) 75%,var(--vscode-testing-uncoveredGutterBackground) 100%);background-size:6px 6px}.coverage-deco-inline{outline-offset:-1px}.coverage-deco-inline.coverage-deco-hit{background:var(--vscode-testing-coveredBackground);outline:1px solid var(--vscode-testing-coveredBorder)}.coverage-deco-inline.coverage-deco-miss{background:var(--vscode-testing-uncoveredBackground);outline:1px solid var(--vscode-testing-uncoveredBorder)}.hc-black .coverage-deco-inline.coverage-deco-hit,.hc-light .coverage-deco-inline.coverage-deco-hit{outline-style:dashed}.coverage-deco-branch-miss-indicator{display:inline-block;font:inherit!important;height:100%;position:relative;width:4ch}.coverage-deco-branch-miss-indicator:before{border:1px solid;border-radius:2px;font:normal normal normal calc(var(--vscode-testing-coverage-lineHeight)/2)/1 codicon;left:50%;padding:calc(var(--vscode-testing-coverage-lineHeight)/10);position:absolute;text-align:center;top:50%;transform:translate(-50%,-50%)}.coverage-deco-inline-count{background:var(--vscode-testing-coverCountBadgeBackground);border-bottom-left-radius:2px;border-top-left-radius:2px;color:var(--vscode-testing-coverCountBadgeForeground);font-size:.7em;margin:0 .7em 0 .4em;padding:.2em 0 .2em .2em;position:relative}.coverage-deco-inline-count:after{background-image:linear-gradient(to bottom left,transparent 50%,var(--vscode-testing-coverCountBadgeBackground) 0),linear-gradient(to bottom right,var(--vscode-testing-coverCountBadgeBackground) 50%,transparent 0);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50%;bottom:0;content:\"\";display:block;left:100%;position:absolute;top:0;width:.5em}";
|
|
3
|
+
var css = ".monaco-workbench{.codicon-testing-error-icon{color:var(--vscode-testing-iconErrored)}.codicon-testing-failed-icon{color:var(--vscode-testing-iconFailed)}.codicon-testing-passed-icon{color:var(--vscode-testing-iconPassed)}.codicon-testing-queued-icon{color:var(--vscode-testing-iconQueued)}.codicon-testing-skipped-icon{color:var(--vscode-testing-iconSkipped)}.codicon-testing-unset-icon{color:var(--vscode-testing-iconUnset)}}.test-explorer{display:flex;flex-direction:column}.test-explorer>.test-explorer-tree{flex-grow:1;height:0;position:relative}.test-coverage-list-item .name,.test-coverage-list-item-label,.test-explorer .test-item .label,.test-output-peek-tree .test-peek-item .name{flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:0}.test-explorer .test-item .label .codicon,.test-output-peek-tree .test-peek-item .name .codicon{font-size:1em;margin:0 .125em;transform:scale(1.25);vertical-align:middle}.test-explorer .test-item,.test-output-peek-tree .test-peek-item{align-items:center;display:flex}.test-output-peek-tree{border-left:1px solid var(--vscode-panelSection-border);color:var(--vscode-editor-foreground)}.test-explorer .monaco-list-row .codicon-testing-hidden,.test-explorer .monaco-list-row .monaco-action-bar,.test-output-peek-tree .monaco-list-row .monaco-action-bar{display:none;flex-shrink:0;margin-right:.8em}.test-explorer .monaco-list-row .monaco-action-bar .codicon-testing-continuous-is-on{background:var(--vscode-inputOption-activeBackground);border-color:var(--vscode-inputOption-activeBorder);border:1px solid var(--vscode-inputOption-activeBorder);border-radius:3px;color:var(--vscode-inputOption-activeForeground)}.test-explorer .monaco-list-row:not(.focused,:hover) .monaco-action-bar.testing-is-continuous-run .action-item{display:none}.test-explorer .monaco-list-row .monaco-action-bar.testing-is-continuous-run .action-item:last-child{display:block!important}.test-explorer .monaco-list-row .monaco-action-bar.testing-is-continuous-run,.test-explorer .monaco-list-row.focused .monaco-action-bar,.test-explorer .monaco-list-row:hover .monaco-action-bar,.test-output-peek-tree .monaco-list-row.focused .monaco-action-bar,.test-output-peek-tree .monaco-list-row:hover .monaco-action-bar{display:initial}.test-explorer .monaco-list-row .test-is-hidden .codicon-testing-hidden{display:block;margin-right:9px}.test-explorer .monaco-list-row.focused .codicon-testing-hidden,.test-explorer .monaco-list-row:hover .codicon-testing-hidden{display:none}.test-explorer .monaco-list-row .error{background:var(--vscode-inputValidation-errorBackground);border-radius:2px;font-size:12px;height:17px;line-height:17px;margin:3px 12px 3px 3px;outline:1px solid var(--vscode-inputValidation-errorBorder);overflow:hidden;padding:2px 4px}.test-explorer .monaco-list-row .error p{margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.test-explorer .monaco-list-row .error a{color:var(--vscode-textLink-foreground)}.test-explorer .monaco-list-row .error a:hover{color:var(--vscode-textLink-activeForeground)}.test-explorer .computed-state,.test-output-peek-tree .computed-state{margin-right:.25em}.test-explorer .test-is-hidden{opacity:.8}.test-explorer .result-summary-container{box-sizing:border-box;font-variant-numeric:tabular-nums;height:27px;padding:0 12px 8px}.test-explorer .result-summary{align-items:center;display:flex;gap:2px}.test-explorer .result-summary>span{flex-grow:1}.monaco-workbench .test-explorer .monaco-action-bar .action-item>.action-label{margin-right:2px;padding:1px 2px}.monaco-workbench .part>.title>.title-actions .action-label.codicon-testing-autorun:after{border-radius:100%;content:\"\";display:none;height:.4em;left:50%;margin:.1em 0 0 .05em;position:absolute;top:50%;width:.4em}.monaco-workbench .part>.title>.title-actions .action-label.codicon-testing-autorun.checked:after{display:block}.codicon-testing-loading-icon:before{animation:codicon-spin 1.25s steps(30) infinite}.testing-no-test-placeholder{display:none;left:0;padding:0 20px;position:absolute;right:0;top:0;z-index:1}.testing-no-test-placeholder.visible{display:block}.monaco-editor .zone-widget.test-output-peek .zone-widget-container.peekview-widget{border-bottom-width:2px;border-top-width:2px}.monaco-editor .zone-widget.test-output-peek .type-decoration{background-color:var(--vscode-peekViewEditor-matchHighlightBackground);border:2px solid var(--vscode-peekViewEditor-matchHighlightBorder);box-sizing:border-box}.monaco-editor .zone-widget.test-output-peek .monaco-editor .inputarea.ime-input,.monaco-editor .zone-widget.test-output-peek .monaco-editor .monaco-editor-background,.monaco-editor .zone-widget.test-output-peek .test-output-peek-message-container{background-color:var(--vscode-peekViewEditor-background)}.monaco-editor .zone-widget.test-output-peek .monaco-editor .margin{background-color:var(--vscode-peekViewEditorGutter-background)}.test-output-peek-message-container{overflow:hidden}.test-output-peek-message-container .floating-click-widget{bottom:10px;position:absolute;right:20px}.test-output-peek-message-container,.test-output-peek-tree{height:100%}.test-output-peek-message-container .preview-text{height:calc(100% - 16px);padding:8px 12px 8px 20px}.test-output-peek-message-container .preview-text p:first-child{margin-top:0}.test-output-peek-message-container .preview-text p:last-child{margin-bottom:0}.test-output-peek-message-container .preview-text a{cursor:pointer}.monaco-action-bar.testing-filter-action-bar{flex-shrink:0;height:auto;margin:4px 12px}.testing-filter-action-item{align-items:center;display:flex!important;flex-grow:1;max-width:400px}.testing-filter-action-item>.monaco-action-bar .testing-filter-button.checked{background-color:var(--vscode-inputOption-activeBackground);border-color:var(--vscode-inputOption-activeBorder);color:var(--vscode-inputOption-activeForeground)}.testing-filter-action-bar .testing-filter-action-item{max-width:none}.testing-filter-action-item .testing-filter-wrapper{flex-grow:1}.testing-filter-action-item .testing-filter-wrapper input{padding-right:30px!important}.testing-filter-action-item .monaco-action-bar{align-items:center;bottom:0;display:flex;position:absolute;right:3px;top:0}.monaco-editor .testing-run-glyph{cursor:pointer}.testing-diff-title-widget{display:inline-block;font-size:12px;line-height:19px;overflow:hidden;padding-right:6px;text-overflow:ellipsis;white-space:nowrap}.test-message-inline-content{font-family:var(--testMessageDecorationFontFamily);font-size:var(--testMessageDecorationFontSize)}.test-message-inline-content-clickable{cursor:pointer}.test-label-description{font-size:.9em;margin-left:.5em;opacity:.7;white-space:pre}.testing-diff-lens-widget{color:var(--vscode-editorCodeLens-foreground)}.test-message-inline-content-s0{color:var(--vscode-testing-message-error-decorationForeground)!important}.test-message-inline-content-s1{color:var(--vscode-testing-message-info-decorationForeground)!important}.monaco-editor .testing-inline-message-severity-0{color:var(--vscode-testing-message-error-decorationForeground)!important}.monaco-editor .testing-inline-message-severity-1{color:var(--vscode-testing-message-info-decorationForeground)!important}.test-coverage-bars,.test-coverage-list-item{align-items:center;display:flex}.test-coverage-bars{font-size:11px;gap:4px;margin-right:.8em}.test-coverage-bars .bar{border:1px solid;border-radius:2px;height:8px;overflow:hidden;position:relative}.test-coverage-bars .bar:before{background:currentColor;content:\"\";height:100%;opacity:.7;position:absolute;width:var(--test-bar-width)}.test-coverage-list-item .icon{margin-right:.2em}.test-coverage-list-item.not-covered .name{opacity:.7}.explorer-item-with-test-coverage{display:flex}.explorer-item-with-test-coverage .explorer-item{flex-grow:1}.explorer-item-with-test-coverage .monaco-icon-label:after{margin-right:12px}.coverage-deco-gutter{z-index:0}.coverage-deco-gutter:before{content:\"\";inset:0;position:absolute;z-index:-1}.coverage-deco-gutter.coverage-deco-hit:before{background:var(--vscode-testing-coveredGutterBackground);border-color:var(--vscode-testing-coveredGutterBackground)}.coverage-deco-gutter.coverage-deco-miss:before{background:var(--vscode-testing-uncoveredGutterBackground);border-color:var(--vscode-testing-uncoveredGutterBackground)}.hc-black .coverage-deco-gutter:before,.hc-light .coverage-deco-gutter:before{background:none;border-style:solid;border-width:3px 0 3px 5px}.coverage-deco-gutter.coverage-deco-miss.coverage-deco-hit:before{background-color:transparent;background-image:linear-gradient(45deg,var(--vscode-testing-coveredGutterBackground) 25%,var(--vscode-testing-uncoveredGutterBackground) 25%,var(--vscode-testing-uncoveredGutterBackground) 50%,var(--vscode-testing-coveredGutterBackground) 50%,75%,var(--vscode-testing-uncoveredGutterBackground) 75%,var(--vscode-testing-uncoveredGutterBackground) 100%);background-size:6px 6px}.coverage-deco-inline{outline-offset:-1px}.coverage-deco-inline.coverage-deco-hit{background:var(--vscode-testing-coveredBackground);outline:1px solid var(--vscode-testing-coveredBorder)}.coverage-deco-inline.coverage-deco-miss{background:var(--vscode-testing-uncoveredBackground);outline:1px solid var(--vscode-testing-uncoveredBorder)}.hc-black .coverage-deco-inline.coverage-deco-hit,.hc-light .coverage-deco-inline.coverage-deco-hit{outline-style:dashed}.coverage-deco-branch-miss-indicator{display:inline-block;font:inherit!important;height:100%;position:relative;width:4ch}.coverage-deco-branch-miss-indicator:before{border:1px solid;border-radius:2px;font:normal normal normal calc(var(--vscode-testing-coverage-lineHeight)/2)/1 codicon;left:50%;padding:calc(var(--vscode-testing-coverage-lineHeight)/10);position:absolute;text-align:center;top:50%;transform:translate(-50%,-50%)}.coverage-deco-inline-count{background:var(--vscode-testing-coverCountBadgeBackground);border-bottom-left-radius:2px;border-top-left-radius:2px;color:var(--vscode-testing-coverCountBadgeForeground);font-size:.7em;margin:0 .7em 0 .4em;padding:.2em 0 .2em .2em;position:relative}.coverage-deco-inline-count:after{background-image:linear-gradient(to bottom left,transparent 50%,var(--vscode-testing-coverCountBadgeBackground) 0),linear-gradient(to bottom right,var(--vscode-testing-coverCountBadgeBackground) 50%,transparent 0);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50%;bottom:0;content:\"\";display:block;left:100%;position:absolute;top:0;width:.5em}";
|
|
4
4
|
n(css,{});
|
|
5
5
|
|
|
6
6
|
export { css, css as default };
|
|
@@ -1,21 +1,34 @@
|
|
|
1
1
|
import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
|
|
2
2
|
import { h } from 'vscode/vscode/vs/base/browser/dom';
|
|
3
|
-
import { getDefaultHoverDelegate } from 'vscode/vscode/vs/base/browser/ui/hover/
|
|
4
|
-
import { setupCustomHover } from 'vscode/vscode/vs/base/browser/ui/
|
|
3
|
+
import { getDefaultHoverDelegate } from 'vscode/vscode/vs/base/browser/ui/hover/hoverDelegateFactory';
|
|
4
|
+
import { setupCustomHover } from 'vscode/vscode/vs/base/browser/ui/hover/updatableHoverWidget';
|
|
5
5
|
import { assertNever } from 'vscode/vscode/vs/base/common/assert';
|
|
6
6
|
import { MarkdownString } from 'vscode/vscode/vs/base/common/htmlContent';
|
|
7
7
|
import { Lazy } from 'vscode/vscode/vs/base/common/lazy';
|
|
8
8
|
import { Disposable, DisposableStore, toDisposable } from 'vscode/vscode/vs/base/common/lifecycle';
|
|
9
9
|
import { clamp } from 'vscode/vscode/vs/base/common/numbers';
|
|
10
|
+
import { observableValue } from 'vscode/vscode/vs/base/common/observableInternal/base';
|
|
11
|
+
import 'vscode/vscode/vs/base/common/observableInternal/derived';
|
|
12
|
+
import { autorun } from 'vscode/vscode/vs/base/common/observableInternal/autorun';
|
|
13
|
+
import 'vscode/vscode/vs/base/common/observableInternal/utils';
|
|
14
|
+
import 'vscode/vscode/vs/base/common/cancellation';
|
|
10
15
|
import { isDefined } from 'vscode/vscode/vs/base/common/types';
|
|
11
16
|
import { localizeWithPath } from 'vscode/vscode/vs/nls';
|
|
12
17
|
import { IConfigurationService } from 'vscode/vscode/vs/platform/configuration/common/configuration';
|
|
13
|
-
import { asCssVariableName
|
|
18
|
+
import { asCssVariableName } from 'vscode/vscode/vs/platform/theme/common/colorUtils';
|
|
19
|
+
import 'vscode/vscode/vs/platform/theme/common/colors/baseColors';
|
|
20
|
+
import { chartsRed, chartsYellow, chartsGreen } from 'vscode/vscode/vs/platform/theme/common/colors/chartsColors';
|
|
21
|
+
import 'vscode/vscode/vs/platform/theme/common/colors/editorColors';
|
|
22
|
+
import 'vscode/vscode/vs/platform/theme/common/colors/inputColors';
|
|
23
|
+
import 'vscode/vscode/vs/platform/theme/common/colors/listColors';
|
|
24
|
+
import 'vscode/vscode/vs/platform/theme/common/colors/menuColors';
|
|
25
|
+
import 'vscode/vscode/vs/platform/theme/common/colors/minimapColors';
|
|
26
|
+
import 'vscode/vscode/vs/platform/theme/common/colors/miscColors';
|
|
27
|
+
import 'vscode/vscode/vs/platform/theme/common/colors/quickpickColors';
|
|
28
|
+
import 'vscode/vscode/vs/platform/theme/common/colors/searchColors';
|
|
14
29
|
import { getTestingConfiguration, observeTestingConfiguration } from '../common/configuration.js';
|
|
15
30
|
import { getTotalCoveragePercent } from 'vscode/vscode/vs/workbench/contrib/testing/common/testCoverage';
|
|
16
31
|
import { ITestCoverageService } from 'vscode/vscode/vs/workbench/contrib/testing/common/testCoverageService';
|
|
17
|
-
import { observableValue } from 'vscode/vscode/vs/base/common/observableInternal/base';
|
|
18
|
-
import { autorun } from 'vscode/vscode/vs/base/common/observableInternal/autorun';
|
|
19
32
|
|
|
20
33
|
let ManagedTestCoverageBars = class ManagedTestCoverageBars extends Disposable {
|
|
21
34
|
get visible() {
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
|
|
2
2
|
import { append, $ } from 'vscode/vscode/vs/base/browser/dom';
|
|
3
|
+
import { findLast } from 'vscode/vscode/vs/base/common/arraysFind';
|
|
3
4
|
import { assertNever } from 'vscode/vscode/vs/base/common/assert';
|
|
4
5
|
import { Codicon } from 'vscode/vscode/vs/base/common/codicons';
|
|
5
6
|
import { memoize } from 'vscode/vscode/vs/base/common/decorators';
|
|
6
7
|
import { createMatches } from 'vscode/vscode/vs/base/common/filters';
|
|
7
8
|
import { Iterable } from 'vscode/vscode/vs/base/common/iterator';
|
|
8
9
|
import { DisposableStore, MutableDisposable, Disposable } from 'vscode/vscode/vs/base/common/lifecycle';
|
|
10
|
+
import { observableValue } from 'vscode/vscode/vs/base/common/observableInternal/base';
|
|
11
|
+
import 'vscode/vscode/vs/base/common/observableInternal/derived';
|
|
12
|
+
import { autorun } from 'vscode/vscode/vs/base/common/observableInternal/autorun';
|
|
13
|
+
import 'vscode/vscode/vs/base/common/observableInternal/utils';
|
|
14
|
+
import 'vscode/vscode/vs/base/common/cancellation';
|
|
9
15
|
import { basenameOrAuthority } from 'vscode/vscode/vs/base/common/resources';
|
|
10
16
|
import { ThemeIcon } from 'vscode/vscode/vs/base/common/themables';
|
|
11
17
|
import { Position } from 'vscode/vscode/vs/editor/common/core/position';
|
|
@@ -30,11 +36,10 @@ import { ViewAction, ViewPane } from 'vscode/vscode/vs/workbench/browser/parts/v
|
|
|
30
36
|
import { IViewDescriptorService } from 'vscode/vscode/vs/workbench/common/views';
|
|
31
37
|
import { testingWasCovered, testingStatesToIcons } from './icons.js';
|
|
32
38
|
import { ManagedTestCoverageBars } from './testCoverageBars.js';
|
|
39
|
+
import { onObservableChange } from '../common/observableUtils.js';
|
|
33
40
|
import { FileCoverage, getTotalCoveragePercent } from 'vscode/vscode/vs/workbench/contrib/testing/common/testCoverage';
|
|
34
41
|
import { ITestCoverageService } from 'vscode/vscode/vs/workbench/contrib/testing/common/testCoverageService';
|
|
35
42
|
import { SIDE_GROUP, ACTIVE_GROUP, IEditorService } from 'vscode/vscode/vs/workbench/services/editor/common/editorService';
|
|
36
|
-
import { observableValue } from 'vscode/vscode/vs/base/common/observableInternal/base';
|
|
37
|
-
import { autorun } from 'vscode/vscode/vs/base/common/observableInternal/autorun';
|
|
38
43
|
|
|
39
44
|
var FileCoverageRenderer_1, DeclarationCoverageRenderer_1;
|
|
40
45
|
let TestCoverageView = class TestCoverageView extends ViewPane {
|
|
@@ -164,6 +169,7 @@ const shouldShowDeclDetailsOnExpand = (c) => isFileCoverage(c) && c.value instan
|
|
|
164
169
|
let TestCoverageTree = class TestCoverageTree extends Disposable {
|
|
165
170
|
constructor(container, labels, sortOrder, instantiationService, editorService) {
|
|
166
171
|
super();
|
|
172
|
+
this.inputDisposables = this._register(( new DisposableStore()));
|
|
167
173
|
this.tree = instantiationService.createInstance(WorkbenchCompressibleObjectTree, 'TestCoverageView', container, ( new TestCoverageTreeListDelegate()), [
|
|
168
174
|
instantiationService.createInstance(FileCoverageRenderer, labels),
|
|
169
175
|
instantiationService.createInstance(DeclarationCoverageRenderer),
|
|
@@ -250,6 +256,7 @@ let TestCoverageTree = class TestCoverageTree extends Disposable {
|
|
|
250
256
|
}));
|
|
251
257
|
}
|
|
252
258
|
setInput(coverage) {
|
|
259
|
+
this.inputDisposables.clear();
|
|
253
260
|
const files = [];
|
|
254
261
|
for (let node of coverage.tree.nodes) {
|
|
255
262
|
while (!(node.value instanceof FileCoverage) && node.children?.size === 1) {
|
|
@@ -267,6 +274,12 @@ let TestCoverageTree = class TestCoverageTree extends Disposable {
|
|
|
267
274
|
children: file.children && ( Iterable.map(file.children?.values(), toChild))
|
|
268
275
|
};
|
|
269
276
|
};
|
|
277
|
+
this.inputDisposables.add(onObservableChange(coverage.didAddCoverage, nodes => {
|
|
278
|
+
const toRender = findLast(nodes, n => this.tree.hasElement(n));
|
|
279
|
+
if (toRender) {
|
|
280
|
+
this.tree.setChildren(toRender, ( Iterable.map(toRender.children?.values() || [], toChild)), { diffIdentityProvider: { getId: el => el.value.id } });
|
|
281
|
+
}
|
|
282
|
+
}));
|
|
270
283
|
this.tree.setChildren(null, ( Iterable.map(files, toChild)));
|
|
271
284
|
}
|
|
272
285
|
layout(height, width) {
|
|
@@ -377,6 +390,7 @@ let FileCoverageRenderer = class FileCoverageRenderer {
|
|
|
377
390
|
label: templateDisposables.add(this.labels.create(container, {
|
|
378
391
|
supportHighlights: true,
|
|
379
392
|
})),
|
|
393
|
+
elementsDisposables: templateDisposables.add(( new DisposableStore())),
|
|
380
394
|
templateDisposables,
|
|
381
395
|
};
|
|
382
396
|
}
|
|
@@ -390,9 +404,14 @@ let FileCoverageRenderer = class FileCoverageRenderer {
|
|
|
390
404
|
templateData.templateDisposables.dispose();
|
|
391
405
|
}
|
|
392
406
|
doRender(element, templateData, filterData) {
|
|
407
|
+
templateData.elementsDisposables.clear();
|
|
393
408
|
const stat = (element instanceof Array ? element[element.length - 1] : element);
|
|
394
409
|
const file = stat.value;
|
|
395
410
|
const name = element instanceof Array ? ( element.map(e => basenameOrAuthority(e.value.uri))) : basenameOrAuthority(file.uri);
|
|
411
|
+
templateData.elementsDisposables.add(autorun(reader => {
|
|
412
|
+
stat.value?.didChange.read(reader);
|
|
413
|
+
templateData.bars.setCoverageInfo(file);
|
|
414
|
+
}));
|
|
396
415
|
templateData.bars.setCoverageInfo(file);
|
|
397
416
|
templateData.label.setResource({ resource: file.uri, name }, {
|
|
398
417
|
fileKind: stat.children?.size ? FileKind.FOLDER : FileKind.FILE,
|
|
@@ -3,7 +3,8 @@ import { Codicon } from 'vscode/vscode/vs/base/common/codicons';
|
|
|
3
3
|
import { Iterable } from 'vscode/vscode/vs/base/common/iterator';
|
|
4
4
|
import { KeyChord } from 'vscode/vscode/vs/base/common/keyCodes';
|
|
5
5
|
import { isDefined } from 'vscode/vscode/vs/base/common/types';
|
|
6
|
-
import {
|
|
6
|
+
import { ICodeEditorService } from 'vscode/vscode/vs/editor/browser/services/codeEditorService';
|
|
7
|
+
import { EmbeddedCodeEditorWidget } from 'vscode/vscode/vs/editor/browser/widget/codeEditor/embeddedCodeEditorWidget';
|
|
7
8
|
import { Position } from 'vscode/vscode/vs/editor/common/core/position';
|
|
8
9
|
import { Range } from 'vscode/vscode/vs/editor/common/core/range';
|
|
9
10
|
import { EditorContextKeys } from 'vscode/vscode/vs/editor/common/editorContextKeys';
|
|
@@ -946,14 +947,18 @@ class ExecuteTestAtCursor extends Action2 {
|
|
|
946
947
|
this.group = group;
|
|
947
948
|
}
|
|
948
949
|
async run(accessor) {
|
|
950
|
+
const codeEditorService = accessor.get(ICodeEditorService);
|
|
949
951
|
const editorService = accessor.get(IEditorService);
|
|
950
952
|
const activeEditorPane = editorService.activeEditorPane;
|
|
951
|
-
|
|
952
|
-
if (!activeEditorPane || !
|
|
953
|
+
let editor = codeEditorService.getActiveCodeEditor();
|
|
954
|
+
if (!activeEditorPane || !editor) {
|
|
953
955
|
return;
|
|
954
956
|
}
|
|
955
|
-
|
|
956
|
-
|
|
957
|
+
if (editor instanceof EmbeddedCodeEditorWidget) {
|
|
958
|
+
editor = editor.getParentEditor();
|
|
959
|
+
}
|
|
960
|
+
const position = editor?.getPosition();
|
|
961
|
+
const model = editor?.getModel();
|
|
957
962
|
if (!position || !model || !('uri' in model)) {
|
|
958
963
|
return;
|
|
959
964
|
}
|
|
@@ -1006,8 +1011,8 @@ class ExecuteTestAtCursor extends Action2 {
|
|
|
1006
1011
|
tests: bestNodes.length ? bestNodes : bestNodesBefore,
|
|
1007
1012
|
});
|
|
1008
1013
|
}
|
|
1009
|
-
else if (
|
|
1010
|
-
MessageController.get(
|
|
1014
|
+
else if (editor) {
|
|
1015
|
+
MessageController.get(editor)?.showMessage(( localizeWithPath(
|
|
1011
1016
|
'vs/workbench/contrib/testing/browser/testExplorerActions',
|
|
1012
1017
|
'noTestsAtCursor',
|
|
1013
1018
|
"No tests found here"
|
|
@@ -1144,9 +1149,15 @@ class ExecuteTestsInCurrentFile extends Action2 {
|
|
|
1144
1149
|
this.group = group;
|
|
1145
1150
|
}
|
|
1146
1151
|
run(accessor) {
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1152
|
+
let editor = accessor.get(ICodeEditorService).getActiveCodeEditor();
|
|
1153
|
+
if (!editor) {
|
|
1154
|
+
return;
|
|
1155
|
+
}
|
|
1156
|
+
if (editor instanceof EmbeddedCodeEditorWidget) {
|
|
1157
|
+
editor = editor.getParentEditor();
|
|
1158
|
+
}
|
|
1159
|
+
const position = editor?.getPosition();
|
|
1160
|
+
const model = editor?.getModel();
|
|
1150
1161
|
if (!position || !model || !('uri' in model)) {
|
|
1151
1162
|
return;
|
|
1152
1163
|
}
|
|
@@ -1171,8 +1182,8 @@ class ExecuteTestsInCurrentFile extends Action2 {
|
|
|
1171
1182
|
group: this.group,
|
|
1172
1183
|
});
|
|
1173
1184
|
}
|
|
1174
|
-
if (
|
|
1175
|
-
MessageController.get(
|
|
1185
|
+
if (editor) {
|
|
1186
|
+
MessageController.get(editor)?.showMessage(( localizeWithPath(
|
|
1176
1187
|
'vs/workbench/contrib/testing/browser/testExplorerActions',
|
|
1177
1188
|
'noTestsInFile',
|
|
1178
1189
|
"No tests found in this file"
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { renderStringAsPlaintext } from 'vscode/vscode/vs/base/browser/markdownRenderer';
|
|
2
|
+
import { toDisposable } from 'vscode/vscode/vs/base/common/lifecycle';
|
|
3
|
+
import { removeAnsiEscapeCodes, forAnsiStringParts, GraphemeIterator } from 'vscode/vscode/vs/base/common/strings';
|
|
4
|
+
import './media/testMessageColorizer.css.js';
|
|
5
|
+
import { Position } from 'vscode/vscode/vs/editor/common/core/position';
|
|
6
|
+
import { Range } from 'vscode/vscode/vs/editor/common/core/range';
|
|
7
|
+
|
|
8
|
+
const colorAttrRe = /^\x1b\[([0-9]+)m$/;
|
|
9
|
+
const renderTestMessageAsText = (tm) => typeof tm === 'string' ? removeAnsiEscapeCodes(tm) : renderStringAsPlaintext(tm);
|
|
10
|
+
const colorizeTestMessageInEditor = (message, editor) => {
|
|
11
|
+
const decos = [];
|
|
12
|
+
editor.changeDecorations(changeAccessor => {
|
|
13
|
+
let start = ( new Position(1, 1));
|
|
14
|
+
let cls = [];
|
|
15
|
+
for (const part of forAnsiStringParts(message)) {
|
|
16
|
+
if (part.isCode) {
|
|
17
|
+
const colorAttr = colorAttrRe.exec(part.str)?.[1];
|
|
18
|
+
if (!colorAttr) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
const n = Number(colorAttr);
|
|
22
|
+
if (n === 0) {
|
|
23
|
+
cls.length = 0;
|
|
24
|
+
}
|
|
25
|
+
else if (n === 22) {
|
|
26
|
+
cls = cls.filter(c => c !== "tstm-ansidec-1" && c !== "tstm-ansidec-3" );
|
|
27
|
+
}
|
|
28
|
+
else if (n === 23) {
|
|
29
|
+
cls = cls.filter(c => c !== "tstm-ansidec-3" );
|
|
30
|
+
}
|
|
31
|
+
else if (n === 24) {
|
|
32
|
+
cls = cls.filter(c => c !== "tstm-ansidec-4" );
|
|
33
|
+
}
|
|
34
|
+
else if ((n >= 30 && n <= 39) || (n >= 90 && n <= 99)) {
|
|
35
|
+
cls = cls.filter(c => !c.startsWith("tstm-ansidec-fg" ));
|
|
36
|
+
cls.push("tstm-ansidec-fg" + colorAttr);
|
|
37
|
+
}
|
|
38
|
+
else if ((n >= 40 && n <= 49) || (n >= 100 && n <= 109)) {
|
|
39
|
+
cls = cls.filter(c => !c.startsWith("tstm-ansidec-bg" ));
|
|
40
|
+
cls.push("tstm-ansidec-bg" + colorAttr);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
cls.push("tstm-ansidec-" + colorAttr);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
let line = start.lineNumber;
|
|
48
|
+
let col = start.column;
|
|
49
|
+
const graphemes = ( new GraphemeIterator(part.str));
|
|
50
|
+
for (let i = 0; !graphemes.eol(); i += graphemes.nextGraphemeLength()) {
|
|
51
|
+
if (part.str[i] === '\n') {
|
|
52
|
+
line++;
|
|
53
|
+
col = 1;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
col++;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const end = ( new Position(line, col));
|
|
60
|
+
if (cls.length) {
|
|
61
|
+
decos.push(changeAccessor.addDecoration(Range.fromPositions(start, end), {
|
|
62
|
+
inlineClassName: cls.join(' '),
|
|
63
|
+
description: 'test-message-colorized',
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
start = end;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
return toDisposable(() => editor.removeDecorations(decos));
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export { colorizeTestMessageInEditor, renderTestMessageAsText };
|
|
@@ -23,16 +23,22 @@ import { TestResultsView, OpenMessageInEditorAction, GoToPreviousMessageAction,
|
|
|
23
23
|
import { TestingProgressTrigger } from './testingProgressUiService.js';
|
|
24
24
|
import { TestingViewPaneContainer } from './testingViewPaneContainer.js';
|
|
25
25
|
import { testingConfiguration } from '../common/configuration.js';
|
|
26
|
+
import 'vscode/vscode/vs/workbench/contrib/testing/common/testCoverageService';
|
|
26
27
|
import { ITestExplorerFilterState } from 'vscode/vscode/vs/workbench/contrib/testing/common/testExplorerFilterState';
|
|
27
28
|
import { TestId } from 'vscode/vscode/vs/workbench/contrib/testing/common/testId';
|
|
29
|
+
import 'vscode/vscode/vs/workbench/contrib/testing/common/testProfileService';
|
|
28
30
|
import { ITestResultService } from 'vscode/vscode/vs/workbench/contrib/testing/common/testResultService';
|
|
31
|
+
import 'vscode/vscode/vs/workbench/contrib/testing/common/testResultStorage';
|
|
29
32
|
import { ITestService } from 'vscode/vscode/vs/workbench/contrib/testing/common/testService';
|
|
33
|
+
import '../common/testServiceImpl.js';
|
|
30
34
|
import { TestingContentProvider } from '../common/testingContentProvider.js';
|
|
31
35
|
import { TestingContextKeys } from 'vscode/vscode/vs/workbench/contrib/testing/common/testingContextKeys';
|
|
36
|
+
import 'vscode/vscode/vs/workbench/contrib/testing/common/testingContinuousRunService';
|
|
32
37
|
import { ITestingDecorationsService } from 'vscode/vscode/vs/workbench/contrib/testing/common/testingDecorations';
|
|
33
38
|
import { ITestingPeekOpener } from 'vscode/vscode/vs/workbench/contrib/testing/common/testingPeekOpener';
|
|
34
39
|
import { IViewsService } from 'vscode/vscode/vs/workbench/services/views/common/viewsService';
|
|
35
40
|
import { allTestActions, discoverAndRunTests } from './testExplorerActions.js';
|
|
41
|
+
import './testingConfigurationUi.js';
|
|
36
42
|
|
|
37
43
|
const viewContainer = ( Registry.as(Extensions.ViewContainersRegistry)).registerViewContainer({
|
|
38
44
|
id: "workbench.view.extension.test" ,
|