// 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.rulememberselector.impl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import javax.swing.JComboBox;
import org.dtangler.core.exception.DtException;
import org.dtangler.swingui.windowmanager.MockWindowManager;
import org.junit.Before;
import org.junit.Test;
public class RuleMemberSelectorFeatureTest {
private MockWindowManager windowManager;
@Before
public void setUp() {
windowManager = new MockWindowManager();
}
private RuleMemberViewDriver openView(List<String> groupNames) {
new RuleMemberSelectorImpl(windowManager).selectRuleMember(groupNames);
return new RuleMemberViewDriver(windowManager.getLastShownView());
}
@Test
public void testMemberTypeSelection() {
RuleMemberViewDriver view = openView(Arrays.asList("foo", "bar", "bay"));
assertTrue(view.literalRadio.isSelected().isTrue());
assertTrue(view.literal.isEnabled().isTrue());
assertFalse(view.groupRadio.isSelected().isTrue());
assertFalse(view.groups.isEnabled().isTrue());
view.groupRadio.click();
assertFalse(view.literalRadio.isSelected().isTrue());
assertFalse(view.literal.isEnabled().isTrue());
assertTrue(view.groupRadio.isSelected().isTrue());
assertTrue(view.groups.isEnabled().isTrue());
}
@Test
public void testGroupNames() {
RuleMemberViewDriver view = openView(Arrays.asList("foo", "bar", "bay"));
assertTrue(view.groups.contains(new String[] { "foo", "bar", "bay" })
.isTrue());
}
@Test
public void testOkisEnabledOnlyWhenValidMemberIsDefined() {
RuleMemberViewDriver view = openView(Arrays.asList("foo", "bar", "bay"));
assertTrue(view.literalRadio.isSelected().isTrue());
assertEquals("", view.literal.getText());
assertFalse("literal input is empty", view.okButton.isEnabled()
.isTrue());
view.literal.setText("x");
assertTrue(view.okButton.isEnabled().isTrue());
view.groupRadio.click();
JComboBox cbx = (JComboBox) view.groups.getAwtComponent();
cbx.setSelectedIndex(-1);
assertFalse("group selectiob is empty", view.okButton.isEnabled()
.isTrue());
view.groups.select("bar");
assertTrue(view.okButton.isEnabled().isTrue());
}
@Test
public void testCancel() {
windowManager.setTestCodeForNextModal(new Runnable() {
public void run() {
RuleMemberViewDriver view = new RuleMemberViewDriver(
windowManager.getLastShownView());
view.literal.setText("myvalue");
view.cancelButton.click();
}
});
String result = new RuleMemberSelectorImpl(windowManager)
.selectRuleMember(Collections.EMPTY_LIST);
assertNull(result);
assertNull(windowManager.getLastShownView());
}
@Test
public void testSelectLiteral() {
windowManager.setTestCodeForNextModal(new Runnable() {
public void run() {
RuleMemberViewDriver view = new RuleMemberViewDriver(
windowManager.getLastShownView());
view.literal.setText("myvalue");
view.okButton.click();
}
});
String result = new RuleMemberSelectorImpl(windowManager)
.selectRuleMember(Collections.EMPTY_LIST);
assertEquals("myvalue", result);
assertNull(windowManager.getLastShownView());
}
@Test
public void testSelectGroup() {
windowManager.setTestCodeForNextModal(new Runnable() {
public void run() {
RuleMemberViewDriver view = new RuleMemberViewDriver(
windowManager.getLastShownView());
view.groupRadio.click();
view.groups.select("bar");
view.okButton.click();
}
});
String result = new RuleMemberSelectorImpl(windowManager)
.selectRuleMember(Arrays.asList("foo", "bar", "bay"));
assertEquals("@bar", result);
assertNull(windowManager.getLastShownView());
}
@Test
public void testLiteralCannotContainGroupSign() {
RuleMemberViewDriver view = openView(Collections.EMPTY_LIST);
view.literal.setText("@foo");
try {
view.okButton.click();
fail("did not throw");
} catch (DtException e) {
// Ok
}
}
@Test
public void testGroupRadioAndGroupAreDisabledWhenNoGroups() {
RuleMemberViewDriver view = openView(Collections.EMPTY_LIST);
assertFalse(view.groupRadio.isEnabled().isTrue());
assertFalse(view.groups.isEnabled().isTrue());
}
}