diff --git a/src/formatters/junitFormatter.ts b/src/formatters/junitFormatter.ts
index b0ccf13b663..385745a056f 100644
--- a/src/formatters/junitFormatter.ts
+++ b/src/formatters/junitFormatter.ts
@@ -41,9 +41,11 @@ export class Formatter extends AbstractFormatter {
};
/* tslint:enable:object-literal-sort-keys */
- public format(failures: RuleFailure[]): string {
+ public format(failures: RuleFailure[], _fixes?: RuleFailure[], fileNames?: string[]): string {
let output = '';
+ const failureFileNames: Set = new Set([...failures.map(f => f.getFileName())]);
+
if (failures.length !== 0) {
const failuresSorted = failures.sort((a, b) =>
a.getFileName().localeCompare(b.getFileName()),
@@ -76,6 +78,17 @@ export class Formatter extends AbstractFormatter {
}
}
+ if (fileNames !== undefined && fileNames.length !== 0) {
+ // Filter out files which have had a failure associated with them.
+ const filteredFileNames = fileNames.filter(fileName => !failureFileNames.has(fileName));
+
+ for (const fileName of filteredFileNames) {
+ output += ``;
+ output += ``;
+ output += ``;
+ }
+ }
+
output += "";
return output;
}
diff --git a/test/formatters/junitFormatterTests.ts b/test/formatters/junitFormatterTests.ts
index 519e712a564..6436177339f 100644
--- a/test/formatters/junitFormatterTests.ts
+++ b/test/formatters/junitFormatterTests.ts
@@ -106,14 +106,75 @@ describe("JUnit Formatter", () => {
`.replace(/>\s+/g, ">"); // Remove whitespace between tags;
- assert.equal(formatter.format(failures), expectedResult);
+ assert.equal(formatter.format(failures, [], [TEST_FILE_1, TEST_FILE_2]), expectedResult);
});
it("handles no failures", () => {
- const result = formatter.format([]);
- assert.deepEqual(
- result,
- '',
- );
+ const result = formatter.format([], [], ["test1.ts", "test2.ts", "test3.ts"]);
+ const expectedResult = `
+
+
+
+
+
+
+
+
+
+
+ `.replace(/>\s+/g, ">");
+
+ assert.equal(result, expectedResult);
+ });
+
+ it("handles a mixture of failures and successes", () => {
+ const maxPosition1 = sourceFile1.getFullWidth();
+
+ const failures = [
+ createFailure(sourceFile1, 0, 1, "first failure", "first-name", undefined, "error"),
+ createFailure(
+ sourceFile1,
+ 2,
+ 3,
+ "&<>'\" should be escaped",
+ "escape",
+ undefined,
+ "error",
+ ),
+ createFailure(
+ sourceFile1,
+ maxPosition1 - 1,
+ maxPosition1,
+ "last failure",
+ "last-name",
+ undefined,
+ "error",
+ ),
+ ];
+
+ const expectedResult = `
+
+
+
+ first failure Line 1, Column 1
+
+
+ &<>'" should be escaped Line 1, Column 3
+
+
+ last failure Line 6, Column 3
+
+
+
+
+
+
+
+
+ `.replace(/>\s+/g, ">");
+
+ const result = formatter.format(failures, [], [TEST_FILE_1, "test1.ts", "test2.ts"]);
+
+ assert.equal(result, expectedResult);
});
});