diff --git a/tests/cases/fourslash/getOccurrencesReturn.ts b/tests/cases/fourslash/getOccurrencesReturn.ts
new file mode 100644
index 00000000000..613e1645fb5
--- /dev/null
+++ b/tests/cases/fourslash/getOccurrencesReturn.ts
@@ -0,0 +1,33 @@
+///
+
+////function f(a: number) {
+//// if (a > 0) {
+//// [|ret/**/urn|] (function () {
+//// return;
+//// return;
+//// return;
+////
+//// if (false) {
+//// return true;
+//// }
+//// })() || true;
+//// }
+////
+//// var unusued = [1, 2, 3, 4].map(x => { return 4 })
+////
+//// [|return|];
+//// [|return|] true;
+////}
+
+test.ranges().forEach(r => {
+ goTo.position(r.start);
+
+ test.ranges().forEach(range => {
+ verify.occurrencesAtPositionContains(range, false);
+ });
+});
+
+goTo.marker();
+test.ranges().forEach(range => {
+ verify.occurrencesAtPositionContains(range, false);
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/getOccurrencesReturn2.ts b/tests/cases/fourslash/getOccurrencesReturn2.ts
new file mode 100644
index 00000000000..15a062433fe
--- /dev/null
+++ b/tests/cases/fourslash/getOccurrencesReturn2.ts
@@ -0,0 +1,33 @@
+///
+
+////function f(a: number) {
+//// if (a > 0) {
+//// return (function () {
+//// [|return|];
+//// [|ret/**/urn|];
+//// [|return|];
+////
+//// while (false) {
+//// [|return|] true;
+//// }
+//// })() || true;
+//// }
+////
+//// var unusued = [1, 2, 3, 4].map(x => { return 4 })
+////
+//// return;
+//// return true;
+////}
+
+test.ranges().forEach(r => {
+ goTo.position(r.start);
+
+ test.ranges().forEach(range => {
+ verify.occurrencesAtPositionContains(range, false);
+ });
+});
+
+goTo.marker();
+test.ranges().forEach(range => {
+ verify.occurrencesAtPositionContains(range, false);
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/getOccurrencesReturn3.ts b/tests/cases/fourslash/getOccurrencesReturn3.ts
new file mode 100644
index 00000000000..030d700ef6e
--- /dev/null
+++ b/tests/cases/fourslash/getOccurrencesReturn3.ts
@@ -0,0 +1,28 @@
+///
+
+////function f(a: number) {
+//// if (a > 0) {
+//// return (function () {
+//// return;
+//// return;
+//// return;
+////
+//// if (false) {
+//// return true;
+//// }
+//// })() || true;
+//// }
+////
+//// var unusued = [1, 2, 3, 4].map(x => { [|return|] 4 })
+////
+//// return;
+//// return true;
+////}
+
+test.ranges().forEach(r => {
+ goTo.position(r.start);
+
+ test.ranges().forEach(range => {
+ verify.occurrencesAtPositionContains(range, false);
+ });
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/getOccurrencesReturnBroken.ts b/tests/cases/fourslash/getOccurrencesReturnBroken.ts
new file mode 100644
index 00000000000..e740e7f2bb3
--- /dev/null
+++ b/tests/cases/fourslash/getOccurrencesReturnBroken.ts
@@ -0,0 +1,54 @@
+///
+
+////ret/*1*/urn;
+////retu/*2*/rn;
+////function f(a: number) {
+//// if (a > 0) {
+//// return (function () {
+//// () => [|return|];
+//// [|return|];
+//// [|return|];
+////
+//// if (false) {
+//// [|return|] true;
+//// }
+//// })() || true;
+//// }
+////
+//// var unusued = [1, 2, 3, 4].map(x => { return 4 })
+////
+//// return;
+//// return true;
+////}
+////
+////class A {
+//// ret/*3*/urn;
+//// r/*4*/eturn 8675309;
+////}
+
+// Note: For this test, these 'return's get highlighted as a result of a parse recovery
+// where if an arrow function starts with a statement, we try to parse a body
+// as if it was missing curly braces. If the behavior changes in the future,
+// a change to this test is very much welcome.
+test.ranges().forEach(r => {
+ goTo.position(r.start);
+
+ test.ranges().forEach(range => {
+ verify.occurrencesAtPositionContains(range, false);
+ });
+});
+
+for (var i = 1; i <= test.markers().length; i++) {
+ goTo.marker("" + i);
+
+ switch (i) {
+ case 0:
+ case 1:
+ case 4:
+ verify.occurrencesAtPositionCount(0);
+ break;
+ case 3:
+ verify.occurrencesAtPositionCount(1); // 'return' is an instance member
+ break;
+ }
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/getOccurrencesReturnNegatives.ts b/tests/cases/fourslash/getOccurrencesReturnNegatives.ts
new file mode 100644
index 00000000000..79cb3c659c6
--- /dev/null
+++ b/tests/cases/fourslash/getOccurrencesReturnNegatives.ts
@@ -0,0 +1,25 @@
+///
+
+////function f(a: number) {
+//// if (a > 0) {
+//// return (function () {
+//// return/*1*/;
+//// return/*2*/;
+//// return/*3*/;
+////
+//// if (false) {
+//// return/*4*/ true;
+//// }
+//// })() || true;
+//// }
+////
+//// var unusued = [1, 2, 3, 4].map(x => { return/*5*/ 4 })
+////
+//// return/*6*/;
+//// return/*7*/ true;
+////}
+
+test.markers().forEach(m => {
+ goTo.position(m.position, m.fileName)
+ verify.occurrencesAtPositionCount(0);
+});
\ No newline at end of file