Skip to content

Commit 1d59a8d

Browse files
committed
Fix bug in kv tokenizer and parser treating all ranges to be + 1 in size
1 parent 01ae01a commit 1d59a8d

7 files changed

Lines changed: 211 additions & 193 deletions

File tree

packages/kv/.vscode/launch.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"type": "node",
55
"name": "vscode-jest-tests.v2",
66
"request": "launch",
7-
"program": "${workspaceFolder}/../../node_modules/.bin/jest",
7+
"program": "${workspaceFolder}/node_modules/.bin/jest",
88
"args": [
99
"--runInBand",
1010
"--watchAll=false",
@@ -18,7 +18,7 @@
1818
"internalConsoleOptions": "neverOpen",
1919
"disableOptimisticBPs": true,
2020
"windows": {
21-
"program": "${workspaceFolder}/../../node_modules/jest/bin/jest"
21+
"program": "${workspaceFolder}/node_modules/jest/bin/jest"
2222
}
2323
}
2424
]

packages/kv/.vscode/settings.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
{
2-
"jest.jestCommandLine": "npm run test --"
2+
"jest.jestCommandLine": "npm run test --",
3+
"files.exclude": {
4+
"lib/*": true
5+
}
36
}

packages/kv/src/formatter.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ Test2 {
4040
const originalRoot = kvTree.getRootItems()[0];
4141
const root = formatter.indentItem(originalRoot, 0);
4242
expect(root.getKey().getPosition().getRange().getStart()).toBe(0);
43-
expect(root.getKey().getPosition().getRange().getEnd()).toBe(4);
43+
expect(root.getKey().getPosition().getRange().getEnd()).toBe(3);
4444

4545
const item1 = root.getChildren()![0];
4646
expect(item1.getKey().getPosition().getRange().getStart()).toBe(4);

packages/kv/src/parser-types.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export class Range {
7777
private start: number;
7878
private end: number;
7979

80-
constructor(start: number, end: number) {
80+
constructor(start: number, end: number = start) {
8181
if(start < 0) {
8282
throw new RangeError("Start must not be less than zero");
8383
}
@@ -109,6 +109,10 @@ export class Range {
109109
return this.end;
110110
}
111111

112+
public hasNoLength(): boolean {
113+
return this.getLength() == 0;
114+
}
115+
112116
public moveBy(delta: number): void {
113117
if(!Number.isInteger(delta)) {
114118
throw new RangeError("Delta must not be a float");

packages/kv/src/parser.test.ts

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,15 @@ describe("Parse Successes", () => {
2727
expect(root.getKey().getContent()).toBe("Test");
2828
expect(root.getKey().getPosition().getLine()).toBe(0);
2929
expect(root.getKey().getPosition().getRange().getStart()).toBe(0);
30-
expect(root.getKey().getPosition().getRange().getEnd()).toBe(4);
30+
expect(root.getKey().getPosition().getRange().getEnd()).toBe(3);
3131
expect(root.getOpeningBrace()).not.toBeNull();
3232
expect(root.getOpeningBrace()!.getPosition().getLine()).toBe(0);
3333
expect(root.getOpeningBrace()!.getPosition().getRange().getStart()).toBe(5);
34-
expect(root.getOpeningBrace()!.getPosition().getRange().getEnd()).toBe(6);
34+
expect(root.getOpeningBrace()!.getPosition().getRange().getEnd()).toBe(5);
3535
expect(root.getClosingBrace()).not.toBeNull();
3636
expect(root.getClosingBrace()!.getPosition().getLine()).toBe(12);
3737
expect(root.getClosingBrace()!.getPosition().getRange().getStart()).toBe(0);
38-
expect(root.getClosingBrace()!.getPosition().getRange().getEnd()).toBe(1);
38+
expect(root.getClosingBrace()!.getPosition().getRange().getEnd()).toBe(0);
3939
expect(root.hasCondition()).toBeFalsy();
4040
expect(root.getCondition()).toBeNull();
4141
expect(root.getChildren()).not.toBeNull();
@@ -48,15 +48,15 @@ describe("Parse Successes", () => {
4848
expect(item1.getKey().getContent()).toBe("\"item1\"");
4949
expect(item1.getKey().getPosition().getLine()).toBe(1);
5050
expect(item1.getKey().getPosition().getRange().getStart()).toBe(4);
51-
expect(item1.getKey().getPosition().getRange().getEnd()).toBe(11);
51+
expect(item1.getKey().getPosition().getRange().getEnd()).toBe(10);
5252
expect(item1.hasCondition()).toBeFalsy();
5353
expect(item1.getCondition()).toBeNull();
5454
expect(item1.getValues()).not.toBeNull();
5555
expect(item1.getValues()!.length).toBe(1);
5656
expect(item1.getValues()![0].getContent()).toBe("\"value1\"");
5757
expect(item1.getValues()![0].getPosition().getLine()).toBe(1);
5858
expect(item1.getValues()![0].getPosition().getRange().getStart()).toBe(12);
59-
expect(item1.getValues()![0].getPosition().getRange().getEnd()).toBe(20);
59+
expect(item1.getValues()![0].getPosition().getRange().getEnd()).toBe(19);
6060

6161
const item2 = root.getChildren()![1];
6262
expect(item2.isRoot()).toBeFalsy();
@@ -65,15 +65,15 @@ describe("Parse Successes", () => {
6565
expect(item2.getKey().getContent()).toBe("\"item2\"");
6666
expect(item2.getKey().getPosition().getLine()).toBe(2);
6767
expect(item2.getKey().getPosition().getRange().getStart()).toBe(4);
68-
expect(item2.getKey().getPosition().getRange().getEnd()).toBe(11);
68+
expect(item2.getKey().getPosition().getRange().getEnd()).toBe(10);
6969
expect(item2.hasCondition()).toBeFalsy();
7070
expect(item2.getCondition()).toBeNull();
7171
expect(item2.getValues()).not.toBeNull();
7272
expect(item2.getValues()!.length).toBe(1);
7373
expect(item2.getValues()![0].getContent()).toBe("\"value2\"");
7474
expect(item2.getValues()![0].getPosition().getLine()).toBe(2);
7575
expect(item2.getValues()![0].getPosition().getRange().getStart()).toBe(12);
76-
expect(item2.getValues()![0].getPosition().getRange().getEnd()).toBe(20);
76+
expect(item2.getValues()![0].getPosition().getRange().getEnd()).toBe(19);
7777

7878
const item3 = root.getChildren()![2];
7979
expect(item3.isRoot()).toBeFalsy();
@@ -82,7 +82,7 @@ describe("Parse Successes", () => {
8282
expect(item3.getKey().getContent()).toBe("\"item3\"");
8383
expect(item3.getKey().getPosition().getLine()).toBe(4);
8484
expect(item3.getKey().getPosition().getRange().getStart()).toBe(4);
85-
expect(item3.getKey().getPosition().getRange().getEnd()).toBe(11);
85+
expect(item3.getKey().getPosition().getRange().getEnd()).toBe(10);
8686
expect(item3.hasCondition()).toBeFalsy();
8787
expect(item3.getCondition()).toBeNull();
8888
expect(item3.getValues()).toBeNull();
@@ -96,15 +96,15 @@ describe("Parse Successes", () => {
9696
expect(item4.getKey().getContent()).toBe("\"item4\"");
9797
expect(item4.getKey().getPosition().getLine()).toBe(5);
9898
expect(item4.getKey().getPosition().getRange().getStart()).toBe(8);
99-
expect(item4.getKey().getPosition().getRange().getEnd()).toBe(15);
99+
expect(item4.getKey().getPosition().getRange().getEnd()).toBe(14);
100100
expect(item4.hasCondition()).toBeFalsy();
101101
expect(item4.getCondition()).toBeNull();
102102
expect(item4.getValues()).not.toBeNull();
103103
expect(item4.getValues()!.length).toBe(1);
104104
expect(item4.getValues()![0].getContent()).toBe("\"value4\"");
105105
expect(item4.getValues()![0].getPosition().getLine()).toBe(5);
106106
expect(item4.getValues()![0].getPosition().getRange().getStart()).toBe(16);
107-
expect(item4.getValues()![0].getPosition().getRange().getEnd()).toBe(24);
107+
expect(item4.getValues()![0].getPosition().getRange().getEnd()).toBe(23);
108108

109109
const item5 = root.getChildren()![3];
110110
expect(item5.isRoot()).toBeFalsy();
@@ -113,7 +113,7 @@ describe("Parse Successes", () => {
113113
expect(item5.getKey().getContent()).toBe("\"item5\"");
114114
expect(item5.getKey().getPosition().getLine()).toBe(8);
115115
expect(item5.getKey().getPosition().getRange().getStart()).toBe(4);
116-
expect(item5.getKey().getPosition().getRange().getEnd()).toBe(11);
116+
expect(item5.getKey().getPosition().getRange().getEnd()).toBe(10);
117117
expect(item5.hasCondition()).toBeFalsy();
118118
expect(item5.getCondition()).toBeNull();
119119
expect(item5.getValues()).toBeNull();
@@ -127,15 +127,15 @@ describe("Parse Successes", () => {
127127
expect(item6.getKey().getContent()).toBe("\"item6\"");
128128
expect(item6.getKey().getPosition().getLine()).toBe(9);
129129
expect(item6.getKey().getPosition().getRange().getStart()).toBe(8);
130-
expect(item6.getKey().getPosition().getRange().getEnd()).toBe(15);
130+
expect(item6.getKey().getPosition().getRange().getEnd()).toBe(14);
131131
expect(item6.hasCondition()).toBeFalsy();
132132
expect(item6.getCondition()).toBeNull();
133133
expect(item6.getValues()).not.toBeNull();
134134
expect(item6.getValues()!.length).toBe(1);
135135
expect(item6.getValues()![0].getContent()).toBe("\"value6\"");
136136
expect(item6.getValues()![0].getPosition().getLine()).toBe(9);
137137
expect(item6.getValues()![0].getPosition().getRange().getStart()).toBe(16);
138-
expect(item6.getValues()![0].getPosition().getRange().getEnd()).toBe(24);
138+
expect(item6.getValues()![0].getPosition().getRange().getEnd()).toBe(23);
139139

140140
const item7 = item5.getChildren()![1];
141141
expect(item7.isRoot()).toBeFalsy();
@@ -144,15 +144,15 @@ describe("Parse Successes", () => {
144144
expect(item7.getKey().getContent()).toBe("\"item7\"");
145145
expect(item7.getKey().getPosition().getLine()).toBe(10);
146146
expect(item7.getKey().getPosition().getRange().getStart()).toBe(8);
147-
expect(item7.getKey().getPosition().getRange().getEnd()).toBe(15);
147+
expect(item7.getKey().getPosition().getRange().getEnd()).toBe(14);
148148
expect(item7.hasCondition()).toBeFalsy();
149149
expect(item7.getCondition()).toBeNull();
150150
expect(item7.getValues()).not.toBeNull();
151151
expect(item7.getValues()!.length).toBe(1);
152152
expect(item7.getValues()![0].getContent()).toBe("\"value7\"");
153153
expect(item7.getValues()![0].getPosition().getLine()).toBe(10);
154154
expect(item7.getValues()![0].getPosition().getRange().getStart()).toBe(16);
155-
expect(item7.getValues()![0].getPosition().getRange().getEnd()).toBe(24);
155+
expect(item7.getValues()![0].getPosition().getRange().getEnd()).toBe(23);
156156

157157
});
158158

@@ -273,13 +273,13 @@ describe("Parse Errors", () => {
273273
expect(err1.type).toBe(ParseErrorType.MissingRootObject);
274274
expect(err1.position.getLine()).toBe(0);
275275
expect(err1.position.getRange().getStart()).toBe(0);
276-
expect(err1.position.getRange().getEnd()).toBe(13);
276+
expect(err1.position.getRange().getEnd()).toBe(12);
277277

278278
const err2 = kvTree.getErrors()[1];
279279
expect(err2.type).toBe(ParseErrorType.MissingRootObject);
280280
expect(err2.position.getLine()).toBe(6);
281281
expect(err2.position.getRange().getStart()).toBe(0);
282-
expect(err2.position.getRange().getEnd()).toBe(15);
282+
expect(err2.position.getRange().getEnd()).toBe(14);
283283

284284
});
285285

@@ -321,11 +321,11 @@ describe("Parse Errors", () => {
321321
expect(errors[0].type).toBe(ParseErrorType.MissingValue);
322322
expect(errors[0].position.getLine()).toBe(1);
323323
expect(errors[0].position.getRange().getStart()).toBe(4);
324-
expect(errors[0].position.getRange().getEnd()).toBe(8);
324+
expect(errors[0].position.getRange().getEnd()).toBe(7);
325325
expect(errors[1].type).toBe(ParseErrorType.MissingValue);
326326
expect(errors[1].position.getLine()).toBe(2);
327327
expect(errors[1].position.getRange().getStart()).toBe(4);
328-
expect(errors[1].position.getRange().getEnd()).toBe(8);
328+
expect(errors[1].position.getRange().getEnd()).toBe(7);
329329

330330
});
331331

@@ -344,7 +344,7 @@ describe("Parse Errors", () => {
344344
expect(err.type).toBe(ParseErrorType.UnexpectedOpeningBrace);
345345
expect(err.position.getLine()).toBe(1);
346346
expect(err.position.getRange().getStart()).toBe(4);
347-
expect(err.position.getRange().getEnd()).toBe(5);
347+
expect(err.position.getRange().getEnd()).toBe(4);
348348
});
349349

350350
test("Error: Unexpected Closing Brace", () => {
@@ -361,7 +361,8 @@ describe("Parse Errors", () => {
361361
expect(err.type).toBe(ParseErrorType.UnexpectedClosingBrace);
362362
expect(err.position.getLine()).toBe(3);
363363
expect(err.position.getRange().getStart()).toBe(0);
364-
expect(err.position.getRange().getEnd()).toBe(1);
364+
expect(err.position.getRange().getEnd()).toBe(0);
365+
expect(err.position.getRange().hasNoLength()).toBeTruthy();
365366
});
366367

367368
});

0 commit comments

Comments
 (0)