package ilarkesto.core.menu; import ilarkesto.base.Utl; import java.util.UUID; import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; public class StaticMenuTest extends Assert { private StaticMenu menu; private StaticMenuItem item1; private StaticMenuItem item2; private StaticMenuItem item3; private StaticSubmenu item4; private StaticMenuItem item4_1; private StaticMenuItem item4_2; @BeforeMethod public void init() { menu = new StaticMenu(); item1 = menu.addItem(new StaticMenuItem("Item 1")); item2 = menu.addItem(new StaticMenuItem("Item 2")); item3 = menu.addItem(new StaticMenuItem("Item 3")); item4 = menu.addItem(new StaticSubmenu("Item 4")); item4_1 = item4.getMenu().addItem(new StaticMenuItem("Item 4_1")); item4_2 = item4.getMenu().addItem(new StaticMenuItem("Item 4_2")); } @Test public void selection() { assertNull(menu.getSelectedItem()); item2.select(); assertSame(menu.getSelectedItem(), item2); assertFalse(item1.isSelected()); assertTrue(item2.isSelected()); assertFalse(item3.isSelected()); } @Test public void events() { EventMock item1onSelect = new EventMock(); EventMock item1onDeselect = new EventMock(); item1.setOnSelect(item1onSelect); item1.setOnDeselect(item1onDeselect); EventMock item2onSelect = new EventMock(); EventMock item2onDeselect = new EventMock(); item2.setOnSelect(item2onSelect); item2.setOnDeselect(item2onDeselect); item1.select(); assertTrue(item1onSelect.executed); assertFalse(item1onDeselect.executed); assertFalse(item2onSelect.executed); assertFalse(item2onDeselect.executed); item1onSelect = new EventMock(); item1.setOnSelect(item1onSelect); item2.select(); assertFalse(item1onSelect.executed); assertTrue(item1onDeselect.executed); assertTrue(item2onSelect.executed); assertFalse(item2onDeselect.executed); } @Test public void submenu() { Object payload = UUID.randomUUID(); item4_2.setPayload(payload); assertSame(menu.getItemByPayload(payload), item4_2); } @Test public void submenuChangeIndicator() { long initTime = menu.getChangeIndicator().getChangeTime(); assertFalse(menu.getChangeIndicator().hasChangedSince(initTime)); item4_2.select(); Utl.sleep(1); assertTrue(menu.getChangeIndicator().hasChangedSince(initTime)); } private class EventMock implements Runnable { boolean executed; @Override public void run() { if (executed) throw new IllegalStateException("EventMock already executed"); executed = true; } } }