package org.robotframework.swing.combobox; import java.awt.Component; import javax.swing.ComboBoxModel; import javax.swing.JList; import javax.swing.ListCellRenderer; import jdave.Specification; import jdave.junit4.JDaveRunner; import org.jmock.Expectations; import org.junit.runner.RunWith; import org.netbeans.jemmy.operators.JComboBoxOperator; @RunWith(JDaveRunner.class) public class ItemTextExtractorSpec extends Specification<ItemTextExtractor> { private JComboBoxOperator comboboxOperator; private ComboBoxModel comboBoxModel; public class ExtractingTextFromComponent { private ListCellRenderer cellRenderer; private String element = "someElement"; private JList popupList = dummy(JList.class); private int itemIndex = 1; public ItemTextExtractor create() { comboboxOperator = mock(JComboBoxOperator.class); comboBoxModel = mock(ComboBoxModel.class); cellRenderer = mock(ListCellRenderer.class); checking(new Expectations() {{ one(comboboxOperator).getModel(); will(returnValue(comboBoxModel)); one(comboboxOperator).waitList(); will(returnValue(popupList)); one(comboBoxModel).getElementAt(itemIndex); will(returnValue(element)); one(comboboxOperator).getSelectedIndex(); will(returnValue(0)); one(comboboxOperator).hasFocus(); will(returnValue(true)); one(comboboxOperator).getRenderer(); will(returnValue(cellRenderer)); }}); return new ItemTextExtractor(comboboxOperator); } public void extractsTextFromComboboxItem() { checking(new Expectations() {{ one(cellRenderer).getListCellRendererComponent(popupList, element, itemIndex, false, true); will(returnValue(new ComponentWithText())); }}); specify(context.getTextFromRenderedComponent(itemIndex), "someText"); } public void getsTextFromElementWhenComponentHasNotText() { checking(new Expectations() {{ one(comboboxOperator).getModel(); will(returnValue(comboBoxModel)); one(comboBoxModel).getElementAt(itemIndex); will(returnValue(element)); one(cellRenderer).getListCellRendererComponent(popupList, element, itemIndex, false, true); will(returnValue(dummy(Component.class, "Not a text component"))); }}); specify(context.getTextFromRenderedComponent(itemIndex), "someElement"); } } public class GettingItemCount { public ItemTextExtractor create() { comboboxOperator = mock(JComboBoxOperator.class); comboBoxModel = mock(ComboBoxModel.class); checking(new Expectations() {{ one(comboboxOperator).getModel(); will(returnValue(comboBoxModel)); }}); return new ItemTextExtractor(comboboxOperator); } public void getsItemCount() { checking(new Expectations() {{ one(comboBoxModel).getSize(); will(returnValue(10)); }}); specify(context.itemCount(), 10); } } private class ComponentWithText extends Component { public String getText() { return "someText"; } } }