UNPKG

abap-adt-api

Version:

Interface to Abap Developer Tools webservice

165 lines (164 loc) 7.52 kB
"use strict"; 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;