Skip to content

Commit f93077f

Browse files
author
Andy
committed
Merge pull request #8622 from Microsoft/navigation_bar_test
Add test for #7301
2 parents 3fb16f5 + 53970af commit f93077f

35 files changed

+126
-95
lines changed

src/harness/fourslash.ts

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1968,12 +1968,12 @@ namespace FourSlash {
19681968
}
19691969
}
19701970

1971-
public verifyGetScriptLexicalStructureListCount(expected: number) {
1971+
public verifyNavigationBarCount(expected: number) {
19721972
const items = this.languageService.getNavigationBarItems(this.activeFile.fileName);
19731973
const actual = this.getNavigationBarItemsCount(items);
19741974

19751975
if (expected !== actual) {
1976-
this.raiseError(`verifyGetScriptLexicalStructureListCount failed - found: ${actual} navigation items, expected: ${expected}.`);
1976+
this.raiseError(`verifyNavigationBarCount failed - found: ${actual} navigation items, expected: ${expected}.`);
19771977
}
19781978
}
19791979

@@ -1989,19 +1989,19 @@ namespace FourSlash {
19891989
return result;
19901990
}
19911991

1992-
public verifyGetScriptLexicalStructureListContains(name: string, kind: string) {
1992+
public verifyNavigationBarContains(name: string, kind: string) {
19931993
const items = this.languageService.getNavigationBarItems(this.activeFile.fileName);
19941994

19951995
if (!items || items.length === 0) {
1996-
this.raiseError("verifyGetScriptLexicalStructureListContains failed - found 0 navigation items, expected at least one.");
1996+
this.raiseError("verifyNavigationBarContains failed - found 0 navigation items, expected at least one.");
19971997
}
19981998

19991999
if (this.navigationBarItemsContains(items, name, kind)) {
20002000
return;
20012001
}
20022002

2003-
const missingItem = { name: name, kind: kind };
2004-
this.raiseError(`verifyGetScriptLexicalStructureListContains failed - could not find the item: ${JSON.stringify(missingItem, undefined, 2)} in the returned list: (${JSON.stringify(items, undefined, 2)})`);
2003+
const missingItem = { name, kind };
2004+
this.raiseError(`verifyNavigationBarContains failed - could not find the item: ${JSON.stringify(missingItem, undefined, 2)} in the returned list: (${JSON.stringify(items, undefined, 2)})`);
20052005
}
20062006

20072007
private navigationBarItemsContains(items: ts.NavigationBarItem[], name: string, kind: string) {
@@ -2021,6 +2021,20 @@ namespace FourSlash {
20212021
return false;
20222022
}
20232023

2024+
public verifyNavigationBarChildItem(parent: string, name: string, kind: string) {
2025+
const items = this.languageService.getNavigationBarItems(this.activeFile.fileName);
2026+
2027+
for (let i = 0; i < items.length; i++) {
2028+
const item = items[i];
2029+
if (item.text === parent) {
2030+
if (this.navigationBarItemsContains(item.childItems, name, kind))
2031+
return;
2032+
const missingItem = { name, kind };
2033+
this.raiseError(`verifyNavigationBarChildItem failed - could not find the item: ${JSON.stringify(missingItem)} in the children list: (${JSON.stringify(item.childItems, undefined, 2)})`);
2034+
}
2035+
}
2036+
}
2037+
20242038
public printNavigationItems(searchValue: string) {
20252039
const items = this.languageService.getNavigateToItems(searchValue);
20262040
const length = items && items.length;
@@ -2033,11 +2047,11 @@ namespace FourSlash {
20332047
}
20342048
}
20352049

2036-
public printScriptLexicalStructureItems() {
2050+
public printNavigationBar() {
20372051
const items = this.languageService.getNavigationBarItems(this.activeFile.fileName);
20382052
const length = items && items.length;
20392053

2040-
Harness.IO.log(`NavigationItems list (${length} items)`);
2054+
Harness.IO.log(`Navigation bar (${length} items)`);
20412055

20422056
for (let i = 0; i < length; i++) {
20432057
const item = items[i];
@@ -3029,19 +3043,23 @@ namespace FourSlashInterface {
30293043
this.DocCommentTemplate(/*expectedText*/ undefined, /*expectedOffset*/ undefined, /*empty*/ true);
30303044
}
30313045

3032-
public getScriptLexicalStructureListCount(count: number) {
3033-
this.state.verifyGetScriptLexicalStructureListCount(count);
3046+
public navigationBarCount(count: number) {
3047+
this.state.verifyNavigationBarCount(count);
30343048
}
30353049

30363050
// TODO: figure out what to do with the unused arguments.
3037-
public getScriptLexicalStructureListContains(
3051+
public navigationBarContains(
30383052
name: string,
30393053
kind: string,
30403054
fileName?: string,
30413055
parentName?: string,
30423056
isAdditionalSpan?: boolean,
30433057
markerPosition?: number) {
3044-
this.state.verifyGetScriptLexicalStructureListContains(name, kind);
3058+
this.state.verifyNavigationBarContains(name, kind);
3059+
}
3060+
3061+
public navigationBarChildItem(parent: string, name: string, kind: string) {
3062+
this.state.verifyNavigationBarChildItem(parent, name, kind);
30453063
}
30463064

30473065
public navigationItemsListCount(count: number, searchValue: string, matchKind?: string) {
@@ -3234,8 +3252,8 @@ namespace FourSlashInterface {
32343252
this.state.printNavigationItems(searchValue);
32353253
}
32363254

3237-
public printScriptLexicalStructureItems() {
3238-
this.state.printScriptLexicalStructureItems();
3255+
public printNavigationBar() {
3256+
this.state.printNavigationBar();
32393257
}
32403258

32413259
public printReferences() {

tests/cases/fourslash/deleteClassWithEnumPresent.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55

66
goTo.marker();
77
edit.deleteAtCaret('class Bar { }'.length);
8-
verify.getScriptLexicalStructureListContains('Foo', 'enum', 'tests/cases/fourslash/deleteClassWithEnumPresent.ts', '');
8+
verify.navigationBarContains('Foo', 'enum', 'tests/cases/fourslash/deleteClassWithEnumPresent.ts', '');

tests/cases/fourslash/fourslash.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,9 @@ declare namespace FourSlashInterface {
175175
DocCommentTemplate(expectedText: string, expectedOffset: number, empty?: boolean): void;
176176
noDocCommentTemplate(): void;
177177

178-
getScriptLexicalStructureListCount(count: number): void;
179-
getScriptLexicalStructureListContains(name: string, kind: string, fileName?: string, parentName?: string, isAdditionalSpan?: boolean, markerPosition?: number): void;
178+
navigationBarCount(count: number): void;
179+
navigationBarContains(name: string, kind: string, fileName?: string, parentName?: string, isAdditionalSpan?: boolean, markerPosition?: number): void;
180+
navigationBarChildItem(parent: string, text: string, kind: string): void;
180181
navigationItemsListCount(count: number, searchValue: string, matchKind?: string): void;
181182
navigationItemsListContains(name: string, kind: string, searchValue: string, matchKind: string, fileName?: string, parentName?: string): void;
182183
occurrencesAtPositionContains(range: Range, isWriteAccess?: boolean): void;
@@ -236,6 +237,7 @@ declare namespace FourSlashInterface {
236237
printBreakpointAtCurrentLocation(): void;
237238
printNameOrDottedNameSpans(pos: number): void;
238239
printErrorList(): void;
240+
printNavigationBar(): void;
239241
printNavigationItems(searchValue?: string): void;
240242
printScriptLexicalStructureItems(): void;
241243
printReferences(): void;
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
////class C {
4+
//// foo;
5+
//// ["bar"]: string;
6+
////}
7+
8+
verify.navigationBarCount(3);
9+
verify.navigationBarContains("C", "class");
10+
verify.navigationBarChildItem("C", "[\"bar\"]", "property");
11+
verify.navigationBarChildItem("C", "foo", "property");

tests/cases/fourslash/navbar_const.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
//// {| "itemName": "c", "kind": "const", "parentName": "" |}const c = 0;
44

55
test.markers().forEach(marker => {
6-
verify.getScriptLexicalStructureListContains(
6+
verify.navigationBarContains(
77
marker.data.itemName,
88
marker.data.kind,
99
marker.fileName,

tests/cases/fourslash/navbar_contains-no-duplicates.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
test.markers().forEach(marker => {
3131
if (marker.data) {
32-
verify.getScriptLexicalStructureListContains(
32+
verify.navigationBarContains(
3333
marker.data.itemName,
3434
marker.data.kind,
3535
marker.fileName,
@@ -38,4 +38,4 @@ test.markers().forEach(marker => {
3838
marker.position);
3939
}
4040
});
41-
verify.getScriptLexicalStructureListCount(12);
41+
verify.navigationBarCount(12);

tests/cases/fourslash/navbar_exportDefault.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
test.markers().forEach(marker => {
1616
goTo.file(marker.fileName);
17-
verify.getScriptLexicalStructureListContains(
17+
verify.navigationBarContains(
1818
marker.data.itemName,
1919
marker.data.kind,
2020
marker.fileName,

tests/cases/fourslash/navbar_let.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
//// {| "itemName": "c", "kind": "let", "parentName": "" |}let c = 0;
44

55
test.markers().forEach(marker => {
6-
verify.getScriptLexicalStructureListContains(
6+
verify.navigationBarContains(
77
marker.data.itemName,
88
marker.data.kind,
99
marker.fileName,

tests/cases/fourslash/navigationBarItemsBindingPatterns.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@
66
////const bar1, [c, d]
77
////var {e, x: [f, g]} = {a:1, x:[]};
88

9-
verify.getScriptLexicalStructureListCount(12); // global (1) + variable declarations (4) + binding patterns (7)
10-
verify.getScriptLexicalStructureListContains("foo", "var");
11-
verify.getScriptLexicalStructureListContains("bar", "var");
12-
verify.getScriptLexicalStructureListContains("foo1", "let")
13-
verify.getScriptLexicalStructureListContains("a", "let");
14-
verify.getScriptLexicalStructureListContains("b", "let");
15-
verify.getScriptLexicalStructureListContains("bar1", "const");
16-
verify.getScriptLexicalStructureListContains("c", "const");
17-
verify.getScriptLexicalStructureListContains("d", "const");
18-
verify.getScriptLexicalStructureListContains("e", "var");
19-
verify.getScriptLexicalStructureListContains("f", "var");
20-
verify.getScriptLexicalStructureListContains("g", "var");
9+
verify.navigationBarCount(12); // global (1) + variable declarations (4) + binding patterns (7)
10+
verify.navigationBarContains("foo", "var");
11+
verify.navigationBarContains("bar", "var");
12+
verify.navigationBarContains("foo1", "let")
13+
verify.navigationBarContains("a", "let");
14+
verify.navigationBarContains("b", "let");
15+
verify.navigationBarContains("bar1", "const");
16+
verify.navigationBarContains("c", "const");
17+
verify.navigationBarContains("d", "const");
18+
verify.navigationBarContains("e", "var");
19+
verify.navigationBarContains("f", "var");
20+
verify.navigationBarContains("g", "var");
2121

tests/cases/fourslash/navigationBarItemsBindingPatternsInConstructor.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@
1111
//// }
1212
////}
1313

14-
verify.getScriptLexicalStructureListCount(6); // 2x(class + field + constructor)
14+
verify.navigationBarCount(6); // 2x(class + field + constructor)

0 commit comments

Comments
 (0)