@codingame/monaco-vscode-testing-service-override 2.0.3 → 2.1.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.
@@ -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-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;line-height:17px;margin:3px 12px 3px 3px;outline:1px solid var(--vscode-inputValidation-errorBorder);padding:2px 4px}.test-explorer .monaco-list-row .error p{margin:0}.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\n\t.test-explorer\n\t.monaco-action-bar\n\t.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}.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-list-item{display:flex}.test-coverage-bars{align-items:center;display:flex;font-size:11px;gap:4px;margin-right:.8em}.test-coverage-bars .bar{border:1px solid;border-radius:2px;height:8px;overflow:hidden;position:relative;width:16px}.test-coverage-bars .bar:before{background:currentColor;content:\"\";height:100%;opacity:.7;position:absolute;width:var(--test-bar-width)}.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}";
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}";
4
4
  n(css,{});
5
5
 
6
6
  export { css, css as default };
@@ -4,22 +4,18 @@ import { assertNever } from 'vscode/vscode/vs/base/common/assert';
4
4
  import { MarkdownString } from 'vscode/vscode/vs/base/common/htmlContent';
5
5
  import { Lazy } from 'vscode/vscode/vs/base/common/lazy';
6
6
  import { Disposable, DisposableStore, toDisposable } from 'vscode/vscode/vs/base/common/lifecycle';
7
+ import { clamp } from 'vscode/vscode/vs/base/common/numbers';
7
8
  import { isDefined } from 'vscode/vscode/vs/base/common/types';
8
9
  import { localizeWithPath } from 'vscode/vscode/vs/nls';
9
10
  import { IConfigurationService } from 'vscode/vscode/vs/platform/configuration/common/configuration';
10
- import { asCssVariableName, chartsGreen, chartsYellow, chartsRed } from 'vscode/vscode/vs/platform/theme/common/colorRegistry';
11
- import { getTestingConfiguration } from '../common/configuration.js';
11
+ import { asCssVariableName, chartsRed, chartsYellow, chartsGreen } from 'vscode/vscode/vs/platform/theme/common/colorRegistry';
12
+ import { getTestingConfiguration, observeTestingConfiguration } from '../common/configuration.js';
13
+ import { getTotalCoveragePercent } from 'vscode/vscode/vs/workbench/contrib/testing/common/testCoverage';
12
14
  import { ITestCoverageService } from 'vscode/vscode/vs/workbench/contrib/testing/common/testCoverageService';
13
- import { IHoverService } from 'vscode/vscode/vs/workbench/services/hover/browser/hover';
15
+ import { IHoverService } from 'vscode/vscode/vs/platform/hover/browser/hover';
14
16
  import { observableValue } from 'vscode/vscode/vs/base/common/observableInternal/base';
15
- import { observableFromEvent } from 'vscode/vscode/vs/base/common/observableInternal/utils';
16
17
  import { autorun } from 'vscode/vscode/vs/base/common/observableInternal/autorun';
17
18
 
