From 5814261d6c253a5ec8d6ace434d03088b4c48b7b Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Sat, 16 Apr 2016 12:57:26 -0700 Subject: [PATCH] Added tests for quick-info on string-named enum members. --- ...sEnum.ts => quickInfoDisplayPartsEnum1.ts} | 0 .../fourslash/quickInfoDisplayPartsEnum2.ts | 79 ++++++++++++++++++ .../fourslash/quickInfoDisplayPartsEnum3.ts | 80 +++++++++++++++++++ 3 files changed, 159 insertions(+) rename tests/cases/fourslash/{quickInfoDisplayPartsEnum.ts => quickInfoDisplayPartsEnum1.ts} (100%) create mode 100644 tests/cases/fourslash/quickInfoDisplayPartsEnum2.ts create mode 100644 tests/cases/fourslash/quickInfoDisplayPartsEnum3.ts diff --git a/tests/cases/fourslash/quickInfoDisplayPartsEnum.ts b/tests/cases/fourslash/quickInfoDisplayPartsEnum1.ts similarity index 100% rename from tests/cases/fourslash/quickInfoDisplayPartsEnum.ts rename to tests/cases/fourslash/quickInfoDisplayPartsEnum1.ts diff --git a/tests/cases/fourslash/quickInfoDisplayPartsEnum2.ts b/tests/cases/fourslash/quickInfoDisplayPartsEnum2.ts new file mode 100644 index 00000000000..ad08d84c1d5 --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsEnum2.ts @@ -0,0 +1,79 @@ +/// + +////enum /*1*/E { +//// /*2*/"e1", +//// /*3*/'e2' = 10, +//// /*4*/"e3" +////} +////var /*5*/eInstance: /*6*/E; +/////*7*/eInstance = /*8*/E./*9*/e1; +/////*10*/eInstance = /*11*/E./*12*/e2; +/////*13*/eInstance = /*14*/E./*15*/e3; +////const enum /*16*/constE { +//// /*17*/"e1", +//// /*18*/'e2' = 10, +//// /*19*/"e3" +////} +////var /*20*/eInstance1: /*21*/constE; +/////*22*/eInstance1 = /*23*/constE./*24*/e1; +/////*25*/eInstance1 = /*26*/constE./*27*/e2; +/////*28*/eInstance1 = /*29*/constE./*30*/e3; + +var marker = 0; +function verifyEnumDeclaration(enumName: string, instanceName: string, isConst?: boolean) { + verifyEnumDisplay(); + + verifyEnumMemberDisplay('"e1"', /*spanLength*/ 4, 0); + verifyEnumMemberDisplay("'e2'", /*spanLength*/ 4, 10); + verifyEnumMemberDisplay('"e3"', /*spanLength*/ 4, 11); + + verifyInstance(); + verifyEnumDisplay(); + + verifyInstance(); + verifyEnumDisplay(); + verifyEnumMemberDisplay('"e1"', /*spanLength*/ 2, 0); + + verifyInstance(); + verifyEnumDisplay(); + verifyEnumMemberDisplay("'e2'", /*spanLength*/ 2, 10); + + verifyInstance(); + verifyEnumDisplay(); + verifyEnumMemberDisplay('"e3"', /*spanLength*/ 2, 11); + + function verifyEnumDisplay() { + marker++; + goTo.marker(marker.toString()); + verify.verifyQuickInfoDisplayParts("enum", "", { start: test.markerByName(marker.toString()).position, length: enumName.length }, + (isConst ? [{ text: "const", kind: "keyword" }, { text: " ", kind: "space" }] : []).concat( + [{ text: "enum", kind: "keyword" }, { text: " ", kind: "space" }, { text: enumName, kind: "enumName" }]), + []);; + } + + function verifyEnumMemberDisplay(enumMemberName: string, spanLength: number, initializer: number) { + marker++; + goTo.marker(marker.toString()); + // Each of these names is a string literal, + // but since they're accessed by property accesses, + // we need to account for the quotes at the beginning and end. + verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName(marker.toString()).position, length: spanLength }, + [{ text: "(", kind: "punctuation" }, { text: "enum member", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: enumName, kind: "enumName" }, { text: "[", kind: "punctuation" }, { text: enumMemberName, kind: "stringLiteral" }, { text: "]", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "=", kind: "operator" }, { text: " ", kind: "space" }, { text: initializer.toString(), kind: "numericLiteral" }], + []); + } + + function verifyInstance() { + marker++; + goTo.marker(marker.toString()); + verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName(marker.toString()).position, length: instanceName.length }, + [{ text: "var", kind: "keyword" }, + { text: " ", kind: "space" }, { text: instanceName, kind: "localName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: enumName, kind: "enumName" }], + []); + } +} + +verifyEnumDeclaration("E", "eInstance"); +verifyEnumDeclaration("constE", "eInstance1", /*isConst*/ true); diff --git a/tests/cases/fourslash/quickInfoDisplayPartsEnum3.ts b/tests/cases/fourslash/quickInfoDisplayPartsEnum3.ts new file mode 100644 index 00000000000..77fbda1e317 --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsEnum3.ts @@ -0,0 +1,80 @@ +/// + +////enum /*1*/E { +//// /*2*/"e1", +//// /*3*/'e2' = 10, +//// /*4*/"e3" +////} +////var /*5*/eInstance: /*6*/E; +/////*7*/eInstance = /*8*/E[/*9*/"e1"]; +/////*10*/eInstance = /*11*/E[/*12*/"e2"]; +/////*13*/eInstance = /*14*/E[/*15*/'e3']; +////const enum /*16*/constE { +//// /*17*/"e1", +//// /*18*/'e2' = 10, +//// /*19*/"e3" +////} +////var /*20*/eInstance1: /*21*/constE; +/////*22*/eInstance1 = /*23*/constE[/*24*/"e1"]; +/////*25*/eInstance1 = /*26*/constE[/*27*/"e2"]; +/////*28*/eInstance1 = /*29*/constE[/*30*/'e3']; + +var marker = 0; +function verifyEnumDeclaration(enumName: string, instanceName: string, isConst?: boolean) { + verifyEnumDisplay(); + + verifyEnumMemberDisplay('"e1"', /*spanLength*/ 4, 0); + verifyEnumMemberDisplay("'e2'", /*spanLength*/ 4, 10); + verifyEnumMemberDisplay('"e3"', /*spanLength*/ 4, 11); + + verifyInstance(); + verifyEnumDisplay(); + + verifyInstance(); + verifyEnumDisplay(); + verifyEnumMemberDisplay('"e1"', /*spanLength*/ 4, 0); + + verifyInstance(); + verifyEnumDisplay(); + verifyEnumMemberDisplay("'e2'", /*spanLength*/ 4, 10); + + verifyInstance(); + verifyEnumDisplay(); + verifyEnumMemberDisplay('"e3"', /*spanLength*/ 4, 11); + + function verifyEnumDisplay() { + marker++; + goTo.marker(marker.toString()); + verify.verifyQuickInfoDisplayParts("enum", "", { start: test.markerByName(marker.toString()).position, length: enumName.length }, + (isConst ? [{ text: "const", kind: "keyword" }, { text: " ", kind: "space" }] : []).concat( + [{ text: "enum", kind: "keyword" }, { text: " ", kind: "space" }, { text: enumName, kind: "enumName" }]), + []);; + } + + function verifyEnumMemberDisplay(enumMemberName: string, spanLength: number, initializer: number) { + marker++; + goTo.marker(marker.toString()); + // Each of these names is a string literal, + // but since they're accessed by property accesses, + // we need to account for the quotes at the beginning and end. + verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName(marker.toString()).position, length: spanLength }, + [{ text: "(", kind: "punctuation" }, { text: "enum member", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: enumName, kind: "enumName" }, { text: "[", kind: "punctuation" }, { text: enumMemberName, kind: "stringLiteral" }, { text: "]", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "=", kind: "operator" }, { text: " ", kind: "space" }, { text: initializer.toString(), kind: "numericLiteral" }], + []); + } + + function verifyInstance() { + marker++; + goTo.marker(marker.toString()); + verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName(marker.toString()).position, length: instanceName.length }, + [{ text: "var", kind: "keyword" }, + { text: " ", kind: "space" }, { text: instanceName, kind: "localName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: enumName, kind: "enumName" }], + []); + } +} + +verifyEnumDeclaration("E", "eInstance"); +marker = 15; +//verifyEnumDeclaration("constE", "eInstance1", /*isConst*/ true);