package org.robobinding.widget.abslistview; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertThat; import java.util.Map; import java.util.Set; import org.junit.Before; import org.junit.Test; import org.robobinding.property.ValueModel; import org.robobinding.viewattribute.ValueModelUtils; import org.robobinding.widget.abslistview.CheckedItemPositionsAttribute.MapCheckedItemPositionsAttribute; import org.robolectric.annotation.Config; import com.google.common.collect.Maps; import com.google.common.collect.Sets; /** * * @since 1.0 * @version $Revision: 1.0 $ * @author Cheng Wei */ @Config(manifest = Config.NONE) public class MapCheckedItemPositionsAttributeTest extends AbstractCheckedItemPositionsAttributeTest { private MapCheckedItemPositionsAttribute attribute; private Map<Integer, Boolean> checkedItemPositions; @Before public void setUp() { attribute = new MapCheckedItemPositionsAttribute(); checkedItemPositions = SparseBooleanArrayUtils.toMap(anySparseBooleanArray()); } @Test public void whenUpdateView_thenViewShouldReflectChanges() { attribute.updateView(view, checkedItemPositions, viewAddOn); assertMapEquals(checkedItemPositions, SparseBooleanArrayUtils.toMap(view.getCheckedItemPositions())); } @Test public void whenObserveChangesOnTheView_thenValueModelShouldReceiveTheChange() { Map<Integer, Boolean> emptyMap = Maps.newHashMap(); ValueModel<Map<Integer, Boolean>> valueModel = ValueModelUtils.create(emptyMap); attribute.observeChangesOnTheView(viewAddOn, valueModel, view); setItemsChecked(toSet(checkedItemPositions)); assertMapEquals(checkedItemPositions, valueModel.getValue()); } private void assertMapEquals(Map<Integer, Boolean> expected, Map<Integer, Boolean> actual) { Set<Integer> expectedSet = toSet(expected); Set<Integer> actualSet = toSet(actual); assertThat(actualSet, equalTo(expectedSet)); } private Set<Integer> toSet(Map<Integer, Boolean> map) { Set<Integer> trueSet = Sets.newHashSet(); for (Integer key : map.keySet()) { if (map.get(key)) { trueSet.add(key); } } return trueSet; } }