/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.test.bytecode.enhancement.tracker; import org.hibernate.bytecode.enhance.internal.tracker.DirtyTracker; import org.hibernate.bytecode.enhance.internal.tracker.SimpleFieldTracker; import org.hibernate.bytecode.enhance.internal.tracker.SortedFieldTracker; import org.junit.Test; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; /** * @author <a href="mailto:stale.pedersen@jboss.org">Ståle W. Pedersen</a> */ public class DirtyTrackerTest { @Test public void testSimpleTracker() { DirtyTracker tracker = new SimpleFieldTracker(); assertTrue(tracker.isEmpty()); assertTrue(tracker.get().length == 0); tracker.add("foo"); assertFalse(tracker.isEmpty()); assertArrayEquals(tracker.get(), new String[]{"foo"}); tracker.clear(); assertTrue(tracker.isEmpty()); assertTrue(tracker.get().length == 0); tracker.add("foo"); tracker.add("bar"); tracker.add("another.bar"); tracker.add("foo"); tracker.add("another.foo"); tracker.add("another.bar"); assertTrue(tracker.get().length == 4); tracker.suspend(true); tracker.add("one more"); assertTrue(tracker.get().length == 4); } @Test public void testSortedTracker() { DirtyTracker tracker = new SortedFieldTracker(); assertTrue(tracker.isEmpty()); assertTrue(tracker.get().length == 0); tracker.add("foo"); assertFalse(tracker.isEmpty()); assertArrayEquals(tracker.get(), new String[]{"foo"}); tracker.clear(); assertTrue(tracker.isEmpty()); assertTrue(tracker.get().length == 0); tracker.add("foo"); tracker.add("bar"); tracker.add("another.bar"); tracker.add("foo"); tracker.add("another.foo"); tracker.add("another.bar"); assertTrue(tracker.get().length == 4); // we the algorithm for this implementation relies on the fact that the array is kept sorted, so let's check it really is assertTrue(isSorted(tracker.get())); tracker.suspend(true); tracker.add("one more"); assertTrue(tracker.get().length == 4); } private boolean isSorted(String[] arr) { for (int i = 1; i < arr.length; i++) { if (arr[i - 1].compareTo(arr[i]) > 0) { return false; } } return true; } }