/*******************************************************************************
* Copyright (c) 2012-2015 INRIA.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Generoso Pagano - initial API and implementation
******************************************************************************/
package fr.inria.soctrace.test.junit.lib.storage;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import java.util.List;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import fr.inria.soctrace.lib.model.Event;
import fr.inria.soctrace.lib.model.EventParam;
import fr.inria.soctrace.lib.model.EventParamType;
import fr.inria.soctrace.lib.model.EventType;
import fr.inria.soctrace.lib.model.Trace;
import fr.inria.soctrace.lib.storage.utils.ModelElementCache;
import fr.inria.soctrace.test.junit.utils.IModelFactory;
/**
* Test for model element cache object
*
* @author "Generoso Pagano <generoso.pagano@inria.fr>"
*/
public class ModelElementCacheTest {
private static List<Event> events;
private static List<Trace> traces;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
events = IModelFactory.INSTANCE.createEvents(10);
traces = IModelFactory.INSTANCE.createTraces(10);
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
events.clear();
traces.clear();
events = null;
traces = null;
}
@Test
public final void testAddElementMap() {
ModelElementCache cache = new ModelElementCache();
cache.addElementMap(Event.class);
cache.addElementMap(EventType.class);
// null for non existing element in map
assertNull(cache.get(Event.class, 0));
assertNull(cache.get(EventType.class, 0));
// null for non existing map
cache.get(EventParam.class, 0);
cache.get(EventParamType.class, 0);
}
@Test
public final void testPut() {
ModelElementCache cache = new ModelElementCache();
Event e = events.iterator().next();
cache.addElementMap(Event.class);
cache.put(e);
Event tmp = cache.get(Event.class, e.getId());
assertSame(tmp, e);
}
@Test
public final void testGet() {
ModelElementCache cache = new ModelElementCache();
// get inserted elements
cache.addElementMap(Event.class);
for (Event e: events) {
cache.put(e);
}
for (Event e: events) {
Event tmp = cache.get(Event.class, e.getId());
assertSame(tmp, e);
}
// null for non existing in non empty map
assertNull(cache.get(Event.class, 999999));
}
@Test
public final void testRemove() {
ModelElementCache cache = new ModelElementCache();
// get inserted elements
cache.addElementMap(Trace.class);
for (Trace t: traces) {
cache.put(t);
}
for (Trace t: traces) {
Trace tmp = cache.get(Trace.class, t.getId());
assertSame(tmp, t);
}
// check presence
Trace first = traces.iterator().next();
assertNotNull(cache.get(Trace.class, first.getId()));
assertSame(first, cache.get(Trace.class, first.getId()));
// remove
cache.remove(first);
// check removed
assertNull(cache.get(Trace.class, first.getId()));
}
@Test
public final void testClear() {
ModelElementCache cache = new ModelElementCache();
// get inserted elements
cache.addElementMap(Event.class);
for (Event e: events) {
cache.put(e);
}
for (Event e: events) {
Event tmp = cache.get(Event.class, e.getId());
assertSame(tmp, e);
}
// clear
cache.clear();
for (Event e: events) {
Event tmp = cache.get(Event.class, e.getId());
assertNull(tmp);
}
}
}