package org.sef4j.callstack.handlers;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import org.sef4j.callstack.LocalCallStack;
import org.sef4j.callstack.dummy.InstrumentedRecurseCallStackFoo;
import org.sef4j.callstack.event.StackEvent;
import org.sef4j.callstack.event.StackEvent.PopStackEvent;
import org.sef4j.callstack.event.StackEvent.PushStackEvent;
import org.sef4j.callstack.event.impl.InMemoryStackEventListener;
import org.sef4j.callstack.event.impl.StackEventListenerCallStackHandler;
public class MaxDepthCallStackHandlerFilterTest {
private InMemoryStackEventListener inMemoryListener = new InMemoryStackEventListener();
private MaxDepthCallStackHandlerFilter sut = new MaxDepthCallStackHandlerFilter(
new StackEventListenerCallStackHandler(inMemoryListener), 1);
@Test
public void testOnPush() {
// Prepare
InstrumentedRecurseCallStackFoo foo = new InstrumentedRecurseCallStackFoo();
LocalCallStack.currThreadStackElt().addRootCallStackHandler(sut);
// Perform
foo.fooBar();
// Post-check
LocalCallStack.currThreadStackElt().removeRootCallStackHandler(sut);
List<StackEvent> filteredEvents = inMemoryListener.clearAndGet();
Assert.assertEquals(2, filteredEvents.size());
PushStackEvent pushFoo = (PushStackEvent) filteredEvents.get(0);
PopStackEvent popFoo = (PopStackEvent) filteredEvents.get(1);
Assert.assertEquals("foo", pushFoo.getName());
Assert.assertEquals("foo", popFoo.getName());
}
@Test
public void testOnPush_fooRecurse() {
// Prepare
InstrumentedRecurseCallStackFoo foo = new InstrumentedRecurseCallStackFoo();
foo.recurseBarLevel = 4;
LocalCallStack.currThreadStackElt().addRootCallStackHandler(sut);
// Perform
foo.fooRecurseBarBaz();
// Post-check
LocalCallStack.currThreadStackElt().removeRootCallStackHandler(sut);
List<StackEvent> filteredEvents = inMemoryListener.clearAndGet();
Assert.assertEquals(2, filteredEvents.size());
PushStackEvent pushFoo = (PushStackEvent) filteredEvents.get(0);
PopStackEvent popFoo = (PopStackEvent) filteredEvents.get(1);
Assert.assertEquals("foo", pushFoo.getName());
Assert.assertEquals("foo", popFoo.getName());
}
}