package nodebox.node; import org.junit.Test; import static junit.framework.TestCase.*; public class PortTest { Port menuItemsPort = Port.stringPort("p", "keyA") .withMenuItemAdded("keyA", "labelA") .withMenuItemAdded("keyB", "labelB") .withMenuItemAdded("keyC", "labelC"); @Test public void testParsedPort() { assertEquals(42, Port.parsedPort("myInt", "int", "42").intValue()); assertEquals(33.3, Port.parsedPort("myInt", "float", "33.3").floatValue()); assertEquals("hello", Port.parsedPort("myInt", "string", "hello").stringValue()); assertEquals(true, Port.parsedPort("myBoolean", "boolean", "true").booleanValue()); } @Test public void testParseBooleanPort() { assertEquals(true, Port.parsedPort("myBoolean", "boolean", "true").booleanValue()); assertEquals(false, Port.parsedPort("myBoolean", "boolean", "false").booleanValue()); assertEquals(false, Port.parsedPort("myBoolean", "boolean", "xxx").booleanValue()); } /** * If the value is null, the default value is used. */ @Test public void testParsedPortNullValue() { assertEquals(0, Port.parsedPort("myInt", "int", null).intValue()); assertEquals(0.0, Port.parsedPort("myInt", "float", null).floatValue()); assertEquals("", Port.parsedPort("myInt", "string", null).stringValue()); } /** * Test if values are clamped when a bounding range is specified. */ @Test public void testFloatBounding() { Port p1 = Port.floatPort("p", 5.0, 0.0, 10.0); Port p2 = p1.withValue(-10.0); assertEquals(0.0, p2.getValue()); } @Test public void testFloatMin() { Port p1 = Port.floatPort("p", 5.0, 0.0, null); Port p2 = p1.withValue(9999.0); assertEquals(9999.0, p2.getValue()); Port p3 = p1.withValue(-10.0); assertEquals(0.0, p3.getValue()); } @Test public void testAddMenuItem() { Port p = menuItemsPort.withMenuItemAdded("keyD", "labelD"); assertEquals(4, p.getMenuItems().size()); assertEquals(new MenuItem("keyD", "labelD"), p.getMenuItems().get(3)); } @Test public void testRemoveMenuItem() { Port p = menuItemsPort.withMenuItemRemoved(new MenuItem("keyC", "labelC")); assertEquals(2, p.getMenuItems().size()); } @Test public void testChangeMenuItem() { Port p = menuItemsPort.withMenuItemChanged(0, "keyF", "labelF"); assertEquals(new MenuItem("keyF", "labelF"), p.getMenuItems().get(0)); } @Test public void testMoveMenuItem() { Port p = menuItemsPort.withMenuItemMovedUp(2); assertEquals(new MenuItem("keyC", "labelC"), p.getMenuItems().get(1)); p = p.withMenuItemMovedDown(0); assertEquals(new MenuItem("keyA", "labelA"), p.getMenuItems().get(1)); } @Test(expected = IllegalArgumentException.class) public void testMoveMenuItemMinIndex() { menuItemsPort.withMenuItemMovedUp(0); } @Test(expected = IllegalArgumentException.class) public void testMoveMenuItemMaxIndex() { menuItemsPort.withMenuItemMovedDown(menuItemsPort.getMenuItems().size() - 1); } /** * Test if values are clamped when a bounding range is specified. */ @Test public void testIntBounding() { Port p1 = Port.intPort("p", 5, 0, 10); Port p2 = p1.withValue(-10); assertEquals(0L, p2.getValue()); } }