package org.jetbrains.plugins.clojure.compiler;
import com.intellij.testFramework.CompilerTester;
import com.intellij.testFramework.PsiTestUtil;
import com.intellij.testFramework.builders.JavaModuleFixtureBuilder;
import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase;
import org.jetbrains.plugins.clojure.util.TestUtils;
import java.io.File;
/**
* @author peter
*/
public class ClojureCompilerTest extends JavaCodeInsightFixtureTestCase {
private CompilerTester myTester;
@Override
public void setUp() throws Exception {
super.setUp();
myTester = new CompilerTester(myModule);
ClojureCompilerSettings.getInstance(getProject()).getState().COMPILE_CLOJURE = true;
File jar = new File(TestUtils.getMockClojureLib());
PsiTestUtil.addLibrary(myModule, "clojure", jar.getParent(), jar.getName());
}
@Override
protected void tuneFixture(JavaModuleFixtureBuilder moduleBuilder) throws Exception {
moduleBuilder.setMockJdkLevel(JavaModuleFixtureBuilder.MockJdkLevel.jdk15);
super.tuneFixture(moduleBuilder);
}
public void testCompileClass() {
myFixture.addClass("class Foo {}");
myFixture.addFileToProject("hello.clj", "(ns hello (:gen-class))\n" +
"(defn -main [arg] (println (str \"Hello!\")))");
assertEmpty(myTester.make());
assertNotNull(myTester.findClassFile("hello", myModule));
}
public void testDontCompileNoGenClass() {
myFixture.addClass("class Foo {}");
myFixture.addFileToProject("hello.clj", "(ns hello)\n" +
"(defn -main [arg] (println (str \"Hello!\")))");
assertEmpty(myTester.make());
assertNull(myTester.findClassFile("hello__init", myModule));
}
@Override
protected void tearDown() throws Exception {
com.intellij.util.ui.UIUtil.invokeAndWaitIfNeeded(new Runnable() {
public void run() {
myTester.tearDown();
try {
ClojureCompilerTest.super.tearDown();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
});
}
}