Skip to content

Add test for #7301 #8622

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
4 commits merged into from
May 17, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 32 additions & 14 deletions src/harness/fourslash.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1968,12 +1968,12 @@ namespace FourSlash {
}
}

public verifyGetScriptLexicalStructureListCount(expected: number) {
public verifyNavigationBarCount(expected: number) {
const items = this.languageService.getNavigationBarItems(this.activeFile.fileName);
const actual = this.getNavigationBarItemsCount(items);

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

Expand All @@ -1989,19 +1989,19 @@ namespace FourSlash {
return result;
}

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

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

if (this.navigationBarItemsContains(items, name, kind)) {
return;
}

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

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

public verifyNavigationBarChildItem(parent: string, name: string, kind: string) {
const items = this.languageService.getNavigationBarItems(this.activeFile.fileName);

for (let i = 0; i < items.length; i++) {
const item = items[i];
if (item.text === parent) {
if (this.navigationBarItemsContains(item.childItems, name, kind))
return;
const missingItem = { name, kind };
this.raiseError(`verifyNavigationBarChildItem failed - could not find the item: ${JSON.stringify(missingItem)} in the children list: (${JSON.stringify(item.childItems, undefined, 2)})`);
}
}
}

public printNavigationItems(searchValue: string) {
const items = this.languageService.getNavigateToItems(searchValue);
const length = items && items.length;
Expand All @@ -2033,11 +2047,11 @@ namespace FourSlash {
}
}

public printScriptLexicalStructureItems() {
public printNavigationBar() {
const items = this.languageService.getNavigationBarItems(this.activeFile.fileName);
const length = items && items.length;

Harness.IO.log(`NavigationItems list (${length} items)`);
Harness.IO.log(`Navigation bar (${length} items)`);

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

public getScriptLexicalStructureListCount(count: number) {
this.state.verifyGetScriptLexicalStructureListCount(count);
public navigationBarCount(count: number) {
this.state.verifyNavigationBarCount(count);
}

// TODO: figure out what to do with the unused arguments.
public getScriptLexicalStructureListContains(
public navigationBarContains(
name: string,
kind: string,
fileName?: string,
parentName?: string,
isAdditionalSpan?: boolean,
markerPosition?: number) {
this.state.verifyGetScriptLexicalStructureListContains(name, kind);
this.state.verifyNavigationBarContains(name, kind);
}

public navigationBarChildItem(parent: string, name: string, kind: string) {
this.state.verifyNavigationBarChildItem(parent, name, kind);
}

public navigationItemsListCount(count: number, searchValue: string, matchKind?: string) {
Expand Down Expand Up @@ -3234,8 +3252,8 @@ namespace FourSlashInterface {
this.state.printNavigationItems(searchValue);
}

public printScriptLexicalStructureItems() {
this.state.printScriptLexicalStructureItems();
public printNavigationBar() {
this.state.printNavigationBar();
}

public printReferences() {
Expand Down
2 changes: 1 addition & 1 deletion tests/cases/fourslash/deleteClassWithEnumPresent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@

goTo.marker();
edit.deleteAtCaret('class Bar { }'.length);
verify.getScriptLexicalStructureListContains('Foo', 'enum', 'tests/cases/fourslash/deleteClassWithEnumPresent.ts', '');
verify.navigationBarContains('Foo', 'enum', 'tests/cases/fourslash/deleteClassWithEnumPresent.ts', '');
6 changes: 4 additions & 2 deletions tests/cases/fourslash/fourslash.ts
Original file line number Diff line number Diff line change
Expand Up @@ -175,8 +175,9 @@ declare namespace FourSlashInterface {
DocCommentTemplate(expectedText: string, expectedOffset: number, empty?: boolean): void;
noDocCommentTemplate(): void;

getScriptLexicalStructureListCount(count: number): void;
getScriptLexicalStructureListContains(name: string, kind: string, fileName?: string, parentName?: string, isAdditionalSpan?: boolean, markerPosition?: number): void;
navigationBarCount(count: number): void;
navigationBarContains(name: string, kind: string, fileName?: string, parentName?: string, isAdditionalSpan?: boolean, markerPosition?: number): void;
navigationBarChildItem(parent: string, text: string, kind: string): void;
navigationItemsListCount(count: number, searchValue: string, matchKind?: string): void;
navigationItemsListContains(name: string, kind: string, searchValue: string, matchKind: string, fileName?: string, parentName?: string): void;
occurrencesAtPositionContains(range: Range, isWriteAccess?: boolean): void;
Expand Down Expand Up @@ -236,6 +237,7 @@ declare namespace FourSlashInterface {
printBreakpointAtCurrentLocation(): void;
printNameOrDottedNameSpans(pos: number): void;
printErrorList(): void;
printNavigationBar(): void;
printNavigationItems(searchValue?: string): void;
printScriptLexicalStructureItems(): void;
printReferences(): void;
Expand Down
11 changes: 11 additions & 0 deletions tests/cases/fourslash/getNavigationBarItems.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/// <reference path="fourslash.ts" />

////class C {
//// foo;
//// ["bar"]: string;
////}

verify.navigationBarCount(3);
verify.navigationBarContains("C", "class");
verify.navigationBarChildItem("C", "[\"bar\"]", "property");
verify.navigationBarChildItem("C", "foo", "property");
2 changes: 1 addition & 1 deletion tests/cases/fourslash/navbar_const.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
//// {| "itemName": "c", "kind": "const", "parentName": "" |}const c = 0;

test.markers().forEach(marker => {
verify.getScriptLexicalStructureListContains(
verify.navigationBarContains(
marker.data.itemName,
marker.data.kind,
marker.fileName,
Expand Down
4 changes: 2 additions & 2 deletions tests/cases/fourslash/navbar_contains-no-duplicates.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

test.markers().forEach(marker => {
if (marker.data) {
verify.getScriptLexicalStructureListContains(
verify.navigationBarContains(
marker.data.itemName,
marker.data.kind,
marker.fileName,
Expand All @@ -38,4 +38,4 @@ test.markers().forEach(marker => {
marker.position);
}
});
verify.getScriptLexicalStructureListCount(12);
verify.navigationBarCount(12);
2 changes: 1 addition & 1 deletion tests/cases/fourslash/navbar_exportDefault.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

test.markers().forEach(marker => {
goTo.file(marker.fileName);
verify.getScriptLexicalStructureListContains(
verify.navigationBarContains(
marker.data.itemName,
marker.data.kind,
marker.fileName,
Expand Down
2 changes: 1 addition & 1 deletion tests/cases/fourslash/navbar_let.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
//// {| "itemName": "c", "kind": "let", "parentName": "" |}let c = 0;

test.markers().forEach(marker => {
verify.getScriptLexicalStructureListContains(
verify.navigationBarContains(
marker.data.itemName,
marker.data.kind,
marker.fileName,
Expand Down
24 changes: 12 additions & 12 deletions tests/cases/fourslash/navigationBarItemsBindingPatterns.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@
////const bar1, [c, d]
////var {e, x: [f, g]} = {a:1, x:[]};

verify.getScriptLexicalStructureListCount(12); // global (1) + variable declarations (4) + binding patterns (7)
verify.getScriptLexicalStructureListContains("foo", "var");
verify.getScriptLexicalStructureListContains("bar", "var");
verify.getScriptLexicalStructureListContains("foo1", "let")
verify.getScriptLexicalStructureListContains("a", "let");
verify.getScriptLexicalStructureListContains("b", "let");
verify.getScriptLexicalStructureListContains("bar1", "const");
verify.getScriptLexicalStructureListContains("c", "const");
verify.getScriptLexicalStructureListContains("d", "const");
verify.getScriptLexicalStructureListContains("e", "var");
verify.getScriptLexicalStructureListContains("f", "var");
verify.getScriptLexicalStructureListContains("g", "var");
verify.navigationBarCount(12); // global (1) + variable declarations (4) + binding patterns (7)
verify.navigationBarContains("foo", "var");
verify.navigationBarContains("bar", "var");
verify.navigationBarContains("foo1", "let")
verify.navigationBarContains("a", "let");
verify.navigationBarContains("b", "let");
verify.navigationBarContains("bar1", "const");
verify.navigationBarContains("c", "const");
verify.navigationBarContains("d", "const");
verify.navigationBarContains("e", "var");
verify.navigationBarContains("f", "var");
verify.navigationBarContains("g", "var");

Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@
//// }
////}

verify.getScriptLexicalStructureListCount(6); // 2x(class + field + constructor)
verify.navigationBarCount(6); // 2x(class + field + constructor)
6 changes: 3 additions & 3 deletions tests/cases/fourslash/navigationBarItemsEmptyConstructors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
//// }
////}

verify.getScriptLexicalStructureListContains("Test", "class");
verify.getScriptLexicalStructureListContains("constructor", "constructor");
verify.navigationBarContains("Test", "class");
verify.navigationBarContains("constructor", "constructor");

// no other items
verify.getScriptLexicalStructureListCount(2);
verify.navigationBarCount(2);
4 changes: 2 additions & 2 deletions tests/cases/fourslash/navigationBarItemsExports.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@

test.markers().forEach((marker) => {
if (marker.data) {
verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
}
});

verify.getScriptLexicalStructureListCount(4);
verify.navigationBarCount(4);
4 changes: 2 additions & 2 deletions tests/cases/fourslash/navigationBarItemsFunctions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
////}

test.markers().forEach((marker) => {
verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
});

verify.getScriptLexicalStructureListCount(8); // 4 functions + global. Note: there are 8 because of the functions show up at the top level and as child items.
verify.navigationBarCount(8); // 4 functions + global. Note: there are 8 because of the functions show up at the top level and as child items.
4 changes: 2 additions & 2 deletions tests/cases/fourslash/navigationBarItemsFunctionsBroken.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
////}

test.markers().forEach((marker) => {
verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
});

verify.getScriptLexicalStructureListCount(3); // <global> and 'f'.
verify.navigationBarCount(3); // <global> and 'f'.
4 changes: 2 additions & 2 deletions tests/cases/fourslash/navigationBarItemsFunctionsBroken2.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
////}

test.markers().forEach((marker) => {
verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
});

verify.getScriptLexicalStructureListCount(3); // <global> and 'f'
verify.navigationBarCount(3); // <global> and 'f'
4 changes: 2 additions & 2 deletions tests/cases/fourslash/navigationBarItemsImports.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@

test.markers().forEach((marker) => {
if (marker.data) {
verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
}
});

verify.getScriptLexicalStructureListCount(9);
verify.navigationBarCount(9);
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@
////}

test.markers().forEach((marker) => {
verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
});

// no other items
verify.getScriptLexicalStructureListCount(17);
verify.navigationBarCount(17);
4 changes: 2 additions & 2 deletions tests/cases/fourslash/navigationBarItemsItems.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@

test.markers().forEach((marker) => {
if (marker.data) {
verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
}
});

verify.getScriptLexicalStructureListCount(23);
verify.navigationBarCount(23);
2 changes: 1 addition & 1 deletion tests/cases/fourslash/navigationBarItemsItems2.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ edit.insertLine("module A");
edit.insert("export class ");

// should not crash
verify.getScriptLexicalStructureListCount(2);
verify.navigationBarCount(2);

Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,15 @@
////}

goTo.marker("file1");
verify.getScriptLexicalStructureListCount(0);
verify.navigationBarCount(0);

goTo.marker("file2");
verify.getScriptLexicalStructureListContains("<global>", "module");
verify.getScriptLexicalStructureListContains("x", "var");
verify.getScriptLexicalStructureListCount(2);
verify.navigationBarContains("<global>", "module");
verify.navigationBarContains("x", "var");
verify.navigationBarCount(2);

goTo.marker("file3");
verify.getScriptLexicalStructureListContains("<global>", "module");
verify.getScriptLexicalStructureListContains("foo", "function");
verify.getScriptLexicalStructureListContains("bar", "function");
verify.getScriptLexicalStructureListCount(5);
verify.navigationBarContains("<global>", "module");
verify.navigationBarContains("foo", "function");
verify.navigationBarContains("bar", "function");
verify.navigationBarCount(5);
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
////}

test.markers().forEach((marker) => {
verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
});

verify.getScriptLexicalStructureListCount(2); // external module node + class + property
verify.navigationBarCount(2); // external module node + class + property
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
////export var x: number;

test.markers().forEach((marker) => {
verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
});

verify.getScriptLexicalStructureListCount(4); // external module node + variable in module + class + property
verify.navigationBarCount(4); // external module node + variable in module + class + property
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
////export var x: number;

test.markers().forEach((marker) => {
verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName);
});

verify.getScriptLexicalStructureListCount(4); // external module node + variable in module + class + property
verify.navigationBarCount(4); // external module node + variable in module + class + property
Loading