Skip to content

Commit f4d5a23

Browse files
committed
See if splitting is causing the mismatch output issues in tests
1 parent 1ac847f commit f4d5a23

File tree

9 files changed

+20
-11
lines changed

9 files changed

+20
-11
lines changed

src/DiagnosticsManager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import stripAnsi = require("strip-ansi");
1919
import configuration from "./configuration";
2020
import { SwiftExecution } from "./tasks/SwiftExecution";
2121
import { WorkspaceContext } from "./WorkspaceContext";
22-
import { checkIfBuildComplete } from "./utilities/tasks";
22+
import { checkIfBuildComplete, lineBreakRegex } from "./utilities/tasks";
2323

2424
interface ParsedDiagnostic {
2525
uri: string;
@@ -278,7 +278,7 @@ export class DiagnosticsManager implements vscode.Disposable {
278278
disposables.push(
279279
swiftExecution.onDidWrite(data => {
280280
const sanitizedData = (remainingData || "") + stripAnsi(data);
281-
const lines = sanitizedData.split(/\r\n|\n|\r/gm);
281+
const lines = sanitizedData.split(lineBreakRegex);
282282
// If ends with \n then will be "" and there's no affect.
283283
// Otherwise want to keep remaining data to pre-pend next write
284284
remainingData = lines.pop();

src/SwiftPackage.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { isPathInsidePath } from "./utilities/filesystem";
2020
import { SwiftToolchain } from "./toolchain/toolchain";
2121
import { BuildFlags } from "./toolchain/BuildFlags";
2222
import { SwiftOutputChannel } from "./ui/SwiftOutputChannel";
23+
import { lineBreakRegex } from "./utilities/tasks";
2324

2425
/** Swift Package Manager contents */
2526
interface PackageContents {
@@ -313,7 +314,7 @@ export class SwiftPackage {
313314
cwd: folder.fsPath,
314315
});
315316
const plugins: PackagePlugin[] = [];
316-
const lines = stdout.split("\n").map(item => item.trim());
317+
const lines = stdout.split(lineBreakRegex).map(item => item.trim());
317318
for (const line of lines) {
318319
// ‘generate-documentation’ (plugin ‘Swift-DocC’ in package ‘SwiftDocCPlugin’)
319320
const pluginMatch = /^(.*) \(plugin (.*) in package (.*)\)/.exec(line);

src/TestExplorer/TestParsers/SwiftTestingOutputParser.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { ITestRunState } from "./TestRunState";
2424
import { TestClass } from "../TestDiscovery";
2525
import { sourceLocationToVSCodeLocation } from "../../utilities/utilities";
2626
import { exec } from "child_process";
27+
import { lineBreakRegex } from "../../utilities/tasks";
2728

2829
// All events produced by a swift-testing run will be one of these three types.
2930
// Detailed information about swift-testing's JSON schema is available here:
@@ -235,7 +236,7 @@ export class SwiftTestingOutputParser {
235236
* @param chunk A chunk of stdout emitted during a test run.
236237
*/
237238
public parseStdout(chunk: string, runState: ITestRunState) {
238-
for (const line of chunk.split("\n")) {
239+
for (const line of chunk.split(lineBreakRegex)) {
239240
if (line.trim().length > 0) {
240241
runState.recordOutput(undefined, `${line}\r\n`);
241242
}

src/TestExplorer/TestParsers/XCTestOutputParser.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { sourceLocationToVSCodeLocation } from "../../utilities/utilities";
1717
import { MarkdownString, Location } from "vscode";
1818
// eslint-disable-next-line @typescript-eslint/no-require-imports
1919
import stripAnsi = require("strip-ansi");
20+
import { lineBreakRegex } from "../../utilities/tasks";
2021

2122
/** Regex for parsing XCTest output */
2223
interface TestRegex {
@@ -190,7 +191,7 @@ export class XCTestOutputParser implements IXCTestOutputParser {
190191
// which we don't care about.
191192
const output = process.platform === "win32" ? stripAnsi(rawOutput) : rawOutput;
192193
const output2 = output.replace(/\r\n/g, "\n");
193-
const lines = output2.split("\n");
194+
const lines = output2.split(lineBreakRegex);
194195
if (runState.excess) {
195196
lines[0] = runState.excess + lines[0];
196197
}

src/process-list/BaseProcessList.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import * as util from "util";
1616
import * as child_process from "child_process";
1717
import { Process, ProcessList } from ".";
18+
import { lineBreakRegex } from "../utilities/tasks";
1819

1920
const exec = util.promisify(child_process.execFile);
2021

@@ -46,7 +47,7 @@ export abstract class BaseProcessList implements ProcessList {
4647
maxBuffer: 10 * 1024 * 1024, // Increase the max buffer size to 10Mb
4748
});
4849
const parser = this.createParser();
49-
return (await execCommand).stdout.split("\n").flatMap(line => {
50+
return (await execCommand).stdout.split(lineBreakRegex).flatMap(line => {
5051
const process = parser(line.toString());
5152
if (!process || process.id === execCommand.child.pid) {
5253
return [];

src/toolchain/toolchain.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import { Version } from "../utilities/version";
2525
import { BuildFlags } from "./BuildFlags";
2626
import { Sanitizer } from "./Sanitizer";
2727
import { SwiftlyConfig } from "./ToolchainVersion";
28+
import { lineBreakRegex } from "../utilities/tasks";
2829

2930
/**
3031
* Contents of **Info.plist** on Windows.
@@ -235,7 +236,8 @@ export class SwiftToolchain {
235236
execFile("mdfind", [`kMDItemCFBundleIdentifier == 'com.apple.dt.Xcode'`]),
236237
this.getXcodeDeveloperDir(),
237238
]);
238-
const spotlightXcodes = mdfindOutput.length > 0 ? mdfindOutput.trimEnd().split("\n") : [];
239+
const spotlightXcodes =
240+
mdfindOutput.length > 0 ? mdfindOutput.trimEnd().split(lineBreakRegex) : [];
239241
const selectedXcode = this.getXcodeDirectory(xcodeDeveloperDir);
240242

241243
// Combine the results from both commands
@@ -933,7 +935,7 @@ export class SwiftToolchain {
933935
}
934936
const { stdout } = await execSwift(["--version"], { swiftExecutable });
935937
return {
936-
compilerVersion: stdout.split("\n", 1)[0],
938+
compilerVersion: stdout.split(lineBreakRegex, 1)[0],
937939
paths: { runtimeLibraryPaths: [""] },
938940
};
939941
} catch {

src/ui/SwiftBuildStatus.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import * as vscode from "vscode";
1818
import configuration, { ShowBuildStatusOptions } from "../configuration";
1919
import { RunningTask, StatusItem } from "./StatusItem";
2020
import { SwiftExecution } from "../tasks/SwiftExecution";
21-
import { checkIfBuildComplete } from "../utilities/tasks";
21+
import { checkIfBuildComplete, lineBreakRegex } from "../utilities/tasks";
2222

2323
/**
2424
* Progress of `swift` build, parsed from the
@@ -121,7 +121,7 @@ export class SwiftBuildStatus implements vscode.Disposable {
121121
// We'll process data one line at a time, in reverse order
122122
// since the latest interesting message is all we need to
123123
// be concerned with
124-
const lines = sanitizedData.split(/\r\n|\n|\r/gm).reverse();
124+
const lines = sanitizedData.split(lineBreakRegex).reverse();
125125
for (const line of lines) {
126126
if (checkIfBuildComplete(line)) {
127127
update(name);

src/utilities/tasks.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import * as path from "path";
1515
import * as vscode from "vscode";
1616

17+
export const lineBreakRegex = /\r\n|\n|\r/gm;
18+
1719
export function resolveTaskCwd(task: vscode.Task, cwd?: string): string | undefined {
1820
const scopeWorkspaceFolder = getScopeWorkspaceFolder(task);
1921
if (!cwd) {

test/integration-tests/testexplorer/XCTestOutputParser.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { sourceLocationToVSCodeLocation } from "../../../src/utilities/utilities
2424
import { TestXUnitParser } from "../../../src/TestExplorer/TestXUnitParser";
2525
import { activateExtensionForSuite } from "../utilities/testutilities";
2626
import { SwiftOutputChannel } from "../../../src/ui/SwiftOutputChannel";
27+
import { lineBreakRegex } from "../../../src/utilities/tasks";
2728

2829
enum ParserTestKind {
2930
Regular = "Regular Test Run",
@@ -33,7 +34,7 @@ enum ParserTestKind {
3334
suite("XCTestOutputParser Suite", () => {
3435
function inputToTestOutput(input: string) {
3536
return input
36-
.split("\n")
37+
.split(lineBreakRegex)
3738
.slice(0, -1)
3839
.map(line => `${line}\r\n`);
3940
}

0 commit comments

Comments
 (0)