abap-adt-api
Version:
Interface to Abap Developer Tools webservice
165 lines (164 loc) • 7.52 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.unitTestOccurrenceMarkers = exports.unitTestEvaluation = exports.runUnitTest = exports.DefaultUnitTestRunFlags = exports.UnitTestSeverity = exports.UnitTestAlertKind = void 0;
const t = __importStar(require("io-ts"));
const __1 = require("..");
const utilities_1 = require("../utilities");
const urlparser_1 = require("./urlparser");
var UnitTestAlertKind;
(function (UnitTestAlertKind) {
UnitTestAlertKind["exception"] = "exception";
UnitTestAlertKind["failedAssertion"] = "failedAssertion";
UnitTestAlertKind["warning"] = "warning";
})(UnitTestAlertKind = exports.UnitTestAlertKind || (exports.UnitTestAlertKind = {}));
var UnitTestSeverity;
(function (UnitTestSeverity) {
UnitTestSeverity["critical"] = "critical";
UnitTestSeverity["fatal"] = "fatal";
UnitTestSeverity["tolerable"] = "tolerable";
UnitTestSeverity["tolerant"] = "tolerant";
})(UnitTestSeverity = exports.UnitTestSeverity || (exports.UnitTestSeverity = {}));
const markerCodec = t.type({
kind: t.string,
keepsResult: t.boolean,
location: urlparser_1.uriParts
});
const parseDetail = (alert) => (0, utilities_1.xmlArray)(alert, "details", "detail").reduce((result, d) => {
const main = (d && d["@_text"]) || "";
const children = (0, utilities_1.xmlArray)(d, "details", "detail")
.map((dd) => (dd && `\n\t${dd["@_text"]}`) || "")
.join("");
return main ? [...result, main + children] : result;
}, []);
const parseStack = (alert) => (0, utilities_1.xmlArray)(alert, "stack", "stackEntry").map(x => {
const entry = (0, utilities_1.xmlNodeAttr)(x);
entry["adtcore:description"] = entry["adtcore:description"];
return entry;
});
const parseAlert = (alert) => ({
...(0, utilities_1.xmlNodeAttr)(alert),
details: parseDetail(alert),
stack: parseStack(alert),
title: (alert === null || alert === void 0 ? void 0 : alert.title) || ""
});
const parseMethod = (method) => ({
...(0, utilities_1.xmlNodeAttr)(method),
alerts: (0, utilities_1.xmlArray)(method, "alerts", "alert").map(parseAlert)
});
exports.DefaultUnitTestRunFlags = {
harmless: true,
dangerous: false,
critical: false,
short: true,
medium: false,
long: false
};
async function runUnitTest(h, url, flags = exports.DefaultUnitTestRunFlags) {
const headers = { "Content-Type": "application/*", Accept: "application/*" };
const body = `<?xml version="1.0" encoding="UTF-8"?>
<aunit:runConfiguration xmlns:aunit="http://www.sap.com/adt/aunit">
<external>
<coverage active="false"/>
</external>
<options>
<uriType value="semantic"/>
<testDeterminationStrategy sameProgram="true" assignedTests="false"/>
<testRiskLevels harmless="${flags.harmless}" dangerous="${flags.dangerous}" critical="${flags.critical}"/>
<testDurations short="${flags.short}" medium="${flags.medium}" long="${flags.long}"/>
<withNavigationUri enabled="true"/>
</options>
<adtcore:objectSets xmlns:adtcore="http://www.sap.com/adt/core">
<objectSet kind="inclusive">
<adtcore:objectReferences>
<adtcore:objectReference adtcore:uri="${url}"/>
</adtcore:objectReferences>
</objectSet>
</adtcore:objectSets>
</aunit:runConfiguration>`;
const response = await h.request("/sap/bc/adt/abapunit/testruns", {
method: "POST",
headers,
body
});
const raw = (0, utilities_1.fullParse)(response.body);
const classes = (0, utilities_1.xmlFlatArray)(raw, "aunit:runResult", "program", "testClasses", "testClass").map(c => {
return {
...(0, utilities_1.xmlNodeAttr)(c),
alerts: (0, utilities_1.xmlArray)(c, "alerts", "alert").map(parseAlert),
testmethods: (0, utilities_1.xmlFlatArray)(c, "testMethods", "testMethod").map(parseMethod)
};
});
return classes;
}
exports.runUnitTest = runUnitTest;
async function unitTestEvaluation(h, clas, flags = exports.DefaultUnitTestRunFlags) {
const headers = { "Content-Type": "application/*l", Accept: "application/*" };
const references = clas.testmethods
.map(m => `<adtcore:objectReference adtcore:uri="${m["adtcore:uri"]}" />`)
.join("\n");
const body = `<?xml version="1.0" encoding="UTF-8"?>
<aunit:runConfiguration xmlns:aunit="http://www.sap.com/adt/aunit">
<options>
<uriType value="${clas.uriType}"></uriType>
<testDeterminationStrategy sameProgram="true" assignedTests="false"></testDeterminationStrategy>
<testRiskLevels harmless="${flags.harmless}" dangerous="${flags.dangerous}" critical="${flags.critical}"/>
<testDurations short="${flags.short}" medium="${flags.medium}" long="${flags.long}"/>
<withNavigationUri enabled="true"></withNavigationUri>
</options>
<adtcore:objectSets xmlns:adtcore="http://www.sap.com/adt/core">
<objectSet kind="inclusive">
<adtcore:objectReferences>
${references}
</adtcore:objectReferences>
</objectSet>
</adtcore:objectSets>
</aunit:runConfiguration>`;
const response = await h.request("/sap/bc/adt/abapunit/testruns/evaluation", {
method: "POST",
headers,
body
});
const raw = (0, utilities_1.fullParse)(response.body);
return (0, utilities_1.xmlArray)(raw, "aunit:runResult", "program", "testClasses", "testClass", "testMethods", "testMethod").map(parseMethod);
}
exports.unitTestEvaluation = unitTestEvaluation;
async function unitTestOccurrenceMarkers(h, uri, source) {
const headers = { "Content-Type": "text/plain", Accept: "application/*" };
const response = await h.request("/sap/bc/adt/abapsource/occurencemarkers", {
method: "POST",
headers,
body: source,
qs: { uri }
});
const raw = (0, utilities_1.fullParse)(response.body, { removeNSPrefix: true });
const markers = (0, utilities_1.xmlArray)(raw, "occurrenceInfo", "occurrences", "occurrence").map(o => {
const { kind, keepsResult } = (0, utilities_1.xmlNodeAttr)(o);
const { uri } = (0, utilities_1.xmlNodeAttr)(o === null || o === void 0 ? void 0 : o.objectReference);
return { kind, keepsResult, location: (0, urlparser_1.parseUri)(uri) };
});
return (0, __1.validateParseResult)(t.array(markerCodec).decode(markers));
}
exports.unitTestOccurrenceMarkers = unitTestOccurrenceMarkers;