package com.tri.ui.model;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
public class MultiDataControllerTest {
@Test(expected = IllegalStateException.class)
public void getIndexOfNoValues() {
// setup
TestMultiDataController dc = new TestMultiDataController(
generateTestData(0));
// test, check
dc.getIndexOf(new TestValue(1L));
}
@Test
public void getIndexOfCertainValues() {
// setup
TestMultiDataController dc = new TestMultiDataController(
generateTestData(60));
for (int testData : new int[] { 0, 1, 59 }) {
// test, assert
assertThat(dc.getIndexOf(dc.getData().get(testData))).isEqualTo(
testData);
}
}
@Test
public void hasNext() {
// setup: 0
TestMultiDataController dc = new TestMultiDataController(
generateTestData(0));
// test, check
assertThat(dc.hasNext()).isFalse();
// setup: {first, expected page}
dc = new TestMultiDataController(generateTestData(5));
for (Object[] testData : new Object[][] { { 0, true }, { 2, true },
{ 4, false } }) {
dc.setSelection(dc.getData().get((int) testData[0]));
assertThat(dc.hasNext()).isEqualTo((boolean) testData[1]);
}
}
@Test
public void hasPrevious() {
// setup: 0
TestMultiDataController dc = new TestMultiDataController(
generateTestData(0));
// test, check
assertThat(dc.hasPrevious()).isFalse();
// setup: {first, expected page}
dc = new TestMultiDataController(generateTestData(5));
for (Object[] testData : new Object[][] { { 4, true }, { 2, true },
{ 0, false } }) {
dc.setSelection(dc.getData().get((int) testData[0]));
assertThat(dc.hasPrevious()).isEqualTo((boolean) testData[1]);
}
}
/**
* Returns a List of {@link TestValue}s.
*
* @param count
* number {@link TestValue}s to generate
* @return list
*/
public List<TestValue> generateTestData(int count) {
List<TestValue> result = new ArrayList<TestValue>(count);
for (long i = 1; i <= count; i++) {
result.add(new TestValue(i));
}
return result;
}
@SuppressWarnings("serial")
public static class TestMultiDataController extends
ListDataController<Long, TestValue> {
List<TestValue> testValues;
Long testSize;
public TestMultiDataController(List<TestValue> testValues) {
this.testSize = (long) testValues.size();
this.testValues = testValues;
}
@Override
public List<TestValue> load(List<SortProperty> sorting) {
return testValues;
}
@Override
public TestValue getValueOf(Long key) {
throw new UnsupportedOperationException();
}
@Override
public Long getKeyOf(TestValue value) {
throw new UnsupportedOperationException();
}
}
public static class TestValue {
private Long id;
public TestValue(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
}
}