18
- const colorThresholds = [
19
- { color: asCssVariableName(chartsGreen), threshold: 0.9 },
20
- { color: asCssVariableName(chartsYellow), threshold: 0.6 },
21
- { color: asCssVariableName(chartsRed), threshold: -Infinity },
22
- ];
23
19
  let ManagedTestCoverageBars = class ManagedTestCoverageBars extends Disposable {
24
20
  get visible() {
25
21
  return !!this._coverage;
@@ -90,7 +86,10 @@ let ManagedTestCoverageBars = class ManagedTestCoverageBars extends Disposable {
90
86
  ds.add(toDisposable(() => this.options.container.removeChild(root)));
91
87
  this.options.container.appendChild(root);
92
88
  ds.add(this.configurationService.onDidChangeConfiguration(c => {
93
- if (c.affectsConfiguration("testing.displayedCoveragePercent" ) && this._coverage) {
89
+ if (!this._coverage) {
90
+ return;
91
+ }
92
+ if (c.affectsConfiguration("testing.displayedCoveragePercent" ) || c.affectsConfiguration("testing.coverageBarThresholds" )) {
94
93
  this.doRender(this._coverage);
95
94
  }
96
95
  }));
@@ -101,15 +100,16 @@ let ManagedTestCoverageBars = class ManagedTestCoverageBars extends Disposable {
101
100
  doRender(coverage) {
102
101
  const el = this.el.value;
103
102
  const precision = this.options.compact ? 0 : 2;
103
+ const thresholds = getTestingConfiguration(this.configurationService, "testing.coverageBarThresholds" );
104
104
  const overallStat = calculateDisplayedStat(coverage, getTestingConfiguration(this.configurationService, "testing.displayedCoveragePercent" ));
105
105
  el.overall.textContent = displayPercent(overallStat, precision);
106
106
  if ('tpcBar' in el) {
107
- renderBar(el.tpcBar, overallStat);
107
+ renderBar(el.tpcBar, overallStat, false, thresholds);
108
108
  }
109
109
  else {
110
- renderBar(el.statement, percent(coverage.statement));
111
- renderBar(el.function, coverage.function && percent(coverage.function));
112
- renderBar(el.branch, coverage.branch && percent(coverage.branch));
110
+ 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);
112
+ renderBar(el.branch, coverage.branch && percent(coverage.branch), coverage.branch?.total === 0, thresholds);
113
113
  }
114
114
  }
115
115
  };
@@ -117,18 +117,39 @@ ManagedTestCoverageBars = ( __decorate([
117
117
  ( __param(1, IHoverService)),
118
118
  ( __param(2, IConfigurationService))
119
119
  ], ManagedTestCoverageBars));
120
- const percent = (cc) => cc.total === 0 ? 1 : cc.covered / cc.total;
120
+ const percent = (cc) => clamp(cc.total === 0 ? 1 : cc.covered / cc.total, 0, 1);
121
121
  const epsilon = 10e-8;
122
- const renderBar = (bar, pct) => {
122
+ const barWidth = 16;
123
+ const renderBar = (bar, pct, isZero, thresholds) => {
123
124
  if (pct === undefined) {
124
125
  bar.style.display = 'none';
126
+ return;
125
127
  }
126
- else {
127
- bar.style.display = 'block';
128
- bar.style.setProperty('--test-bar-width', `${pct * 100}%`);
129
- bar.style.color = `var(${colorThresholds.find(t => pct >= t.threshold).color})`;
128
+ bar.style.display = 'block';
129
+ bar.style.width = `${barWidth}px`;
130
+ bar.style.setProperty('--test-bar-width', `${Math.floor(pct * 16)}px`);
131
+ if (isZero) {
132
+ bar.style.color = 'currentColor';
133
+ bar.style.opacity = '0.5';
134
+ return;
130
135
  }
136
+ let best = colorThresholds[0].color;
137
+ let distance = pct;
138
+ for (const { key, color } of colorThresholds) {
139
+ const t = thresholds[key] / 100;
140
+ if (t && pct >= t && pct - t < distance) {
141
+ best = color;
142
+ distance = pct - t;
143
+ }
144
+ }
145
+ bar.style.color = best;
146
+ bar.style.opacity = '1';
131
147
  };
148
+ const colorThresholds = [
149
+ { color: `var(${asCssVariableName(chartsRed)})`, key: 'red' },
150
+ { color: `var(${asCssVariableName(chartsYellow)})`, key: 'yellow' },
151
+ { color: `var(${asCssVariableName(chartsGreen)})`, key: 'green' },
152
+ ];
132
153
  const calculateDisplayedStat = (coverage, method) => {
133
154
  switch (method) {
134
155
  case "statement" :
@@ -144,7 +165,7 @@ const calculateDisplayedStat = (coverage, method) => {
144
165
  return value;
145
166
  }
146
167
  case "totalCoverage" :
147
- return coverage.tpc;
168
+ return getTotalCoveragePercent(coverage.statement, coverage.branch, coverage.function);
148
169
  default:
149
170
  assertNever();
150
171
  }
@@ -189,7 +210,7 @@ let ExplorerTestCoverageBars = class ExplorerTestCoverageBars extends ManagedTes
189
210
  constructor(options, hoverService, configurationService, testCoverageService) {
190
211
  super(options, hoverService, configurationService);
191
212
  this.resource = observableValue(this, undefined);
192
- const isEnabled = observableFromEvent(configurationService.onDidChangeConfiguration, () => getTestingConfiguration(configurationService, "testing.showCoverageInExplorer" ));
213
+ const isEnabled = observeTestingConfiguration(configurationService, "testing.showCoverageInExplorer" );
193
214
  this._register(autorun(async (reader) => {
194
215
  let info;
195
216
  const coverage = testCoverageService.selected.read(reader);