/*
* Created on 12.04.2006
*
*/
package org.jdesktop.swingx.combobox;
import org.jdesktop.swingx.InteractiveTestCase;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@RunWith(JUnit4.class)
public class EnumComboBoxModelUnitTest extends InteractiveTestCase {
enum MyEnum1 {
GoodStuff, BadStuff
};
enum MyEnum2 {
EasyStuff, HardStuff;
@Override
public String toString() {
switch (this) {
case EasyStuff:
return "Easy Stuff";
case HardStuff:
return "Hard Stuff";
}
return "ERROR";
}
};
enum MyEnum3 {
RightStuff, WrongStuff;
@Override
public String toString() {
switch (this) {
case RightStuff:
return "One Value";
case WrongStuff:
return "One Value";
}
return "ERROR";
}
}
/**
* Issue #303-swingx: EnumComboBoxModel getSelectedItem throws
* ClassCastException. Fixed.
*/
@Test
public void testSetSelectedItem() {
EnumComboBoxModel<MyEnum1> model1 = new EnumComboBoxModel<MyEnum1>(
MyEnum1.class);
// always starts by selecting the first value
assertEquals(model1.getSelectedItem(), MyEnum1.GoodStuff);
// should ignore the non-mapped string
model1.setSelectedItem("something else");
assertEquals(model1.getSelectedItem(), MyEnum1.GoodStuff);
model1.setSelectedItem(MyEnum1.BadStuff);
assertEquals(model1.getSelectedItem(), MyEnum1.BadStuff);
model1.setSelectedItem(null);
assertNull(model1.getSelectedItem());
model1.setSelectedItem("GoodStuff");
assertEquals(model1.getSelectedItem(), MyEnum1.GoodStuff);
// ensure that custom strings map correctly
EnumComboBoxModel<MyEnum2> model2 = new EnumComboBoxModel<MyEnum2>(
MyEnum2.class);
// always starts by selecting the first value
assertEquals(model2.getSelectedItem(), MyEnum2.EasyStuff);
// should ignore the non-mapped string and set to null
model2.setSelectedItem("something else");
assertEquals(model2.getSelectedItem(), MyEnum2.EasyStuff);
model2.setSelectedItem(MyEnum2.HardStuff);
assertEquals(model2.getSelectedItem(), MyEnum2.HardStuff);
model2.setSelectedItem(null);
assertNull(model2.getSelectedItem());
model2.setSelectedItem("Easy Stuff");
assertEquals(model2.getSelectedItem(), MyEnum2.EasyStuff);
}
@Test
public void testNonUniqueToString() {
try {
new EnumComboBoxModel<MyEnum3>(MyEnum3.class);
fail("expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
// success
}
}
}