import org.junit.Before;
import org.junit.Test;
import pipe.views.PipeApplicationView;
import javax.swing.*;
import java.awt.Container;
import java.lang.reflect.InvocationTargetException;
import static org.junit.Assert.*;
public class PipeTest {
@SuppressWarnings("unused")
private static final int NEW = 0;
private static final int OPEN = 1;
private static final int CLOSE = 2;
private PipeApplicationView applicationView;
private JToolBar toolbar;
private JMenu menu;
private JMenu subMenu;
@Before
public void setUp() throws InvocationTargetException, InterruptedException {
Pipe.runPipeForTesting();
applicationView = Pipe.applicationView;
}
@Test
public void verifyMenusAddedToGui() throws Exception {
assertEquals("expecting 6 top-level menus", 6, applicationView.getJMenuBar().getMenuCount());
menu = applicationView.getJMenuBar().getMenu(0);
assertEquals("File", menu.getText());
assertEquals("expecting 14 File menu items, including separators", 14, menu.getItemCount());
assertEquals("New", menu.getItem(0).getText());
assertEquals("Open", menu.getItem(1).getText());
assertEquals("Save", menu.getItem(2).getText());
assertEquals("Save as", menu.getItem(3).getText());
assertEquals("Close", menu.getItem(4).getText());
assertNull("separator", menu.getItem(5));
assertEquals("Import", menu.getItem(6).getText());
assertEquals("Export", menu.getItem(7).getText());
subMenu = (JMenu) menu.getMenuComponent(7);
assertEquals("expecting 3 Export submenu items", 3, subMenu.getItemCount());
assertEquals("PNG", subMenu.getItem(0).getText());
assertEquals("PostScript", subMenu.getItem(1).getText());
assertEquals("eDSPN", subMenu.getItem(2).getText());
assertEquals("Print", menu.getItem(9).getText());
assertNull("separator", menu.getItem(10));
assertEquals("Examples", menu.getItem(11).getText());
subMenu = (JMenu) menu.getMenuComponent(11);
assertEquals("expecting 15 examples", 15, subMenu.getItemCount());
menu = applicationView.getJMenuBar().getMenu(1);
assertEquals("Edit", menu.getText());
assertEquals("expecting 6 Edit menu items, including separators", 6, menu.getItemCount());
assertEquals("Cut", menu.getItem(0).getText());
assertEquals("Copy", menu.getItem(1).getText());
assertEquals("Paste", menu.getItem(2).getText());
assertEquals("Delete", menu.getItem(3).getText());
assertEquals("Undo", menu.getItem(4).getText());
assertEquals("Redo", menu.getItem(5).getText());
menu = applicationView.getJMenuBar().getMenu(2);
assertEquals("View", menu.getText());
assertEquals("expecting 6 View menu items, including separators", 5, menu.getItemCount());
assertEquals("Zoom out", menu.getItem(0).getText());
assertEquals("Zoom in", menu.getItem(1).getText());
assertEquals("Zoom", menu.getItem(2).getText());
subMenu = (JMenu) menu.getMenuComponent(2);
assertEquals("expecting 10 zoom levels", 10, subMenu.getItemCount());
assertEquals("40%", subMenu.getItem(0).getText());
assertEquals("60%", subMenu.getItem(1).getText());
assertEquals("80%", subMenu.getItem(2).getText());
assertEquals("100%", subMenu.getItem(3).getText());
assertEquals("120%", subMenu.getItem(4).getText());
assertEquals("140%", subMenu.getItem(5).getText());
assertEquals("160%", subMenu.getItem(6).getText());
assertEquals("180%", subMenu.getItem(7).getText());
assertEquals("200%", subMenu.getItem(8).getText());
assertEquals("300%", subMenu.getItem(9).getText());
assertNull("separator", menu.getItem(3));
assertEquals("Cycle grid", menu.getItem(4).getText());
menu = applicationView.getJMenuBar().getMenu(3);
assertEquals("Draw", menu.getText());
assertEquals("expecting 15 Edit menu items, including separators", 15, menu.getItemCount());
assertEquals("Select", menu.getItem(0).getText());
assertNull("separator", menu.getItem(1));
assertEquals("Place", menu.getItem(2).getText());
assertEquals("Immediate transition", menu.getItem(3).getText());
assertEquals("Timed transition", menu.getItem(4).getText());
assertEquals("Arc", menu.getItem(5).getText());
assertEquals("Inhibitor Arc", menu.getItem(6).getText());
assertEquals("Annotation", menu.getItem(7).getText());
assertEquals("Rate Parameter", menu.getItem(8).getText());
assertEquals("Add token", menu.getItem(10).getText());
assertEquals("Delete token", menu.getItem(11).getText());
assertEquals("SpecifyTokenClasses", menu.getItem(12).getText());
assertEquals("unfoldAction", menu.getItem(13).getText());
assertNull("separator", menu.getItem(14));
menu = applicationView.getJMenuBar().getMenu(4);
assertEquals("Animate", menu.getText());
assertEquals("expecting 5 Animate menu items, including separators", 5, menu.getItemCount());
assertEquals("Animation mode", menu.getItem(0).getText());
assertEquals("Back", menu.getItem(1).getText());
assertEquals("Forward", menu.getItem(2).getText());
assertEquals("Random", menu.getItem(3).getText());
assertEquals("Animate", menu.getItem(4).getText());
menu = applicationView.getJMenuBar().getMenu(5);
assertEquals("Help", menu.getText());
assertEquals("expecting 1 Help menu items", 1, menu.getItemCount());
assertEquals("About PIPE", menu.getItem(0).getText());
}
@Test
public void verifyExampleNetLoadsAndAnimates() {
menu = applicationView.getJMenuBar().getMenu(0);
subMenu = (JMenu) menu.getMenuComponent(11);
selectMenuItem(subMenu, 0);
Container c = applicationView.getContentPane();
toolbar = (JToolBar) c.getComponent(2);
AbstractButton animateButton = ((AbstractButton) toolbar.getComponent(20));
animateButton.getAction().actionPerformed(null);
// selectMenuItem(menu, 2);
}
private Action selectMenuItem(JMenu menu, int selection) {
Action action = getActionForMenuItem(menu, selection);
action.actionPerformed(null);
return action;
}
protected Action getActionForMenuItem(JMenu menu, int selection) {
JMenuItem item = menu.getItem(selection);
return item.getAction();
}
}