diff --git a/src/compiler/program.ts b/src/compiler/program.ts
index 8cf16a806ec..4c2bba00d33 100644
--- a/src/compiler/program.ts
+++ b/src/compiler/program.ts
@@ -3195,9 +3195,10 @@ namespace ts {
}
}
- // there has to be common source directory if user specified --outdir || --sourceRoot
+ // there has to be common source directory if user specified --outdir || --rootDir || --sourceRoot
// if user specified --mapRoot, there needs to be common source directory if there would be multiple files being emitted
if (options.outDir || // there is --outDir specified
+ options.rootDir || // there is --rootDir specified
options.sourceRoot || // there is --sourceRoot specified
options.mapRoot) { // there is --mapRoot specified
diff --git a/src/testRunner/unittests/services/transpile.ts b/src/testRunner/unittests/services/transpile.ts
index 765b4f345e6..48cb8582033 100644
--- a/src/testRunner/unittests/services/transpile.ts
+++ b/src/testRunner/unittests/services/transpile.ts
@@ -372,7 +372,7 @@ var x = 0;`, {
});
transpilesCorrectly("Supports setting 'rootDir'", "x;", {
- options: { compilerOptions: { rootDir: "./rootDir" }, fileName: "input.js", reportDiagnostics: true }
+ options: { compilerOptions: { rootDir: "./rootDir" }, fileName: "./rootDir/input.js", reportDiagnostics: true }
});
transpilesCorrectly("Supports setting 'rootDirs'", "x;", {
diff --git a/tests/baselines/reference/project/rootDirectoryWithoutOutDir/amd/rootDirectoryWithoutOutDir.errors.txt b/tests/baselines/reference/project/rootDirectoryWithoutOutDir/amd/rootDirectoryWithoutOutDir.errors.txt
new file mode 100644
index 00000000000..4e3492c206f
--- /dev/null
+++ b/tests/baselines/reference/project/rootDirectoryWithoutOutDir/amd/rootDirectoryWithoutOutDir.errors.txt
@@ -0,0 +1,18 @@
+error TS6059: File 'FolderA/FolderB/fileB.ts' is not under 'rootDir' 'FolderA/FolderB/FolderC'. 'rootDir' is expected to contain all source files.
+ The file is in the program because:
+ Root file specified for compilation
+
+
+!!! error TS6059: File 'FolderA/FolderB/fileB.ts' is not under 'rootDir' 'FolderA/FolderB/FolderC'. 'rootDir' is expected to contain all source files.
+!!! error TS6059: The file is in the program because:
+!!! error TS6059: Root file specified for compilation
+==== FolderA/FolderB/FolderC/fileC.ts (0 errors) ====
+ class C {
+ }
+
+==== FolderA/FolderB/fileB.ts (0 errors) ====
+ ///
+ class B {
+ public c: C;
+ }
+
\ No newline at end of file
diff --git a/tests/baselines/reference/project/rootDirectoryWithoutOutDir/amd/rootDirectoryWithoutOutDir.json b/tests/baselines/reference/project/rootDirectoryWithoutOutDir/amd/rootDirectoryWithoutOutDir.json
new file mode 100644
index 00000000000..ce32cd431b2
--- /dev/null
+++ b/tests/baselines/reference/project/rootDirectoryWithoutOutDir/amd/rootDirectoryWithoutOutDir.json
@@ -0,0 +1,17 @@
+{
+ "scenario": "rootDirectory: Files outside the rootDirectory without outDir",
+ "projectRoot": "tests/cases/projects/rootDirectory",
+ "inputFiles": [
+ "FolderA/FolderB/fileB.ts"
+ ],
+ "rootDir": "FolderA/FolderB/FolderC",
+ "resolvedInputFiles": [
+ "lib.es5.d.ts",
+ "FolderA/FolderB/FolderC/fileC.ts",
+ "FolderA/FolderB/fileB.ts"
+ ],
+ "emittedFiles": [
+ "FolderA/FolderB/FolderC/fileC.js",
+ "FolderA/FolderB/fileB.js"
+ ]
+}
\ No newline at end of file
diff --git a/tests/baselines/reference/project/rootDirectoryWithoutOutDir/node/rootDirectoryWithoutOutDir.errors.txt b/tests/baselines/reference/project/rootDirectoryWithoutOutDir/node/rootDirectoryWithoutOutDir.errors.txt
new file mode 100644
index 00000000000..4e3492c206f
--- /dev/null
+++ b/tests/baselines/reference/project/rootDirectoryWithoutOutDir/node/rootDirectoryWithoutOutDir.errors.txt
@@ -0,0 +1,18 @@
+error TS6059: File 'FolderA/FolderB/fileB.ts' is not under 'rootDir' 'FolderA/FolderB/FolderC'. 'rootDir' is expected to contain all source files.
+ The file is in the program because:
+ Root file specified for compilation
+
+
+!!! error TS6059: File 'FolderA/FolderB/fileB.ts' is not under 'rootDir' 'FolderA/FolderB/FolderC'. 'rootDir' is expected to contain all source files.
+!!! error TS6059: The file is in the program because:
+!!! error TS6059: Root file specified for compilation
+==== FolderA/FolderB/FolderC/fileC.ts (0 errors) ====
+ class C {
+ }
+
+==== FolderA/FolderB/fileB.ts (0 errors) ====
+ ///
+ class B {
+ public c: C;
+ }
+
\ No newline at end of file
diff --git a/tests/baselines/reference/project/rootDirectoryWithoutOutDir/node/rootDirectoryWithoutOutDir.json b/tests/baselines/reference/project/rootDirectoryWithoutOutDir/node/rootDirectoryWithoutOutDir.json
new file mode 100644
index 00000000000..ce32cd431b2
--- /dev/null
+++ b/tests/baselines/reference/project/rootDirectoryWithoutOutDir/node/rootDirectoryWithoutOutDir.json
@@ -0,0 +1,17 @@
+{
+ "scenario": "rootDirectory: Files outside the rootDirectory without outDir",
+ "projectRoot": "tests/cases/projects/rootDirectory",
+ "inputFiles": [
+ "FolderA/FolderB/fileB.ts"
+ ],
+ "rootDir": "FolderA/FolderB/FolderC",
+ "resolvedInputFiles": [
+ "lib.es5.d.ts",
+ "FolderA/FolderB/FolderC/fileC.ts",
+ "FolderA/FolderB/fileB.ts"
+ ],
+ "emittedFiles": [
+ "FolderA/FolderB/FolderC/fileC.js",
+ "FolderA/FolderB/fileB.js"
+ ]
+}
\ No newline at end of file
diff --git a/tests/cases/project/rootDirectoryWithoutOutDir.json b/tests/cases/project/rootDirectoryWithoutOutDir.json
new file mode 100644
index 00000000000..d58790973cf
--- /dev/null
+++ b/tests/cases/project/rootDirectoryWithoutOutDir.json
@@ -0,0 +1,8 @@
+{
+ "scenario": "rootDirectory: Files outside the rootDirectory without outDir",
+ "projectRoot": "tests/cases/projects/rootDirectory",
+ "inputFiles": [
+ "FolderA/FolderB/fileB.ts"
+ ],
+ "rootDir": "FolderA/FolderB/FolderC"
+}
\ No newline at end of file