diff --git a/tests/cases/fourslash/getEmitOutputDeclarationMultiFiles.ts b/tests/cases/fourslash/getEmitOutputDeclarationMultiFiles.ts
new file mode 100644
index 00000000000..f2d7724e41b
--- /dev/null
+++ b/tests/cases/fourslash/getEmitOutputDeclarationMultiFiles.ts
@@ -0,0 +1,21 @@
+///
+
+// @Filename: inputFile1.ts
+//// var x: number = 5;
+//// class Bar {
+//// x : string;
+//// y : number
+//// }
+
+// @Filename: inputFile2.ts
+//// var x1: string = "hello world";
+//// class Foo{
+//// x : string;
+//// y : number;
+//// }
+
+var inputFile1 = "tests/cases/fourslash/inputFile1";
+var inputFile2 = "tests/cases/fourslash/inputFile2";
+edit.enableDeclaration();
+var outputFilenames = inputFile1 + ".js" + " " + inputFile2 + ".js" + " " + inputFile1 + ".d.ts" + " " + inputFile2 + ".d.ts";
+verify.emitOutput(EmitOutputResult.Succeeded, outputFilenames);
\ No newline at end of file
diff --git a/tests/cases/fourslash/getEmitOutputDeclarationSingleFile.ts b/tests/cases/fourslash/getEmitOutputDeclarationSingleFile.ts
new file mode 100644
index 00000000000..7366640650f
--- /dev/null
+++ b/tests/cases/fourslash/getEmitOutputDeclarationSingleFile.ts
@@ -0,0 +1,23 @@
+///
+
+// @Filename: inputFile1.ts
+//// var x: number = 5;
+//// class Bar {
+//// x : string;
+//// y : number
+//// }
+
+// @Filename: inputFile2.ts
+//// var x1: string = "hello world";
+//// class Foo{
+//// x : string;
+//// y : number;
+//// }
+
+var singleFilename = "tests/cases/fourslash/declSingleFile";
+var jsFilename = singleFilename + ".js";
+var declFilename = singleFilename + ".d.ts";
+edit.enableSingleOutputFile(jsFilename);
+edit.enableDeclaration();
+var outputFilenames = jsFilename + " " + declFilename;
+verify.emitOutput(EmitOutputResult.Succeeded, outputFilenames);
\ No newline at end of file
diff --git a/tests/cases/fourslash/getEmitOutputNoErrors.ts b/tests/cases/fourslash/getEmitOutputNoErrors.ts
new file mode 100644
index 00000000000..b3cdbc6c469
--- /dev/null
+++ b/tests/cases/fourslash/getEmitOutputNoErrors.ts
@@ -0,0 +1,10 @@
+///
+
+// @Filename: noErrorsResult.ts
+//// var x;
+//// class M {
+//// x: number;
+//// y: string;
+//// }
+
+verify.emitOutput(EmitOutputResult.Succeeded, "tests/cases/fourslash/noErrorsResult.js");
\ No newline at end of file
diff --git a/tests/cases/fourslash/getEmitOutputSingleFile.ts b/tests/cases/fourslash/getEmitOutputSingleFile.ts
new file mode 100644
index 00000000000..13d0d6c9ac0
--- /dev/null
+++ b/tests/cases/fourslash/getEmitOutputSingleFile.ts
@@ -0,0 +1,19 @@
+///
+
+// @Filename: inputFile1.ts
+//// var x: any;
+//// class Bar {
+//// x : string;
+//// y : number
+//// }
+
+// @Filename: inputFile2.ts
+//// var x: any;
+//// class Foo{
+//// x : string;
+//// y : number
+//// }
+
+var outputFilename = "tests/cases/fourslash/singleFile.js";
+edit.enableSingleOutputFile(outputFilename);
+verify.emitOutput(EmitOutputResult.Succeeded, outputFilename);
\ No newline at end of file
diff --git a/tests/cases/fourslash/getEmitOutputWithSemanticErrors.ts b/tests/cases/fourslash/getEmitOutputWithSemanticErrors.ts
new file mode 100644
index 00000000000..8f5a0f98d77
--- /dev/null
+++ b/tests/cases/fourslash/getEmitOutputWithSemanticErrors.ts
@@ -0,0 +1,7 @@
+///
+
+// @Filename: semanticErrorsResult.ts
+//// var x:number = "hello world";
+
+// Only generate javscript file. The semantic error should not affect it
+verify.emitOutput(EmitOutputResult.Succeeded,"tests/cases/fourslash/semanticErrorsResult.js");
\ No newline at end of file
diff --git a/tests/cases/fourslash/getEmitOutputWithSemanticErrors2.ts b/tests/cases/fourslash/getEmitOutputWithSemanticErrors2.ts
new file mode 100644
index 00000000000..9bea96ecd0f
--- /dev/null
+++ b/tests/cases/fourslash/getEmitOutputWithSemanticErrors2.ts
@@ -0,0 +1,8 @@
+///
+
+// @Filename: semanticErrorsResult2.ts
+//// var x:number = "hello world";
+
+edit.enableDeclaration();
+// Fail to generate .d.ts file due to semantic error but succeeded in generate javascript file
+verify.emitOutput(EmitOutputResult.FailedToGenerateDeclarationsBecauseOfSemanticErrors,"tests/cases/fourslash/semanticErrorsResult2.js");
\ No newline at end of file
diff --git a/tests/cases/fourslash/getEmitOutputWithSyntaxErrors.ts b/tests/cases/fourslash/getEmitOutputWithSyntaxErrors.ts
new file mode 100644
index 00000000000..9679b301300
--- /dev/null
+++ b/tests/cases/fourslash/getEmitOutputWithSyntaxErrors.ts
@@ -0,0 +1,6 @@
+///
+
+// @Filename: getEmitOutputWithSyntaxErrorsResult.ts
+//// var x:
+
+verify.emitOutput(EmitOutputResult.FailedBecauseOfSyntaxErrors);
\ No newline at end of file
diff --git a/tests/cases/fourslash/getEmitOutputWithSyntaxErrors2.ts b/tests/cases/fourslash/getEmitOutputWithSyntaxErrors2.ts
new file mode 100644
index 00000000000..d0f72bc5adf
--- /dev/null
+++ b/tests/cases/fourslash/getEmitOutputWithSyntaxErrors2.ts
@@ -0,0 +1,10 @@
+///
+
+// @Filename: syntaxErrorsResult2.ts
+//// var x;
+//// class M {
+//// x : string;
+//// y : numer
+
+edit.enableDeclaration();
+verify.emitOutput(EmitOutputResult.FailedBecauseOfSyntaxErrors);
\ No newline at end of file