package org.infinispan.lucene.impl; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; import java.util.List; import org.testng.annotations.Test; @Test(groups = "unit", testName = "lucene.FileListCacheValueDeltaTest") public class FileListCacheValueDeltaTest { @Test public void testDeltasWithAddAndRemove() { FileListCacheValue fileListCacheValue = new FileListCacheValue(); fileListCacheValue.add("a"); fileListCacheValue.add("b"); fileListCacheValue.add("c"); fileListCacheValue.remove("a"); fileListCacheValue.remove("c"); FileListCacheValueDelta delta = fileListCacheValue.delta(); List<Operation> ops = delta.getOps(); assertTrue(fileListCacheValue.toArray().length == 1); assertTrue(delta.getOps().size() == 1); assertAddOperation(ops.get(0), "b"); } @Test public void testDeltasWithEmpty() { FileListCacheValue cacheValue = new FileListCacheValue(); FileListCacheValueDelta delta = cacheValue.delta(); assertTrue(delta.getOps().isEmpty()); } @Test public void testSeveralDeltas() { FileListCacheValue cacheValue = new FileListCacheValue(); cacheValue.add("_.cf1"); cacheValue.add("_.cf2"); cacheValue.add("_.cf3"); FileListCacheValueDelta delta = cacheValue.delta(); assertTrue(delta.getOps().size() == 3); assertAddOperation(delta.getOps().get(0), "_.cf1"); assertAddOperation(delta.getOps().get(1), "_.cf2"); assertAddOperation(delta.getOps().get(2), "_.cf3"); cacheValue.remove("_.cf3"); FileListCacheValueDelta anotherDelta = cacheValue.delta(); assertTrue(anotherDelta.getOps().size() == 1); assertDeleteOperation(anotherDelta.getOps().get(0), "_.cf3"); } @Test public void testAddRemove() { FileListCacheValue fileListCacheValue = new FileListCacheValue(); fileListCacheValue.addAndRemove("string1", "string2"); FileListCacheValueDelta delta = fileListCacheValue.delta(); List<Operation> ops = delta.getOps(); assertEquals(1, delta.getOps().size()); assertAddOperation(ops.get(0), "string1"); } @Test public void testCommit() { FileListCacheValue cacheValue = new FileListCacheValue(); cacheValue.add("string1"); cacheValue.add("string2"); cacheValue.add("string3"); cacheValue.commit(); assertTrue(cacheValue.delta().getOps().isEmpty()); } @Test public void testRemoveAddSameElement() { FileListCacheValue cacheValue = new FileListCacheValue(); cacheValue.add("string1"); cacheValue.add("string2"); cacheValue.add("string3"); cacheValue.remove("string1"); cacheValue.remove("string3"); FileListCacheValueDelta delta = cacheValue.delta(); assertTrue(delta.getOps().size() == 1); } @Test public void testDeltasWithRepeatedChanges() { FileListCacheValue cacheValue = new FileListCacheValue(); cacheValue.add("string1"); cacheValue.add("string1"); cacheValue.add("string1"); FileListCacheValueDelta delta = cacheValue.delta(); assertTrue(delta.getOps().size() == 1); assertAddOperation(delta.getOps().get(0), "string1"); } @Test public void testRemoveNonexistent() { FileListCacheValue cacheValue = new FileListCacheValue(); cacheValue.remove("2"); FileListCacheValueDelta delta = cacheValue.delta(); assertTrue(delta.getOps().isEmpty()); } @Test public void testMerge() throws Exception { FileListCacheValue original = new FileListCacheValue(); FileListCacheValue target = new FileListCacheValue(); original.add("1"); original.add("2"); original.add("3"); original.remove("4"); original.remove("2"); original.delta().merge(target); assertEquals(original, target); } private <T> void assertAddOperation(Object operation, T onElement) { assertTrue(AddOperation.class.isAssignableFrom(operation.getClass())); assertEquals(((AddOperation) operation).getElement(), onElement); } private <T> void assertDeleteOperation(Object operation, T onElement) { assertTrue(DeleteOperation.class.isAssignableFrom(operation.getClass())); assertEquals(((DeleteOperation) operation).getElement(), onElement); } }