diff --git a/tests/baselines/reference/jsFileCompilationEmitDeclarations.js b/tests/baselines/reference/jsFileCompilationEmitDeclarations.js
new file mode 100644
index 00000000000..c6711e4e85f
--- /dev/null
+++ b/tests/baselines/reference/jsFileCompilationEmitDeclarations.js
@@ -0,0 +1,25 @@
+//// [tests/cases/compiler/jsFileCompilationEmitDeclarations.ts] ////
+
+//// [a.ts]
+class c {
+}
+
+//// [b.js]
+function foo() {
+}
+
+
+//// [out.js]
+var c = (function () {
+ function c() {
+ }
+ return c;
+})();
+function foo() {
+}
+
+
+//// [out.d.ts]
+declare class c {
+}
+declare function foo(): void;
diff --git a/tests/baselines/reference/jsFileCompilationEmitDeclarations.symbols b/tests/baselines/reference/jsFileCompilationEmitDeclarations.symbols
new file mode 100644
index 00000000000..5260b8d6cf3
--- /dev/null
+++ b/tests/baselines/reference/jsFileCompilationEmitDeclarations.symbols
@@ -0,0 +1,10 @@
+=== tests/cases/compiler/a.ts ===
+class c {
+>c : Symbol(c, Decl(a.ts, 0, 0))
+}
+
+=== tests/cases/compiler/b.js ===
+function foo() {
+>foo : Symbol(foo, Decl(b.js, 0, 0))
+}
+
diff --git a/tests/baselines/reference/jsFileCompilationEmitDeclarations.types b/tests/baselines/reference/jsFileCompilationEmitDeclarations.types
new file mode 100644
index 00000000000..dce83eeb8eb
--- /dev/null
+++ b/tests/baselines/reference/jsFileCompilationEmitDeclarations.types
@@ -0,0 +1,10 @@
+=== tests/cases/compiler/a.ts ===
+class c {
+>c : c
+}
+
+=== tests/cases/compiler/b.js ===
+function foo() {
+>foo : () => void
+}
+
diff --git a/tests/baselines/reference/jsFileCompilationEmitTrippleSlashReference.js b/tests/baselines/reference/jsFileCompilationEmitTrippleSlashReference.js
new file mode 100644
index 00000000000..04f36213b1b
--- /dev/null
+++ b/tests/baselines/reference/jsFileCompilationEmitTrippleSlashReference.js
@@ -0,0 +1,33 @@
+//// [tests/cases/compiler/jsFileCompilationEmitTrippleSlashReference.ts] ////
+
+//// [a.ts]
+class c {
+}
+
+//// [b.js]
+///
+function foo() {
+}
+
+//// [c.js]
+function bar() {
+}
+
+//// [out.js]
+var c = (function () {
+ function c() {
+ }
+ return c;
+})();
+function bar() {
+}
+///
+function foo() {
+}
+
+
+//// [out.d.ts]
+declare class c {
+}
+declare function bar(): void;
+declare function foo(): void;
diff --git a/tests/baselines/reference/jsFileCompilationEmitTrippleSlashReference.symbols b/tests/baselines/reference/jsFileCompilationEmitTrippleSlashReference.symbols
new file mode 100644
index 00000000000..805d202a14c
--- /dev/null
+++ b/tests/baselines/reference/jsFileCompilationEmitTrippleSlashReference.symbols
@@ -0,0 +1,15 @@
+=== tests/cases/compiler/a.ts ===
+class c {
+>c : Symbol(c, Decl(a.ts, 0, 0))
+}
+
+=== tests/cases/compiler/b.js ===
+///
+function foo() {
+>foo : Symbol(foo, Decl(b.js, 0, 0))
+}
+
+=== tests/cases/compiler/c.js ===
+function bar() {
+>bar : Symbol(bar, Decl(c.js, 0, 0))
+}
diff --git a/tests/baselines/reference/jsFileCompilationEmitTrippleSlashReference.types b/tests/baselines/reference/jsFileCompilationEmitTrippleSlashReference.types
new file mode 100644
index 00000000000..b206a486351
--- /dev/null
+++ b/tests/baselines/reference/jsFileCompilationEmitTrippleSlashReference.types
@@ -0,0 +1,15 @@
+=== tests/cases/compiler/a.ts ===
+class c {
+>c : c
+}
+
+=== tests/cases/compiler/b.js ===
+///
+function foo() {
+>foo : () => void
+}
+
+=== tests/cases/compiler/c.js ===
+function bar() {
+>bar : () => void
+}
diff --git a/tests/baselines/reference/jsFileCompilationWithOut.js b/tests/baselines/reference/jsFileCompilationWithOut.js
new file mode 100644
index 00000000000..32d0261061f
--- /dev/null
+++ b/tests/baselines/reference/jsFileCompilationWithOut.js
@@ -0,0 +1,19 @@
+//// [tests/cases/compiler/jsFileCompilationWithOut.ts] ////
+
+//// [a.ts]
+class c {
+}
+
+//// [b.js]
+function foo() {
+}
+
+
+//// [out.js]
+var c = (function () {
+ function c() {
+ }
+ return c;
+})();
+function foo() {
+}
diff --git a/tests/baselines/reference/jsFileCompilationWithOut.symbols b/tests/baselines/reference/jsFileCompilationWithOut.symbols
new file mode 100644
index 00000000000..5260b8d6cf3
--- /dev/null
+++ b/tests/baselines/reference/jsFileCompilationWithOut.symbols
@@ -0,0 +1,10 @@
+=== tests/cases/compiler/a.ts ===
+class c {
+>c : Symbol(c, Decl(a.ts, 0, 0))
+}
+
+=== tests/cases/compiler/b.js ===
+function foo() {
+>foo : Symbol(foo, Decl(b.js, 0, 0))
+}
+
diff --git a/tests/baselines/reference/jsFileCompilationWithOut.types b/tests/baselines/reference/jsFileCompilationWithOut.types
new file mode 100644
index 00000000000..dce83eeb8eb
--- /dev/null
+++ b/tests/baselines/reference/jsFileCompilationWithOut.types
@@ -0,0 +1,10 @@
+=== tests/cases/compiler/a.ts ===
+class c {
+>c : c
+}
+
+=== tests/cases/compiler/b.js ===
+function foo() {
+>foo : () => void
+}
+
diff --git a/tests/baselines/reference/jsFileCompilationWithoutOut.errors.txt b/tests/baselines/reference/jsFileCompilationWithoutOut.errors.txt
new file mode 100644
index 00000000000..32a60df0996
--- /dev/null
+++ b/tests/baselines/reference/jsFileCompilationWithoutOut.errors.txt
@@ -0,0 +1,12 @@
+error TS5054: Could not write file 'tests/cases/compiler/b.js' which is one of the input files.
+
+
+!!! error TS5054: Could not write file 'tests/cases/compiler/b.js' which is one of the input files.
+==== tests/cases/compiler/a.ts (0 errors) ====
+ class c {
+ }
+
+==== tests/cases/compiler/b.js (0 errors) ====
+ function foo() {
+ }
+
\ No newline at end of file
diff --git a/tests/baselines/reference/jsFileCompilationWithoutOut.js b/tests/baselines/reference/jsFileCompilationWithoutOut.js
new file mode 100644
index 00000000000..4a60c54c3ab
--- /dev/null
+++ b/tests/baselines/reference/jsFileCompilationWithoutOut.js
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/jsFileCompilationWithoutOut.ts] ////
+
+//// [a.ts]
+class c {
+}
+
+//// [b.js]
+function foo() {
+}
+
+
+//// [a.js]
+var c = (function () {
+ function c() {
+ }
+ return c;
+})();
diff --git a/tests/cases/compiler/jsFileCompilationEmitDeclarations.ts b/tests/cases/compiler/jsFileCompilationEmitDeclarations.ts
new file mode 100644
index 00000000000..53ed217c2b5
--- /dev/null
+++ b/tests/cases/compiler/jsFileCompilationEmitDeclarations.ts
@@ -0,0 +1,9 @@
+// @out: out.js
+// @declaration: true
+// @filename: a.ts
+class c {
+}
+
+// @filename: b.js
+function foo() {
+}
diff --git a/tests/cases/compiler/jsFileCompilationEmitTrippleSlashReference.ts b/tests/cases/compiler/jsFileCompilationEmitTrippleSlashReference.ts
new file mode 100644
index 00000000000..88931fa2eaf
--- /dev/null
+++ b/tests/cases/compiler/jsFileCompilationEmitTrippleSlashReference.ts
@@ -0,0 +1,14 @@
+// @out: out.js
+// @declaration: true
+// @filename: a.ts
+class c {
+}
+
+// @filename: b.js
+///
+function foo() {
+}
+
+// @filename: c.js
+function bar() {
+}
\ No newline at end of file
diff --git a/tests/cases/compiler/jsFileCompilationWithOut.ts b/tests/cases/compiler/jsFileCompilationWithOut.ts
new file mode 100644
index 00000000000..47ca5115cbb
--- /dev/null
+++ b/tests/cases/compiler/jsFileCompilationWithOut.ts
@@ -0,0 +1,8 @@
+// @out: out.js
+// @filename: a.ts
+class c {
+}
+
+// @filename: b.js
+function foo() {
+}
diff --git a/tests/cases/compiler/jsFileCompilationWithoutOut.ts b/tests/cases/compiler/jsFileCompilationWithoutOut.ts
new file mode 100644
index 00000000000..2936f2eda7c
--- /dev/null
+++ b/tests/cases/compiler/jsFileCompilationWithoutOut.ts
@@ -0,0 +1,7 @@
+// @filename: a.ts
+class c {
+}
+
+// @filename: b.js
+function foo() {
+}