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);
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();
@@ -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);
}
@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");
@@ -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