package org.sef4j.callstack.event.impl;
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;
public class StackEventListenerCallStackHandlerTest {
private InMemoryStackEventListener eventListener = new InMemoryStackEventListener();
private StackEventListenerCallStackHandler sut = new StackEventListenerCallStackHandler(eventListener);
@Test
public void testOnPush() {
// cf testOnPushPop_InstrumentedFoo
}
@Test
public void testOnPop() {
// cf testOnPushPop_InstrumentedFoo
}
@Test
public void testOnPushPop_InstrumentedFoo_fooBar() {
// Prepare
InstrumentedRecurseCallStackFoo foo = new InstrumentedRecurseCallStackFoo();
LocalCallStack.currThreadStackElt().addRootCallStackHandler(sut);
// Perform
foo.fooBar();
// Post-check
LocalCallStack.currThreadStackElt().removeRootCallStackHandler(sut);
List<StackEvent> events = eventListener.clearAndGet();
Assert.assertEquals(4, events.size());
PushStackEvent event1 = (PushStackEvent) events.get(0);
Assert.assertEquals("foo", event1.getName());
PushStackEvent event2 = (PushStackEvent) events.get(1);
Assert.assertEquals("bar", event2.getName());
PopStackEvent event3 = (PopStackEvent) events.get(2);
Assert.assertEquals("bar", event3.getName());
PopStackEvent event4 = (PopStackEvent) events.get(3);
Assert.assertEquals("foo", event4.getName());
}
}