@codingame/monaco-vscode-testing-service-override 2.2.2 → 3.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codingame/monaco-vscode-testing-service-override",
3
- "version": "2.2.2",
3
+ "version": "3.0.0",
4
4
  "keywords": [],
5
5
  "author": {
6
6
  "name": "CodinGame",
@@ -18,13 +18,13 @@
18
18
  "module": "index.js",
19
19
  "types": "index.d.ts",
20
20
  "dependencies": {
21
- "vscode": "npm:@codingame/monaco-vscode-api@2.2.2",
22
- "@xterm/addon-canvas": "0.6.0-beta.20",
23
- "@xterm/addon-image": "0.7.0-beta.18",
24
- "@xterm/addon-search": "0.14.0-beta.20",
25
- "@xterm/addon-serialize": "0.12.0-beta.20",
26
- "@xterm/addon-unicode11": "0.7.0-beta.20",
27
- "@xterm/addon-webgl": "0.17.0-beta.20",
21
+ "vscode": "npm:@codingame/monaco-vscode-api@3.0.0",
22
+ "@xterm/addon-canvas": "0.6.0-beta.31",
23
+ "@xterm/addon-image": "0.7.0-beta.29",
24
+ "@xterm/addon-search": "0.14.0-beta.31",
25
+ "@xterm/addon-serialize": "0.12.0-beta.31",
26
+ "@xterm/addon-unicode11": "0.7.0-beta.31",
27
+ "@xterm/addon-webgl": "0.17.0-beta.31",
28
28
  "vscode-marked": "npm:marked@=3.0.2"
29
29
  }
30
30
  }
@@ -13,7 +13,7 @@ import { Position } from 'vscode/vscode/vs/editor/common/core/position';
13
13
  import { Range } from 'vscode/vscode/vs/editor/common/core/range';
14
14
  import { InjectedTextCursorStops } from 'vscode/vscode/vs/editor/common/model';
15
15
  import { HoverOperation } from 'vscode/vscode/vs/editor/contrib/hover/browser/hoverOperation';
16
- import { localizeWithPath } from 'vscode/vscode/vs/nls';
16
+ import { localizeWithPath, localize2WithPath } from 'vscode/vscode/vs/nls';
17
17
  import { Categories } from 'vscode/vscode/vs/platform/action/common/actionCommonCategories';
18
18
  import { registerAction2, Action2 } from 'vscode/vscode/vs/platform/actions/common/actions';
19
19
  import { IInstantiationService } from 'vscode/vscode/vs/platform/instantiation/common/instantiation';
@@ -78,7 +78,7 @@ let CodeCoverageDecorations = class CodeCoverageDecorations extends Disposable {
78
78
  const c = fileCoverage.read(reader);
79
79
  if (c) {
80
80
  const evt = configObs.read(reader);
81
- if (evt?.hasChanged(66 ) !== false) {
81
+ if (evt?.hasChanged(67 ) !== false) {
82
82
  this.updateEditorStyles();
83
83
  }
84
84
  }
@@ -110,7 +110,7 @@ let CodeCoverageDecorations = class CodeCoverageDecorations extends Disposable {
110
110
  }));
111
111
  }
112
112
  updateEditorStyles() {
113
- const lineHeight = this.editor.getOption(66 );
113
+ const lineHeight = this.editor.getOption(67 );
114
114
  const { style } = this.editor.getContainerDomNode();
115
115
  style.setProperty('--vscode-testing-coverage-lineHeight', `${lineHeight}px`);
116
116
  }
@@ -224,7 +224,7 @@ let CodeCoverageDecorations = class CodeCoverageDecorations extends Disposable {
224
224
  }
