diff --git a/tests/cases/fourslash/getOccurrencesDeclare1.ts b/tests/cases/fourslash/getOccurrencesDeclare1.ts
new file mode 100644
index 00000000000..1cdad07eb7e
--- /dev/null
+++ b/tests/cases/fourslash/getOccurrencesDeclare1.ts
@@ -0,0 +1,64 @@
+///
+
+////module m {
+//// export class C1 {
+//// public pub1;
+//// public pub2;
+//// private priv1;
+//// private priv2;
+//// protected prot1;
+//// protected prot2;
+////
+//// public public;
+//// private private;
+//// protected protected;
+////
+//// public constructor(public a, private b, protected c, public d, private e, protected f) {
+//// this.public = 10;
+//// this.private = 10;
+//// this.protected = 10;
+//// }
+////
+//// public get x() { return 10; }
+//// public set x(value) { }
+////
+//// public static statPub;
+//// private static statPriv;
+//// protected static statProt;
+//// }
+////
+//// export interface I1 {
+//// }
+////
+//// export [|declare|] module ma.m1.m2.m3 {
+//// interface I2 {
+//// }
+//// }
+////
+//// export module mb.m1.m2.m3 {
+//// declare var foo;
+////
+//// export class C2 {
+//// public pub1;
+//// private priv1;
+//// protected prot1;
+////
+//// protected constructor(public public, protected protected, private private) {
+//// public = private = protected;
+//// }
+//// }
+//// }
+////
+//// [|declare|] var ambientThing: number;
+//// export var exportedThing = 10;
+//// [|declare|] function foo(): string;
+////}
+
+test.ranges().forEach(r => {
+ goTo.position(r.start);
+ verify.occurrencesAtPositionCount(test.ranges().length);
+
+ test.ranges().forEach(range => {
+ verify.occurrencesAtPositionContains(range, false);
+ });
+});
diff --git a/tests/cases/fourslash/getOccurrencesDeclare2.ts b/tests/cases/fourslash/getOccurrencesDeclare2.ts
new file mode 100644
index 00000000000..3d719e5d035
--- /dev/null
+++ b/tests/cases/fourslash/getOccurrencesDeclare2.ts
@@ -0,0 +1,64 @@
+///
+
+////module m {
+//// export class C1 {
+//// public pub1;
+//// public pub2;
+//// private priv1;
+//// private priv2;
+//// protected prot1;
+//// protected prot2;
+////
+//// public public;
+//// private private;
+//// protected protected;
+////
+//// public constructor(public a, private b, protected c, public d, private e, protected f) {
+//// this.public = 10;
+//// this.private = 10;
+//// this.protected = 10;
+//// }
+////
+//// public get x() { return 10; }
+//// public set x(value) { }
+////
+//// public static statPub;
+//// private static statPriv;
+//// protected static statProt;
+//// }
+////
+//// export interface I1 {
+//// }
+////
+//// export declare module ma.m1.m2.m3 {
+//// interface I2 {
+//// }
+//// }
+////
+//// export module mb.m1.m2.m3 {
+//// [|declare|] var foo;
+////
+//// export class C2 {
+//// public pub1;
+//// private priv1;
+//// protected prot1;
+////
+//// protected constructor(public public, protected protected, private private) {
+//// public = private = protected;
+//// }
+//// }
+//// }
+////
+//// declare var ambientThing: number;
+//// export var exportedThing = 10;
+//// declare function foo(): string;
+////}
+
+test.ranges().forEach(r => {
+ goTo.position(r.start);
+ verify.occurrencesAtPositionCount(test.ranges().length);
+
+ test.ranges().forEach(range => {
+ verify.occurrencesAtPositionContains(range, false);
+ });
+});
diff --git a/tests/cases/fourslash/getOccurrencesExport1.ts b/tests/cases/fourslash/getOccurrencesExport1.ts
new file mode 100644
index 00000000000..c47c39cf548
--- /dev/null
+++ b/tests/cases/fourslash/getOccurrencesExport1.ts
@@ -0,0 +1,64 @@
+///
+
+////module m {
+//// [|export|] class C1 {
+//// public pub1;
+//// public pub2;
+//// private priv1;
+//// private priv2;
+//// protected prot1;
+//// protected prot2;
+////
+//// public public;
+//// private private;
+//// protected protected;
+////
+//// public constructor(public a, private b, protected c, public d, private e, protected f) {
+//// this.public = 10;
+//// this.private = 10;
+//// this.protected = 10;
+//// }
+////
+//// public get x() { return 10; }
+//// public set x(value) { }
+////
+//// public static statPub;
+//// private static statPriv;
+//// protected static statProt;
+//// }
+////
+//// [|export|] interface I1 {
+//// }
+////
+//// [|export|] declare module ma.m1.m2.m3 {
+//// interface I2 {
+//// }
+//// }
+////
+//// [|export|] module mb.m1.m2.m3 {
+//// declare var foo;
+////
+//// export class C2 {
+//// public pub1;
+//// private priv1;
+//// protected prot1;
+////
+//// protected constructor(public public, protected protected, private private) {
+//// public = private = protected;
+//// }
+//// }
+//// }
+////
+//// declare var ambientThing: number;
+//// [|export|] var exportedThing = 10;
+//// declare function foo(): string;
+////}
+
+test.ranges().forEach(r => {
+ goTo.position(r.start);
+ verify.occurrencesAtPositionCount(test.ranges().length);
+
+ test.ranges().forEach(range => {
+ verify.occurrencesAtPositionContains(range, false);
+ });
+});
diff --git a/tests/cases/fourslash/getOccurrencesExport2.ts b/tests/cases/fourslash/getOccurrencesExport2.ts
new file mode 100644
index 00000000000..a8e43e744b9
--- /dev/null
+++ b/tests/cases/fourslash/getOccurrencesExport2.ts
@@ -0,0 +1,64 @@
+///
+
+////module m {
+//// export class C1 {
+//// public pub1;
+//// public pub2;
+//// private priv1;
+//// private priv2;
+//// protected prot1;
+//// protected prot2;
+////
+//// public public;
+//// private private;
+//// protected protected;
+////
+//// public constructor(public a, private b, protected c, public d, private e, protected f) {
+//// this.public = 10;
+//// this.private = 10;
+//// this.protected = 10;
+//// }
+////
+//// public get x() { return 10; }
+//// public set x(value) { }
+////
+//// public static statPub;
+//// private static statPriv;
+//// protected static statProt;
+//// }
+////
+//// export interface I1 {
+//// }
+////
+//// export declare module ma.m1.m2.m3 {
+//// interface I2 {
+//// }
+//// }
+////
+//// export module mb.m1.m2.m3 {
+//// declare var foo;
+////
+//// [|export|] class C2 {
+//// public pub1;
+//// private priv1;
+//// protected prot1;
+////
+//// protected constructor(public public, protected protected, private private) {
+//// public = private = protected;
+//// }
+//// }
+//// }
+////
+//// declare var ambientThing: number;
+//// export var exportedThing = 10;
+//// declare function foo(): string;
+////}
+
+test.ranges().forEach(r => {
+ goTo.position(r.start);
+ verify.occurrencesAtPositionCount(test.ranges().length);
+
+ test.ranges().forEach(range => {
+ verify.occurrencesAtPositionContains(range, false);
+ });
+});
diff --git a/tests/cases/fourslash/getOccurrencesPrivate1.ts b/tests/cases/fourslash/getOccurrencesPrivate1.ts
new file mode 100644
index 00000000000..991ed3ea31c
--- /dev/null
+++ b/tests/cases/fourslash/getOccurrencesPrivate1.ts
@@ -0,0 +1,64 @@
+///
+
+////module m {
+//// export class C1 {
+//// public pub1;
+//// public pub2;
+//// [|private|] priv1;
+//// [|private|] priv2;
+//// protected prot1;
+//// protected prot2;
+////
+//// public public;
+//// [|private|] private;
+//// protected protected;
+////
+//// public constructor(public a, [|private|] b, protected c, public d, [|private|] e, protected f) {
+//// this.public = 10;
+//// this.private = 10;
+//// this.protected = 10;
+//// }
+////
+//// public get x() { return 10; }
+//// public set x(value) { }
+////
+//// public static statPub;
+//// [|private|] static statPriv;
+//// protected static statProt;
+//// }
+////
+//// export interface I1 {
+//// }
+////
+//// export declare module ma.m1.m2.m3 {
+//// interface I2 {
+//// }
+//// }
+////
+//// export module mb.m1.m2.m3 {
+//// declare var foo;
+////
+//// export class C2 {
+//// public pub1;
+//// private priv1;
+//// protected prot1;
+////
+//// protected constructor(public public, protected protected, private private) {
+//// public = private = protected;
+//// }
+//// }
+//// }
+////
+//// declare var ambientThing: number;
+//// export var exportedThing = 10;
+//// declare function foo(): string;
+////}
+
+test.ranges().forEach(r => {
+ goTo.position(r.start);
+ verify.occurrencesAtPositionCount(test.ranges().length);
+
+ test.ranges().forEach(range => {
+ verify.occurrencesAtPositionContains(range, false);
+ });
+});
diff --git a/tests/cases/fourslash/getOccurrencesPrivate2.ts b/tests/cases/fourslash/getOccurrencesPrivate2.ts
new file mode 100644
index 00000000000..19397443af5
--- /dev/null
+++ b/tests/cases/fourslash/getOccurrencesPrivate2.ts
@@ -0,0 +1,64 @@
+///
+
+////module m {
+//// export class C1 {
+//// public pub1;
+//// public pub2;
+//// private priv1;
+//// private priv2;
+//// protected prot1;
+//// protected prot2;
+////
+//// public public;
+//// private private;
+//// protected protected;
+////
+//// public constructor(public a, private b, protected c, public d, private e, protected f) {
+//// this.public = 10;
+//// this.private = 10;
+//// this.protected = 10;
+//// }
+////
+//// public get x() { return 10; }
+//// public set x(value) { }
+////
+//// public static statPub;
+//// private static statPriv;
+//// protected static statProt;
+//// }
+////
+//// export interface I1 {
+//// }
+////
+//// export declare module ma.m1.m2.m3 {
+//// interface I2 {
+//// }
+//// }
+////
+//// export module mb.m1.m2.m3 {
+//// declare var foo;
+////
+//// export class C2 {
+//// public pub1;
+//// [|private|] priv1;
+//// protected prot1;
+////
+//// protected constructor(public public, protected protected, [|private|] private) {
+//// public = private = protected;
+//// }
+//// }
+//// }
+////
+//// declare var ambientThing: number;
+//// export var exportedThing = 10;
+//// declare function foo(): string;
+////}
+
+test.ranges().forEach(r => {
+ goTo.position(r.start);
+ verify.occurrencesAtPositionCount(test.ranges().length);
+
+ test.ranges().forEach(range => {
+ verify.occurrencesAtPositionContains(range, false);
+ });
+});
diff --git a/tests/cases/fourslash/getOccurrencesProtected1.ts b/tests/cases/fourslash/getOccurrencesProtected1.ts
new file mode 100644
index 00000000000..af9e3302968
--- /dev/null
+++ b/tests/cases/fourslash/getOccurrencesProtected1.ts
@@ -0,0 +1,64 @@
+///
+
+////module m {
+//// export class C1 {
+//// public pub1;
+//// public pub2;
+//// private priv1;
+//// private priv2;
+//// [|protected|] prot1;
+//// [|protected|] prot2;
+////
+//// public public;
+//// private private;
+//// [|protected|] protected;
+////
+//// public constructor(public a, private b, [|protected|] c, public d, private e, [|protected|] f) {
+//// this.public = 10;
+//// this.private = 10;
+//// this.protected = 10;
+//// }
+////
+//// public get x() { return 10; }
+//// public set x(value) { }
+////
+//// public static statPub;
+//// private static statPriv;
+//// [|protected|] static statProt;
+//// }
+////
+//// export interface I1 {
+//// }
+////
+//// export declare module ma.m1.m2.m3 {
+//// interface I2 {
+//// }
+//// }
+////
+//// export module mb.m1.m2.m3 {
+//// declare var foo;
+////
+//// export class C2 {
+//// public pub1;
+//// private priv1;
+//// protected prot1;
+////
+//// protected constructor(public public, protected protected, private private) {
+//// public = private = protected;
+//// }
+//// }
+//// }
+////
+//// declare var ambientThing: number;
+//// export var exportedThing = 10;
+//// declare function foo(): string;
+////}
+
+test.ranges().forEach(r => {
+ goTo.position(r.start);
+ verify.occurrencesAtPositionCount(test.ranges().length);
+
+ test.ranges().forEach(range => {
+ verify.occurrencesAtPositionContains(range, false);
+ });
+});
diff --git a/tests/cases/fourslash/getOccurrencesProtected2.ts b/tests/cases/fourslash/getOccurrencesProtected2.ts
new file mode 100644
index 00000000000..666736eee16
--- /dev/null
+++ b/tests/cases/fourslash/getOccurrencesProtected2.ts
@@ -0,0 +1,64 @@
+///
+
+////module m {
+//// export class C1 {
+//// public pub1;
+//// public pub2;
+//// private priv1;
+//// private priv2;
+//// protected prot1;
+//// protected prot2;
+////
+//// public public;
+//// private private;
+//// protected protected;
+////
+//// public constructor(public a, private b, protected c, public d, private e, protected f) {
+//// this.public = 10;
+//// this.private = 10;
+//// this.protected = 10;
+//// }
+////
+//// public get x() { return 10; }
+//// public set x(value) { }
+////
+//// public static statPub;
+//// private static statPriv;
+//// protected static statProt;
+//// }
+////
+//// export interface I1 {
+//// }
+////
+//// export declare module ma.m1.m2.m3 {
+//// interface I2 {
+//// }
+//// }
+////
+//// export module mb.m1.m2.m3 {
+//// declare var foo;
+////
+//// export class C2 {
+//// public pub1;
+//// private priv1;
+//// [|protected|] prot1;
+////
+//// [|protected|] constructor(public public, [|protected|] protected, private private) {
+//// public = private = protected;
+//// }
+//// }
+//// }
+////
+//// declare var ambientThing: number;
+//// export var exportedThing = 10;
+//// declare function foo(): string;
+////}
+
+test.ranges().forEach(r => {
+ goTo.position(r.start);
+ verify.occurrencesAtPositionCount(test.ranges().length);
+
+ test.ranges().forEach(range => {
+ verify.occurrencesAtPositionContains(range, false);
+ });
+});
diff --git a/tests/cases/fourslash/getOccurrencesPublic1.ts b/tests/cases/fourslash/getOccurrencesPublic1.ts
new file mode 100644
index 00000000000..a451a70c1cb
--- /dev/null
+++ b/tests/cases/fourslash/getOccurrencesPublic1.ts
@@ -0,0 +1,64 @@
+///
+
+////module m {
+//// export class C1 {
+//// [|public|] pub1;
+//// [|public|] pub2;
+//// private priv1;
+//// private priv2;
+//// protected prot1;
+//// protected prot2;
+////
+//// [|public|] public;
+//// private private;
+//// protected protected;
+////
+//// [|public|] constructor([|public|] a, private b, protected c, [|public|] d, private e, protected f) {
+//// this.public = 10;
+//// this.private = 10;
+//// this.protected = 10;
+//// }
+////
+//// [|public|] get x() { return 10; }
+//// [|public|] set x(value) { }
+////
+//// [|public|] static statPub;
+//// private static statPriv;
+//// protected static statProt;
+//// }
+////
+//// export interface I1 {
+//// }
+////
+//// export declare module ma.m1.m2.m3 {
+//// interface I2 {
+//// }
+//// }
+////
+//// export module mb.m1.m2.m3 {
+//// declare var foo;
+////
+//// export class C2 {
+//// public pub1;
+//// private priv1;
+//// protected prot1;
+////
+//// protected constructor(public public, protected protected, private private) {
+//// public = private = protected;
+//// }
+//// }
+//// }
+////
+//// declare var ambientThing: number;
+//// export var exportedThing = 10;
+//// declare function foo(): string;
+////}
+
+test.ranges().forEach(r => {
+ goTo.position(r.start);
+ verify.occurrencesAtPositionCount(test.ranges().length);
+
+ test.ranges().forEach(range => {
+ verify.occurrencesAtPositionContains(range, false);
+ });
+});
diff --git a/tests/cases/fourslash/getOccurrencesPublic2.ts b/tests/cases/fourslash/getOccurrencesPublic2.ts
new file mode 100644
index 00000000000..b4887e18e80
--- /dev/null
+++ b/tests/cases/fourslash/getOccurrencesPublic2.ts
@@ -0,0 +1,64 @@
+///
+
+////module m {
+//// export class C1 {
+//// public pub1;
+//// public pub2;
+//// private priv1;
+//// private priv2;
+//// protected prot1;
+//// protected prot2;
+////
+//// public public;
+//// private private;
+//// protected protected;
+////
+//// public constructor(public a, private b, protected c, public d, private e, protected f) {
+//// this.public = 10;
+//// this.private = 10;
+//// this.protected = 10;
+//// }
+////
+//// public get x() { return 10; }
+//// public set x(value) { }
+////
+//// public static statPub;
+//// private static statPriv;
+//// protected static statProt;
+//// }
+////
+//// export interface I1 {
+//// }
+////
+//// export declare module ma.m1.m2.m3 {
+//// interface I2 {
+//// }
+//// }
+////
+//// export module mb.m1.m2.m3 {
+//// declare var foo;
+////
+//// export class C2 {
+//// [|public|] pub1;
+//// private priv1;
+//// protected prot1;
+////
+//// protected constructor([|public|] public, protected protected, private private) {
+//// public = private = protected;
+//// }
+//// }
+//// }
+////
+//// declare var ambientThing: number;
+//// export var exportedThing = 10;
+//// declare function foo(): string;
+////}
+
+test.ranges().forEach(r => {
+ goTo.position(r.start);
+ verify.occurrencesAtPositionCount(test.ranges().length);
+
+ test.ranges().forEach(range => {
+ verify.occurrencesAtPositionContains(range, false);
+ });
+});
diff --git a/tests/cases/fourslash/getOccurrencesStatic1.ts b/tests/cases/fourslash/getOccurrencesStatic1.ts
new file mode 100644
index 00000000000..8be9862d5ec
--- /dev/null
+++ b/tests/cases/fourslash/getOccurrencesStatic1.ts
@@ -0,0 +1,64 @@
+///
+
+////module m {
+//// export class C1 {
+//// public pub1;
+//// public pub2;
+//// private priv1;
+//// private priv2;
+//// protected prot1;
+//// protected prot2;
+////
+//// public public;
+//// private private;
+//// protected protected;
+////
+//// public constructor(public a, private b, protected c, public d, private e, protected f) {
+//// this.public = 10;
+//// this.private = 10;
+//// this.protected = 10;
+//// }
+////
+//// public get x() { return 10; }
+//// public set x(value) { }
+////
+//// public [|static|] statPub;
+//// private [|static|] statPriv;
+//// protected [|static|] statProt;
+//// }
+////
+//// export interface I1 {
+//// }
+////
+//// export declare module ma.m1.m2.m3 {
+//// interface I2 {
+//// }
+//// }
+////
+//// export module mb.m1.m2.m3 {
+//// declare var foo;
+////
+//// export class C2 {
+//// public pub1;
+//// private priv1;
+//// protected prot1;
+////
+//// protected constructor(public public, protected protected, private private) {
+//// public = private = protected;
+//// }
+//// }
+//// }
+////
+//// declare var ambientThing: number;
+//// export var exportedThing = 10;
+//// declare function foo(): string;
+////}
+
+test.ranges().forEach(r => {
+ goTo.position(r.start);
+ verify.occurrencesAtPositionCount(test.ranges().length);
+
+ test.ranges().forEach(range => {
+ verify.occurrencesAtPositionContains(range, false);
+ });
+});