diff --git a/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompiler.java index 8d74f16fb28..23648d90b01 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompiler.java @@ -143,6 +143,13 @@ public class K2JSCompiler extends CLICompiler { OutputFileCollection outputFiles = translate(mainCallParameters, config, sourcesFiles, outputFile, outputPrefixFile, outputPostfixFile); + if (outputFile.isDirectory()) { + messageCollector.report(CompilerMessageSeverity.ERROR, + "Cannot open output file '" + outputFile.getPath() + "': is a directory", + CompilerMessageLocation.NO_LOCATION); + return ExitCode.COMPILATION_ERROR; + } + File outputDir = outputFile.getParentFile(); if (outputDir == null) { outputDir = outputFile.getAbsoluteFile().getParentFile(); diff --git a/compiler/testData/cli/js/outputIsDirectory.args b/compiler/testData/cli/js/outputIsDirectory.args new file mode 100644 index 00000000000..89a19b44b1d --- /dev/null +++ b/compiler/testData/cli/js/outputIsDirectory.args @@ -0,0 +1,4 @@ +$TESTDATA_DIR$/simple2js.kt +-no-stdlib +-output +$TESTDATA_DIR$ diff --git a/compiler/testData/cli/js/outputIsDirectory.out b/compiler/testData/cli/js/outputIsDirectory.out new file mode 100644 index 00000000000..a051db72e9d --- /dev/null +++ b/compiler/testData/cli/js/outputIsDirectory.out @@ -0,0 +1,2 @@ +ERROR: Cannot open output file 'compiler/testData/cli/js': is a directory +COMPILATION_ERROR \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/cli/KotlincExecutableTestGenerated.java b/compiler/tests/org/jetbrains/jet/cli/KotlincExecutableTestGenerated.java index 5ddb8df07d4..eb5c8b2dd6d 100644 --- a/compiler/tests/org/jetbrains/jet/cli/KotlincExecutableTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/cli/KotlincExecutableTestGenerated.java @@ -174,6 +174,12 @@ public class KotlincExecutableTestGenerated extends AbstractKotlincExecutableTes doJsTest(fileName); } + @TestMetadata("outputIsDirectory.args") + public void testOutputIsDirectory() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/cli/js/outputIsDirectory.args"); + doJsTest(fileName); + } + @TestMetadata("outputPostfixFileNotFound.args") public void testOutputPostfixFileNotFound() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/cli/js/outputPostfixFileNotFound.args"); diff --git a/compiler/tests/org/jetbrains/jet/cli/js/K2JsCliTest.java b/compiler/tests/org/jetbrains/jet/cli/js/K2JsCliTest.java index 8480bf0d4c2..b582db0fe83 100644 --- a/compiler/tests/org/jetbrains/jet/cli/js/K2JsCliTest.java +++ b/compiler/tests/org/jetbrains/jet/cli/js/K2JsCliTest.java @@ -30,18 +30,25 @@ public class K2JsCliTest extends CliBaseTest { Assert.assertTrue(new File(tmpdir.getTmpDir(), "out.js").isFile()); } + @Test + public void outputIsDirectory() throws Exception { + executeCompilerCompareOutputJS(); + + Assert.assertFalse(new File(tmpdir.getTmpDir(), "out.js").exists()); + } + @Test public void outputPrefixFileNotFound() throws Exception { executeCompilerCompareOutputJS(); - Assert.assertFalse(new File(tmpdir.getTmpDir(), "out.js").isFile()); + Assert.assertFalse(new File(tmpdir.getTmpDir(), "out.js").exists()); } @Test public void outputPostfixFileNotFound() throws Exception { executeCompilerCompareOutputJS(); - Assert.assertFalse(new File(tmpdir.getTmpDir(), "out.js").isFile()); + Assert.assertFalse(new File(tmpdir.getTmpDir(), "out.js").exists()); } @Test