protected processStackTrace()

in src/runners/baseRunner/RunnerResultAnalyzer.ts [16:38]


    protected processStackTrace(data: string, traces: MarkdownString, assertionFailure: TestMessage | undefined, currentItem: TestItem | undefined, projectName: string): void {
        const traceRegExp: RegExp = /(\s?at\s+)([\w$\\.]+\/)?((?:[\w$]+\.)+[<\w$>]+)\(([\w-$]+\.java):(\d+)\)/;

        const traceResults: RegExpExecArray | null = traceRegExp.exec(data);
        if (traceResults && traceResults.length === 6) {
            traces.appendText(traceResults[1]);
            traces.appendMarkdown(`${(traceResults[2] || '') + traceResults[3]}([${traceResults[4]}:${traceResults[5]}](command:_java.test.openStackTrace?${encodeURIComponent(JSON.stringify([data, projectName]))}))`);
            if (currentItem && path.basename(currentItem.uri?.fsPath || '') === traceResults[4]) {
                const lineNum: number = parseInt(traceResults[5], 10);
                if (currentItem.uri) {
                    this.testMessageLocation = new Location(currentItem.uri, new Range(lineNum - 1, 0, lineNum, 0));
                }
                if (assertionFailure) {
                    assertionFailure.location = this.testMessageLocation;
                    setTestState(this.testContext.testRun, currentItem, TestResultState.Failed, assertionFailure);
                }
            }
        } else {
            // '<' & '>' will be escaped when displaying the test message, so replacing them to '[' & ']'.
            traces.appendText(data.replace(/</g, '[').replace(/>/g, ']'));
        }
        traces.appendMarkdown('<br/>');
    }