Skip to content

Commit 5e410d3

Browse files
committed
Fix the end position of tables and use actual input document in system tests
1 parent 92338fd commit 5e410d3

4 files changed

Lines changed: 30 additions & 40 deletions

File tree

src/tableFinding/tableFinder.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export class TableFinder {
1616
let { tableStartRow, tableEndRow } = this.getNextResult(rows, previousRowIndex);
1717
if (tableStartRow == null || tableEndRow == null)
1818
break;
19-
result.push(this.getRangeForLines(rows, tableStartRow, tableEndRow));
19+
result.push(this.getRangeForLines(tableStartRow, tableEndRow));
2020
previousRowIndex = tableEndRow;
2121
}
2222

@@ -54,7 +54,7 @@ export class TableFinder {
5454
// make sure there is at least 1 row after the separator
5555
return tableEndRow > separatorRowIndex + 1
5656
? {
57-
tableStartRow: tableStartRow ,
57+
tableStartRow: tableStartRow,
5858
tableEndRow: tableEndRow - 1
5959
}
6060
: null;
@@ -65,10 +65,10 @@ export class TableFinder {
6565
return relevantRows.join(EOL);
6666
}
6767

68-
private getRangeForLines(rows: string[], startLine: number, endLine: number): vscode.Range {
68+
private getRangeForLines(startLine: number, endLine: number): vscode.Range {
6969
return new vscode.Range(
7070
new vscode.Position(startLine, 0),
71-
new vscode.Position(endLine, rows[endLine].length)
71+
new vscode.Position(endLine, Number.MAX_SAFE_INTEGER) // avoid calculating the column in the editor, this will be validated by vscode
7272
);
7373
}
7474
}

test/stubs/markdownTextDocumentStub.ts

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -38,24 +38,6 @@ export class MarkdownTextDocumentStub implements vscode.TextDocument {
3838
);
3939
}
4040

41-
applyEdits(edits: vscode.TextEdit[]): void {
42-
let original = this._lines.join(EOL);
43-
for (let edit of edits) {
44-
const startIndex = this.indexOf(edit.range.start);
45-
const endIndex = this.indexOf(edit.range.end);
46-
original = original.substring(0, startIndex) + edit.newText + original.substring(endIndex);
47-
}
48-
this.setLines(original);
49-
}
50-
51-
indexOf(position: vscode.Position): number {
52-
let result = 0;
53-
for (let i = 0; i < position.line; i++) {
54-
result += this._lines[i].length;
55-
}
56-
result += position.character;
57-
return result;
58-
}
5941

6042
lineAt(param: number): vscode.TextLine;
6143
lineAt(param: vscode.Position): vscode.TextLine;

test/systemTests/tableRangePrettyfierFactory.ts

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,21 @@ export class PrettyfierFromFile {
2929
}
3030

3131
public assertPrettyfiedAsExpected(fileNamePrefix: string): void {
32-
const inputFileContents = this.readFileContents(`${fileNamePrefix}-input.md`);
33-
const edits = this.makeTextEdit(inputFileContents);
34-
const expectedFileContents = this.readFileContents(`${fileNamePrefix}-expected.md`);
35-
this.assertEditsPrettyfied(inputFileContents, edits, expectedFileContents);
32+
vscode.workspace.openTextDocument(`${fileNamePrefix}-input.md`)
33+
.then(inputDocument => {
34+
const edits = this.formatFile(inputDocument);
35+
const expectedFileContents = this.readFileContents(`${fileNamePrefix}-expected.md`);
36+
this.assertEditsPrettyfied(inputDocument, edits, expectedFileContents);
37+
});
3638
}
3739

