package org.netbeans.modules.scala.app;
import java.awt.event.KeyEvent;
import java.io.File;
import java.util.logging.Level;
import junit.framework.Test;
import org.netbeans.jellytools.NbDialogOperator;
import org.netbeans.jellytools.NewProjectWizardOperator;
import org.netbeans.jellytools.ProjectsTabOperator;
import org.netbeans.jellytools.TopComponentOperator;
import org.netbeans.jellytools.actions.ActionNoBlock;
import org.netbeans.jellytools.nodes.Node;
import org.netbeans.jellytools.nodes.ProjectRootNode;
import org.netbeans.jellytools.properties.editors.FileCustomEditorOperator;
import org.netbeans.jemmy.operators.JButtonOperator;
import org.netbeans.jemmy.operators.JTableOperator;
import org.netbeans.jemmy.operators.JTextPaneOperator;
import org.netbeans.junit.NbModuleSuite;
import org.netbeans.junit.NbTestCase;
public class ApplicationTest extends NbTestCase {
private final String SAMPLE_SCALA_MAVEN = System.getProperty("sample-scala-maven");
private final String SAMPLE_SCALA_JAVA_MAVEN = System.getProperty("sample-scala-java-maven");
public static Test suite() {
return NbModuleSuite.createConfiguration(ApplicationTest.class).
gui(true).
clusters(".*").
failOnMessage(Level.SEVERE).
// TODO: Can be enables if the java.lang.ClassCastException: org.netbeans.api.project.ProjectUtils$AnnotateIconProxyProjectInformation
// cannot be cast to org.netbeans.modules.scala.project.J2SEProject$Info is solved
// failOnException(Level.INFO).
suite();
}
public ApplicationTest(String n) {
super(n);
}
public void testApplication() {
new ActionNoBlock("Help|About", null).performMenu();
new NbDialogOperator("About").closeByButton();
}
/**
* Test if the ScalaShell is enabled and opens.
*/
public void testInteractiveScalaShell() {
String scalaHome = System.getenv("SCALA_HOME");
if (scalaHome == null || scalaHome.trim().equals("")) {
return; // No Scala Home is set, Shell will not work.
}
File scalaHomeDir = new File(scalaHome);
assertTrue("Environment Variable SCALA_HOME=" + scalaHome + " doesn't point to an existing directory", scalaHomeDir.exists());
assertTrue("Environment Variable SCALA_HOME=" + scalaHome + " doesn't point to a directory", scalaHomeDir.isDirectory());
ActionNoBlock openScalaShell = new ActionNoBlock("Window|Other|Interactive Scala Shell", null);
// TODO: If the Action Interactive Sacla Shell is missing the test will block here. Some check before this point, if it exist, would be nice.
openScalaShell.performMenu();
TopComponentOperator scalaConsole = new TopComponentOperator("Scala Console");
assertTrue("Scala Console not showing", scalaConsole.isShowing());
// TODO: Same as before, a test for existence would be nice.
JTextPaneOperator theConsole = new JTextPaneOperator(scalaConsole);
assertTrue("Scala Console is not Enabled", theConsole.isEnabled());
theConsole.enterText(":quit");
theConsole.waitComponentShowing(false);
assertFalse("Scala Console still visible, should be closed", theConsole.isShowing());
}
public void testNewScalaProject() {
NewProjectWizardOperator newProjectWizard = NewProjectWizardOperator.invoke();
newProjectWizard.selectCategory("Scala");
newProjectWizard.selectProject("Scala Application");
newProjectWizard.next();
newProjectWizard.finish();
// TODO: Cause of the missing JUnit dependencies, a resolve references Dialog is opening.
// IDEA: Change the default Project to have no dependency to JUnit
new NbDialogOperator("Open Project").btClose();
// TODO: Some asserts or an actuall compile to make sure the project is active and alive.
}
/**
* A Test to see if a scala maven project is discovert and the scala sources
* are displayed in the source node.
*/
// TODO: Can only be enabled if http://netbeans.org/bugzilla/show_bug.cgi?id=216738 is solved.
public void ignoreTestScalaMavenProject() {
new ActionNoBlock("File|Import|From ZIP", null).performMenu();
new NbDialogOperator("Import Project(s) from ZIP").pushKey(KeyEvent.VK_TAB);
new NbDialogOperator("Import Project(s) from ZIP").pushKey(KeyEvent.VK_SPACE);
new FileCustomEditorOperator("Öffnen").setSelectedFile(SAMPLE_SCALA_MAVEN);
new FileCustomEditorOperator("Öffnen").pushKey(KeyEvent.VK_ENTER);
new JButtonOperator(new NbDialogOperator("Import Project(s) from ZIP"), "Import").push();
ProjectsTabOperator pto = ProjectsTabOperator.invoke();
ProjectRootNode prn = pto.getProjectRootNode("sample-scala-maven");
Node node = new Node(prn, "Scala Packages|sample|App.scala");
node.select();
node.performPopupAction("Open");
new ActionNoBlock("Window|Action Items", null).performMenu();
TopComponentOperator actionItems = new TopComponentOperator("Action Items");
actionItems.makeComponentVisible();
JTableOperator t = new JTableOperator(actionItems);
int row = t.findCellColumn("SampleJavaError");
assertTrue("No Error SampleJavaError in the Action Itmes found, but should be", row >= 0);
row = t.findCellColumn("Blub");
assertTrue("Error Blub in the Action Itmes found, but should not be", row == -1);
}
/**
* A Test to see if a combinded scala java maven project is discovert and
* contains no errors. At the moment this is the case.
*/
// TODO: Can only be enabled if http://netbeans.org/bugzilla/show_bug.cgi?id=216738 is solved.
public void ignoreTestScalaJavaMavenProject() {
new ActionNoBlock("File|Import|From ZIP", null).performMenu();
new NbDialogOperator("Import Project(s) from ZIP").pushKey(KeyEvent.VK_TAB);
new NbDialogOperator("Import Project(s) from ZIP").pushKey(KeyEvent.VK_SPACE);
new FileCustomEditorOperator("Öffnen").setSelectedFile(SAMPLE_SCALA_JAVA_MAVEN);
new FileCustomEditorOperator("Öffnen").pushKey(KeyEvent.VK_ENTER);
new JButtonOperator(new NbDialogOperator("Import Project(s) from ZIP"), "Import").push();
ProjectsTabOperator pto = ProjectsTabOperator.invoke();
ProjectRootNode prn = pto.getProjectRootNode("sample-scala-java-maven");
prn.select();
Node node = new Node(prn, "Source Packages|sample|Runner.java");
node.select();
node.performPopupAction("Open");
// Opening the Action Items to see if the selecte Java Class has an Error.
new ActionNoBlock("Window|Action Items", null).performMenu();
TopComponentOperator actionItems = new TopComponentOperator("Action Items");
actionItems.makeComponentVisible();
JTableOperator t = new JTableOperator(actionItems);
int row = t.findCellColumn("Runner.java");
// The following Assert should validate to -1, meaning there is no row containing the String Runner.java
// At the moment this is not the case. A mixed scala-java project works, but displays erros in the ui.
// assertTrue("No Error Runner.java in the Action Itmes found, but should be", row == -1);
}
}