K2JS: fix KT-5639 Exception in kotlin-js when directory is given instead of output file

#KT-5639 Fixed
This commit is contained in:
Michael Nedzelsky
2014-12-11 21:02:49 +03:00
parent 0b54221223
commit 12ff5de013
5 changed files with 28 additions and 2 deletions
@@ -143,6 +143,13 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
OutputFileCollection outputFiles = translate(mainCallParameters, config, sourcesFiles, outputFile, outputPrefixFile, outputPostfixFile); 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(); File outputDir = outputFile.getParentFile();
if (outputDir == null) { if (outputDir == null) {
outputDir = outputFile.getAbsoluteFile().getParentFile(); outputDir = outputFile.getAbsoluteFile().getParentFile();
@@ -0,0 +1,4 @@
$TESTDATA_DIR$/simple2js.kt
-no-stdlib
-output
$TESTDATA_DIR$
@@ -0,0 +1,2 @@
ERROR: Cannot open output file 'compiler/testData/cli/js': is a directory
COMPILATION_ERROR
@@ -174,6 +174,12 @@ public class KotlincExecutableTestGenerated extends AbstractKotlincExecutableTes
doJsTest(fileName); 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") @TestMetadata("outputPostfixFileNotFound.args")
public void testOutputPostfixFileNotFound() throws Exception { public void testOutputPostfixFileNotFound() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/cli/js/outputPostfixFileNotFound.args"); String fileName = JetTestUtils.navigationMetadata("compiler/testData/cli/js/outputPostfixFileNotFound.args");
@@ -30,18 +30,25 @@ public class K2JsCliTest extends CliBaseTest {
Assert.assertTrue(new File(tmpdir.getTmpDir(), "out.js").isFile()); 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 @Test
public void outputPrefixFileNotFound() throws Exception { public void outputPrefixFileNotFound() throws Exception {
executeCompilerCompareOutputJS(); executeCompilerCompareOutputJS();
Assert.assertFalse(new File(tmpdir.getTmpDir(), "out.js").isFile()); Assert.assertFalse(new File(tmpdir.getTmpDir(), "out.js").exists());
} }
@Test @Test
public void outputPostfixFileNotFound() throws Exception { public void outputPostfixFileNotFound() throws Exception {
executeCompilerCompareOutputJS(); executeCompilerCompareOutputJS();
Assert.assertFalse(new File(tmpdir.getTmpDir(), "out.js").isFile()); Assert.assertFalse(new File(tmpdir.getTmpDir(), "out.js").exists());
} }
@Test @Test