/*
* JCarder -- cards Java programs to keep threads disentangled
*
* Copyright (C) 2006-2007 Enea AB
* Copyright (C) 2007 Ulrik Svensson
* Copyright (C) 2007 Joel Rosdahl
*
* This program is made available under the GNU GPL version 2, with a special
* exception for linking with JUnit. See the accompanying file LICENSE.txt for
* details.
*
* This program 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.
*/
package com.enea.jcarder.analyzer;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Collection;
import java.util.HashMap;
import org.junit.Before;
import org.junit.Test;
import com.enea.jcarder.analyzer.LockEdge;
import com.enea.jcarder.analyzer.LockNode;
public final class TestLockNode {
private LockNode node1;
private LockNode node2;
private LockNode node3;
@Before
public void setUp() throws Exception {
node1 = new LockNode(1);
node2 = new LockNode(2);
node3 = new LockNode(3);
}
@Test
public void testAddOutgoingEdge() {
node1.addOutgoingEdge(new LockEdge(node1, node2, 5, 5, 5));
node1.addOutgoingEdge(new LockEdge(node1, node2, 5, 5, 5));
node1.addOutgoingEdge(new LockEdge(node1, node2, 5, 5, 5));
node1.addOutgoingEdge(new LockEdge(node1, node3, 5, 5, 5));
node1.addOutgoingEdge(new LockEdge(node1, node2, 6, 5, 5));
node1.addOutgoingEdge(new LockEdge(node1, node2, 5, 6, 5));
node1.addOutgoingEdge(new LockEdge(node1, node2, 5, 5, 6));
assertEquals(5L, node1.numberOfUniqueEdges());
assertEquals(2L, node1.numberOfDuplicatedEdges());
}
@Test
public void testPopulateContextIdTranslationMap() {
node1.addOutgoingEdge(new LockEdge(node1, node2, 1, 2, 3));
node1.addOutgoingEdge(new LockEdge(node1, node2, 1, 4, 5));
node1.addOutgoingEdge(new LockEdge(node1, node2, 1, 4, 6));
node1.addOutgoingEdge(new LockEdge(node1, node2, 1, 4, 6));
node1.addOutgoingEdge(new LockEdge(node1, node3, 1, 4, 6));
node1.addOutgoingEdge(new LockEdge(node1, node3, 1, 7, 8));
final HashMap<Integer, Integer> translationMap =
new HashMap<Integer, Integer>();
node1.populateContextIdTranslationMap(translationMap);
final HashMap<Integer, Integer> expectedTranslationMap =
new HashMap<Integer, Integer>();
expectedTranslationMap.put(2, 2);
expectedTranslationMap.put(3, 3);
expectedTranslationMap.put(4, 4);
expectedTranslationMap.put(5, 5);
expectedTranslationMap.put(6, 6);
expectedTranslationMap.put(7, 7);
expectedTranslationMap.put(8, 8);
assertEquals(expectedTranslationMap, translationMap);
}
@Test
public void testUpdateContextIdsInEdges() {
node1.addOutgoingEdge(new LockEdge(node1, node2, 1, 2, 3));
node1.addOutgoingEdge(new LockEdge(node1, node2, 1, 2, 3));
node1.addOutgoingEdge(new LockEdge(node1, node2, 99, 2, 3));
node1.addOutgoingEdge(new LockEdge(node1, node2, 1, 4, 5));
node1.addOutgoingEdge(new LockEdge(node1, node2, 1, 6, 7));
node1.addOutgoingEdge(new LockEdge(node1, node3, 1, 2, 3));
assertEquals(1L, node1.numberOfDuplicatedEdges());
assertEquals(5L, node1.numberOfUniqueEdges());
final HashMap<Integer, Integer> translationMap =
new HashMap<Integer, Integer>();
translationMap.put(2, 12);
translationMap.put(3, 13);
translationMap.put(4, 12);
translationMap.put(5, 13);
translationMap.put(6, 6);
node1.translateContextIds(translationMap);
assertEquals(2L, node1.numberOfDuplicatedEdges());
assertEquals(4L, node1.numberOfUniqueEdges());
final Collection<LockEdge> edges = node1.getOutgoingEdges();
assertTrue(edges.contains(new LockEdge(node1, node2, 1, 12, 13)));
assertTrue(edges.contains(new LockEdge(node1, node2, 99, 12, 13)));
assertTrue(edges.contains(new LockEdge(node1, node2, 1, 6, 7)));
assertTrue(edges.contains(new LockEdge(node1, node3, 1, 12, 13)));
}
}