/* * Copyright 2010, Andrew M Gibson * * www.andygibson.net * * This file is part of DataValve. * * DataValve is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * DataValve is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * * You should have received a copy of the GNU Lesser General Public License * along with DataValve. If not, see <http://www.gnu.org/licenses/>. * */ package org.fluttercode.datavalve.provider; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import org.fluttercode.datavalve.dataset.Dataset; import org.fluttercode.datavalve.dataset.ObjectDataset; import org.fluttercode.datavalve.provider.InMemoryDataProvider; import org.fluttercode.datavalve.testing.junit.AbstractObjectDatasetJUnitTest; /** * @author Andy Gibson * */ public class InMemoryDatasetTest extends AbstractObjectDatasetJUnitTest<Integer> implements Serializable { private static final long serialVersionUID = 1L; private static Logger log = Logger.getLogger(InMemoryDatasetTest.class .getName()); public ObjectDataset<Integer> buildTestDataset() { return buildTestDataset(100); } public ObjectDataset<Integer> buildTestDataset(final int count) { InMemoryDataProvider<Integer> ds = new InMemoryDataProvider<Integer>() { private static final long serialVersionUID = 1L; @Override protected List<Integer> fetchBackingData() { List<Integer> res = new ArrayList<Integer>(); for (int i = 0; i < count; i++) { res.add(i); } return res; } }; return new Dataset<Integer, InMemoryDataProvider<Integer>>( ds); } public void testGetResultCount() { ObjectDataset<Integer> ds = buildTestDataset(); int res = ds.getResultCount(); assertEquals(100, res); } public void testGetResultsUnbound() { ObjectDataset<Integer> ds = buildTestDataset(); List<Integer> res = ds.getResultList(); assertNotNull(res); assertEquals(100, res.size()); for (int i = 0; i < 10; i++) { assertEquals(i, res.get(i).intValue()); } } /** * Tests that ordering does not change when just the order is * changed */ public void testGetResultsUnboundOrdering() { ObjectDataset<Integer> ds = buildTestDataset(); List<Integer> original = ds.getResultList(); ds.setOrderAscending(false); List<Integer> list1 = ds.getResultList(); ds.setOrderAscending(true); List<Integer> list2 = ds.getResultList(); assertNotNull(original); assertNotNull(list1); assertNotNull(list2); assertEquals(100, original.size()); assertEquals(100, list1.size()); assertEquals(100, list2.size()); for (int i = 0; i < 10; i++) { assertEquals(i, original.get(i).intValue()); assertEquals(original.get(i).intValue(), list1.get(i).intValue()); assertEquals(original.get(i).intValue(), list2.get(i).intValue()); } } public void testGetResultsBound() { ObjectDataset<Integer> ds = buildTestDataset(); ds.setMaxRows(12); List<Integer> res = ds.getResultList(); assertNotNull(res); assertEquals(12, res.size()); for (int i = 0; i < 12; i++) { assertEquals(i, res.get(i).intValue()); } } public void testLast() { ObjectDataset<Integer> ds = buildTestDataset(); ds.setMaxRows(10); ds.last(); assertEquals(10, ds.getPageCount()); int firstResult = ds.getFirstResult(); log.fine("First result = " + firstResult); assertEquals(90, firstResult); } public void testLastWithFractionalCount() { ObjectDataset<Integer> ds = buildTestDataset(95); ds.setMaxRows(10); ds.last(); Integer firstResult = ds.getFirstResult(); assertNotNull(firstResult); assertEquals(90, firstResult.longValue()); } public void testLastWithNoPaging() { ObjectDataset<Integer> ds = buildTestDataset(5); ds.setMaxRows(10); ds.last(); int firstResult = ds.getFirstResult(); log.fine("First result = " + firstResult); assertEquals(0, firstResult); } public void testPaginationPreviousAllResults() { ObjectDataset<Integer> ds = buildTestDataset(100); assertEquals(false, ds.isPreviousAvailable()); } public void testPaginationNextAllResults() { ObjectDataset<Integer> ds = buildTestDataset(100); assertEquals(false, ds.isNextAvailable()); } public void testPaginationPreviousPaged() { ObjectDataset<Integer> ds = buildTestDataset(100); ds.setMaxRows(10); assertEquals(false, ds.isPreviousAvailable()); } public void testPaginationNextPaged() { ObjectDataset<Integer> ds = buildTestDataset(100); ds.setMaxRows(10); assertEquals(true, ds.isNextAvailable()); } public void testPaginationNextNoRead() { ObjectDataset<Integer> ds = buildTestDataset(100); ds.setMaxRows(10); ds.next(); assertEquals(true, ds.isNextAvailable()); assertEquals(true, ds.isPreviousAvailable()); } public void testPaginationPreviousNoRead() { ObjectDataset<Integer> ds = buildTestDataset(100); ds.setMaxRows(10); ds.previous(); assertEquals(0, ds.getFirstResult()); assertEquals(1, ds.getPage()); assertEquals(true, ds.isNextAvailable()); assertEquals(false, ds.isPreviousAvailable()); } public void testPaginationLastNoRead() { ObjectDataset<Integer> ds = buildTestDataset(100); ds.setMaxRows(10); ds.last(); assertEquals(false, ds.isNextAvailable()); assertEquals(true, ds.isPreviousAvailable()); } public void testSmalldataset() { ObjectDataset<Integer> ds = buildTestDataset(6); ds.setMaxRows(10); assertEquals(false, ds.isNextAvailable()); assertEquals(false, ds.isPreviousAvailable()); ds.next(); assertEquals(6, ds.getResultCount().intValue()); assertEquals(false, ds.isNextAvailable()); assertEquals(false, ds.isPreviousAvailable()); } @Override public ObjectDataset<Integer> buildObjectDataset() { return buildTestDataset(100); } @Override public int getDataRowCount() { return 100; } }