@opensumi/ide-testing 2.21.13 → 2.22.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/lib/browser/components/testing.explorer.tree.d.ts.map +1 -1
- package/lib/browser/components/testing.explorer.tree.js +7 -5
- package/lib/browser/components/testing.explorer.tree.js.map +1 -1
- package/lib/browser/components/testing.view.js +1 -1
- package/lib/browser/components/testing.view.js.map +1 -1
- package/lib/browser/icons/icons.d.ts +1 -0
- package/lib/browser/icons/icons.d.ts.map +1 -1
- package/lib/browser/icons/icons.js +15 -14
- package/lib/browser/icons/icons.js.map +1 -1
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/outputPeek/test-output-peek.js +9 -9
- package/lib/browser/outputPeek/test-output-peek.js.map +1 -1
- package/lib/browser/outputPeek/test-peek-message.service.js.map +1 -1
- package/lib/browser/outputPeek/test-peek-opener.service.js +1 -1
- package/lib/browser/outputPeek/test-peek-opener.service.js.map +1 -1
- package/lib/browser/outputPeek/test-peek-widget.js +1 -1
- package/lib/browser/outputPeek/test-peek-widget.js.map +1 -1
- package/lib/browser/outputPeek/test-tree-container.js +2 -2
- package/lib/browser/outputPeek/test-tree-container.js.map +1 -1
- package/lib/browser/test-contextkey.service.js.map +1 -1
- package/lib/browser/test-decorations.js +19 -19
- package/lib/browser/test-decorations.js.map +1 -1
- package/lib/browser/test-profile.service.js.map +1 -1
- package/lib/browser/test-tree-view.model.d.ts +1 -0
- package/lib/browser/test-tree-view.model.d.ts.map +1 -1
- package/lib/browser/test-tree-view.model.js +13 -10
- package/lib/browser/test-tree-view.model.js.map +1 -1
- package/lib/browser/test.result.service.d.ts +1 -1
- package/lib/browser/test.result.service.d.ts.map +1 -1
- package/lib/browser/test.result.service.js +5 -5
- package/lib/browser/test.result.service.js.map +1 -1
- package/lib/browser/test.service.d.ts +4 -0
- package/lib/browser/test.service.d.ts.map +1 -1
- package/lib/browser/test.service.js +31 -4
- package/lib/browser/test.service.js.map +1 -1
- package/lib/browser/testing.contribution.d.ts.map +1 -1
- package/lib/browser/testing.contribution.js +21 -10
- package/lib/browser/testing.contribution.js.map +1 -1
- package/lib/common/commands.d.ts +1 -0
- package/lib/common/commands.d.ts.map +1 -1
- package/lib/common/commands.js +6 -1
- package/lib/common/commands.js.map +1 -1
- package/lib/common/constants.js +12 -12
- package/lib/common/constants.js.map +1 -1
- package/lib/common/getComputedState.d.ts +1 -1
- package/lib/common/getComputedState.d.ts.map +1 -1
- package/lib/common/getComputedState.js +1 -1
- package/lib/common/getComputedState.js.map +1 -1
- package/lib/common/index.d.ts +5 -0
- package/lib/common/index.d.ts.map +1 -1
- package/lib/common/index.js.map +1 -1
- package/lib/common/observableValue.d.ts +14 -0
- package/lib/common/observableValue.d.ts.map +1 -0
- package/lib/common/observableValue.js +23 -0
- package/lib/common/observableValue.js.map +1 -0
- package/lib/common/test-result.d.ts +2 -2
- package/lib/common/test-result.d.ts.map +1 -1
- package/lib/common/test-result.js +19 -19
- package/lib/common/test-result.js.map +1 -1
- package/lib/common/testCollection.d.ts +9 -8
- package/lib/common/testCollection.d.ts.map +1 -1
- package/lib/common/testCollection.js +27 -27
- package/lib/common/testCollection.js.map +1 -1
- package/lib/common/testId.js +21 -21
- package/lib/common/testId.js.map +1 -1
- package/lib/common/testingStates.js +11 -11
- package/lib/common/testingStates.js.map +1 -1
- package/lib/common/testingUri.d.ts +1 -1
- package/lib/common/testingUri.d.ts.map +1 -1
- package/lib/common/testingUri.js +16 -16
- package/lib/common/testingUri.js.map +1 -1
- package/package.json +14 -13
- package/src/browser/components/testing.explorer.tree.tsx +129 -0
- package/src/browser/components/testing.module.less +26 -0
- package/src/browser/components/testing.view.tsx +35 -0
- package/src/browser/icons/icons.less +31 -0
- package/src/browser/icons/icons.ts +31 -0
- package/src/browser/index.ts +51 -0
- package/src/browser/outputPeek/test-message-container.tsx +183 -0
- package/src/browser/outputPeek/test-output-peek.ts +282 -0
- package/src/browser/outputPeek/test-peek-message.service.ts +15 -0
- package/src/browser/outputPeek/test-peek-opener.service.ts +131 -0
- package/src/browser/outputPeek/test-peek-widget.less +86 -0
- package/src/browser/outputPeek/test-peek-widget.tsx +127 -0
- package/src/browser/outputPeek/test-tree-container.tsx +171 -0
- package/src/browser/test-contextkey.service.ts +24 -0
- package/src/browser/test-decorations.ts +567 -0
- package/src/browser/test-profile.service.ts +66 -0
- package/src/browser/test-tree-view.model.ts +304 -0
- package/src/browser/test.result.service.ts +193 -0
- package/src/browser/test.service.ts +190 -0
- package/src/browser/testing.contribution.ts +471 -0
- package/src/browser/theme.less +6 -0
- package/src/common/commands.ts +78 -0
- package/src/common/constants.ts +57 -0
- package/src/common/contextKeys.ts +0 -0
- package/src/common/getComputedState.ts +136 -0
- package/src/common/index.ts +55 -0
- package/src/common/observableValue.ts +27 -0
- package/src/common/test-profile.ts +25 -0
- package/src/common/test-result.ts +328 -0
- package/src/common/testCollection.ts +680 -0
- package/src/common/testId.ts +191 -0
- package/src/common/testing-view.ts +28 -0
- package/src/common/testingPeekOpener.ts +31 -0
- package/src/common/testingStates.ts +92 -0
- package/src/common/testingUri.ts +101 -0
- package/src/common/tree-view.model.ts +41 -0
- package/src/index.ts +1 -0
package/lib/common/testId.js
CHANGED
|
@@ -9,13 +9,6 @@ exports.TestId = void 0;
|
|
|
9
9
|
* The test ID is a stringifiable client that
|
|
10
10
|
*/
|
|
11
11
|
class TestId {
|
|
12
|
-
constructor(path, viewEnd = path.length) {
|
|
13
|
-
this.path = path;
|
|
14
|
-
this.viewEnd = viewEnd;
|
|
15
|
-
if (path.length === 0 || viewEnd < 1) {
|
|
16
|
-
throw new Error('cannot create test with empty path');
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
12
|
/**
|
|
20
13
|
* Creates a test ID from an ext host test item.
|
|
21
14
|
*/
|
|
@@ -34,13 +27,13 @@ class TestId {
|
|
|
34
27
|
* Cheaply ets whether the ID refers to the root .
|
|
35
28
|
*/
|
|
36
29
|
static isRoot(idString) {
|
|
37
|
-
return !idString.includes("\0" /* Delimiter */);
|
|
30
|
+
return !idString.includes("\0" /* TestIdPathParts.Delimiter */);
|
|
38
31
|
}
|
|
39
32
|
/**
|
|
40
33
|
* Creates a test ID from a serialized TestId instance.
|
|
41
34
|
*/
|
|
42
35
|
static fromString(idString) {
|
|
43
|
-
return new TestId(idString.split("\0" /* Delimiter */));
|
|
36
|
+
return new TestId(idString.split("\0" /* TestIdPathParts.Delimiter */));
|
|
44
37
|
}
|
|
45
38
|
/**
|
|
46
39
|
* Gets the ID resulting from adding b to the base ID.
|
|
@@ -52,22 +45,29 @@ class TestId {
|
|
|
52
45
|
* Gets the string ID resulting from adding b to the base ID.
|
|
53
46
|
*/
|
|
54
47
|
static joinToString(base, b) {
|
|
55
|
-
return base.toString() + "\0" /* Delimiter */ + b;
|
|
48
|
+
return base.toString() + "\0" /* TestIdPathParts.Delimiter */ + b;
|
|
56
49
|
}
|
|
57
50
|
/**
|
|
58
51
|
* Compares the position of the two ID strings.
|
|
59
52
|
*/
|
|
60
53
|
static compare(a, b) {
|
|
61
54
|
if (a === b) {
|
|
62
|
-
return 0 /* IsSame */;
|
|
55
|
+
return 0 /* TestPosition.IsSame */;
|
|
63
56
|
}
|
|
64
|
-
if (b.startsWith(a + "\0" /* Delimiter */)) {
|
|
65
|
-
return 2 /* IsChild */;
|
|
57
|
+
if (b.startsWith(a + "\0" /* TestIdPathParts.Delimiter */)) {
|
|
58
|
+
return 2 /* TestPosition.IsChild */;
|
|
66
59
|
}
|
|
67
|
-
if (a.startsWith(b + "\0" /* Delimiter */)) {
|
|
68
|
-
return 3 /* IsParent */;
|
|
60
|
+
if (a.startsWith(b + "\0" /* TestIdPathParts.Delimiter */)) {
|
|
61
|
+
return 3 /* TestPosition.IsParent */;
|
|
62
|
+
}
|
|
63
|
+
return 1 /* TestPosition.Disconnected */;
|
|
64
|
+
}
|
|
65
|
+
constructor(path, viewEnd = path.length) {
|
|
66
|
+
this.path = path;
|
|
67
|
+
this.viewEnd = viewEnd;
|
|
68
|
+
if (path.length === 0 || viewEnd < 1) {
|
|
69
|
+
throw new Error('cannot create test with empty path');
|
|
69
70
|
}
|
|
70
|
-
return 1 /* Disconnected */;
|
|
71
71
|
}
|
|
72
72
|
/**
|
|
73
73
|
* Gets the ID of the parent test.
|
|
@@ -111,16 +111,16 @@ class TestId {
|
|
|
111
111
|
}
|
|
112
112
|
for (let i = 0; i < other.viewEnd && i < this.viewEnd; i++) {
|
|
113
113
|
if (other.path[i] !== this.path[i]) {
|
|
114
|
-
return 1 /* Disconnected */;
|
|
114
|
+
return 1 /* TestPosition.Disconnected */;
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
if (other.viewEnd > this.viewEnd) {
|
|
118
|
-
return 2 /* IsChild */;
|
|
118
|
+
return 2 /* TestPosition.IsChild */;
|
|
119
119
|
}
|
|
120
120
|
if (other.viewEnd < this.viewEnd) {
|
|
121
|
-
return 3 /* IsParent */;
|
|
121
|
+
return 3 /* TestPosition.IsParent */;
|
|
122
122
|
}
|
|
123
|
-
return 0 /* IsSame */;
|
|
123
|
+
return 0 /* TestPosition.IsSame */;
|
|
124
124
|
}
|
|
125
125
|
/**
|
|
126
126
|
* Serializes the ID.
|
|
@@ -135,7 +135,7 @@ class TestId {
|
|
|
135
135
|
if (!this.stringifed) {
|
|
136
136
|
this.stringifed = this.path[0];
|
|
137
137
|
for (let i = 1; i < this.viewEnd; i++) {
|
|
138
|
-
this.stringifed += "\0" /* Delimiter */;
|
|
138
|
+
this.stringifed += "\0" /* TestIdPathParts.Delimiter */;
|
|
139
139
|
this.stringifed += this.path[i];
|
|
140
140
|
}
|
|
141
141
|
}
|
package/lib/common/testId.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testId.js","sourceRoot":"","sources":["../../src/common/testId.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AA2BhG;;GAEG;AACH,MAAa,MAAM;
|
|
1
|
+
{"version":3,"file":"testId.js","sourceRoot":"","sources":["../../src/common/testId.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,17 +14,17 @@ const { count } = ide_core_common_1.strings;
|
|
|
14
14
|
* reflected in the parent node.
|
|
15
15
|
*/
|
|
16
16
|
exports.statePriority = {
|
|
17
|
-
[2 /* Running */]: 6,
|
|
18
|
-
[6 /* Errored */]: 5,
|
|
19
|
-
[4 /* Failed */]: 4,
|
|
20
|
-
[1 /* Queued */]: 3,
|
|
21
|
-
[3 /* Passed */]: 2,
|
|
22
|
-
[0 /* Unset */]: 1,
|
|
23
|
-
[5 /* Skipped */]: 0,
|
|
17
|
+
[2 /* TestResultState.Running */]: 6,
|
|
18
|
+
[6 /* TestResultState.Errored */]: 5,
|
|
19
|
+
[4 /* TestResultState.Failed */]: 4,
|
|
20
|
+
[1 /* TestResultState.Queued */]: 3,
|
|
21
|
+
[3 /* TestResultState.Passed */]: 2,
|
|
22
|
+
[0 /* TestResultState.Unset */]: 1,
|
|
23
|
+
[5 /* TestResultState.Skipped */]: 0,
|
|
24
24
|
};
|
|
25
|
-
const isFailedState = (s) => s === 6 /* Errored */ || s === 4 /* Failed */;
|
|
25
|
+
const isFailedState = (s) => s === 6 /* TestResultState.Errored */ || s === 4 /* TestResultState.Failed */;
|
|
26
26
|
exports.isFailedState = isFailedState;
|
|
27
|
-
const isStateWithResult = (s) => s === 6 /* Errored */ || s === 4 /* Failed */ || s === 3 /* Passed */;
|
|
27
|
+
const isStateWithResult = (s) => s === 6 /* TestResultState.Errored */ || s === 4 /* TestResultState.Failed */ || s === 3 /* TestResultState.Passed */;
|
|
28
28
|
exports.isStateWithResult = isStateWithResult;
|
|
29
29
|
exports.stateNodes = Object.entries(exports.statePriority).reduce((acc, [stateStr, priority]) => {
|
|
30
30
|
const state = Number(stateStr);
|
|
@@ -36,7 +36,7 @@ exports.cmpPriority = cmpPriority;
|
|
|
36
36
|
const maxPriority = (...states) => {
|
|
37
37
|
switch (states.length) {
|
|
38
38
|
case 0:
|
|
39
|
-
return 0 /* Unset */;
|
|
39
|
+
return 0 /* TestResultState.Unset */;
|
|
40
40
|
case 1:
|
|
41
41
|
return states[0];
|
|
42
42
|
case 2:
|
|
@@ -56,7 +56,7 @@ exports.maxPriority = maxPriority;
|
|
|
56
56
|
exports.statesInOrder = Object.keys(exports.statePriority)
|
|
57
57
|
.map((s) => Number(s))
|
|
58
58
|
.sort(exports.cmpPriority);
|
|
59
|
-
const isRunningState = (s) => s === 1 /* Queued */ || s === 2 /* Running */;
|
|
59
|
+
const isRunningState = (s) => s === 1 /* TestResultState.Queued */ || s === 2 /* TestResultState.Running */;
|
|
60
60
|
exports.isRunningState = isRunningState;
|
|
61
61
|
const firstLine = (str) => {
|
|
62
62
|
const index = str.indexOf('\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testingStates.js","sourceRoot":"","sources":["../../src/common/testingStates.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG,8DAAmE;AACnE,+DAAoD;AAIpD,MAAM,EAAE,KAAK,EAAE,GAAG,yBAAO,CAAC;AAQ1B;;;;GAIG;AACU,QAAA,aAAa,GAAuC;IAC/D,
|
|
1
|
+
{"version":3,"file":"testingStates.js","sourceRoot":"","sources":["../../src/common/testingStates.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@ interface IResultTestOutputReference extends IResultTestUri {
|
|
|
18
18
|
type: TestUriType.ResultActualOutput | TestUriType.ResultExpectedOutput;
|
|
19
19
|
messageIndex: number;
|
|
20
20
|
}
|
|
21
|
-
export
|
|
21
|
+
export type ParsedTestUri = IResultTestMessageReference | IResultTestOutputReference;
|
|
22
22
|
export declare const parseTestUri: (uri: URI) => ParsedTestUri | undefined;
|
|
23
23
|
export declare const buildTestUri: (parsed: ParsedTestUri) => URI;
|
|
24
24
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testingUri.d.ts","sourceRoot":"","sources":["../../src/common/testingUri.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAEhD,eAAO,MAAM,gBAAgB,uBAAuB,CAAC;AAErD,0BAAkB,WAAW;IAC3B,aAAa,IAAA;IACb,kBAAkB,IAAA;IAClB,oBAAoB,IAAA;CACrB;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,2BAA4B,SAAQ,cAAc;IAC1D,IAAI,EAAE,WAAW,CAAC,aAAa,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,0BAA2B,SAAQ,cAAc;IACzD,IAAI,EAAE,WAAW,CAAC,kBAAkB,GAAG,WAAW,CAAC,oBAAoB,CAAC;IACxE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,
|
|
1
|
+
{"version":3,"file":"testingUri.d.ts","sourceRoot":"","sources":["../../src/common/testingUri.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAEhD,eAAO,MAAM,gBAAgB,uBAAuB,CAAC;AAErD,0BAAkB,WAAW;IAC3B,aAAa,IAAA;IACb,kBAAkB,IAAA;IAClB,oBAAoB,IAAA;CACrB;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,2BAA4B,SAAQ,cAAc;IAC1D,IAAI,EAAE,WAAW,CAAC,aAAa,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,0BAA2B,SAAQ,cAAc;IACzD,IAAI,EAAE,WAAW,CAAC,kBAAkB,GAAG,WAAW,CAAC,oBAAoB,CAAC;IACxE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,aAAa,GAAG,2BAA2B,GAAG,0BAA0B,CAAC;AAWrF,eAAO,MAAM,YAAY,QAAS,GAAG,KAAG,aAAa,GAAG,SAkCvD,CAAC;AAEF,eAAO,MAAM,YAAY,WAAY,aAAa,KAAG,GAsBpD,CAAC"}
|
package/lib/common/testingUri.js
CHANGED
|
@@ -10,30 +10,30 @@ exports.TEST_DATA_SCHEME = 'opensumi-test-data';
|
|
|
10
10
|
const parseTestUri = (uri) => {
|
|
11
11
|
const type = uri.authority;
|
|
12
12
|
const [locationId, ...request] = uri.path.toString().slice(1).split('/');
|
|
13
|
-
if (request[0] === "message" /* Messages */) {
|
|
13
|
+
if (request[0] === "message" /* TestUriParts.Messages */) {
|
|
14
14
|
const taskIndex = Number(request[1]);
|
|
15
15
|
const index = Number(request[2]);
|
|
16
16
|
const part = request[3];
|
|
17
17
|
const testExtId = uri.query;
|
|
18
|
-
if (type === "results" /* Results */) {
|
|
18
|
+
if (type === "results" /* TestUriParts.Results */) {
|
|
19
19
|
switch (part) {
|
|
20
|
-
case "TestFailureMessage" /* Text */:
|
|
21
|
-
return { resultId: locationId, taskIndex, testExtId, messageIndex: index, type: 0 /* ResultMessage */ };
|
|
22
|
-
case "ActualOutput" /* ActualOutput */:
|
|
20
|
+
case "TestFailureMessage" /* TestUriParts.Text */:
|
|
21
|
+
return { resultId: locationId, taskIndex, testExtId, messageIndex: index, type: 0 /* TestUriType.ResultMessage */ };
|
|
22
|
+
case "ActualOutput" /* TestUriParts.ActualOutput */:
|
|
23
23
|
return {
|
|
24
24
|
resultId: locationId,
|
|
25
25
|
taskIndex,
|
|
26
26
|
testExtId,
|
|
27
27
|
messageIndex: index,
|
|
28
|
-
type: 1 /* ResultActualOutput */,
|
|
28
|
+
type: 1 /* TestUriType.ResultActualOutput */,
|
|
29
29
|
};
|
|
30
|
-
case "ExpectedOutput" /* ExpectedOutput */:
|
|
30
|
+
case "ExpectedOutput" /* TestUriParts.ExpectedOutput */:
|
|
31
31
|
return {
|
|
32
32
|
resultId: locationId,
|
|
33
33
|
taskIndex,
|
|
34
34
|
testExtId,
|
|
35
35
|
messageIndex: index,
|
|
36
|
-
type: 2 /* ResultExpectedOutput */,
|
|
36
|
+
type: 2 /* TestUriType.ResultExpectedOutput */,
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
39
|
}
|
|
@@ -44,16 +44,16 @@ exports.parseTestUri = parseTestUri;
|
|
|
44
44
|
const buildTestUri = (parsed) => {
|
|
45
45
|
const uriParts = {
|
|
46
46
|
scheme: exports.TEST_DATA_SCHEME,
|
|
47
|
-
authority: "results" /* Results */,
|
|
47
|
+
authority: "results" /* TestUriParts.Results */,
|
|
48
48
|
};
|
|
49
|
-
const msgRef = (locationId, ...remaining) => ide_core_common_1.URI.from(Object.assign(Object.assign({}, uriParts), { query: parsed.testExtId, path: ['', locationId, "message" /* Messages */, ...remaining].join('/') }));
|
|
49
|
+
const msgRef = (locationId, ...remaining) => ide_core_common_1.URI.from(Object.assign(Object.assign({}, uriParts), { query: parsed.testExtId, path: ['', locationId, "message" /* TestUriParts.Messages */, ...remaining].join('/') }));
|
|
50
50
|
switch (parsed.type) {
|
|
51
|
-
case 1 /* ResultActualOutput */:
|
|
52
|
-
return msgRef(parsed.resultId, parsed.taskIndex, parsed.messageIndex, "ActualOutput" /* ActualOutput */);
|
|
53
|
-
case 2 /* ResultExpectedOutput */:
|
|
54
|
-
return msgRef(parsed.resultId, parsed.taskIndex, parsed.messageIndex, "ExpectedOutput" /* ExpectedOutput */);
|
|
55
|
-
case 0 /* ResultMessage */:
|
|
56
|
-
return msgRef(parsed.resultId, parsed.taskIndex, parsed.messageIndex, "TestFailureMessage" /* Text */);
|
|
51
|
+
case 1 /* TestUriType.ResultActualOutput */:
|
|
52
|
+
return msgRef(parsed.resultId, parsed.taskIndex, parsed.messageIndex, "ActualOutput" /* TestUriParts.ActualOutput */);
|
|
53
|
+
case 2 /* TestUriType.ResultExpectedOutput */:
|
|
54
|
+
return msgRef(parsed.resultId, parsed.taskIndex, parsed.messageIndex, "ExpectedOutput" /* TestUriParts.ExpectedOutput */);
|
|
55
|
+
case 0 /* TestUriType.ResultMessage */:
|
|
56
|
+
return msgRef(parsed.resultId, parsed.taskIndex, parsed.messageIndex, "TestFailureMessage" /* TestUriParts.Text */);
|
|
57
57
|
default:
|
|
58
58
|
throw new Error('Invalid test uri');
|
|
59
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testingUri.js","sourceRoot":"","sources":["../../src/common/testingUri.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG,+DAAgD;AAEnC,QAAA,gBAAgB,GAAG,oBAAoB,CAAC;AAmC9C,MAAM,YAAY,GAAG,CAAC,GAAQ,EAA6B,EAAE;IAClE,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;IAC3B,MAAM,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEzE,IAAI,OAAO,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"testingUri.js","sourceRoot":"","sources":["../../src/common/testingUri.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG,+DAAgD;AAEnC,QAAA,gBAAgB,GAAG,oBAAoB,CAAC;AAmC9C,MAAM,YAAY,GAAG,CAAC,GAAQ,EAA6B,EAAE;IAClE,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;IAC3B,MAAM,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEzE,IAAI,OAAO,CAAC,CAAC,CAAC,0CAA0B,EAAE;QACxC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC;QAC5B,IAAI,IAAI,yCAAyB,EAAE;YACjC,QAAQ,IAAI,EAAE;gBACZ;oBACE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,mCAA2B,EAAE,CAAC;gBAC9G;oBACE,OAAO;wBACL,QAAQ,EAAE,UAAU;wBACpB,SAAS;wBACT,SAAS;wBACT,YAAY,EAAE,KAAK;wBACnB,IAAI,wCAAgC;qBACrC,CAAC;gBACJ;oBACE,OAAO;wBACL,QAAQ,EAAE,UAAU;wBACpB,SAAS;wBACT,SAAS;wBACT,YAAY,EAAE,KAAK;wBACnB,IAAI,0CAAkC;qBACvC,CAAC;aACL;SACF;KACF;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAlCW,QAAA,YAAY,gBAkCvB;AAEK,MAAM,YAAY,GAAG,CAAC,MAAqB,EAAO,EAAE;IACzD,MAAM,QAAQ,GAAG;QACf,MAAM,EAAE,wBAAgB;QACxB,SAAS,sCAAsB;KAChC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,UAAkB,EAAE,GAAG,SAA8B,EAAE,EAAE,CACvE,qBAAG,CAAC,IAAI,iCACH,QAAQ,KACX,KAAK,EAAE,MAAM,CAAC,SAAS,EACvB,IAAI,EAAE,CAAC,EAAE,EAAE,UAAU,yCAAyB,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IACrE,CAAC;IAEL,QAAQ,MAAM,CAAC,IAAI,EAAE;QACnB;YACE,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,YAAY,iDAA4B,CAAC;QACnG;YACE,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,YAAY,qDAA8B,CAAC;QACrG;YACE,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,YAAY,+CAAoB,CAAC;QAC3F;YACE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;KACvC;AACH,CAAC,CAAC;AAtBW,QAAA,YAAY,gBAsBvB"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opensumi/ide-testing",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.22.0",
|
|
4
4
|
"files": [
|
|
5
|
-
"lib"
|
|
5
|
+
"lib",
|
|
6
|
+
"src"
|
|
6
7
|
],
|
|
7
8
|
"main": "lib/index.js",
|
|
8
9
|
"typings": "lib/index.d.ts",
|
|
@@ -14,18 +15,18 @@
|
|
|
14
15
|
"url": "git@github.com:opensumi/core.git"
|
|
15
16
|
},
|
|
16
17
|
"dependencies": {
|
|
17
|
-
"@opensumi/ide-core-common": "2.
|
|
18
|
+
"@opensumi/ide-core-common": "2.22.0"
|
|
18
19
|
},
|
|
19
20
|
"devDependencies": {
|
|
20
|
-
"@opensumi/ide-components": "2.
|
|
21
|
-
"@opensumi/ide-core-browser": "2.
|
|
22
|
-
"@opensumi/ide-dev-tool": "
|
|
23
|
-
"@opensumi/ide-editor": "2.
|
|
24
|
-
"@opensumi/ide-file-service": "2.
|
|
25
|
-
"@opensumi/ide-main-layout": "2.
|
|
26
|
-
"@opensumi/ide-markdown": "2.
|
|
27
|
-
"@opensumi/ide-monaco": "2.
|
|
28
|
-
"@opensumi/ide-monaco-enhance": "2.
|
|
21
|
+
"@opensumi/ide-components": "2.22.0",
|
|
22
|
+
"@opensumi/ide-core-browser": "2.22.0",
|
|
23
|
+
"@opensumi/ide-dev-tool": "1.3.1",
|
|
24
|
+
"@opensumi/ide-editor": "2.22.0",
|
|
25
|
+
"@opensumi/ide-file-service": "2.22.0",
|
|
26
|
+
"@opensumi/ide-main-layout": "2.22.0",
|
|
27
|
+
"@opensumi/ide-markdown": "2.22.0",
|
|
28
|
+
"@opensumi/ide-monaco": "2.22.0",
|
|
29
|
+
"@opensumi/ide-monaco-enhance": "2.22.0"
|
|
29
30
|
},
|
|
30
|
-
"gitHead": "
|
|
31
|
+
"gitHead": "927717e1c60f9cf5f01622fd51085b318a175eeb"
|
|
31
32
|
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { observer } from 'mobx-react-lite';
|
|
2
|
+
import React, { useEffect, useState } from 'react';
|
|
3
|
+
|
|
4
|
+
import { BasicRecycleTree, IRecycleTreeHandle, RecycleTree } from '@opensumi/ide-components/lib/recycle-tree';
|
|
5
|
+
import { BasicCompositeTreeNode } from '@opensumi/ide-components/lib/recycle-tree/basic/tree-node.define';
|
|
6
|
+
import { CommandService, Event, map, useInjectable } from '@opensumi/ide-core-browser';
|
|
7
|
+
|
|
8
|
+
import { ITestService, TestServiceToken } from '../../common';
|
|
9
|
+
import { DebugTestCommand, GoToTestCommand, RuntTestCommand } from '../../common/commands';
|
|
10
|
+
import { TestItemExpandState, TestRunProfileBitset } from '../../common/testCollection';
|
|
11
|
+
import { TestingExplorerInlineMenus } from '../../common/testing-view';
|
|
12
|
+
import { ITestTreeData, ITestTreeItem, TestTreeViewModelToken } from '../../common/tree-view.model';
|
|
13
|
+
import { getIconWithColor } from '../icons/icons';
|
|
14
|
+
import { TestTreeItem, TestTreeViewModelImpl } from '../test-tree-view.model';
|
|
15
|
+
|
|
16
|
+
import styles from './testing.module.less';
|
|
17
|
+
|
|
18
|
+
export const TestingExplorerTree: React.FC<{}> = observer(() => {
|
|
19
|
+
const testViewModel = useInjectable<TestTreeViewModelImpl>(TestTreeViewModelToken);
|
|
20
|
+
const testService = useInjectable<ITestService>(TestServiceToken);
|
|
21
|
+
const commandService = useInjectable<CommandService>(CommandService);
|
|
22
|
+
|
|
23
|
+
const [treeData, setTreeData] = useState<ITestTreeData[]>([]);
|
|
24
|
+
|
|
25
|
+
const getItemIcon = React.useCallback((item: ITestTreeItem) => getIconWithColor(item.state), []);
|
|
26
|
+
|
|
27
|
+
const asTreeData = React.useCallback(
|
|
28
|
+
(item: TestTreeItem): ITestTreeData => ({
|
|
29
|
+
label: item.label,
|
|
30
|
+
icon: '',
|
|
31
|
+
get iconClassName() {
|
|
32
|
+
return getItemIcon(item);
|
|
33
|
+
},
|
|
34
|
+
expandable: item.test.expand !== TestItemExpandState.NotExpandable,
|
|
35
|
+
rawItem: item,
|
|
36
|
+
sortText: item.sortText,
|
|
37
|
+
get children() {
|
|
38
|
+
if (item.test.expand === TestItemExpandState.Expandable || item.children) {
|
|
39
|
+
const testTree = testViewModel.getTestTreeItem(item.test.item.extId);
|
|
40
|
+
return Array.from(map(testTree?.children || [], asTreeData));
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
},
|
|
44
|
+
}),
|
|
45
|
+
[],
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
const disposable = Event.debounce(
|
|
50
|
+
testViewModel.onUpdate,
|
|
51
|
+
() => {},
|
|
52
|
+
500,
|
|
53
|
+
)(() => {
|
|
54
|
+
for (const root of testViewModel.roots) {
|
|
55
|
+
if (root.depth === 0 && root.children.size > 0) {
|
|
56
|
+
let result: ITestTreeData[] = [];
|
|
57
|
+
for (const child of root.children) {
|
|
58
|
+
result.push(asTreeData(child));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
result = result.sort((a, b) => (a.sortText || a.label).localeCompare(b.sortText || b.label));
|
|
62
|
+
setTreeData(result);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
return disposable.dispose;
|
|
68
|
+
}, [testViewModel]);
|
|
69
|
+
|
|
70
|
+
useEffect(() => {
|
|
71
|
+
if (testViewModel.treeHandlerApi) {
|
|
72
|
+
const model = testViewModel.treeHandlerApi.getModel();
|
|
73
|
+
if (model.root.children?.length === 0) {
|
|
74
|
+
model.root.refresh();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}, [treeData]);
|
|
78
|
+
|
|
79
|
+
const resolveTestChildren = React.useCallback((node?: ITestTreeData) => {
|
|
80
|
+
if (!node) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
if (node.children && node.children.length > 0) {
|
|
84
|
+
return node.children;
|
|
85
|
+
}
|
|
86
|
+
return [];
|
|
87
|
+
}, []);
|
|
88
|
+
|
|
89
|
+
const inlineMenuActuator = React.useCallback((node: BasicCompositeTreeNode, action) => {
|
|
90
|
+
const { rawItem } = node.raw as ITestTreeData;
|
|
91
|
+
switch (action.command) {
|
|
92
|
+
case RuntTestCommand.id:
|
|
93
|
+
testService.runTests({
|
|
94
|
+
tests: rawItem.tests,
|
|
95
|
+
group: TestRunProfileBitset.Run,
|
|
96
|
+
});
|
|
97
|
+
break;
|
|
98
|
+
case DebugTestCommand.id:
|
|
99
|
+
testService.runTests({
|
|
100
|
+
tests: rawItem.tests,
|
|
101
|
+
group: TestRunProfileBitset.Debug,
|
|
102
|
+
});
|
|
103
|
+
break;
|
|
104
|
+
case GoToTestCommand.id:
|
|
105
|
+
commandService.executeCommand(GoToTestCommand.id, rawItem.test.item.extId);
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
}, []);
|
|
109
|
+
|
|
110
|
+
const handleTreeReady = (handle: IRecycleTreeHandle) => {
|
|
111
|
+
testViewModel.setTreeHandlerApi(handle);
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
return (
|
|
115
|
+
<div>
|
|
116
|
+
{treeData.length > 0 && (
|
|
117
|
+
<BasicRecycleTree
|
|
118
|
+
treeData={treeData}
|
|
119
|
+
onReady={handleTreeReady}
|
|
120
|
+
itemClassname={styles.item_label}
|
|
121
|
+
height={900}
|
|
122
|
+
resolveChildren={resolveTestChildren}
|
|
123
|
+
inlineMenus={TestingExplorerInlineMenus}
|
|
124
|
+
inlineMenuActuator={inlineMenuActuator}
|
|
125
|
+
/>
|
|
126
|
+
)}
|
|
127
|
+
</div>
|
|
128
|
+
);
|
|
129
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
.testing_container {
|
|
2
|
+
padding: 0 8px;
|
|
3
|
+
|
|
4
|
+
.item_label {
|
|
5
|
+
.overflow_wrap {
|
|
6
|
+
padding-left: 5px;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.test_output_peek_message_container,
|
|
12
|
+
.test_output_peek_tree {
|
|
13
|
+
height: 100%;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.test_output_peek_tree {
|
|
17
|
+
background-color: var(--peekViewResult-background);
|
|
18
|
+
color: var(--peekViewResult-lineForeground);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.preview_markdown {
|
|
22
|
+
position: relative;
|
|
23
|
+
overflow: hidden;
|
|
24
|
+
padding: 8px 12px 8px 20px;
|
|
25
|
+
height: calc(100% - 16px);
|
|
26
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
|
|
3
|
+
import { localize, useInjectable, ViewContextKeyRegistry } from '@opensumi/ide-core-browser';
|
|
4
|
+
import { InlineMenuBar } from '@opensumi/ide-core-browser/lib/components/actions';
|
|
5
|
+
import { AbstractContextMenuService, IContextMenu, MenuId } from '@opensumi/ide-core-browser/lib/menu/next';
|
|
6
|
+
import { TitleBar } from '@opensumi/ide-main-layout/lib/browser/accordion/titlebar.view';
|
|
7
|
+
|
|
8
|
+
import { Testing } from '../../common/constants';
|
|
9
|
+
|
|
10
|
+
import { TestingExplorerTree } from './testing.explorer.tree';
|
|
11
|
+
import styles from './testing.module.less';
|
|
12
|
+
|
|
13
|
+
export const TestingView = () => {
|
|
14
|
+
const menuService = useInjectable<AbstractContextMenuService>(AbstractContextMenuService);
|
|
15
|
+
const viewContextKeyRegistry = useInjectable<ViewContextKeyRegistry>(ViewContextKeyRegistry);
|
|
16
|
+
|
|
17
|
+
const [menus, setMenus] = useState<IContextMenu>();
|
|
18
|
+
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
const menu = menuService.createMenu({
|
|
21
|
+
id: MenuId.ViewTitle,
|
|
22
|
+
contextKeyService: viewContextKeyRegistry.getContextKeyService(Testing.ExplorerViewId),
|
|
23
|
+
});
|
|
24
|
+
setMenus(menu);
|
|
25
|
+
}, []);
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<div className={styles.testing_container}>
|
|
29
|
+
<TitleBar title={localize('test.title')} menubar={menus ? <InlineMenuBar menus={menus}></InlineMenuBar> : null} />
|
|
30
|
+
{/* 筛选器暂时先不搞 */}
|
|
31
|
+
{/* <Input placeholder={'Filter (e.g. text, !exclude, @tag)'} addonAfter={<Icon icon='filter' />} /> */}
|
|
32
|
+
<TestingExplorerTree />
|
|
33
|
+
</div>
|
|
34
|
+
);
|
|
35
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
.testing_icon_iconFailed {
|
|
2
|
+
color: var(--testing-iconFailed) !important;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.testing_icon_iconErrored {
|
|
6
|
+
color: var(--testing-iconErrored) !important;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.testing_icon_iconPassed {
|
|
10
|
+
color: var(--testing-iconPassed) !important;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.testing_icon_runAction {
|
|
14
|
+
color: var(--testing-runAction) !important;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.testing_icon_iconQueued {
|
|
18
|
+
color: var(--testing-iconQueued) !important;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.testing_icon_iconUnset {
|
|
22
|
+
color: var(--testing-iconUnset) !important;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.monaco-editor .testing-run-glyph {
|
|
26
|
+
cursor: pointer;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.monaco-editor .testing-inline-message-content {
|
|
30
|
+
cursor: pointer;
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { getExternalIcon } from '@opensumi/ide-core-browser';
|
|
2
|
+
|
|
3
|
+
import { TestResultState } from '../../common/testCollection';
|
|
4
|
+
|
|
5
|
+
export const defaultIconColor = 'testing_icon_iconPassed';
|
|
6
|
+
|
|
7
|
+
export const testStatesToIconColors: { [K in TestResultState]?: string } = {
|
|
8
|
+
[TestResultState.Errored]: 'testing_icon_iconFailed',
|
|
9
|
+
[TestResultState.Failed]: 'testing_icon_iconErrored',
|
|
10
|
+
[TestResultState.Passed]: defaultIconColor,
|
|
11
|
+
[TestResultState.Queued]: 'testing_icon_iconQueued',
|
|
12
|
+
[TestResultState.Unset]: 'testing_icon_iconUnset',
|
|
13
|
+
[TestResultState.Skipped]: 'testing_icon_iconUnset',
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export const testingStatesToIcons = new Map<TestResultState, string>([
|
|
17
|
+
[TestResultState.Errored, getExternalIcon('issues')],
|
|
18
|
+
[TestResultState.Failed, getExternalIcon('error')],
|
|
19
|
+
[TestResultState.Passed, getExternalIcon('pass')],
|
|
20
|
+
[TestResultState.Queued, getExternalIcon('history')],
|
|
21
|
+
[TestResultState.Running, getExternalIcon('loading') + ' kt-icon-loading'],
|
|
22
|
+
[TestResultState.Skipped, getExternalIcon('debug-step-over')],
|
|
23
|
+
[TestResultState.Unset, getExternalIcon('circle-outline')],
|
|
24
|
+
]);
|
|
25
|
+
|
|
26
|
+
export const testingRunIcon = getExternalIcon('run');
|
|
27
|
+
export const testingRunAllIcon = getExternalIcon('run-all');
|
|
28
|
+
export const testingRefreshTests = getExternalIcon('refresh');
|
|
29
|
+
|
|
30
|
+
export const getIconWithColor = (state: TestResultState) =>
|
|
31
|
+
`${testingStatesToIcons.get(state)} ${testStatesToIconColors[state]}` || '';
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Provider, Injectable } from '@opensumi/di';
|
|
2
|
+
import { BrowserModule } from '@opensumi/ide-core-browser';
|
|
3
|
+
|
|
4
|
+
import { TestPeekMessageToken, TestServiceToken } from '../common';
|
|
5
|
+
import { TestProfileServiceToken } from '../common/test-profile';
|
|
6
|
+
import { TestResultServiceToken } from '../common/test-result';
|
|
7
|
+
import { TestingPeekOpenerServiceToken } from '../common/testingPeekOpener';
|
|
8
|
+
import { TestTreeViewModelToken } from '../common/tree-view.model';
|
|
9
|
+
|
|
10
|
+
import { TestingPeekMessageServiceImpl } from './outputPeek/test-peek-message.service';
|
|
11
|
+
import { TestingPeekOpenerServiceImpl } from './outputPeek/test-peek-opener.service';
|
|
12
|
+
import { TestProfileServiceImpl } from './test-profile.service';
|
|
13
|
+
import { TestTreeViewModelImpl } from './test-tree-view.model';
|
|
14
|
+
import { TestResultServiceImpl } from './test.result.service';
|
|
15
|
+
import { TestServiceImpl } from './test.service';
|
|
16
|
+
import { TestingContribution } from './testing.contribution';
|
|
17
|
+
|
|
18
|
+
import './icons/icons.less';
|
|
19
|
+
import './outputPeek/test-peek-widget.less';
|
|
20
|
+
import './theme.less';
|
|
21
|
+
|
|
22
|
+
@Injectable()
|
|
23
|
+
export class TestingModule extends BrowserModule {
|
|
24
|
+
providers: Provider[] = [
|
|
25
|
+
TestingContribution,
|
|
26
|
+
{
|
|
27
|
+
token: TestServiceToken,
|
|
28
|
+
useClass: TestServiceImpl,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
token: TestTreeViewModelToken,
|
|
32
|
+
useClass: TestTreeViewModelImpl,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
token: TestProfileServiceToken,
|
|
36
|
+
useClass: TestProfileServiceImpl,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
token: TestResultServiceToken,
|
|
40
|
+
useClass: TestResultServiceImpl,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
token: TestingPeekOpenerServiceToken,
|
|
44
|
+
useClass: TestingPeekOpenerServiceImpl,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
token: TestPeekMessageToken,
|
|
48
|
+
useClass: TestingPeekMessageServiceImpl,
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
}
|