Skip to content

Commit 054ce2d

Browse files
committed
Test focusLocation with ranges
1 parent 126479b commit 054ce2d

26 files changed

+93
-28
lines changed

src/harness/fourslashImpl.ts

+30-4
Original file line numberDiff line numberDiff line change
@@ -4512,16 +4512,42 @@ export class TestState {
45124512
}
45134513

45144514
public baselineMapCode(
4515-
{ fileName, pos }: Range,
4515+
ranges: Range[],
45164516
changesFilename: string,
45174517
): void {
45184518
const changes = this.getFileContent(changesFilename);
4519-
const beforeContents = this.getFileContent(fileName);
4520-
const before = beforeContents.slice(0, pos) + "[||]" + beforeContents.slice(pos);
4519+
let fileName: string | undefined;
4520+
const focusLocations = ranges.map(({ fileName: fn, pos, end }) => {
4521+
if (!fileName) {
4522+
fileName = fn;
4523+
}
4524+
return [{ start: pos, length: end - pos }];
4525+
});
4526+
if (!fileName) {
4527+
throw new Error("No ranges passed in, or something went wrong.");
4528+
}
4529+
let before = this.getFileContent(fileName);
4530+
focusLocations.sort((a, b) => a[0].start - b[0].start);
4531+
for (const subLoc of focusLocations) {
4532+
for (const { start, length } of subLoc) {
4533+
let offset = 0;
4534+
for (const sl2 of focusLocations) {
4535+
for (const { start: s2, length: l2 } of sl2) {
4536+
if (s2 < start) {
4537+
offset += 4;
4538+
if ((s2 + l2) > start) {
4539+
offset -= 2;
4540+
}
4541+
}
4542+
}
4543+
}
4544+
before = before.slice(0, start + offset) + "[|" + before.slice(start + offset, start + offset + length) + "|]" + before.slice(start + offset + length);
4545+
}
4546+
}
45214547
const edits = this.languageService.mapCode(
45224548
fileName,
45234549
[changes],
4524-
[[{ start: pos, length: 1 }]],
4550+
focusLocations,
45254551
this.formatCodeSettings,
45264552
{},
45274553
);

src/harness/fourslashInterfaceImpl.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -240,8 +240,8 @@ export class VerifyNegatable {
240240
this.state.uncommentSelection(newFileContent);
241241
}
242242

243-
public baselineMapCode(range: FourSlash.Range, changesFilename: string): void {
244-
this.state.baselineMapCode(range, changesFilename);
243+
public baselineMapCode(ranges: FourSlash.Range[], changesFilename: string): void {
244+
this.state.baselineMapCode(ranges, changesFilename);
245245
}
246246
}
247247

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// === mapCode ===
2+
3+
// === ORIGINAL ===
4+
[|function foo() {
5+
return 1;
6+
}[||]
7+
function bar() {
8+
return [|2;|]
9+
}|]
10+
11+
// === INCOMING CHANGES ===
12+
function foo() {
13+
return 3;
14+
}
15+
16+
// === MAPPED ===
17+
function foo() {
18+
return 3;
19+
}
20+
function bar() {
21+
return 2;
22+
}

tests/cases/fourslash/fourslash.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,7 @@ declare namespace FourSlashInterface {
466466
copiedFrom?: { file: string, range: { pos: number, end: number }[] };
467467
}
468468
}): void;
469-
baselineMapCode(range: Range, changesFilename?: string): void;
469+
baselineMapCode(ranges: Range[], changesFilename?: string): void;
470470
}
471471
class edit {
472472
caretPosition(): Marker;

tests/cases/fourslash/mapCodeClassInvalidClassMember.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@
1010
//// }
1111
////
1212

13-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
13+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeFocusLocationReplacement.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,4 @@
3535
//// }
3636
////
3737

38-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
38+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeMethodInsertion.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@
2020
//// }
2121
////
2222

23-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
23+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeMethodReplacement.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@
2020
//// }
2121
////
2222

23-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
23+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeMixedClassDeclaration.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,4 @@
2222
//// }
2323
////
2424

25-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
25+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeNestedClassIfInsertion.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,4 @@
2222
//// }
2323
////
2424

25-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
25+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeNestedClassIfReplacement.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,4 @@
2222
//// }
2323
////
2424

25-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
25+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeNestedForInsertion.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@
1818
//// }
1919
////
2020

21-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
21+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeNestedForOfInsertion.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@
1616
//// }
1717
////
1818

19-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
19+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeNestedForOfReplacement.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@
1616
//// }
1717
////
1818

19-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
19+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeNestedForReplacement.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@
1616
//// }
1717
////
1818

19-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
19+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeNestedIfInsertion.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@
1818
//// }
1919
////
2020

21-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
21+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeNestedIfReplace.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@
1818
//// }
1919
////
2020

21-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
21+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeNestedLabeledInsertion.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@
2020
//// }
2121
////
2222

23-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
23+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeNestedLabeledReplace.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@
2020
//// }
2121
////
2222

23-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
23+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeNestedWhileInsertion.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@
1818
//// }
1919
////
2020

21-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
21+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeNestedWhileReplace.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@
1818
//// }
1919
////
2020

21-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
21+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeRangeReplacement.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,4 @@
2929
//// }
3030
////
3131

32-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
32+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
///<reference path="fourslash.ts"/>
2+
3+
// @Filename: /incomingChanges.ts
4+
//// function foo() {
5+
//// return 3;
6+
//// }
7+
////
8+
// @Filename: /index.ts
9+
//// [|function foo() {
10+
//// return 1;
11+
//// }[||]
12+
//// function bar() {
13+
//// return [|2;|]
14+
//// }|]
15+
////
16+
17+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeToplevelInsert.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@
1313
//// return 2;
1414
//// }
1515

16-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
16+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeToplevelInsertNoClass.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@
1313
//// return 2;
1414
//// }
1515

16-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
16+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

tests/cases/fourslash/mapCodeToplevelReplace.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@
1414
//// }
1515
////
1616

17-
verify.baselineMapCode(test.ranges()[0], "/incomingChanges.ts");
17+
verify.baselineMapCode(test.ranges(), "/incomingChanges.ts");

0 commit comments

Comments
 (0)