@web-marketing-hr/azure-devops-mcp 2.3.5
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/LICENSE.md +21 -0
- package/README.md +238 -0
- package/dist/auth.js +117 -0
- package/dist/auth.js.map +1 -0
- package/dist/index.js +155 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.js +35 -0
- package/dist/logger.js.map +1 -0
- package/dist/org-tenants.js +79 -0
- package/dist/org-tenants.js.map +1 -0
- package/dist/prompts.js +21 -0
- package/dist/prompts.js.map +1 -0
- package/dist/shared/domains.js +126 -0
- package/dist/shared/domains.js.map +1 -0
- package/dist/shared/tool-validation.js +93 -0
- package/dist/shared/tool-validation.js.map +1 -0
- package/dist/tools/advanced-security.js +109 -0
- package/dist/tools/advanced-security.js.map +1 -0
- package/dist/tools/auth.js +64 -0
- package/dist/tools/auth.js.map +1 -0
- package/dist/tools/core.js +96 -0
- package/dist/tools/core.js.map +1 -0
- package/dist/tools/pipelines.js +322 -0
- package/dist/tools/pipelines.js.map +1 -0
- package/dist/tools/repositories.js +938 -0
- package/dist/tools/repositories.js.map +1 -0
- package/dist/tools/search.js +211 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/test-plans.js +387 -0
- package/dist/tools/test-plans.js.map +1 -0
- package/dist/tools/wiki.js +390 -0
- package/dist/tools/wiki.js.map +1 -0
- package/dist/tools/work-items.js +1007 -0
- package/dist/tools/work-items.js.map +1 -0
- package/dist/tools/work.js +299 -0
- package/dist/tools/work.js.map +1 -0
- package/dist/tools.js +30 -0
- package/dist/tools.js.map +1 -0
- package/dist/useragent.js +21 -0
- package/dist/useragent.js.map +1 -0
- package/dist/utils.js +94 -0
- package/dist/utils.js.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +86 -0
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { SuiteExpand } from "azure-devops-node-api/interfaces/TestPlanInterfaces.js";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
const Test_Plan_Tools = {
|
|
6
|
+
create_test_plan: "testplan_create_test_plan",
|
|
7
|
+
create_test_case: "testplan_create_test_case",
|
|
8
|
+
update_test_case_steps: "testplan_update_test_case_steps",
|
|
9
|
+
add_test_cases_to_suite: "testplan_add_test_cases_to_suite",
|
|
10
|
+
test_results_from_build_id: "testplan_show_test_results_from_build_id",
|
|
11
|
+
list_test_cases: "testplan_list_test_cases",
|
|
12
|
+
list_test_plans: "testplan_list_test_plans",
|
|
13
|
+
list_test_suites: "testplan_list_test_suites",
|
|
14
|
+
create_test_suite: "testplan_create_test_suite",
|
|
15
|
+
};
|
|
16
|
+
function configureTestPlanTools(server, _, connectionProvider) {
|
|
17
|
+
server.tool(Test_Plan_Tools.list_test_plans, "Retrieve a paginated list of test plans from an Azure DevOps project. Allows filtering for active plans and toggling detailed information.", {
|
|
18
|
+
project: z.string().describe("The unique identifier (ID or name) of the Azure DevOps project."),
|
|
19
|
+
filterActivePlans: z.boolean().default(true).describe("Filter to include only active test plans. Defaults to true."),
|
|
20
|
+
includePlanDetails: z.boolean().default(false).describe("Include detailed information about each test plan."),
|
|
21
|
+
continuationToken: z.string().optional().describe("Token to continue fetching test plans from a previous request."),
|
|
22
|
+
}, async ({ project, filterActivePlans, includePlanDetails, continuationToken }) => {
|
|
23
|
+
try {
|
|
24
|
+
const owner = ""; //making owner an empty string untill we can figure out how to get owner id
|
|
25
|
+
const connection = await connectionProvider();
|
|
26
|
+
const testPlanApi = await connection.getTestPlanApi();
|
|
27
|
+
const testPlans = await testPlanApi.getTestPlans(project, owner, continuationToken, includePlanDetails, filterActivePlans);
|
|
28
|
+
return {
|
|
29
|
+
content: [{ type: "text", text: JSON.stringify(testPlans, null, 2) }],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
|
|
34
|
+
return {
|
|
35
|
+
content: [{ type: "text", text: `Error listing test plans: ${errorMessage}` }],
|
|
36
|
+
isError: true,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
server.tool(Test_Plan_Tools.create_test_plan, "Creates a new test plan in the project.", {
|
|
41
|
+
project: z.string().describe("The unique identifier (ID or name) of the Azure DevOps project where the test plan will be created."),
|
|
42
|
+
name: z.string().describe("The name of the test plan to be created."),
|
|
43
|
+
iteration: z.string().describe("The iteration path for the test plan"),
|
|
44
|
+
description: z.string().optional().describe("The description of the test plan"),
|
|
45
|
+
startDate: z.string().optional().describe("The start date of the test plan"),
|
|
46
|
+
endDate: z.string().optional().describe("The end date of the test plan"),
|
|
47
|
+
areaPath: z.string().optional().describe("The area path for the test plan"),
|
|
48
|
+
}, async ({ project, name, iteration, description, startDate, endDate, areaPath }) => {
|
|
49
|
+
try {
|
|
50
|
+
const connection = await connectionProvider();
|
|
51
|
+
const testPlanApi = await connection.getTestPlanApi();
|
|
52
|
+
const testPlanToCreate = {
|
|
53
|
+
name,
|
|
54
|
+
iteration,
|
|
55
|
+
description,
|
|
56
|
+
startDate: startDate ? new Date(startDate) : undefined,
|
|
57
|
+
endDate: endDate ? new Date(endDate) : undefined,
|
|
58
|
+
areaPath,
|
|
59
|
+
};
|
|
60
|
+
const createdTestPlan = await testPlanApi.createTestPlan(testPlanToCreate, project);
|
|
61
|
+
return {
|
|
62
|
+
content: [{ type: "text", text: JSON.stringify(createdTestPlan, null, 2) }],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
|
|
67
|
+
return {
|
|
68
|
+
content: [{ type: "text", text: `Error creating test plan: ${errorMessage}` }],
|
|
69
|
+
isError: true,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
server.tool(Test_Plan_Tools.create_test_suite, "Creates a new test suite in a test plan.", {
|
|
74
|
+
project: z.string().describe("Project ID or project name"),
|
|
75
|
+
planId: z.number().describe("ID of the test plan that contains the suites"),
|
|
76
|
+
parentSuiteId: z.number().describe("ID of the parent suite under which the new suite will be created, if not given by user this can be id of a root suite of the test plan"),
|
|
77
|
+
name: z.string().describe("Name of the child test suite"),
|
|
78
|
+
}, async ({ project, planId, parentSuiteId, name }) => {
|
|
79
|
+
try {
|
|
80
|
+
const connection = await connectionProvider();
|
|
81
|
+
const testPlanApi = await connection.getTestPlanApi();
|
|
82
|
+
const testSuiteToCreate = {
|
|
83
|
+
name,
|
|
84
|
+
parentSuite: {
|
|
85
|
+
id: parentSuiteId,
|
|
86
|
+
name: "",
|
|
87
|
+
},
|
|
88
|
+
suiteType: 2,
|
|
89
|
+
};
|
|
90
|
+
const createdTestSuite = await testPlanApi.createTestSuite(testSuiteToCreate, project, planId);
|
|
91
|
+
return {
|
|
92
|
+
content: [{ type: "text", text: JSON.stringify(createdTestSuite, null, 2) }],
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
|
|
97
|
+
return {
|
|
98
|
+
content: [{ type: "text", text: `Error creating test suite: ${errorMessage}` }],
|
|
99
|
+
isError: true,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
server.tool(Test_Plan_Tools.add_test_cases_to_suite, "Adds existing test cases to a test suite.", {
|
|
104
|
+
project: z.string().describe("The unique identifier (ID or name) of the Azure DevOps project."),
|
|
105
|
+
planId: z.number().describe("The ID of the test plan."),
|
|
106
|
+
suiteId: z.number().describe("The ID of the test suite."),
|
|
107
|
+
testCaseIds: z.string().or(z.array(z.string())).describe("The ID(s) of the test case(s) to add. "),
|
|
108
|
+
}, async ({ project, planId, suiteId, testCaseIds }) => {
|
|
109
|
+
try {
|
|
110
|
+
const connection = await connectionProvider();
|
|
111
|
+
const testApi = await connection.getTestApi();
|
|
112
|
+
// If testCaseIds is an array, convert it to comma-separated string
|
|
113
|
+
const testCaseIdsString = Array.isArray(testCaseIds) ? testCaseIds.join(",") : testCaseIds;
|
|
114
|
+
const addedTestCases = await testApi.addTestCasesToSuite(project, planId, suiteId, testCaseIdsString);
|
|
115
|
+
return {
|
|
116
|
+
content: [{ type: "text", text: JSON.stringify(addedTestCases, null, 2) }],
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
|
|
121
|
+
return {
|
|
122
|
+
content: [{ type: "text", text: `Error adding test cases to suite: ${errorMessage}` }],
|
|
123
|
+
isError: true,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
server.tool(Test_Plan_Tools.create_test_case, "Creates a new test case work item.", {
|
|
128
|
+
project: z.string().describe("The unique identifier (ID or name) of the Azure DevOps project."),
|
|
129
|
+
title: z.string().describe("The title of the test case."),
|
|
130
|
+
steps: z
|
|
131
|
+
.string()
|
|
132
|
+
.optional()
|
|
133
|
+
.describe("The steps to reproduce the test case. Make sure to format each step as '1. Step one|Expected result one\n2. Step two|Expected result two. USE '|' as the delimiter between step and expected result. DO NOT use '|' in the description of the step or expected result."),
|
|
134
|
+
priority: z.number().optional().describe("The priority of the test case."),
|
|
135
|
+
areaPath: z.string().optional().describe("The area path for the test case."),
|
|
136
|
+
iterationPath: z.string().optional().describe("The iteration path for the test case."),
|
|
137
|
+
testsWorkItemId: z.number().optional().describe("Optional work item id that will be set as a Microsoft.VSTS.Common.TestedBy-Reverse link to the test case."),
|
|
138
|
+
}, async ({ project, title, steps, priority, areaPath, iterationPath, testsWorkItemId }) => {
|
|
139
|
+
try {
|
|
140
|
+
const connection = await connectionProvider();
|
|
141
|
+
const witClient = await connection.getWorkItemTrackingApi();
|
|
142
|
+
let stepsXml;
|
|
143
|
+
if (steps) {
|
|
144
|
+
stepsXml = convertStepsToXml(steps);
|
|
145
|
+
}
|
|
146
|
+
// Create JSON patch document for work item
|
|
147
|
+
const patchDocument = [];
|
|
148
|
+
patchDocument.push({
|
|
149
|
+
op: "add",
|
|
150
|
+
path: "/fields/System.Title",
|
|
151
|
+
value: title,
|
|
152
|
+
});
|
|
153
|
+
if (testsWorkItemId) {
|
|
154
|
+
patchDocument.push({
|
|
155
|
+
op: "add",
|
|
156
|
+
path: "/relations/-",
|
|
157
|
+
value: {
|
|
158
|
+
rel: "Microsoft.VSTS.Common.TestedBy-Reverse",
|
|
159
|
+
url: `${connection.serverUrl}/${project}/_apis/wit/workItems/${testsWorkItemId}`,
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
if (stepsXml) {
|
|
164
|
+
patchDocument.push({
|
|
165
|
+
op: "add",
|
|
166
|
+
path: "/fields/Microsoft.VSTS.TCM.Steps",
|
|
167
|
+
value: stepsXml,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
if (priority) {
|
|
171
|
+
patchDocument.push({
|
|
172
|
+
op: "add",
|
|
173
|
+
path: "/fields/Microsoft.VSTS.Common.Priority",
|
|
174
|
+
value: priority,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
if (areaPath) {
|
|
178
|
+
patchDocument.push({
|
|
179
|
+
op: "add",
|
|
180
|
+
path: "/fields/System.AreaPath",
|
|
181
|
+
value: areaPath,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
if (iterationPath) {
|
|
185
|
+
patchDocument.push({
|
|
186
|
+
op: "add",
|
|
187
|
+
path: "/fields/System.IterationPath",
|
|
188
|
+
value: iterationPath,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
const workItem = await witClient.createWorkItem({}, patchDocument, project, "Test Case");
|
|
192
|
+
return {
|
|
193
|
+
content: [{ type: "text", text: JSON.stringify(workItem, null, 2) }],
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
|
|
198
|
+
return {
|
|
199
|
+
content: [{ type: "text", text: `Error creating test case: ${errorMessage}` }],
|
|
200
|
+
isError: true,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
server.tool(Test_Plan_Tools.update_test_case_steps, "Update an existing test case work item.", {
|
|
205
|
+
id: z.number().describe("The ID of the test case work item to update."),
|
|
206
|
+
steps: z
|
|
207
|
+
.string()
|
|
208
|
+
.describe("The steps to reproduce the test case. Make sure to format each step as '1. Step one|Expected result one\n2. Step two|Expected result two. USE '|' as the delimiter between step and expected result. DO NOT use '|' in the description of the step or expected result."),
|
|
209
|
+
}, async ({ id, steps }) => {
|
|
210
|
+
try {
|
|
211
|
+
const connection = await connectionProvider();
|
|
212
|
+
const witClient = await connection.getWorkItemTrackingApi();
|
|
213
|
+
let stepsXml;
|
|
214
|
+
if (steps) {
|
|
215
|
+
stepsXml = convertStepsToXml(steps);
|
|
216
|
+
}
|
|
217
|
+
// Create JSON patch document for work item
|
|
218
|
+
const patchDocument = [];
|
|
219
|
+
if (stepsXml) {
|
|
220
|
+
patchDocument.push({
|
|
221
|
+
op: "add",
|
|
222
|
+
path: "/fields/Microsoft.VSTS.TCM.Steps",
|
|
223
|
+
value: stepsXml,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
const workItem = await witClient.updateWorkItem({}, patchDocument, id);
|
|
227
|
+
return {
|
|
228
|
+
content: [{ type: "text", text: JSON.stringify(workItem, null, 2) }],
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
|
|
233
|
+
return {
|
|
234
|
+
content: [{ type: "text", text: `Error updating test case steps: ${errorMessage}` }],
|
|
235
|
+
isError: true,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
server.tool(Test_Plan_Tools.list_test_cases, "Gets a list of test cases in the test plan.", {
|
|
240
|
+
project: z.string().describe("The unique identifier (ID or name) of the Azure DevOps project."),
|
|
241
|
+
planid: z.number().describe("The ID of the test plan."),
|
|
242
|
+
suiteid: z.number().describe("The ID of the test suite."),
|
|
243
|
+
}, async ({ project, planid, suiteid }) => {
|
|
244
|
+
try {
|
|
245
|
+
const connection = await connectionProvider();
|
|
246
|
+
const coreApi = await connection.getTestPlanApi();
|
|
247
|
+
const testcases = await coreApi.getTestCaseList(project, planid, suiteid);
|
|
248
|
+
return {
|
|
249
|
+
content: [{ type: "text", text: JSON.stringify(testcases, null, 2) }],
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
|
|
254
|
+
return {
|
|
255
|
+
content: [{ type: "text", text: `Error listing test cases: ${errorMessage}` }],
|
|
256
|
+
isError: true,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
server.tool(Test_Plan_Tools.test_results_from_build_id, "Gets a list of test results for a given project and build ID.", {
|
|
261
|
+
project: z.string().describe("The unique identifier (ID or name) of the Azure DevOps project."),
|
|
262
|
+
buildid: z.number().describe("The ID of the build."),
|
|
263
|
+
}, async ({ project, buildid }) => {
|
|
264
|
+
try {
|
|
265
|
+
const connection = await connectionProvider();
|
|
266
|
+
const coreApi = await connection.getTestResultsApi();
|
|
267
|
+
const testResults = await coreApi.getTestResultDetailsForBuild(project, buildid);
|
|
268
|
+
return {
|
|
269
|
+
content: [{ type: "text", text: JSON.stringify(testResults, null, 2) }],
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
|
|
274
|
+
return {
|
|
275
|
+
content: [{ type: "text", text: `Error fetching test results: ${errorMessage}` }],
|
|
276
|
+
isError: true,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
server.tool(Test_Plan_Tools.list_test_suites, "Retrieve a paginated list of test suites from an Azure DevOps project and Test Plan Id.", {
|
|
281
|
+
project: z.string().describe("The unique identifier (ID or name) of the Azure DevOps project."),
|
|
282
|
+
planId: z.number().describe("The ID of the test plan."),
|
|
283
|
+
continuationToken: z.string().optional().describe("Token to continue fetching test plans from a previous request."),
|
|
284
|
+
}, async ({ project, planId, continuationToken }) => {
|
|
285
|
+
try {
|
|
286
|
+
const connection = await connectionProvider();
|
|
287
|
+
const testPlanApi = await connection.getTestPlanApi();
|
|
288
|
+
const expand = SuiteExpand.Children;
|
|
289
|
+
const testSuites = await testPlanApi.getTestSuitesForPlan(project, planId, expand, continuationToken);
|
|
290
|
+
// The API returns a flat list where the root suite is first, followed by all nested suites
|
|
291
|
+
// We need to build a proper hierarchy by creating a map and assembling the tree
|
|
292
|
+
// Create a map of all suites by ID for quick lookup
|
|
293
|
+
const suiteMap = new Map();
|
|
294
|
+
testSuites.forEach((suite) => {
|
|
295
|
+
suiteMap.set(suite.id, {
|
|
296
|
+
id: suite.id,
|
|
297
|
+
name: suite.name,
|
|
298
|
+
parentSuiteId: suite.parentSuite?.id,
|
|
299
|
+
children: [],
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
// Build the hierarchy by linking children to parents
|
|
303
|
+
const roots = [];
|
|
304
|
+
suiteMap.forEach((suite) => {
|
|
305
|
+
if (suite.parentSuiteId && suiteMap.has(suite.parentSuiteId)) {
|
|
306
|
+
// This is a child suite, add it to its parent's children array
|
|
307
|
+
const parent = suiteMap.get(suite.parentSuiteId);
|
|
308
|
+
parent.children.push(suite);
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
// This is a root suite (no parent or parent not in map)
|
|
312
|
+
roots.push(suite);
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
// Clean up the output - remove parentSuiteId and empty children arrays
|
|
316
|
+
const cleanSuite = (suite) => {
|
|
317
|
+
const cleaned = {
|
|
318
|
+
id: suite.id,
|
|
319
|
+
name: suite.name,
|
|
320
|
+
};
|
|
321
|
+
if (suite.children && suite.children.length > 0) {
|
|
322
|
+
cleaned.children = suite.children.map((child) => cleanSuite(child));
|
|
323
|
+
}
|
|
324
|
+
return cleaned;
|
|
325
|
+
};
|
|
326
|
+
const result = roots.map((root) => cleanSuite(root));
|
|
327
|
+
return {
|
|
328
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
catch (error) {
|
|
332
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
|
|
333
|
+
return {
|
|
334
|
+
content: [{ type: "text", text: `Error listing test suites: ${errorMessage}` }],
|
|
335
|
+
isError: true,
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
/*
|
|
341
|
+
* Helper function to convert steps text to XML format required
|
|
342
|
+
*/
|
|
343
|
+
function convertStepsToXml(steps) {
|
|
344
|
+
// Accepts steps in the format: '1. Step one|Expected result one\n2. Step two|Expected result two'
|
|
345
|
+
const stepsLines = steps.split("\n").filter((line) => line.trim() !== "");
|
|
346
|
+
let xmlSteps = `<steps id="0" last="${stepsLines.length}">`;
|
|
347
|
+
for (let i = 0; i < stepsLines.length; i++) {
|
|
348
|
+
const stepLine = stepsLines[i].trim();
|
|
349
|
+
if (stepLine) {
|
|
350
|
+
// Split step and expected result by '|', fallback to default if not provided
|
|
351
|
+
const [stepPart, expectedPart] = stepLine.split("|").map((s) => s.trim());
|
|
352
|
+
const stepMatch = stepPart.match(/^(\d+)\.\s*(.+)$/);
|
|
353
|
+
const stepText = stepMatch ? stepMatch[2] : stepPart;
|
|
354
|
+
const expectedText = expectedPart || "Verify step completes successfully";
|
|
355
|
+
xmlSteps += `
|
|
356
|
+
<step id="${i + 1}" type="ActionStep">
|
|
357
|
+
<parameterizedString isformatted="true">${escapeXml(stepText)}</parameterizedString>
|
|
358
|
+
<parameterizedString isformatted="true">${escapeXml(expectedText)}</parameterizedString>
|
|
359
|
+
</step>`;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
xmlSteps += "</steps>";
|
|
363
|
+
return xmlSteps;
|
|
364
|
+
}
|
|
365
|
+
/*
|
|
366
|
+
* Helper function to escape XML special characters
|
|
367
|
+
*/
|
|
368
|
+
function escapeXml(unsafe) {
|
|
369
|
+
return unsafe.replace(/[<>&'"]/g, (c) => {
|
|
370
|
+
switch (c) {
|
|
371
|
+
case "<":
|
|
372
|
+
return "<";
|
|
373
|
+
case ">":
|
|
374
|
+
return ">";
|
|
375
|
+
case "&":
|
|
376
|
+
return "&";
|
|
377
|
+
case "'":
|
|
378
|
+
return "'";
|
|
379
|
+
case '"':
|
|
380
|
+
return """;
|
|
381
|
+
default:
|
|
382
|
+
return c;
|
|
383
|
+
}
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
export { Test_Plan_Tools, configureTestPlanTools };
|
|
387
|
+
//# sourceMappingURL=test-plans.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-plans.js","sourceRoot":"","sources":["../../src/tools/test-plans.ts"],"names":[],"mappings":"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"}
|