package org.robobinding.widget.abslistview; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.robobinding.util.RandomValues.nextInt; import org.junit.Before; import org.junit.Test; import org.robobinding.property.ValueModel; import org.robobinding.viewattribute.ValueModelUtils; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import android.widget.ListAdapter; import android.widget.ListView; /** * * @since 1.0 * @version $Revision: 1.0 $ * @author Robert Taylor */ @Config(manifest = Config.NONE) public class CheckedItemPositionAttributeTest extends AbstractAbsListViewAttributeTest { private CheckedItemPositionAttribute attribute; private int checkedItemPosition; @Before public void setUp() { attribute = new CheckedItemPositionAttribute(); ListAdapter adapter = new SingleChoiceAdapter(RuntimeEnvironment.application); view.setAdapter(adapter); view.setChoiceMode(ListView.CHOICE_MODE_SINGLE); checkedItemPosition = nextInt(adapter.getCount()); } @Test public void whenUpdateView_thenViewShouldReflectChanges() { attribute.updateView(view, checkedItemPosition, viewAddOn); assertThat(view.getCheckedItemPosition(), equalTo(checkedItemPosition)); } @Test public void whenObserveChangesOnTheView_thenValueModelShouldReceiveTheChange() { ValueModel<Integer> valueModel = ValueModelUtils.create(); attribute.observeChangesOnTheView(viewAddOn, valueModel, view); setItemChecked(); assertThat(valueModel.getValue(), equalTo(checkedItemPosition)); } private void setItemChecked() { view.performItemClick(view, checkedItemPosition, 0); } @Test public void whenObserveChangesOnTheView_thenRegisterWithMulticastListener() { attribute.observeChangesOnTheView(viewAddOn, null, view); assertTrue(viewAddOn.addOnItemClickListenerInvoked); } }