package org.robobinding.widget.adapterview;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import org.junit.Test;
import org.robobinding.itempresentationmodel.DataSetChangeListeners;
import org.robobinding.itempresentationmodel.RefreshableItemPresentationModel;
import org.robobinding.itempresentationmodel.ViewTypeSelectionContext;
import org.robobinding.property.DataSetPropertyChangeListener;
import org.robobinding.property.DataSetValueModel;
import org.robobinding.util.RandomValues;
/**
* @since 1.0
* @author Cheng Wei
*
*/
public class LazyDataSetValueModelTest {
@Test
public void sizeShouldBeZeroAfterInitialization() {
DataSetValueModelUnderTest delegateValueModel = new DataSetValueModelUnderTest(RandomValues.anyInteger());
LazyDataSetValueModel valueModel = new LazyDataSetValueModel(delegateValueModel);
assertThat(valueModel.size(), is(0));
}
@Test
public void onValueModelChange_sizeShouldEqualToThatOfDelegateValueModel() {
int size = RandomValues.anyInteger();
DataSetValueModelUnderTest delegateValueModel = new DataSetValueModelUnderTest(size);
LazyDataSetValueModel valueModel = new LazyDataSetValueModel(delegateValueModel);
delegateValueModel.fireChange();
assertThat(valueModel.size(), is(size));
}
private static class DataSetValueModelUnderTest implements DataSetValueModel {
private final int size;
private DataSetChangeListeners listeners;
public DataSetValueModelUnderTest(int size) {
this.size = size;
listeners = new DataSetChangeListeners();
}
@Override
public int size() {
return size;
}
@Override
public void addPropertyChangeListener(DataSetPropertyChangeListener listener) {
listeners.add(listener);
}
@Override
public void removePropertyChangeListener(DataSetPropertyChangeListener listener) {
listeners.remove(listener);
}
public void fireChange() {
listeners.notifyChanged(null);
}
@Override
public int selectViewType(ViewTypeSelectionContext<Object> context) {
return 0;
}
@Override
public Object get(int index) {
return null;
}
@Override
public RefreshableItemPresentationModel newRefreshableItemPresentationModel(int itemViewType) {
return null;
}
@Override
public boolean preInitializingViewsWithDefault(boolean defaultValue) {
return false;
}
}
}