@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.
- package/package.json +8 -8
- package/vscode/src/vs/workbench/contrib/testing/browser/codeCoverageDecorations.js +567 -0
- package/vscode/src/vs/workbench/contrib/testing/browser/icons.js +22 -2
- package/vscode/src/vs/workbench/contrib/testing/browser/media/testing.css.js +1 -1
- package/vscode/src/vs/workbench/contrib/testing/browser/testCoverageBars.js +43 -22
- package/vscode/src/vs/workbench/contrib/testing/browser/testCoverageView.js +380 -50
- package/vscode/src/vs/workbench/contrib/testing/browser/testExplorerActions.js +333 -117
- package/vscode/src/vs/workbench/contrib/testing/browser/testing.contribution.js +10 -7
- package/vscode/src/vs/workbench/contrib/testing/browser/testingDecorations.js +148 -57
- package/vscode/src/vs/workbench/contrib/testing/browser/testingExplorerView.js +4 -4
- package/vscode/src/vs/workbench/contrib/testing/browser/testingOutputPeek.js +82 -48
- package/vscode/src/vs/workbench/contrib/testing/browser/testingProgressUiService.js +1 -1
- package/vscode/src/vs/workbench/contrib/testing/browser/theme.js +131 -2
- package/vscode/src/vs/workbench/contrib/testing/common/configuration.js +22 -1
- package/vscode/src/vs/workbench/contrib/testing/common/mainThreadTestCollection.js +3 -3
- package/vscode/src/vs/workbench/contrib/testing/common/testServiceImpl.js +12 -9
|
@@ -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,
|
|
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/
|
|
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 (
|
|
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
|
|
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
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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.
|
|
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 =
|
|
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);
|