summaryrefslogtreecommitdiffstats
path: root/src/test/CppTests/TestSetup.ts
blob: 2e6c7f1f46724a735c96f1603f869b2420e95fdc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import * as vscode from "vscode";

import CodeParser from "../../Common/ICodeParser";
import { IDocGen } from "../../Common/IDocGen";
import { Config } from "../../Config";
import * as myExtension from "../../extension";
import CppParser from "../../Lang/Cpp/CppParser";
import MockDocument from "../tools/MockDocument";
import MockEditor from "../tools/MockEditor";
import MockLine from "../tools/MockLine";
import MockPosition from "../tools/MockPosition";
import MockSelection from "../tools/MockSelection";

export default class TestSetup {
    public cfg: Config;
    public firstLine: number;
    private editor: MockEditor;

    constructor(method: string) {
        this.cfg = new Config();
        this.firstLine = 0;
        this.SetLine(method);
    }

    public SetLine(method: string): TestSetup {
        return this.SetLines([method]);
    }

    public SetLines(lines: string[]): TestSetup {
        let mockLines: MockLine[];

        // Add two empty lines with just the indentation
        // since one is for the triggersequence line.
        // And the other is if the next empty line.
        if (lines.length > 0) {
            const indent: string = lines[0].match("^\\s*")[0];

            mockLines = [indent, indent].concat(lines)
                .map((l) => new MockLine(l));
        }

        const selection: MockSelection =  new MockSelection(new MockPosition(this.firstLine, 0));
        const doc: MockDocument = new MockDocument(mockLines);

        this.editor = new MockEditor(selection, doc);

        return this;
    }

    public GetResult(): string {
        let parser: CodeParser;
        parser = new CppParser(this.cfg);

        const gen: IDocGen = parser.Parse(this.editor);
        // tslint:disable-next-line:max-line-length
        gen.GenerateDoc(new vscode.Range(new vscode.Position(this.firstLine, 0), new vscode.Position(this.firstLine, 0)));

        return this.editor.editBuilder.text;
    }
}