// This product is provided under the terms of EPL (Eclipse Public License) // version 1.0. // // The full license text can be read from: http://www.eclipse.org/org/documents/epl-v10.php package org.dtangler.swingui.groupselector.impl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import org.dtangler.core.configuration.Group; import org.dtangler.swingui.textinput.MockTextInputSelector; import org.dtangler.swingui.windowmanager.MockWindowManager; import org.junit.Before; import org.junit.Test; import org.uispec4j.Button; import org.uispec4j.ListBox; public class GroupSelectorFeatureTest { private MockWindowManager windowManager; private GroupSelectorImpl selector; private MockTextInputSelector textInputSelector; @Before public void setUp() { windowManager = new MockWindowManager(); textInputSelector = new MockTextInputSelector(); selector = new GroupSelectorImpl(windowManager, textInputSelector); } @Test public void testCancelCreateNew() { windowManager.setTestCodeForNextModal(new Runnable() { public void run() { GroupSelectorDriver view = new GroupSelectorDriver( windowManager.getLastShownView()); view.cancelButton.click(); } }); assertNull(selector.createGroup()); assertNull(windowManager.getLastShownView()); } @Test public void testOkOnCreateNew() { windowManager.setTestCodeForNextModal(new Runnable() { public void run() { GroupSelectorDriver view = new GroupSelectorDriver( windowManager.getLastShownView()); view.name.setText("Foo"); textInputSelector.setNextValue("xx"); view.addItemButton.click(); textInputSelector.setNextValue("yy"); view.addExcludedItemButton.click(); view.okButton.click(); } }); Group result = selector.createGroup(); assertEquals("Foo", result.getName()); assertTrue(result.getGroupItems().contains("xx")); assertTrue(result.getExcludedItems().contains("yy")); assertNull(windowManager.getLastShownView()); } @Test public void testCancelEdit() { Group groupToEdit = new Group("myGroup", Collections.EMPTY_SET); windowManager.setTestCodeForNextModal(new Runnable() { public void run() { GroupSelectorDriver view = new GroupSelectorDriver( windowManager.getLastShownView()); view.cancelButton.click(); } }); assertNull(selector.editGroup(groupToEdit)); assertNull(windowManager.getLastShownView()); } @Test public void testOkOnEdit() { Group groupToEdit = new Group("myGroup", Collections.EMPTY_SET); windowManager.setTestCodeForNextModal(new Runnable() { public void run() { GroupSelectorDriver view = new GroupSelectorDriver( windowManager.getLastShownView()); view.name.setText("Foo"); textInputSelector.setNextValue("xx"); view.addItemButton.click(); textInputSelector.setNextValue("yy"); view.addExcludedItemButton.click(); view.okButton.click(); } }); Group result = selector.editGroup(groupToEdit); assertNotSame(groupToEdit, result); assertEquals("Foo", result.getName()); assertTrue(result.getGroupItems().contains("xx")); assertTrue(result.getExcludedItems().contains("yy")); assertNull(windowManager.getLastShownView()); } @Test public void testEditShowsAllOriginalProperties() { Group groupToEdit = new Group("myGroup", new HashSet(Arrays.asList( "foo", "bar")), new HashSet(Arrays.asList("fooEx", "barEx"))); selector.editGroup(groupToEdit); GroupSelectorDriver view = new GroupSelectorDriver(windowManager .getLastShownView()); assertTrue(view.items.contentEquals(new String[] { "bar", "foo" }) .isTrue()); assertTrue(view.excludedItems.contentEquals( new String[] { "barEx", "fooEx" }).isTrue()); } @Test public void testAddAndRemoveItems() { Group groupToEdit = new Group("myGroup", new HashSet(Arrays.asList( "foo", "bar")), Collections.EMPTY_SET); selector.editGroup(groupToEdit); GroupSelectorDriver view = new GroupSelectorDriver(windowManager .getLastShownView()); testAddAndRemoveItems(view.items, view.addItemButton, view.removeItemsButton); } @Test public void testAddAndRemoveExcludedItems() { Group groupToEdit = new Group("myGroup", Collections.EMPTY_SET, new HashSet(Arrays.asList("foo", "bar"))); selector.editGroup(groupToEdit); GroupSelectorDriver view = new GroupSelectorDriver(windowManager .getLastShownView()); testAddAndRemoveItems(view.excludedItems, view.addExcludedItemButton, view.removeExcludedItemsButton); } private void testAddAndRemoveItems(ListBox list, Button addBtn, Button removeBtn) { Group groupToEdit = new Group("myGroup", new HashSet(Arrays.asList( "foo", "bar")), Collections.EMPTY_SET); selector.editGroup(groupToEdit); textInputSelector.setNextValue("bay"); addBtn.click(); assertTrue(list.contentEquals(new String[] { "bar", "bay", "foo" }) .isTrue()); list.selectIndices(new int[] { 0, 2 }); removeBtn.click(); assertTrue(list.contentEquals(new String[] { "bay" }).isTrue()); textInputSelector.setNextValue(null); assertTrue(list.contentEquals(new String[] { "bay" }).isTrue()); textInputSelector.setNextValue("bay"); assertTrue(list.contentEquals(new String[] { "bay" }).isTrue()); } @Test public void testRemoveItemButtonsAreOnlyEnabledWhenOneOrMoreItemsSelected() { Group groupToEdit = new Group("myGroup", new HashSet(Arrays.asList( "foo", "bar")), new HashSet(Arrays.asList("foo", "bar"))); selector.editGroup(groupToEdit); GroupSelectorDriver view = new GroupSelectorDriver(windowManager .getLastShownView()); testRemoveButtonIsOnlyEnabledWhenOneOrMoreItemsSelected(view.items, view.removeItemsButton); testRemoveButtonIsOnlyEnabledWhenOneOrMoreItemsSelected( view.excludedItems, view.removeExcludedItemsButton); } private void testRemoveButtonIsOnlyEnabledWhenOneOrMoreItemsSelected( ListBox listBox, Button button) { listBox.selectIndex(-1); assertFalse(button.isEnabled().isTrue()); listBox.selectIndex(0); assertTrue(button.isEnabled().isTrue()); listBox.selectIndices(new int[] { 0, 1 }); assertTrue(button.isEnabled().isTrue()); } @Test public void testOkIsOnlyEnabledIfGroupHasNameAndOneOrMoreItems() { selector.createGroup(); GroupSelectorDriver view = new GroupSelectorDriver(windowManager .getLastShownView()); assertFalse(view.okButton.isEnabled().isTrue()); view.name.setText("aa"); assertFalse(view.okButton.isEnabled().isTrue()); textInputSelector.setNextValue("xx"); view.addItemButton.click(); assertTrue(view.okButton.isEnabled().isTrue()); textInputSelector.setNextValue("yy"); view.addItemButton.click(); assertTrue(view.okButton.isEnabled().isTrue()); view.name.setText(""); assertFalse(view.okButton.isEnabled().isTrue()); } }