@mcp-abap-adt/adt-clients 37.0.0 → 37.2.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/README.md +56 -4
- package/dist/core/class/index.d.ts +1 -1
- package/dist/core/class/index.d.ts.map +1 -1
- package/dist/core/class/index.js +2 -1
- package/dist/core/class/run.d.ts +11 -0
- package/dist/core/class/run.d.ts.map +1 -1
- package/dist/core/class/run.js +18 -0
- package/dist/core/shared/abapUnit.d.ts +46 -0
- package/dist/core/shared/abapUnit.d.ts.map +1 -1
- package/dist/core/shared/abapUnit.js +98 -0
- package/dist/executors/abapUnitRunner.d.ts +9 -0
- package/dist/executors/abapUnitRunner.d.ts.map +1 -1
- package/dist/executors/abapUnitRunner.js +14 -0
- package/dist/executors/class/ClassTestRunner.d.ts +27 -1
- package/dist/executors/class/ClassTestRunner.d.ts.map +1 -1
- package/dist/executors/class/ClassTestRunner.js +31 -0
- package/dist/executors/class/ClassTestRunnerLegacy.d.ts +6 -0
- package/dist/executors/class/ClassTestRunnerLegacy.d.ts.map +1 -1
- package/dist/executors/class/ClassTestRunnerLegacy.js +12 -5
- package/dist/executors/functionGroup/FunctionGroupTestRunner.d.ts +25 -1
- package/dist/executors/functionGroup/FunctionGroupTestRunner.d.ts.map +1 -1
- package/dist/executors/functionGroup/FunctionGroupTestRunner.js +30 -1
- package/dist/executors/functionModule/FunctionModuleTestRunner.d.ts +47 -2
- package/dist/executors/functionModule/FunctionModuleTestRunner.d.ts.map +1 -1
- package/dist/executors/functionModule/FunctionModuleTestRunner.js +48 -1
- package/dist/executors/functionModule/index.d.ts +1 -1
- package/dist/executors/functionModule/index.d.ts.map +1 -1
- package/dist/executors/index.d.ts +1 -1
- package/dist/executors/index.d.ts.map +1 -1
- package/dist/executors/program/ProgramTestRunner.d.ts +30 -3
- package/dist/executors/program/ProgramTestRunner.d.ts.map +1 -1
- package/dist/executors/program/ProgramTestRunner.js +33 -3
- package/dist/executors/program/ProgramTestRunnerLegacy.d.ts +7 -4
- package/dist/executors/program/ProgramTestRunnerLegacy.d.ts.map +1 -1
- package/dist/executors/program/ProgramTestRunnerLegacy.js +9 -4
- package/dist/index.executors.d.ts +1 -1
- package/dist/index.executors.d.ts.map +1 -1
- package/docs/usage/OBJECT_LIFECYCLE.md +2 -2
- package/package.json +25 -18
- package/dist/core/class/runLegacy.d.ts +0 -42
- package/dist/core/class/runLegacy.d.ts.map +0 -1
- package/dist/core/class/runLegacy.js +0 -74
|
@@ -10,9 +10,15 @@
|
|
|
10
10
|
* `osl:object type="FUGR"` ran all seven test methods of a group whose test
|
|
11
11
|
* include covers two test classes. Running one module's tests only is
|
|
12
12
|
* `FunctionModuleTestRunner`.
|
|
13
|
+
*
|
|
14
|
+
* Measured on premise (SAP_BASIS 816, 2026-10-23): `/abapunit/testruns` given
|
|
15
|
+
* the group's URI runs the same tests with the same alerts as `/runs` — with
|
|
16
|
+
* the Eclipse-style `<options>` only; without it, an empty result. `runSync`
|
|
17
|
+
* always sends `<options>`.
|
|
13
18
|
*/
|
|
14
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
20
|
exports.FunctionGroupTestRunnerLegacy = exports.FunctionGroupTestRunner = exports.functionGroupTestRunnerDocuments = void 0;
|
|
21
|
+
const objects_1 = require("../../endpoints/objects");
|
|
16
22
|
const abapUnitRunner_1 = require("../abapUnitRunner");
|
|
17
23
|
exports.functionGroupTestRunnerDocuments = abapUnitRunner_1.abapUnitRunnerDocuments;
|
|
18
24
|
class FunctionGroupTestRunner extends abapUnitRunner_1.AbapUnitRunner {
|
|
@@ -25,16 +31,39 @@ class FunctionGroupTestRunner extends abapUnitRunner_1.AbapUnitRunner {
|
|
|
25
31
|
async run(functionGroupName, options) {
|
|
26
32
|
return this.startByObject(functionGroupName, 'FUGR', options);
|
|
27
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Run every test class of the group and answer the finished result. One
|
|
36
|
+
* POST, to `/sap/bc/adt/abapunit/testruns` — the synchronous runner, beside
|
|
37
|
+
* the asynchronous `run` + `getStatus` + `getResult`, which stays the
|
|
38
|
+
* default.
|
|
39
|
+
*
|
|
40
|
+
* An explicit choice of the caller's: nothing here asks the system which
|
|
41
|
+
* runner it has. The group is named by its URI and the run configuration
|
|
42
|
+
* always carries `<options>` (scope, risk levels and durations, with `run`'s
|
|
43
|
+
* defaults) — without it the endpoint answered an empty result for a group
|
|
44
|
+
* with tests. `title` and `context` are not sent.
|
|
45
|
+
*
|
|
46
|
+
* The answer is the `aunit:runResult` document, read by this runner's
|
|
47
|
+
* `result` strategy; whether a failing test is a failure is
|
|
48
|
+
* `options.analyse`'s.
|
|
49
|
+
*/
|
|
50
|
+
async runSync(functionGroupName, options) {
|
|
51
|
+
return this.startSync([objects_1.FUNCTION_GROUP.uri(functionGroupName)], options);
|
|
52
|
+
}
|
|
28
53
|
}
|
|
29
54
|
exports.FunctionGroupTestRunner = FunctionGroupTestRunner;
|
|
30
55
|
/**
|
|
31
56
|
* Below 7.50: refused without a request, as a report's run is — the legacy
|
|
32
|
-
* endpoint has not been measured to find a group's tests
|
|
57
|
+
* endpoint has not been measured to find a group's tests, with `<options>` or
|
|
58
|
+
* without. `runSync` is refused the same way.
|
|
33
59
|
*/
|
|
34
60
|
class FunctionGroupTestRunnerLegacy extends FunctionGroupTestRunner {
|
|
35
61
|
async run() {
|
|
36
62
|
return (0, abapUnitRunner_1.refusedBelow750)("a function group's");
|
|
37
63
|
}
|
|
64
|
+
async runSync() {
|
|
65
|
+
return (0, abapUnitRunner_1.refusedBelow750)("a function group's");
|
|
66
|
+
}
|
|
38
67
|
async getStatus() {
|
|
39
68
|
return (0, abapUnitRunner_1.refusedBelow750)("a function group's");
|
|
40
69
|
}
|
|
@@ -10,11 +10,24 @@
|
|
|
10
10
|
* that exercise it, and answered an empty result for another module of the
|
|
11
11
|
* same group that none of them exercises. The whole group's tests are
|
|
12
12
|
* `FunctionGroupTestRunner`.
|
|
13
|
+
*
|
|
14
|
+
* Measured on premise again (SAP_BASIS 816, 2026-10-23), with a group whose
|
|
15
|
+
* test include holds one test class that calls the module and one that calls
|
|
16
|
+
* no module: `run` (`FUNC`) ran every test of the group — both classes — and
|
|
17
|
+
* so did the run of a second module that no test calls. That does not
|
|
18
|
+
* reproduce the 2026-09-30 filter; what made the difference is not known.
|
|
19
|
+
* Which tests a module's run covers is ADT's to decide, and nothing here
|
|
20
|
+
* filters them.
|
|
13
21
|
*/
|
|
14
|
-
import type { IAdtAnalyseOptions, IAdtError, IAdtResponse, IAdtRunnable, IClassUnitTestRunOptions } from '@mcp-abap-adt/interfaces-adt';
|
|
22
|
+
import type { IAdtAnalyseOptions, IAdtError, IAdtResponse, IAdtRunnable, IClassUnitTestRunOptions, IFunctionModuleConfig } from '@mcp-abap-adt/interfaces-adt';
|
|
15
23
|
import type { IAbapConnection } from '@mcp-abap-adt/interfaces-adt-connection';
|
|
16
24
|
import type { ILogger } from '@mcp-abap-adt/interfaces-utils';
|
|
17
25
|
import { AbapUnitRunner, type IAbapUnitRunnerResults } from '../abapUnitRunner';
|
|
26
|
+
/**
|
|
27
|
+
* What `runSync` is given: the module and its group — the module's URI, which
|
|
28
|
+
* `/abapunit/testruns` addresses, lies under its group's.
|
|
29
|
+
*/
|
|
30
|
+
export type IFunctionModuleTestRunSyncTarget = Pick<IFunctionModuleConfig, 'functionGroupName' | 'functionModuleName'>;
|
|
18
31
|
export type IFunctionModuleTestRunnerResults = IAbapUnitRunnerResults;
|
|
19
32
|
export declare const functionModuleTestRunnerDocuments: {
|
|
20
33
|
run: import("@mcp-abap-adt/interfaces-adt").IResultStrategy<string>;
|
|
@@ -25,13 +38,45 @@ export declare class FunctionModuleTestRunner<R extends IFunctionModuleTestRunne
|
|
|
25
38
|
constructor(connection: IAbapConnection, logger?: ILogger, results?: R);
|
|
26
39
|
/** Run the test classes that exercise the module. One POST. */
|
|
27
40
|
run<E extends IAdtError = IAdtError>(functionModuleName: string, options?: IClassUnitTestRunOptions & IAdtAnalyseOptions<E>): Promise<IAdtResponse<ReturnType<R['run']>, E>>;
|
|
41
|
+
/**
|
|
42
|
+
* Run the module's tests and answer the finished result. One POST, to
|
|
43
|
+
* `/sap/bc/adt/abapunit/testruns` — the synchronous runner, beside the
|
|
44
|
+
* asynchronous `run` + `getStatus` + `getResult`, which stays the default.
|
|
45
|
+
*
|
|
46
|
+
* An explicit choice of the caller's: nothing here asks the system which
|
|
47
|
+
* runner it has. The module is named by its URI, which lies under its
|
|
48
|
+
* group's, so the target names both. The run configuration always carries
|
|
49
|
+
* `<options>` (scope, risk levels and durations, with `run`'s defaults) —
|
|
50
|
+
* without it the endpoint answered an empty result. `title` and `context`
|
|
51
|
+
* are not sent.
|
|
52
|
+
*
|
|
53
|
+
* **It does not keep to the module's tests.** Measured on premise
|
|
54
|
+
* (SAP_BASIS 816, 2026-10-23): the module's URI ran every test of its group —
|
|
55
|
+
* the result names the group (`adtcore:type="FUGR/F"`) — including a test
|
|
56
|
+
* class that calls no module, and the run of a module that no test calls
|
|
57
|
+
* answered the same. `run` answered the same there too. Nothing here filters
|
|
58
|
+
* the result; a caller who wants one module's tests reads them out of it.
|
|
59
|
+
*
|
|
60
|
+
* With an ABAP Doc test relation (`"! @testing FUNC:<module>`) on a test
|
|
61
|
+
* class of the group, the same request with the default scope answered the
|
|
62
|
+
* group's tests as a preview — `isForeign="true"`, nothing executed, no
|
|
63
|
+
* alerts — and with `scope: { foreignTests: true }` ran them all (measured
|
|
64
|
+
* once, 2026-10-23, same system).
|
|
65
|
+
*
|
|
66
|
+
* The answer is the `aunit:runResult` document, read by this runner's
|
|
67
|
+
* `result` strategy; whether a failing test is a failure is
|
|
68
|
+
* `options.analyse`'s.
|
|
69
|
+
*/
|
|
70
|
+
runSync<E extends IAdtError = IAdtError>(target: IFunctionModuleTestRunSyncTarget, options?: IClassUnitTestRunOptions & IAdtAnalyseOptions<E>): Promise<IAdtResponse<ReturnType<R['result']>, E>>;
|
|
28
71
|
}
|
|
29
72
|
/**
|
|
30
73
|
* Below 7.50: refused without a request, as a report's run is — the legacy
|
|
31
|
-
* endpoint has not been measured to find a module's tests
|
|
74
|
+
* endpoint has not been measured to find a module's tests, with `<options>` or
|
|
75
|
+
* without. `runSync` is refused the same way.
|
|
32
76
|
*/
|
|
33
77
|
export declare class FunctionModuleTestRunnerLegacy<R extends IFunctionModuleTestRunnerResults = typeof functionModuleTestRunnerDocuments> extends FunctionModuleTestRunner<R> {
|
|
34
78
|
run<E extends IAdtError = IAdtError>(): Promise<IAdtResponse<ReturnType<R['run']>, E>>;
|
|
79
|
+
runSync<E extends IAdtError = IAdtError>(): Promise<IAdtResponse<ReturnType<R['result']>, E>>;
|
|
35
80
|
getStatus<E extends IAdtError = IAdtError>(): Promise<IAdtResponse<ReturnType<R['status']>, E>>;
|
|
36
81
|
getResult<E extends IAdtError = IAdtError>(): Promise<IAdtResponse<ReturnType<R['result']>, E>>;
|
|
37
82
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FunctionModuleTestRunner.d.ts","sourceRoot":"","sources":["../../../src/executors/functionModule/FunctionModuleTestRunner.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"FunctionModuleTestRunner.d.ts","sourceRoot":"","sources":["../../../src/executors/functionModule/FunctionModuleTestRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,wBAAwB,EACxB,qBAAqB,EACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EACL,cAAc,EAEd,KAAK,sBAAsB,EAE5B,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,MAAM,MAAM,gCAAgC,GAAG,IAAI,CACjD,qBAAqB,EACrB,mBAAmB,GAAG,oBAAoB,CAC3C,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG,sBAAsB,CAAC;AACtE,eAAO,MAAM,iCAAiC;;;;CAA0B,CAAC;AAEzE,qBAAa,wBAAwB,CACjC,CAAC,SACC,gCAAgC,GAAG,OAAO,iCAAiC,CAE/E,SAAQ,cAAc,CAAC,CAAC,CACxB,YACE,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC;gBAGpE,UAAU,EAAE,eAAe,EAC3B,MAAM,CAAC,EAAE,OAAO,EAEhB,OAAO,GAAE,CAAqD;IAKhE,+DAA+D;IACzD,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACvC,kBAAkB,EAAE,MAAM,EAC1B,OAAO,CAAC,EAAE,wBAAwB,GAAG,kBAAkB,CAAC,CAAC,CAAC,GACzD,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAIjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACG,OAAO,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAC3C,MAAM,EAAE,gCAAgC,EACxC,OAAO,CAAC,EAAE,wBAAwB,GAAG,kBAAkB,CAAC,CAAC,CAAC,GACzD,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAWrD;AAED;;;;GAIG;AACH,qBAAa,8BAA8B,CACzC,CAAC,SACC,gCAAgC,GAAG,OAAO,iCAAiC,CAC7E,SAAQ,wBAAwB,CAAC,CAAC,CAAC;IACpB,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAC5D,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACtC;IAIc,OAAO,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAChE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CACzC;IAIc,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAClE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CACzC;IAIc,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAClE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CACzC;CAGF"}
|
|
@@ -11,9 +11,18 @@
|
|
|
11
11
|
* that exercise it, and answered an empty result for another module of the
|
|
12
12
|
* same group that none of them exercises. The whole group's tests are
|
|
13
13
|
* `FunctionGroupTestRunner`.
|
|
14
|
+
*
|
|
15
|
+
* Measured on premise again (SAP_BASIS 816, 2026-10-23), with a group whose
|
|
16
|
+
* test include holds one test class that calls the module and one that calls
|
|
17
|
+
* no module: `run` (`FUNC`) ran every test of the group — both classes — and
|
|
18
|
+
* so did the run of a second module that no test calls. That does not
|
|
19
|
+
* reproduce the 2026-09-30 filter; what made the difference is not known.
|
|
20
|
+
* Which tests a module's run covers is ADT's to decide, and nothing here
|
|
21
|
+
* filters them.
|
|
14
22
|
*/
|
|
15
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
24
|
exports.FunctionModuleTestRunnerLegacy = exports.FunctionModuleTestRunner = exports.functionModuleTestRunnerDocuments = void 0;
|
|
25
|
+
const objects_1 = require("../../endpoints/objects");
|
|
17
26
|
const abapUnitRunner_1 = require("../abapUnitRunner");
|
|
18
27
|
exports.functionModuleTestRunnerDocuments = abapUnitRunner_1.abapUnitRunnerDocuments;
|
|
19
28
|
class FunctionModuleTestRunner extends abapUnitRunner_1.AbapUnitRunner {
|
|
@@ -26,16 +35,54 @@ class FunctionModuleTestRunner extends abapUnitRunner_1.AbapUnitRunner {
|
|
|
26
35
|
async run(functionModuleName, options) {
|
|
27
36
|
return this.startByObject(functionModuleName, 'FUNC', options);
|
|
28
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Run the module's tests and answer the finished result. One POST, to
|
|
40
|
+
* `/sap/bc/adt/abapunit/testruns` — the synchronous runner, beside the
|
|
41
|
+
* asynchronous `run` + `getStatus` + `getResult`, which stays the default.
|
|
42
|
+
*
|
|
43
|
+
* An explicit choice of the caller's: nothing here asks the system which
|
|
44
|
+
* runner it has. The module is named by its URI, which lies under its
|
|
45
|
+
* group's, so the target names both. The run configuration always carries
|
|
46
|
+
* `<options>` (scope, risk levels and durations, with `run`'s defaults) —
|
|
47
|
+
* without it the endpoint answered an empty result. `title` and `context`
|
|
48
|
+
* are not sent.
|
|
49
|
+
*
|
|
50
|
+
* **It does not keep to the module's tests.** Measured on premise
|
|
51
|
+
* (SAP_BASIS 816, 2026-10-23): the module's URI ran every test of its group —
|
|
52
|
+
* the result names the group (`adtcore:type="FUGR/F"`) — including a test
|
|
53
|
+
* class that calls no module, and the run of a module that no test calls
|
|
54
|
+
* answered the same. `run` answered the same there too. Nothing here filters
|
|
55
|
+
* the result; a caller who wants one module's tests reads them out of it.
|
|
56
|
+
*
|
|
57
|
+
* With an ABAP Doc test relation (`"! @testing FUNC:<module>`) on a test
|
|
58
|
+
* class of the group, the same request with the default scope answered the
|
|
59
|
+
* group's tests as a preview — `isForeign="true"`, nothing executed, no
|
|
60
|
+
* alerts — and with `scope: { foreignTests: true }` ran them all (measured
|
|
61
|
+
* once, 2026-10-23, same system).
|
|
62
|
+
*
|
|
63
|
+
* The answer is the `aunit:runResult` document, read by this runner's
|
|
64
|
+
* `result` strategy; whether a failing test is a failure is
|
|
65
|
+
* `options.analyse`'s.
|
|
66
|
+
*/
|
|
67
|
+
async runSync(target, options) {
|
|
68
|
+
return this.startSync([
|
|
69
|
+
objects_1.FUNCTION_MODULE.uri(target.functionGroupName, target.functionModuleName),
|
|
70
|
+
], options);
|
|
71
|
+
}
|
|
29
72
|
}
|
|
30
73
|
exports.FunctionModuleTestRunner = FunctionModuleTestRunner;
|
|
31
74
|
/**
|
|
32
75
|
* Below 7.50: refused without a request, as a report's run is — the legacy
|
|
33
|
-
* endpoint has not been measured to find a module's tests
|
|
76
|
+
* endpoint has not been measured to find a module's tests, with `<options>` or
|
|
77
|
+
* without. `runSync` is refused the same way.
|
|
34
78
|
*/
|
|
35
79
|
class FunctionModuleTestRunnerLegacy extends FunctionModuleTestRunner {
|
|
36
80
|
async run() {
|
|
37
81
|
return (0, abapUnitRunner_1.refusedBelow750)("a function module's");
|
|
38
82
|
}
|
|
83
|
+
async runSync() {
|
|
84
|
+
return (0, abapUnitRunner_1.refusedBelow750)("a function module's");
|
|
85
|
+
}
|
|
39
86
|
async getStatus() {
|
|
40
87
|
return (0, abapUnitRunner_1.refusedBelow750)("a function module's");
|
|
41
88
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { FunctionModuleTestRunner, FunctionModuleTestRunnerLegacy, functionModuleTestRunnerDocuments, type IFunctionModuleTestRunnerResults, } from './FunctionModuleTestRunner';
|
|
1
|
+
export { FunctionModuleTestRunner, FunctionModuleTestRunnerLegacy, functionModuleTestRunnerDocuments, type IFunctionModuleTestRunnerResults, type IFunctionModuleTestRunSyncTarget, } from './FunctionModuleTestRunner';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/executors/functionModule/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,iCAAiC,EACjC,KAAK,gCAAgC,GACtC,MAAM,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/executors/functionModule/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,iCAAiC,EACjC,KAAK,gCAAgC,EACrC,KAAK,gCAAgC,GACtC,MAAM,4BAA4B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { AbapUnitRunner, abapUnitRunnerDocuments, type IAbapUnitRunnerResults, } from './abapUnitRunner';
|
|
2
2
|
export { ClassExecutor, ClassTestRunner, ClassTestRunnerLegacy, classExecutorDocuments, classTestRunnerDocuments, type IClassExecutorResults, type IClassTestRunnerResults, type IClassTestRunTarget, } from './class';
|
|
3
3
|
export { FunctionGroupTestRunner, FunctionGroupTestRunnerLegacy, functionGroupTestRunnerDocuments, type IFunctionGroupTestRunnerResults, } from './functionGroup';
|
|
4
|
-
export { FunctionModuleTestRunner, FunctionModuleTestRunnerLegacy, functionModuleTestRunnerDocuments, type IFunctionModuleTestRunnerResults, } from './functionModule';
|
|
4
|
+
export { FunctionModuleTestRunner, FunctionModuleTestRunnerLegacy, functionModuleTestRunnerDocuments, type IFunctionModuleTestRunnerResults, type IFunctionModuleTestRunSyncTarget, } from './functionModule';
|
|
5
5
|
export { type IProgramExecutorResults, type IProgramTestRunnerResults, ProgramExecutor, ProgramTestRunner, ProgramTestRunnerLegacy, programExecutorDocuments, programTestRunnerDocuments, } from './program';
|
|
6
6
|
export { type ITraceSchedulingResults, TraceScheduling, traceSchedulingDocuments, } from './traceScheduling';
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,KAAK,sBAAsB,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,GACzB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,gCAAgC,EAChC,KAAK,+BAA+B,GACrC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,iCAAiC,EACjC,KAAK,gCAAgC,GACtC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,KAAK,uBAAuB,EAC5B,eAAe,EACf,wBAAwB,GACzB,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,KAAK,sBAAsB,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,GACzB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,gCAAgC,EAChC,KAAK,+BAA+B,GACrC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,iCAAiC,EACjC,KAAK,gCAAgC,EACrC,KAAK,gCAAgC,GACtC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,KAAK,uBAAuB,EAC5B,eAAe,EACf,wBAAwB,GACzB,MAAM,mBAAmB,CAAC"}
|
|
@@ -10,9 +10,16 @@
|
|
|
10
10
|
*
|
|
11
11
|
* Measured on premise (2026-09-30): one `POST /abapunit/runs` naming the report
|
|
12
12
|
* as `osl:object type="PROG"` runs its test classes wherever they sit — own
|
|
13
|
-
* source or include.
|
|
14
|
-
*
|
|
15
|
-
*
|
|
13
|
+
* source or include.
|
|
14
|
+
*
|
|
15
|
+
* Measured on premise again (SAP_BASIS 816, 2026-10-23): `/abapunit/testruns`
|
|
16
|
+
* given the report's URI runs the same tests with the same alerts — but only
|
|
17
|
+
* with the Eclipse-style `<options>` in the run configuration. Without it, the
|
|
18
|
+
* body sent on 2026-09-30, it answers `200` with an empty result: that, not the
|
|
19
|
+
* endpoint, was why that run found nothing. `runSync` therefore always sends
|
|
20
|
+
* `<options>`. An include's own URI answers empty even with `<options>`; its
|
|
21
|
+
* tests run through the report. The legacy runner still refuses: no legacy
|
|
22
|
+
* system has been measured with `<options>` (`ProgramTestRunnerLegacy`).
|
|
16
23
|
*/
|
|
17
24
|
import type { IAdtAnalyseOptions, IAdtError, IAdtResponse, IAdtRunnable, IClassUnitTestRunOptions } from '@mcp-abap-adt/interfaces-adt';
|
|
18
25
|
import type { IAbapConnection } from '@mcp-abap-adt/interfaces-adt-connection';
|
|
@@ -28,5 +35,25 @@ export declare class ProgramTestRunner<R extends IProgramTestRunnerResults = typ
|
|
|
28
35
|
constructor(connection: IAbapConnection, logger?: ILogger, results?: R);
|
|
29
36
|
/** Run every test class of the report. One POST. */
|
|
30
37
|
run<E extends IAdtError = IAdtError>(programName: string, options?: IClassUnitTestRunOptions & IAdtAnalyseOptions<E>): Promise<IAdtResponse<ReturnType<R['run']>, E>>;
|
|
38
|
+
/**
|
|
39
|
+
* Run every test class of the report and answer the finished result. One
|
|
40
|
+
* POST, to `/sap/bc/adt/abapunit/testruns` — the synchronous runner, beside
|
|
41
|
+
* the asynchronous `run` + `getStatus` + `getResult`, which stays the
|
|
42
|
+
* default.
|
|
43
|
+
*
|
|
44
|
+
* An explicit choice of the caller's: nothing here asks the system which
|
|
45
|
+
* runner it has. The report is named by its URI and the run configuration
|
|
46
|
+
* always carries `<options>` (scope, risk levels and durations, with `run`'s
|
|
47
|
+
* defaults) — without it the endpoint answered an empty result for a report
|
|
48
|
+
* with tests. `title` and `context` have no place in this format and are not
|
|
49
|
+
* sent. Name the report, not an include: an include's tests run through the
|
|
50
|
+
* report that pulls it in.
|
|
51
|
+
*
|
|
52
|
+
* The answer is the `aunit:runResult` document, read by this runner's
|
|
53
|
+
* `result` strategy — the one `getResult` uses; whether a failing test is a
|
|
54
|
+
* failure is `options.analyse`'s (`analyseUnitTest` from
|
|
55
|
+
* @mcp-abap-adt/adt-strategies reads it so).
|
|
56
|
+
*/
|
|
57
|
+
runSync<E extends IAdtError = IAdtError>(programName: string, options?: IClassUnitTestRunOptions & IAdtAnalyseOptions<E>): Promise<IAdtResponse<ReturnType<R['result']>, E>>;
|
|
31
58
|
}
|
|
32
59
|
//# sourceMappingURL=ProgramTestRunner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProgramTestRunner.d.ts","sourceRoot":"","sources":["../../../src/executors/program/ProgramTestRunner.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ProgramTestRunner.d.ts","sourceRoot":"","sources":["../../../src/executors/program/ProgramTestRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,wBAAwB,EACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EACL,cAAc,EAEd,KAAK,sBAAsB,EAC5B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,yBAAyB,GAAG,sBAAsB,CAAC;AAC/D,eAAO,MAAM,0BAA0B;;;;CAA0B,CAAC;AAElE,qBAAa,iBAAiB,CAC1B,CAAC,SAAS,yBAAyB,GAAG,OAAO,0BAA0B,CAEzE,SAAQ,cAAc,CAAC,CAAC,CACxB,YACE,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC;gBAGpE,UAAU,EAAE,eAAe,EAC3B,MAAM,CAAC,EAAE,OAAO,EAEhB,OAAO,GAAE,CAA8C;IAKzD,oDAAoD;IAC9C,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACvC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,wBAAwB,GAAG,kBAAkB,CAAC,CAAC,CAAC,GACzD,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAIjD;;;;;;;;;;;;;;;;;;OAkBG;IACG,OAAO,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAC3C,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,wBAAwB,GAAG,kBAAkB,CAAC,CAAC,CAAC,GACzD,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAGrD"}
|
|
@@ -11,12 +11,20 @@
|
|
|
11
11
|
*
|
|
12
12
|
* Measured on premise (2026-09-30): one `POST /abapunit/runs` naming the report
|
|
13
13
|
* as `osl:object type="PROG"` runs its test classes wherever they sit — own
|
|
14
|
-
* source or include.
|
|
15
|
-
*
|
|
16
|
-
*
|
|
14
|
+
* source or include.
|
|
15
|
+
*
|
|
16
|
+
* Measured on premise again (SAP_BASIS 816, 2026-10-23): `/abapunit/testruns`
|
|
17
|
+
* given the report's URI runs the same tests with the same alerts — but only
|
|
18
|
+
* with the Eclipse-style `<options>` in the run configuration. Without it, the
|
|
19
|
+
* body sent on 2026-09-30, it answers `200` with an empty result: that, not the
|
|
20
|
+
* endpoint, was why that run found nothing. `runSync` therefore always sends
|
|
21
|
+
* `<options>`. An include's own URI answers empty even with `<options>`; its
|
|
22
|
+
* tests run through the report. The legacy runner still refuses: no legacy
|
|
23
|
+
* system has been measured with `<options>` (`ProgramTestRunnerLegacy`).
|
|
17
24
|
*/
|
|
18
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
26
|
exports.ProgramTestRunner = exports.programTestRunnerDocuments = void 0;
|
|
27
|
+
const objects_1 = require("../../endpoints/objects");
|
|
20
28
|
const abapUnitRunner_1 = require("../abapUnitRunner");
|
|
21
29
|
exports.programTestRunnerDocuments = abapUnitRunner_1.abapUnitRunnerDocuments;
|
|
22
30
|
class ProgramTestRunner extends abapUnitRunner_1.AbapUnitRunner {
|
|
@@ -29,5 +37,27 @@ class ProgramTestRunner extends abapUnitRunner_1.AbapUnitRunner {
|
|
|
29
37
|
async run(programName, options) {
|
|
30
38
|
return this.startByObject(programName, 'PROG', options);
|
|
31
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Run every test class of the report and answer the finished result. One
|
|
42
|
+
* POST, to `/sap/bc/adt/abapunit/testruns` — the synchronous runner, beside
|
|
43
|
+
* the asynchronous `run` + `getStatus` + `getResult`, which stays the
|
|
44
|
+
* default.
|
|
45
|
+
*
|
|
46
|
+
* An explicit choice of the caller's: nothing here asks the system which
|
|
47
|
+
* runner it has. The report is named by its URI and the run configuration
|
|
48
|
+
* always carries `<options>` (scope, risk levels and durations, with `run`'s
|
|
49
|
+
* defaults) — without it the endpoint answered an empty result for a report
|
|
50
|
+
* with tests. `title` and `context` have no place in this format and are not
|
|
51
|
+
* sent. Name the report, not an include: an include's tests run through the
|
|
52
|
+
* report that pulls it in.
|
|
53
|
+
*
|
|
54
|
+
* The answer is the `aunit:runResult` document, read by this runner's
|
|
55
|
+
* `result` strategy — the one `getResult` uses; whether a failing test is a
|
|
56
|
+
* failure is `options.analyse`'s (`analyseUnitTest` from
|
|
57
|
+
* @mcp-abap-adt/adt-strategies reads it so).
|
|
58
|
+
*/
|
|
59
|
+
async runSync(programName, options) {
|
|
60
|
+
return this.startSync([objects_1.PROGRAM.uri(programName)], options);
|
|
61
|
+
}
|
|
32
62
|
}
|
|
33
63
|
exports.ProgramTestRunner = ProgramTestRunner;
|
|
@@ -3,15 +3,18 @@
|
|
|
3
3
|
* (BASIS < 7.50), which has no `/abapunit/runs`.
|
|
4
4
|
*
|
|
5
5
|
* Refused without a request. The legacy endpoint, `/abapunit/testruns`, was
|
|
6
|
-
* given a report's URI on premise (2026-09-30)
|
|
7
|
-
*
|
|
8
|
-
* tests
|
|
9
|
-
*
|
|
6
|
+
* given a report's URI on premise (2026-09-30) without `<options>` — the body a
|
|
7
|
+
* legacy system is sent — and answered an empty result for a report whose
|
|
8
|
+
* tests `/abapunit/runs` found, so sending it would answer "no tests" where
|
|
9
|
+
* there are some. With `<options>` it runs them on SAP_BASIS 816 (2026-10-23),
|
|
10
|
+
* but no legacy system has been measured with that body: `run` and `runSync`
|
|
11
|
+
* stay refused until one is.
|
|
10
12
|
*/
|
|
11
13
|
import type { IAdtError, IAdtResponse } from '@mcp-abap-adt/interfaces-adt';
|
|
12
14
|
import { type IProgramTestRunnerResults, ProgramTestRunner, type programTestRunnerDocuments } from './ProgramTestRunner';
|
|
13
15
|
export declare class ProgramTestRunnerLegacy<R extends IProgramTestRunnerResults = typeof programTestRunnerDocuments> extends ProgramTestRunner<R> {
|
|
14
16
|
run<E extends IAdtError = IAdtError>(): Promise<IAdtResponse<ReturnType<R['run']>, E>>;
|
|
17
|
+
runSync<E extends IAdtError = IAdtError>(): Promise<IAdtResponse<ReturnType<R['result']>, E>>;
|
|
15
18
|
getStatus<E extends IAdtError = IAdtError>(): Promise<IAdtResponse<ReturnType<R['status']>, E>>;
|
|
16
19
|
getResult<E extends IAdtError = IAdtError>(): Promise<IAdtResponse<ReturnType<R['result']>, E>>;
|
|
17
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProgramTestRunnerLegacy.d.ts","sourceRoot":"","sources":["../../../src/executors/program/ProgramTestRunnerLegacy.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ProgramTestRunnerLegacy.d.ts","sourceRoot":"","sources":["../../../src/executors/program/ProgramTestRunnerLegacy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5E,OAAO,EACL,KAAK,yBAAyB,EAC9B,iBAAiB,EACjB,KAAK,0BAA0B,EAChC,MAAM,qBAAqB,CAAC;AAE7B,qBAAa,uBAAuB,CAClC,CAAC,SAAS,yBAAyB,GAAG,OAAO,0BAA0B,CACvE,SAAQ,iBAAiB,CAAC,CAAC,CAAC;IACb,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAC5D,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACtC;IAIc,OAAO,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAChE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CACzC;IAIc,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAClE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CACzC;IAIc,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAClE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CACzC;CAGF"}
|
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
* (BASIS < 7.50), which has no `/abapunit/runs`.
|
|
5
5
|
*
|
|
6
6
|
* Refused without a request. The legacy endpoint, `/abapunit/testruns`, was
|
|
7
|
-
* given a report's URI on premise (2026-09-30)
|
|
8
|
-
*
|
|
9
|
-
* tests
|
|
10
|
-
*
|
|
7
|
+
* given a report's URI on premise (2026-09-30) without `<options>` — the body a
|
|
8
|
+
* legacy system is sent — and answered an empty result for a report whose
|
|
9
|
+
* tests `/abapunit/runs` found, so sending it would answer "no tests" where
|
|
10
|
+
* there are some. With `<options>` it runs them on SAP_BASIS 816 (2026-10-23),
|
|
11
|
+
* but no legacy system has been measured with that body: `run` and `runSync`
|
|
12
|
+
* stay refused until one is.
|
|
11
13
|
*/
|
|
12
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
15
|
exports.ProgramTestRunnerLegacy = void 0;
|
|
@@ -17,6 +19,9 @@ class ProgramTestRunnerLegacy extends ProgramTestRunner_1.ProgramTestRunner {
|
|
|
17
19
|
async run() {
|
|
18
20
|
return (0, abapUnitRunner_1.refusedBelow750)("a report's");
|
|
19
21
|
}
|
|
22
|
+
async runSync() {
|
|
23
|
+
return (0, abapUnitRunner_1.refusedBelow750)("a report's");
|
|
24
|
+
}
|
|
20
25
|
async getStatus() {
|
|
21
26
|
return (0, abapUnitRunner_1.refusedBelow750)("a report's");
|
|
22
27
|
}
|
|
@@ -10,7 +10,7 @@ export { createAdtExecutor } from './clients/createAdtExecutor';
|
|
|
10
10
|
export { classExecutorDocuments, type IClassExecutorResults, } from './executors/class/ClassExecutor';
|
|
11
11
|
export { classTestRunnerDocuments, type IClassTestRunnerResults, type IClassTestRunTarget, } from './executors/class/ClassTestRunner';
|
|
12
12
|
export { functionGroupTestRunnerDocuments, type IFunctionGroupTestRunnerResults, } from './executors/functionGroup/FunctionGroupTestRunner';
|
|
13
|
-
export { functionModuleTestRunnerDocuments, type IFunctionModuleTestRunnerResults, } from './executors/functionModule/FunctionModuleTestRunner';
|
|
13
|
+
export { functionModuleTestRunnerDocuments, type IFunctionModuleTestRunnerResults, type IFunctionModuleTestRunSyncTarget, } from './executors/functionModule/FunctionModuleTestRunner';
|
|
14
14
|
export { type IProgramExecutorResults, programExecutorDocuments, } from './executors/program/ProgramExecutor';
|
|
15
15
|
export { type IProgramTestRunnerResults, programTestRunnerDocuments, } from './executors/program/ProgramTestRunner';
|
|
16
16
|
export { type ITraceSchedulingResults, traceSchedulingDocuments, } from './executors/traceScheduling';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.executors.d.ts","sourceRoot":"","sources":["../src/index.executors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACL,sBAAsB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,wBAAwB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,GACzB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,gCAAgC,EAChC,KAAK,+BAA+B,GACrC,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EACL,iCAAiC,EACjC,KAAK,gCAAgC,GACtC,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EACL,KAAK,uBAAuB,EAC5B,wBAAwB,GACzB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,KAAK,yBAAyB,EAC9B,0BAA0B,GAC3B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,KAAK,uBAAuB,EAC5B,wBAAwB,GACzB,MAAM,6BAA6B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.executors.d.ts","sourceRoot":"","sources":["../src/index.executors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACL,sBAAsB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,wBAAwB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,GACzB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,gCAAgC,EAChC,KAAK,+BAA+B,GACrC,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EACL,iCAAiC,EACjC,KAAK,gCAAgC,EACrC,KAAK,gCAAgC,GACtC,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EACL,KAAK,uBAAuB,EAC5B,wBAAwB,GACzB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,KAAK,yBAAyB,EAC9B,0BAA0B,GAC3B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,KAAK,uBAAuB,EAC5B,wBAAwB,GACzB,MAAM,6BAA6B,CAAC"}
|
|
@@ -586,5 +586,5 @@ INTERFACE … does not exist."*, *"Data definition … of version does not
|
|
|
586
586
|
exist"*. All mean the same thing, and none is worth matching on: branch on the
|
|
587
587
|
failure your own `analyse` decided.
|
|
588
588
|
|
|
589
|
-
Reproduce with `
|
|
590
|
-
`
|
|
589
|
+
Reproduce with `node_modules/.bin/ts-node scripts/probe-inactive-metadata.ts` and
|
|
590
|
+
`node_modules/.bin/ts-node scripts/probe-unfinished-create.ts`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mcp-abap-adt/adt-clients",
|
|
3
|
-
"version": "37.
|
|
3
|
+
"version": "37.2.0",
|
|
4
4
|
"description": "ADT clients for SAP ABAP systems - AdtClient and AdtRuntimeClient",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -80,34 +80,35 @@
|
|
|
80
80
|
"scripts": {
|
|
81
81
|
"chrono": "./tools/version-stats.sh",
|
|
82
82
|
"clean": "node -e \"const fs=require('fs');['dist','tsconfig.tsbuildinfo'].forEach(p=>{try{fs.rmSync(p,{recursive:true,force:true})}catch{}})\"",
|
|
83
|
-
"lint": "
|
|
84
|
-
"lint:check": "
|
|
83
|
+
"lint": "biome check --write src packages",
|
|
84
|
+
"lint:check": "biome check src packages && npm run --silent check:docs",
|
|
85
85
|
"check:docs": "node scripts/check-doc-imports.js",
|
|
86
|
-
"format": "
|
|
87
|
-
"build": "npm run --silent clean &&
|
|
88
|
-
"build:fast": "
|
|
86
|
+
"format": "biome format --write src packages",
|
|
87
|
+
"build": "npm run --silent clean && biome check src packages --diagnostic-level=error && tsc -p tsconfig.json",
|
|
88
|
+
"build:fast": "tsc -p tsconfig.json",
|
|
89
89
|
"test:init": "node -e \"const fs=require('fs'),s='src/__tests__/helpers/test-config.yaml',t=s+'.template';if(fs.existsSync(s)){console.log(s+' already exists, skipping (use test:reinit to overwrite)')}else{fs.copyFileSync(t,s);console.log('Created '+s+' — edit lines marked CHANGE')}\"",
|
|
90
90
|
"test:reinit": "node -e \"const fs=require('fs'),s='src/__tests__/helpers/test-config.yaml',t=s+'.template';fs.copyFileSync(t,s);console.log('Recreated '+s+' from template')\"",
|
|
91
|
-
"test": "
|
|
91
|
+
"test": "jest --runInBand",
|
|
92
|
+
"test:unit": "jest src/__tests__/unit",
|
|
92
93
|
"test:detached": "bash scripts/run-detached.sh",
|
|
93
|
-
"test:check": "
|
|
94
|
+
"test:check": "tsc --noEmit --project tsconfig.test.json",
|
|
94
95
|
"test:type-check": "npm run test:check",
|
|
95
|
-
"test:check:integration": "
|
|
96
|
+
"test:check:integration": "tsc --noEmit --project tsconfig.test.integration.json",
|
|
96
97
|
"test:sequential": "node scripts/run-tests-sequential.js",
|
|
97
98
|
"test:module": "node scripts/test-module.js",
|
|
98
|
-
"test:long-polling-read": "
|
|
99
|
-
"package:contents": "
|
|
100
|
-
"discovery:markdown": "
|
|
101
|
-
"header:discovery": "
|
|
99
|
+
"test:long-polling-read": "ts-node scripts/test-long-polling-read.ts",
|
|
100
|
+
"package:contents": "ts-node scripts/show-package-contents.ts",
|
|
101
|
+
"discovery:markdown": "ts-node tools/discovery-to-markdown.ts",
|
|
102
|
+
"header:discovery": "ts-node tools/header-probe/errorCorpus.ts",
|
|
102
103
|
"adt:entities": "node tools/adt-object-entities.js",
|
|
103
|
-
"shared:setup": "
|
|
104
|
-
"shared:teardown": "
|
|
105
|
-
"shared:check": "
|
|
104
|
+
"shared:setup": "jest --testPathIgnorePatterns node_modules --testPathPatterns admin/shared-deps/setup",
|
|
105
|
+
"shared:teardown": "jest --testPathIgnorePatterns node_modules --testPathPatterns admin/shared-deps/teardown",
|
|
106
|
+
"shared:check": "jest --testPathIgnorePatterns node_modules --testPathPatterns admin/shared-deps/check",
|
|
106
107
|
"pretest": "npm run test:check:integration && npm run --silent check:config",
|
|
107
108
|
"prepublishOnly": "npm run build",
|
|
108
109
|
"prepare": "husky",
|
|
109
110
|
"check:config": "node scripts/check-config-drift.js",
|
|
110
|
-
"corpus:capture": "
|
|
111
|
+
"corpus:capture": "ts-node scripts/capture-adt-corpus.ts",
|
|
111
112
|
"build:packages": "npm --prefix packages/adt-strategies run build",
|
|
112
113
|
"test:packages": "npm --prefix packages/adt-strategies test",
|
|
113
114
|
"release:publish": "bash scripts/publish-changed.sh",
|
|
@@ -139,9 +140,15 @@
|
|
|
139
140
|
"husky": "^9.1.7",
|
|
140
141
|
"jest": "^30.0.5",
|
|
141
142
|
"jest-util": "^30.2.0",
|
|
142
|
-
"markdown-it": "^14.3.
|
|
143
|
+
"markdown-it": "^14.3.3",
|
|
143
144
|
"ts-jest": "^29.4.1",
|
|
145
|
+
"ts-node": "^10.9.2",
|
|
144
146
|
"typescript": "^5.9.2",
|
|
145
147
|
"yaml": "^2.8.1"
|
|
148
|
+
},
|
|
149
|
+
"allowScripts": {
|
|
150
|
+
"@mcp-abap-adt/sap-rfc-lite": false,
|
|
151
|
+
"@parcel/watcher": false,
|
|
152
|
+
"unrs-resolver": false
|
|
146
153
|
}
|
|
147
154
|
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ABAP Unit test run operations for legacy systems (BASIS < 7.50)
|
|
3
|
-
*
|
|
4
|
-
* Legacy systems use:
|
|
5
|
-
* - /sap/bc/adt/abapunit/testruns instead of /sap/bc/adt/abapunit/runs
|
|
6
|
-
* - application/xml for Content-Type and Accept (not versioned vnd.sap.adt.api.abapunit.* types)
|
|
7
|
-
*/
|
|
8
|
-
import type { IAbapConnection, IAdtWireResponse } from '@mcp-abap-adt/interfaces-adt-connection';
|
|
9
|
-
/**
|
|
10
|
-
* Start ABAP Unit test run on legacy systems
|
|
11
|
-
* Uses /sap/bc/adt/abapunit/testruns endpoint with aunit:runConfiguration format
|
|
12
|
-
*
|
|
13
|
-
* There is only a start here. `getClassUnitTestStatusLegacy` and
|
|
14
|
-
* `getClassUnitTestResultLegacy` polled `testruns/{runId}` and
|
|
15
|
-
* `testruns/{runId}/results`, and were removed once the endpoint was measured:
|
|
16
|
-
* the POST answers with the finished result, so there was never a run to poll.
|
|
17
|
-
* Nothing called them — `ClassTestRunnerLegacy` serves both from the response the
|
|
18
|
-
* POST returned — so they were an unmeasured contract kept alive by nobody
|
|
19
|
-
* looking.
|
|
20
|
-
*
|
|
21
|
-
* **Reading the result: `kind` carries the distinction, `severity` does not.** A
|
|
22
|
-
* failed assertion and an uncaught exception both come back
|
|
23
|
-
* `severity="critical"`, measured on one release — so a parser classifying on
|
|
24
|
-
* severity reports a short dump as a failed test. The field that separates them
|
|
25
|
-
* is `kind`: `failedAssertion`, `exception`, `noTestClasses`.
|
|
26
|
-
*
|
|
27
|
-
* Also measured: this endpoint is **synchronous** on both a modern and a legacy
|
|
28
|
-
* on-prem system, over HTTP and over RFC — `<aunit:runResult>` with no
|
|
29
|
-
* `Location`, and the typed and `application/xml` bodies byte-identical. The
|
|
30
|
-
* legacy system ignores the typed `Accept` altogether and answers
|
|
31
|
-
* `application/xml` either way.
|
|
32
|
-
*
|
|
33
|
-
* Legacy format differs from modern:
|
|
34
|
-
* - Root element: aunit:runConfiguration (not aunit:run)
|
|
35
|
-
* - Namespace: http://www.sap.com/adt/aunit (not http://www.sap.com/adt/api/aunit)
|
|
36
|
-
* - Objects via adtcore:objectReferences with URI (not aunit:tests with containerClass/class)
|
|
37
|
-
* — so a run covers whole classes: this format has no way to name one test
|
|
38
|
-
* class inside its container, and a caller's test class name is not sent.
|
|
39
|
-
* - Content-Type/Accept: application/xml (not versioned vnd.sap.adt.api.abapunit.*)
|
|
40
|
-
*/
|
|
41
|
-
export declare function startClassUnitTestRunLegacy(connection: IAbapConnection, classNames: string[]): Promise<IAdtWireResponse>;
|
|
42
|
-
//# sourceMappingURL=runLegacy.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runLegacy.d.ts","sourceRoot":"","sources":["../../../src/core/class/runLegacy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,yCAAyC,CAAC;AAMjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,eAAe,EAC3B,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,gBAAgB,CAAC,CA8B3B"}
|