225
225
  else {
226
226
  target.className = `coverage-deco-inline ${cls}`;
227
- if (primary) {
227
+ if (primary && typeof hits === 'number') {
228
228
  target.before = countBadge(hits);
229
229
  }
230
230
  }
@@ -244,7 +244,7 @@ let CodeCoverageDecorations = class CodeCoverageDecorations extends Disposable {
244
244
  const applyHoverOptions = (target) => {
245
245
  target.className = `coverage-deco-inline ${cls}`;
246
246
  target.hoverMessage = description;
247
- if (primary) {
247
+ if (primary && typeof detail.count === 'number') {
248
248
  target.before = countBadge(detail.count);
249
249
  }
250
250
  };
@@ -374,8 +374,8 @@ class CoverageDetailsModel {
374
374
  if (detail.type === 0 ) {
375
375
  return ( new MarkdownString()).appendMarkdown(( localizeWithPath(
376
376
  'vs/workbench/contrib/testing/browser/codeCoverageDecorations',
377
- 'coverage.fnExecutedCount',
378
- 'Function `{0}` was executed {1} time(s).',
377
+ 'coverage.declExecutedCount',
378
+ '`{0}` was executed {1} time(s).',
379
379
  detail.name,
380
380
  detail.count
381
381
  )));
@@ -384,7 +384,7 @@ class CoverageDetailsModel {
384
384
  const text = wrapName(model.getValueInRange(tidyLocation(detail.location)).trim() || `<empty statement>`);
385
385
  const str = ( new MarkdownString());
386
386
  if (detail.branches?.length) {
387
- const covered = detail.branches.filter(b => b.count > 0).length;
387
+ const covered = detail.branches.filter(b => !!b.count).length;
388
388
  str.appendMarkdown(( localizeWithPath(
389
389
  'vs/workbench/contrib/testing/browser/codeCoverageDecorations',
390
390
  'coverage.branches',
@@ -531,7 +531,7 @@ let LineHoverWidget = class LineHoverWidget extends Disposable {
531
531
  const editorLayout = editor.getLayoutInfo();
532
532
  const topForLineNumber = editor.getTopForLineNumber(this.computer.line);
533
533
  const editorScrollTop = editor.getScrollTop();
534
- const lineHeight = editor.getOption(66 );
534
+ const lineHeight = editor.getOption(67 );
535
535
  const nodeHeight = h.containerDomNode.clientHeight;
536
536
  const top = topForLineNumber - editorScrollTop - ((nodeHeight - lineHeight) / 2);
537
537
  const left = editorLayout.lineNumbersLeft + editorLayout.lineNumbersWidth;
@@ -546,11 +546,11 @@ registerAction2(class ToggleInlineCoverage extends Action2 {
546
546
  constructor() {
547
547
  super({
548
548
  id: TOGGLE_INLINE_COMMAND_ID,
549
- title: { value: ( localizeWithPath(
549
+ title: ( localize2WithPath(
550
550
  'vs/workbench/contrib/testing/browser/codeCoverageDecorations',
551
551
  'coverage.toggleInline',
552
552
  "Toggle Inline Coverage"
553
- )), original: 'Toggle Inline Coverage' },
553
+ )),
554
554
  category: Categories.Test,
555
555
  keybinding: {
556
556
  weight: 200 ,
@@ -46,7 +46,12 @@ class TestTreeErrorMessage {
46
46
  }
47
47
  const testIdentityProvider = {
48
48
  getId(element) {
49
- return element.treeId + '\0' + (element instanceof TestTreeErrorMessage ? 'error' : element.test.expand);
49
+ const expandComponent = element instanceof TestTreeErrorMessage
50
+ ? 'error'
51
+ : element.test.expand === 0
52
+ ? !!element.children.size
53
+ : element.test.expand;
54
+ return element.treeId + '\0' + expandComponent;
50
55
  }
51
56
  };
52
57
  const getChildrenForParent = (serialized, rootsWithChildren, node) => {
@@ -199,8 +199,12 @@ let TreeProjection = class TreeProjection extends Disposable {
199
199
  storeItem(treeElement) {
200
200
  treeElement.parent?.children.add(treeElement);
201
201
  this.items.set(treeElement.test.item.extId, treeElement);
202
- const affectsRootElement = treeElement.depth === 1 && treeElement.parent?.children.size === 1;
203
- this.changedParents.add(affectsRootElement ? null : treeElement.parent);
202
+ const affectsParent = treeElement.parent?.children.size === 1;
203
+ const affectedParent = affectsParent ? treeElement.parent.parent : treeElement.parent;
204
+ this.changedParents.add(affectedParent);
205
+ if (affectedParent?.depth === 0) {
206
+ this.changedParents.add(null);
207
+ }
204
208
  if (treeElement.depth === 0 || isCollapsedInSerializedTestTree(this.lastState, treeElement.test.item.extId) === false) {
205
209
  this.expandElement(treeElement, 0);
206
210
  }
@@ -40,12 +40,12 @@ const testingDebugIcon = registerIcon('testing-debug-icon', Codicon.debugAltSmal
40
40
  'testingDebugIcon',
41
41
  'Icon of the "debug test" action.'
42
42
  )));
43
- const testingCoverageIcon = registerIcon('testing-coverage-icon', Codicon.heartFilled, ( localizeWithPath(
43
+ const testingCoverageIcon = registerIcon('testing-coverage-icon', Codicon.runCoverage, ( localizeWithPath(
44
44
  'vs/workbench/contrib/testing/browser/icons',
45
45
  'testingCoverageIcon',
46
46
  'Icon of the "run test with coverage" action.'
47
47
  )));
48
- const testingCoverageAllIcon = registerIcon('testing-coverage-all-icon', Codicon.heartFilled, ( localizeWithPath(
48
+ const testingCoverageAllIcon = registerIcon('testing-coverage-all-icon', Codicon.runAllCoverage, ( localizeWithPath(
49
49
  'vs/workbench/contrib/testing/browser/icons',
50
50
  'testingRunAllWithCoverageIcon',
51
51
  'Icon of the "run all tests with coverage" action.'
@@ -105,7 +105,7 @@ const testingCancelRefreshTests = registerIcon('testing-cancel-refresh-tests', C
105
105
  'testingCancelRefreshTests',
106
106
  'Icon on the button to cancel refreshing tests.'
107
107
  )));
108
- const testingCoverageReport = registerIcon('testing-coverage', Codicon.lightBulb, ( localizeWithPath(
108
+ const testingCoverageReport = registerIcon('testing-coverage', Codicon.coverage, ( localizeWithPath(
109
109
  'vs/workbench/contrib/testing/browser/icons',
110
110
  'testingCoverage',
111
111
  'Icon representing test coverage'
@@ -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)}.monaco-workbench .codicon-testing-failed-icon{color:var(--vscode-testing-iconFailed)}.monaco-workbench .codicon-testing-passed-icon{color:var(--vscode-testing-iconPassed)}.monaco-workbench .codicon-testing-queued-icon{color:var(--vscode-testing-iconQueued)}.monaco-workbench .codicon-testing-skipped-icon{color:var(--vscode-testing-iconSkipped)}.monaco-workbench .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 .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}";
4
4
  n(css,{});
5
5
 
6
6
  export { css, css as default };
@@ -1,5 +1,7 @@
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/hoverDelegate';
4
+ import { setupCustomHover } from 'vscode/vscode/vs/base/browser/ui/iconLabel/iconLabelHover';
3
5
  import { assertNever } from 'vscode/vscode/vs/base/common/assert';
4
6
  import { MarkdownString } from 'vscode/vscode/vs/base/common/htmlContent';
5
7
  import { Lazy } from 'vscode/vscode/vs/base/common/lazy';
@@ -12,7 +14,6 @@ import { asCssVariableName, chartsRed, chartsYellow, chartsGreen } from 'vscode/
12
14
  import { getTestingConfiguration, observeTestingConfiguration } from '../common/configuration.js';
13
15
  import { getTotalCoveragePercent } from 'vscode/vscode/vs/workbench/contrib/testing/common/testCoverage';
14
16
  import { ITestCoverageService } from 'vscode/vscode/vs/workbench/contrib/testing/common/testCoverageService';
15
- import { IHoverService } from 'vscode/vscode/vs/platform/hover/browser/hover';
16
17
  import { observableValue } from 'vscode/vscode/vs/base/common/observableInternal/base';
17
18
  import { autorun } from 'vscode/vscode/vs/base/common/observableInternal/autorun';
18
19
 
@@ -20,10 +21,9 @@ let ManagedTestCoverageBars = class ManagedTestCoverageBars extends Disposable {
20
21
  get visible() {
21
22
  return !!this._coverage;
22
23
  }
23
- constructor(options, hoverService, configurationService) {
24
+ constructor(options, configurationService) {
24
25
  super();
25
26
  this.options = options;
26
- this.hoverService = hoverService;
27
27
  this.configurationService = configurationService;
28
28
  this.el = ( new Lazy(() => {
29
29
  if (this.options.compact) {
@@ -48,35 +48,17 @@ let ManagedTestCoverageBars = class ManagedTestCoverageBars extends Disposable {
48
48
  }
49
49
  }));
50
50
  this.visibleStore = this._register(( new DisposableStore()));
51
+ this.customHovers = [];
51
52
  }
52
53
  attachHover(target, factory) {
53
- target.onmouseenter = () => {
54
- if (!this._coverage) {
55
- return;
56
- }
57
- const content = factory(this._coverage);
58
- if (!content) {
59
- return;
60
- }
61
- const hover = this.hoverService.showHover({
62
- content,
63
- target,
64
- appearance: {
65
- showPointer: true,
66
- compact: true,
67
- skipFadeInAnimation: true,
68
- }
69
- });
70
- if (hover) {
71
- this.visibleStore.add(hover);
72
- }
73
- };
54
+ this._register(setupCustomHover(getDefaultHoverDelegate('element'), target, () => this._coverage && factory(this._coverage)));
74
55
  }
75
56
  setCoverageInfo(coverage) {
76
57
  const ds = this.visibleStore;
77
58
  if (!coverage) {
78
59
  if (this._coverage) {
79
60
  this._coverage = undefined;
61
+ this.customHovers.forEach(c => c.hide());
80
62
  ds.clear();
81
63
  }
82
64
  return;
@@ -108,14 +90,13 @@ let ManagedTestCoverageBars = class ManagedTestCoverageBars extends Disposable {
108
90
  }
109
91
  else {
110
92
  renderBar(el.statement, percent(coverage.statement), coverage.statement.total === 0, thresholds);
111
- renderBar(el.function, coverage.function && percent(coverage.function), coverage.function?.total === 0, thresholds);
93
+ renderBar(el.function, coverage.declaration && percent(coverage.declaration), coverage.declaration?.total === 0, thresholds);
112
94
  renderBar(el.branch, coverage.branch && percent(coverage.branch), coverage.branch?.total === 0, thresholds);
113
95
  }
114
96
  }
115
97
  };
116
98
  ManagedTestCoverageBars = ( __decorate([
117
- ( __param(1, IHoverService)),
118
- ( __param(2, IConfigurationService))
99
+ ( __param(1, IConfigurationService))
119
100
  ], ManagedTestCoverageBars));
120
101
  const percent = (cc) => clamp(cc.total === 0 ? 1 : cc.covered / cc.total, 0, 1);
121
102
  const epsilon = 10e-8;
@@ -159,13 +140,13 @@ const calculateDisplayedStat = (coverage, method) => {
159
140
  if (coverage.branch) {
160
141
  value = Math.min(value, percent(coverage.branch));
161
142
  }
162
- if (coverage.function) {
163
- value = Math.min(value, percent(coverage.function));
143
+ if (coverage.declaration) {
144
+ value = Math.min(value, percent(coverage.declaration));
164
145
  }
165
146
  return value;
166
147
  }
167
148
  case "totalCoverage" :
168
- return getTotalCoveragePercent(coverage.statement, coverage.branch, coverage.function);
149
+ return getTotalCoveragePercent(coverage.statement, coverage.branch, coverage.declaration);
169
150
  default:
170
151
  assertNever();
171
152
  }
@@ -177,38 +158,45 @@ const displayPercent = (value, precision = 2) => {
177
158
  }
178
159
  return `${display}%`;
179
160
  };
161
+ const nf = new Intl.NumberFormat();
180
162
  const stmtCoverageText = (coverage) => ( localizeWithPath(
181
163
  'vs/workbench/contrib/testing/browser/testCoverageBars',
182
164
  'statementCoverage',
183
165
  '{0}/{1} statements covered ({2})',
184
- coverage.statement.covered,
185
- coverage.statement.total,
166
+ nf.format(coverage.statement.covered),
167
+ nf.format(coverage.statement.total),
186
168
  displayPercent(percent(coverage.statement))
187
169
  ));
188
- const fnCoverageText = (coverage) => coverage.function && ( localizeWithPath(
170
+ const fnCoverageText = (coverage) => coverage.declaration && ( localizeWithPath(
189
171
  'vs/workbench/contrib/testing/browser/testCoverageBars',
190
172
  'functionCoverage',
191
173
  '{0}/{1} functions covered ({2})',
192
- coverage.function.covered,
193
- coverage.function.total,
194
- displayPercent(percent(coverage.function))
174
+ nf.format(coverage.declaration.covered),
175
+ nf.format(coverage.declaration.total),
176
+ displayPercent(percent(coverage.declaration))
195
177
  ));
196
178
  const branchCoverageText = (coverage) => coverage.branch && ( localizeWithPath(
197
179
  'vs/workbench/contrib/testing/browser/testCoverageBars',
198
180
  'branchCoverage',
199
181
  '{0}/{1} branches covered ({2})',
200
- coverage.branch.covered,
201
- coverage.branch.total,
182
+ nf.format(coverage.branch.covered),
183
+ nf.format(coverage.branch.total),
202
184
  displayPercent(percent(coverage.branch))
203
185
  ));
204
- const getOverallHoverText = (coverage) => ( new MarkdownString([
205
- stmtCoverageText(coverage),
206
- fnCoverageText(coverage),
207
- branchCoverageText(coverage),
208
- ].filter(isDefined).join('\n\n')));
186
+ const getOverallHoverText = (coverage) => {
187
+ const str = [
188
+ stmtCoverageText(coverage),
189
+ fnCoverageText(coverage),
190
+ branchCoverageText(coverage),
191
+ ].filter(isDefined).join('\n\n');
192
+ return {
193
+ markdown: ( new MarkdownString()).appendText(str),
194
+ markdownNotSupportedFallback: str
195
+ };
196
+ };
209
197
  let ExplorerTestCoverageBars = class ExplorerTestCoverageBars extends ManagedTestCoverageBars {
210
- constructor(options, hoverService, configurationService, testCoverageService) {
211
- super(options, hoverService, configurationService);
198
+ constructor(options, configurationService, testCoverageService) {
199
+ super(options, configurationService);
212
200
  this.resource = observableValue(this, undefined);
213
201
  const isEnabled = observeTestingConfiguration(configurationService, "testing.showCoverageInExplorer" );
214
202
  this._register(autorun(async (reader) => {
@@ -232,9 +220,8 @@ let ExplorerTestCoverageBars = class ExplorerTestCoverageBars extends ManagedTes
232
220
  }
233
221
  };
234
222
  ExplorerTestCoverageBars = ( __decorate([
235
- ( __param(1, IHoverService)),
236
- ( __param(2, IConfigurationService)),
237
- ( __param(3, ITestCoverageService))
223
+ ( __param(1, IConfigurationService)),
224
+ ( __param(2, ITestCoverageService))
238
225
  ], ExplorerTestCoverageBars));
239
226
 
240
227
  export { ExplorerTestCoverageBars, ManagedTestCoverageBars };
@@ -36,7 +36,7 @@ import { SIDE_GROUP, ACTIVE_GROUP, IEditorService } from 'vscode/vscode/vs/workb
36
36
  import { observableValue } from 'vscode/vscode/vs/base/common/observableInternal/base';
37
37
  import { autorun } from 'vscode/vscode/vs/base/common/observableInternal/autorun';
38
38
 
39
- var FileCoverageRenderer_1, FunctionCoverageRenderer_1;
39
+ var FileCoverageRenderer_1, DeclarationCoverageRenderer_1;
40
40
  let TestCoverageView = class TestCoverageView extends ViewPane {
41
41
  constructor(options, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, telemetryService, coverageService) {
42
42
  super(options, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, telemetryService);
@@ -76,7 +76,7 @@ TestCoverageView = ( __decorate([
76
76
  ( __param(10, ITestCoverageService))
77
77
  ], TestCoverageView));
78
78
  let fnNodeId = 0;
79
- class FunctionCoverageNode {
79
+ class DeclarationCoverageNode {
80
80
  get hits() {
81
81
  return this.data.count;
82
82
  }
@@ -119,11 +119,11 @@ class FunctionCoverageNode {
119
119
  if (detail.type !== 1 ) {
120
120
  continue;
121
121
  }
122
- statement.covered += detail.count > 0 ? 1 : 0;
122
+ statement.covered += detail.count ? 1 : 0;
123
123
  statement.total++;
124
124
  if (detail.branches) {
125
125
  for (const { count } of detail.branches) {
126
- branch.covered += count > 0 ? 1 : 0;
126
+ branch.covered += count ? 1 : 0;
127
127
  branch.total++;
128
128
  }
129
129
  }
@@ -131,15 +131,15 @@ class FunctionCoverageNode {
131
131
  return { statement, branch };
132
132
  }
133
133
  }
134
- FunctionCoverageNode.__decorator = ( __decorate([
134
+ DeclarationCoverageNode.__decorator = ( __decorate([
135
135
  memoize
136
- ], FunctionCoverageNode.prototype, "attributableCoverage", null));
137
- class RevealUncoveredFunctions {
136
+ ], DeclarationCoverageNode.prototype, "attributableCoverage", null));
137
+ class RevealUncoveredDeclarations {
138
138
  get label() {
139
139
  return ( localizeWithPath(
140
140
  'vs/workbench/contrib/testing/browser/testCoverageView',
141
141
  'functionsWithoutCoverage',
142
- "{0} functions without coverage...",
142
+ "{0} declarations without coverage...",
143
143
  this.n
144
144
  ));
145
145
  }
@@ -159,14 +159,14 @@ class LoadingDetails {
159
159
  }
160
160
  }
161
161
  const isFileCoverage = (c) => typeof c === 'object' && 'value' in c;
162
- const isFunctionCoverage = (c) => c instanceof FunctionCoverageNode;
163
- const shouldShowFunctionDetailsOnExpand = (c) => isFileCoverage(c) && c.value instanceof FileCoverage && !!c.value.function?.total;
162
+ const isDeclarationCoverage = (c) => c instanceof DeclarationCoverageNode;
163
+ const shouldShowDeclDetailsOnExpand = (c) => isFileCoverage(c) && c.value instanceof FileCoverage && !!c.value.declaration?.total;
164
164
  let TestCoverageTree = class TestCoverageTree extends Disposable {
165
165
  constructor(container, labels, sortOrder, instantiationService, editorService) {
166
166
  super();
167
167
  this.tree = instantiationService.createInstance(WorkbenchCompressibleObjectTree, 'TestCoverageView', container, ( new TestCoverageTreeListDelegate()), [
168
168
  instantiationService.createInstance(FileCoverageRenderer, labels),
169
- instantiationService.createInstance(FunctionCoverageRenderer),
169
+ instantiationService.createInstance(DeclarationCoverageRenderer),
170
170
  instantiationService.createInstance(BasicRenderer),
171
171
  ], {
172
172
  expandOnlyOnTwistieClick: true,
@@ -214,7 +214,7 @@ let TestCoverageTree = class TestCoverageTree extends Disposable {
214
214
  this._register(this.tree);
215
215
  this._register(this.tree.onDidChangeCollapseState(e => {
216
216
  const el = e.node.element;
217
- if (!e.node.collapsed && !e.node.children.length && el && shouldShowFunctionDetailsOnExpand(el)) {
217
+ if (!e.node.collapsed && !e.node.children.length && el && shouldShowDeclDetailsOnExpand(el)) {
218
218
  if (el.value.hasSynchronousDetails) {
219
219
  this.tree.setChildren(el, [{ element: ( new LoadingDetails()), incompressible: true }]);
220
220
  }
@@ -228,7 +228,7 @@ let TestCoverageTree = class TestCoverageTree extends Disposable {
228
228
  if (isFileCoverage(e.element) && !e.element.children?.size) {
229
229
  resource = e.element.value.uri;
230
230
  }
231
- else if (isFunctionCoverage(e.element)) {
231
+ else if (isDeclarationCoverage(e.element)) {
232
232
  resource = e.element.uri;
233
233
  selection = e.element.location;
234
234
  }
@@ -263,7 +263,7 @@ let TestCoverageTree = class TestCoverageTree extends Disposable {
263
263
  element: file,
264
264
  incompressible: isFile,
265
265
  collapsed: isFile,
266
- collapsible: !isFile || !!file.value?.function?.total,
266
+ collapsible: !isFile || !!file.value?.declaration?.total,
267
267
  children: file.children && ( Iterable.map(file.children?.values(), toChild))
268
268
  };
269
269
  };
@@ -276,12 +276,12 @@ let TestCoverageTree = class TestCoverageTree extends Disposable {
276
276
  if (!this.tree.hasElement(el)) {
277
277
  return;
278
278
  }
279
- const functions = [];
279
+ const decl = [];
280
280
  for (const fn of details) {
281
281
  if (fn.type !== 0 ) {
282
282
  continue;
283
283
  }
284
- let arr = functions;
284
+ let arr = decl;
285
285
  while (true) {
286
286
  const parent = arr.find(p => ( p.containedDetails.has(fn)));
287
287
  if (parent) {
@@ -291,7 +291,7 @@ let TestCoverageTree = class TestCoverageTree extends Disposable {
291
291
  break;
292
292
  }
293
293
  }
294
- arr.push(( new FunctionCoverageNode(el.value.uri, fn, details)));
294
+ arr.push(( new DeclarationCoverageNode(el.value.uri, fn, details)));
295
295
  }
296
296
  const makeChild = (fn) => ({
297
297
  element: fn,
@@ -300,7 +300,7 @@ let TestCoverageTree = class TestCoverageTree extends Disposable {
300
300
  collapsible: fn.children.length > 0,
301
301
  children: ( fn.children.map(makeChild))
302
302
  });
303
- this.tree.setChildren(el, ( functions.map(makeChild)));
303
+ this.tree.setChildren(el, ( decl.map(makeChild)));
304
304
  }
305
305
  };
306
306
  TestCoverageTree = ( __decorate([
@@ -315,10 +315,10 @@ class TestCoverageTreeListDelegate {
315
315
  if (isFileCoverage(element)) {
316
316
  return FileCoverageRenderer.ID;
317
317
  }
318
- if (isFunctionCoverage(element)) {
319
- return FunctionCoverageRenderer.ID;
318
+ if (isDeclarationCoverage(element)) {
319
+ return DeclarationCoverageRenderer.ID;
320
320
  }
321
- if (element instanceof LoadingDetails || element instanceof RevealUncoveredFunctions) {
321
+ if (element instanceof LoadingDetails || element instanceof RevealUncoveredDeclarations) {
322
322
  return BasicRenderer.ID;
323
323
  }
324
324
  assertNever();
@@ -339,7 +339,7 @@ class Sorter {
339
339
  return b.value.tpc - a.value.tpc;
340
340
  }
341
341
  }
342
- else if (isFunctionCoverage(a) && isFunctionCoverage(b)) {
342
+ else if (isDeclarationCoverage(a) && isDeclarationCoverage(b)) {
343
343
  switch (order) {
344
344
  case 1 :
345
345
  return Position.compare(a.location instanceof Range ? a.location.getStartPosition() : a.location, b.location instanceof Range ? b.location.getStartPosition() : b.location);
@@ -349,7 +349,7 @@ class Sorter {
349
349
  const attrA = a.tpc;
350
350
  const attrB = b.tpc;
351
351
  return (attrA !== undefined && attrB !== undefined && attrB - attrA)
352
- || (b.hits - a.hits)
352
+ || (+b.hits - +a.hits)
353
353
  || a.label.localeCompare(b.label);
354
354
  }
355
355
  }
@@ -406,12 +406,12 @@ FileCoverageRenderer = FileCoverageRenderer_1 = ( __decorate([
406
406
  ( __param(1, ILabelService)),
407
407
  ( __param(2, IInstantiationService))
408
408
  ], FileCoverageRenderer));
409
- let FunctionCoverageRenderer = class FunctionCoverageRenderer {
410
- static { FunctionCoverageRenderer_1 = this; }
409
+ let DeclarationCoverageRenderer = class DeclarationCoverageRenderer {
410
+ static { DeclarationCoverageRenderer_1 = this; }
411
411
  static { this.ID = 'N'; }
412
412
  constructor(instantiationService) {
413
413
  this.instantiationService = instantiationService;
414
- this.templateId = FunctionCoverageRenderer_1.ID;
414
+ this.templateId = DeclarationCoverageRenderer_1.ID;
415
415
  }
416
416
  renderTemplate(container) {
417
417
  const templateDisposables = ( new DisposableStore());
@@ -436,7 +436,7 @@ let FunctionCoverageRenderer = class FunctionCoverageRenderer {
436
436
  templateData.templateDisposables.dispose();
437
437
  }
438
438
  doRender(element, templateData, _filterData) {
439
- const covered = element.hits > 0;
439
+ const covered = !!element.hits;
440
440
  const icon = covered ? testingWasCovered : testingStatesToIcons.get(0 );
441
441
  templateData.container.classList.toggle('not-covered', !covered);
442
442
  templateData.icon.className = `computed-state ${ThemeIcon.asClassName(icon)}`;
@@ -444,9 +444,9 @@ let FunctionCoverageRenderer = class FunctionCoverageRenderer {
444
444
  templateData.bars.setCoverageInfo(element.attributableCoverage());
445
445
  }
446
446
  };
447
- FunctionCoverageRenderer = FunctionCoverageRenderer_1 = ( __decorate([
447
+ DeclarationCoverageRenderer = DeclarationCoverageRenderer_1 = ( __decorate([
448
448
  ( __param(0, IInstantiationService))
449
- ], FunctionCoverageRenderer));
449
+ ], DeclarationCoverageRenderer));
450
450
  class BasicRenderer {
451
451
  constructor() {
452
452
  this.templateId = BasicRenderer.ID;
@@ -503,7 +503,7 @@ registerAction2(class TestCoverageChangeSortingAction extends ViewAction {
503
503
  )), value: 1 , description: ( localizeWithPath(
504
504
  'vs/workbench/contrib/testing/browser/testCoverageView',
505
505
  'testing.coverageSortByLocationDescription',
506
- 'Files are sorted alphabetically, functions are sorted by position'
506
+ 'Files are sorted alphabetically, declarations are sorted by position'
507
507
  )) },
508
508
  { label: ( localizeWithPath(
509
509
  'vs/workbench/contrib/testing/browser/testCoverageView',
@@ -512,7 +512,7 @@ registerAction2(class TestCoverageChangeSortingAction extends ViewAction {
512
512
  )), value: 0 , description: ( localizeWithPath(
513
513
  'vs/workbench/contrib/testing/browser/testCoverageView',
514
514
  'testing.coverageSortByCoverageDescription',
515
- 'Files and functions are sorted by total coverage'
515
+ 'Files and declarations are sorted by total coverage'
516
516
  )) },
517
517
  { label: ( localizeWithPath(
518
518
  'vs/workbench/contrib/testing/browser/testCoverageView',
@@ -521,7 +521,7 @@ registerAction2(class TestCoverageChangeSortingAction extends ViewAction {
521
521
  )), value: 2 , description: ( localizeWithPath(
522
522
  'vs/workbench/contrib/testing/browser/testCoverageView',
523
523
  'testing.coverageSortByNameDescription',
524
- 'Files and functions are sorted alphabetically'
524
+ 'Files and declarations are sorted alphabetically'
525
525
  )) },
526
526
  ];
527
527
  quickInput.placeholder = ( localizeWithPath(
@@ -8,7 +8,7 @@ import { Position } from 'vscode/vscode/vs/editor/common/core/position';
8
8
  import { Range } from 'vscode/vscode/vs/editor/common/core/range';
9
9
  import { EditorContextKeys } from 'vscode/vscode/vs/editor/common/editorContextKeys';
10
10
  import { MessageController } from 'vscode/vscode/vs/editor/contrib/message/browser/messageController';
11
- import { localizeWithPath, localize2WithPath } from 'vscode/vscode/vs/nls';
11
+ import { localize2WithPath, localizeWithPath } from 'vscode/vscode/vs/nls';
12
12
  import { Categories } from 'vscode/vscode/vs/platform/action/common/actionCommonCategories';
13
13
  import { Action2, MenuId } from 'vscode/vscode/vs/platform/actions/common/actions';
14
14
  import { ICommandService } from 'vscode/vscode/vs/platform/commands/common/commands';
@@ -41,21 +41,21 @@ import { IViewsService } from 'vscode/vscode/vs/workbench/services/views/common/
41
41
 
42
42
  const category = Categories.Test;
43
43
  const hasAnyTestProvider = ContextKeyGreaterExpr.create(TestingContextKeys.providerCount.key, 0);
44
- const LABEL_RUN_TESTS = { value: ( localizeWithPath(
44
+ const LABEL_RUN_TESTS = ( localize2WithPath(
45
45
  'vs/workbench/contrib/testing/browser/testExplorerActions',
46
46
  'runSelectedTests',
47
- 'Run Tests'
48
- )), original: 'Run Tests' };
49
- const LABEL_DEBUG_TESTS = { value: ( localizeWithPath(
47
+ "Run Tests"
48
+ ));
49
+ const LABEL_DEBUG_TESTS = ( localize2WithPath(
50
50
  'vs/workbench/contrib/testing/browser/testExplorerActions',
51
51
  'debugSelectedTests',
52
- 'Debug Tests'
53
- )), original: 'Debug Tests' };
54
- const LABEL_COVERAGE_TESTS = { value: ( localizeWithPath(
52
+ "Debug Tests"
53
+ ));
54
+ const LABEL_COVERAGE_TESTS = ( localize2WithPath(
55
55
  'vs/workbench/contrib/testing/browser/testExplorerActions',
56
56
  'coverageSelectedTests',
57
- 'Run Tests with Coverage'
58
- )), original: 'Run Tests withCoverage' };
57
+ "Run Tests with Coverage"
58
+ ));
59
59
  class HideTestAction extends Action2 {
60
60
  constructor() {
61
61
  super({
@@ -283,19 +283,13 @@ class ContinuousRunTestAction extends Action2 {
283
283
  }
284
284
  async run(accessor, ...elements) {
285
285
  const crService = accessor.get(ITestingContinuousRunService);
286
- const profileService = accessor.get(ITestProfileService);
287
286
  for (const element of elements) {
288
287
  const id = element.test.item.extId;
289
288
  if (crService.isSpecificallyEnabledFor(id)) {
290
289
  crService.stop(id);
291
290
  continue;
292
291
  }
293
- const profiles = profileService.getGroupDefaultProfiles(2 )
294
- .filter(p => p.supportsContinuousRun && p.controllerId === element.test.controllerId);
295
- if (!profiles.length) {
296
- continue;
297
- }
298
- crService.start(profiles, id);
292
+ crService.start(2 , id);
299
293
  }
300
294
  }
301
295
  }
@@ -336,11 +330,11 @@ class ConfigureTestProfilesAction extends Action2 {
336
330
  constructor() {
337
331
  super({
338
332
  id: "testing.configureProfile" ,
339
- title: { value: ( localizeWithPath(
333
+ title: ( localize2WithPath(
340
334
  'vs/workbench/contrib/testing/browser/testExplorerActions',
341
335
  'testing.configureProfile',
342
- 'Configure Test Profiles'
343
- )), original: 'Configure Test Profiles' },
336
+ "Configure Test Profiles"
337
+ )),
344
338
  icon: testingUpdateProfiles,
345
339
  f1: true,
346
340
  category,
@@ -463,11 +457,11 @@ class StartContinuousRunAction extends Action2 {
463
457
  constructor() {
464
458
  super({
465
459
  id: "testing.startContinuousRun" ,
466
- title: { value: ( localizeWithPath(
460
+ title: ( localize2WithPath(
467
461
  'vs/workbench/contrib/testing/browser/testExplorerActions',
468
462
  'testing.startContinuous',
469
463
  "Start Continuous Run"
470
- )), original: 'Enable Continuous Run' },
464
+ )),
471
465
  category,
472
466
  icon: testingTurnContinuousRunOn,
473
467
  menu: continuousMenus(false),
@@ -489,10 +489,10 @@ class TitleLensContentWidget {
489
489
  let height;
490
490
  if (!fontSize || fontSize < 5) {
491
491
  fontSize = (this.editor.getOption(52 ) * .9) | 0;
492
- height = this.editor.getOption(66 );
492
+ height = this.editor.getOption(67 );
493
493
  }
494
494
  else {
495
- height = (fontSize * Math.max(1.3, this.editor.getOption(66 ) / this.editor.getOption(52 ))) | 0;
495
+ height = (fontSize * Math.max(1.3, this.editor.getOption(67 ) / this.editor.getOption(52 ))) | 0;
496
496
  }
497
497
  const editorFontInfo = this.editor.getOption(50 );
498
498
  const node = this._domNode;
@@ -211,7 +211,6 @@ let FiltersDropdownMenuActionViewItem = class FiltersDropdownMenuActionViewItem
211
211
  tooltip: ''
212
212
  },
213
213
  {
214
- checked: false,
215
214
  class: undefined,
216
215
  enabled: this.testService.excluded.hasAny,
217
216
  id: 'removeExcluded',
@@ -368,7 +368,7 @@ let ResultSummaryView = class ResultSummaryView extends Disposable {
368
368
  }
369
369
  }));
370
370
  const ab = this._register(( new ActionBar(this.elements.rerun, {
371
- actionViewItemProvider: action => createActionViewItem(instantiationService, action),
371
+ actionViewItemProvider: (action, options) => createActionViewItem(instantiationService, action, options),
372
372
  })));
373
373
  ab.push(instantiationService.createInstance(MenuItemAction, { ...( new ReRunLastRun()).desc, icon: testingRerunIcon }, { ...( new DebugLastRun()).desc, icon: testingDebugIcon }, {}, undefined), { icon: true, label: false });
374
374
  this.render();
@@ -826,37 +826,45 @@ let TestResultsView = class TestResultsView extends ViewPane {
826
826
  constructor(options, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, telemetryService, resultService) {
827
827
  super(options, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, telemetryService);
828
828
  this.resultService = resultService;
829
- this.content = this._register(this.instantiationService.createInstance(TestResultsViewContent, undefined, {
830
- historyVisible: staticObservableValue(true),
831
- showRevealLocationOnMessages: true,
832
- locationForProgress: "workbench.view.testing" ,
833
- }));
829
+ this.content = ( new Lazy(
830
+ () => this._register(this.instantiationService.createInstance(TestResultsViewContent, undefined, {
831
+ historyVisible: staticObservableValue(true),
832
+ showRevealLocationOnMessages: true,
833
+ locationForProgress: "workbench.view.testing" ,
834
+ }))
835
+ ));
834
836
  }
835
837
  get subject() {
836
- return this.content.current;
838
+ return this.content.rawValue?.current;
837
839
  }
838
840
  showLatestRun(preserveFocus = false) {
839
841
  const result = this.resultService.results.find(r => r.tasks.length);
840
842
  if (!result) {
841
843
  return;
842
844
  }
843
- this.content.reveal({ preserveFocus, subject: ( new TaskSubject(result, 0)) });
844
- }
845
- showMessage(result, test, taskIndex, messageIndex) {
846
- this.content.reveal({ preserveFocus: false, subject: ( new MessageSubject(result, test, taskIndex, messageIndex)) });
845
+ this.content.rawValue?.reveal({ preserveFocus, subject: ( new TaskSubject(result, 0)) });
847
846
  }
848
847
  renderBody(container) {
849
848
  super.renderBody(container);
850
- this.content.fillBody(container);
851
- this.content.onDidRequestReveal(subject => this.content.reveal({ preserveFocus: true, subject }));
852
- const [lastResult] = this.resultService.results;
853
- if (lastResult && lastResult.tasks.length) {
854
- this.content.reveal({ preserveFocus: true, subject: ( new TaskSubject(lastResult, 0)) });
849
+ if (this.isBodyVisible()) {
850
+ this.renderContent(container);
851
+ }
852
+ else {
853
+ this._register(Event.once(Event.filter(this.onDidChangeBodyVisibility, Boolean))(() => this.renderContent(container)));
855
854
  }
856
855
  }
857
856
  layoutBody(height, width) {
858
857
  super.layoutBody(height, width);
859
- this.content.onLayoutBody(height, width);
858
+ this.content.rawValue?.onLayoutBody(height, width);
859
+ }
860
+ renderContent(container) {
861
+ const content = this.content.value;
862
+ content.fillBody(container);
863
+ content.onDidRequestReveal(subject => content.reveal({ preserveFocus: true, subject }));
864
+ const [lastResult] = this.resultService.results;
865
+ if (lastResult && lastResult.tasks.length) {
866
+ content.reveal({ preserveFocus: true, subject: ( new TaskSubject(lastResult, 0)) });
867
+ }
860
868
  }
861
869
  };
862
870
  TestResultsView = ( __decorate([