package org.multiverse.stms.gamma;
import org.junit.Before;
import org.junit.Test;
import org.multiverse.api.functions.Function;
import org.multiverse.stms.gamma.transactionalobjects.CallableNode;
import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
public class GammaObjectPool_callableNodeTest {
private GammaObjectPool pool;
@Before
public void setUp() {
pool = new GammaObjectPool();
}
@Test(expected = NullPointerException.class)
public void whenPutNullNode_thenNullPointerException() {
pool.putCallableNode(null);
}
@Test
public void whenPutInPool_thenPreparedForPooling() {
Function function = mock(Function.class);
CallableNode next = new CallableNode(null, null);
CallableNode node = new CallableNode(function, next);
pool.putCallableNode(node);
assertNull(node.function);
assertNull(node.next);
}
@Test
public void whenSuccess() {
Function function = mock(Function.class);
CallableNode node1 = new CallableNode(function, null);
CallableNode node2 = new CallableNode(function, null);
CallableNode node3 = new CallableNode(function, null);
pool.putCallableNode(node1);
pool.putCallableNode(node2);
pool.putCallableNode(node3);
assertSame(node3, pool.takeCallableNode());
assertSame(node2, pool.takeCallableNode());
assertSame(node1, pool.takeCallableNode());
assertNotNull(pool.takeCallableNode());
}
}