38-
private assertEditsPrettyfied(originalInput: string, edits: vscode.TextEdit[], expected: string): void {
39-
const doc = new MarkdownTextDocumentStub(originalInput);
40-
doc.applyEdits(edits);
41-
const actual = doc.getText();
40+
private assertEditsPrettyfied(inputDocument: vscode.TextDocument, edits: vscode.TextEdit[], expected: string): void {
41+
let actual = inputDocument.getText();
42+
for (let edit of edits) {
43+
const startIndex = inputDocument.offsetAt(edit.range.start);
44+
const endIndex = inputDocument.offsetAt(inputDocument.validatePosition(edit.range.end));
45+
actual = actual.substring(0, startIndex) + edit.newText + actual.substring(endIndex);
46+
}
4247

4348
const expectedLines = expected.split(/\r\n|\r|\n/);
4449
const actualLines = actual.split(/\r\n|\r|\n/);
@@ -48,13 +53,16 @@ export class PrettyfierFromFile {
4853
assert.equal(actualLines[i], expectedLines[i]);
4954
}
5055

51-
private makeTextEdit(fileContents: string): vscode.TextEdit[] {
52-
const doc = new MarkdownTextDocumentStub(fileContents);
56+
private formatFile(doc: vscode.TextDocument): vscode.TextEdit[] {
5357
return this.createPrettyfier().provideDocumentFormattingEdits(doc, null, null);
5458
}
5559

5660
private readFileContents(fileName: string) {
57-
return fs.readFileSync(path.resolve(__dirname, fileName), 'utf-8');
61+
return fs.readFileSync(this.pathFor(fileName), 'utf-8');
62+
}
63+
64+
private pathFor(fileName: string) {
65+
return path.resolve(__dirname, fileName);
5866
}
5967

6068
private createPrettyfier(): TableDocumentPrettyfier {

test/unitTests/tableFinding/tableFinder.test.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ suite("TableFinder tests", () => {
3838
let tableRanges = sut.getTables(document);
3939

4040
assert.equal(tableRanges.length, 1);
41-
assert.deepStrictEqual(tableRanges[0], new vscode.Range(0, 0, 3, 27));
41+
assert.deepStrictEqual(tableRanges[0], new vscode.Range(0, 0, 3, Number.MAX_SAFE_INTEGER));
4242
});
4343

4444
test("getTables() for single table the expected range is returned", () => {
@@ -53,7 +53,7 @@ suite("TableFinder tests", () => {
5353
let tableRanges = sut.getTables(document);
5454

5555
assert.equal(tableRanges.length, 1);
56-
assert.deepStrictEqual(tableRanges[0], new vscode.Range(1, 0, 4, 27));
56+
assert.deepStrictEqual(tableRanges[0], new vscode.Range(1, 0, 4, Number.MAX_SAFE_INTEGER));
5757
});
5858

5959
test("getTables() for two tables the expected ranges are returned", () => {
@@ -72,8 +72,8 @@ suite("TableFinder tests", () => {
7272
let tableRanges = sut.getTables(document);
7373

7474
assert.equal(tableRanges.length, 2);
75-
assert.deepStrictEqual(tableRanges[0], new vscode.Range(1, 0, 4, 27));
76-
assert.deepStrictEqual(tableRanges[1], new vscode.Range(6, 0, 9, 27));
75+
assert.deepStrictEqual(tableRanges[0], new vscode.Range(1, 0, 4, Number.MAX_SAFE_INTEGER));
76+
assert.deepStrictEqual(tableRanges[1], new vscode.Range(6, 0, 9, Number.MAX_SAFE_INTEGER));
7777
});
7878

7979
test("getTables() jumps over invalid tables", () => {
@@ -95,8 +95,8 @@ suite("TableFinder tests", () => {
9595
let tableRanges = sut.getTables(document);
9696

9797
assert.equal(tableRanges.length, 2);
98-
assert.deepStrictEqual(tableRanges[0], new vscode.Range(1, 0, 4, 27));
99-
assert.deepStrictEqual(tableRanges[1], new vscode.Range(9, 0, 12, 27));
98+
assert.deepStrictEqual(tableRanges[0], new vscode.Range(1, 0, 4, Number.MAX_SAFE_INTEGER));
99+
assert.deepStrictEqual(tableRanges[1], new vscode.Range(9, 0, 12, Number.MAX_SAFE_INTEGER));
100100
});
101101

102102
test("getTables() for table with alignments the expected range is returned", () => {
@@ -111,7 +111,7 @@ suite("TableFinder tests", () => {
111111
let tableRanges = sut.getTables(document);
112112

113113
assert.equal(tableRanges.length, 1);
114-
assert.deepStrictEqual(tableRanges[0], new vscode.Range(1, 0, 4, 27));
114+
assert.deepStrictEqual(tableRanges[0], new vscode.Range(1, 0, 4, Number.MAX_SAFE_INTEGER));
115115
});
116116

117117
function getSut() {

0 commit comments

Comments
 (0)