/*
* #!
* Ontopia Engine
* #-
* Copyright (C) 2001 - 2013 The Ontopia Project
* #-
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* !#
*/
package net.ontopia.persistence.proxy;
import junit.framework.TestCase;
public abstract class TrackableCollectionTest extends TestCase {
public TrackableCollectionTest(String name) {
super(name);
}
protected abstract TrackableCollectionIF createTrackableCollection();
// --- Test cases
public void testAddRemove() {
// Bug#627: adding and removing the same object before the
// added/removed member(s) was initialized led to the object being
// registered as either added or removed when it should be
// neither.
TrackableCollectionIF set = createTrackableCollection();
Object obj1 = new Object();
Object obj2 = new Object();
assertTrue("size of trackable set is not 0", set.size() == 0);
set.addWithTracking(obj1);
assertTrue("size of trackable set is not 1", set.size() == 1);
set.addWithTracking(obj1);
assertTrue("size of trackable set is not 1", set.size() == 1);
set.addWithTracking(obj2);
assertTrue("size of trackable set is not 2", set.size() == 2);
set.addWithTracking(obj2);
assertTrue("size of trackable set is not 2", set.size() == 2);
assertTrue("size of trackable set added is not 2", set.getAdded().size() == 2);
set.removeWithTracking(obj1);
assertTrue("size of trackable set is not 1", set.size() == 1);
set.removeWithTracking(obj1);
assertTrue("size of trackable set is not 1", set.size() == 1);
set.removeWithTracking(obj2);
assertTrue("size of trackable set is not 0", set.size() == 0);
set.removeWithTracking(obj2);
assertTrue("size of trackable set is not 0", set.size() == 0);
assertTrue("size of trackable set added is not 0 (" + set.getAdded() + ")",
set.getAdded() == null || set.getAdded().isEmpty());
assertTrue("size of trackable set removed is not 0 (" + set.getRemoved() + ")",
set.getRemoved() == null || set.getRemoved().isEmpty());
set.addWithTracking(obj2);
set.clearWithTracking();
assertTrue("size of trackable set is not 0", set.size() == 0);
}
public void testClear() {
// Test clear() method
TrackableCollectionIF set = createTrackableCollection();
Object obj1 = new String("1");
Object obj2 = new String("2");
Object obj3 = new String("3");
Object obj4 = new String("4");
Object obj5 = new String("5");
set.addWithTracking(obj1);
set.addWithTracking(obj2);
set.addWithTracking(obj3);
set.addWithTracking(obj4);
set.addWithTracking(obj5);
set.removeWithTracking(obj1);
set.removeWithTracking(obj3); // [[2,4,5] [2,4,5] []]
set.clearWithTracking(); // [[], [] []]
assertTrue("size of trackable set added is not 0", set.getAdded() == null || set.getAdded().isEmpty());
assertTrue("size of trackable set removed is not 0", set.getRemoved() == null || set.getRemoved().isEmpty());
}
public void testBug627() {
// BUG: adding and removing the same object before the
// added/removed member(s) was initialized led to the object being
// registered as either added or removed when it should be
// neither.
TrackableCollectionIF set = createTrackableCollection();
Object obj1 = new Object();
Object obj2 = new Object();
Object obj3 = new Object();
set.addWithTracking(obj1);
set.addWithTracking(obj2);
set.addWithTracking(obj3);
assertTrue("size of trackable set is not 3", set.size() == 3);
set.removeWithTracking(obj1);
set.removeWithTracking(obj2);
assertTrue("size of trackable set is not 1", set.size() == 1);
set.addWithTracking(obj2);
assertTrue("size of trackable set removed is not 0", set.getRemoved() == null);
set.resetTracking();
set.removeWithTracking(obj3);
assertTrue("size of trackable set added is not 0", set.getAdded() == null);
assertTrue("size of trackable set removed is not 1", set.getRemoved().size() == 1);
set.clearWithTracking();
assertTrue("size of trackable set is not 0", set.size() == 0);
assertTrue("size of trackable set removed is not 2", set.getRemoved().size() == 2);
}
}