package sk.stuba.fiit.perconik.activity.listeners.test; import org.eclipse.jdt.junit.model.ITestCaseElement; import org.eclipse.jdt.junit.model.ITestRunSession; import sk.stuba.fiit.perconik.activity.events.LocalEvent; import sk.stuba.fiit.perconik.activity.listeners.ActivityListener; import sk.stuba.fiit.perconik.activity.serializers.test.TestCaseElementSerializer; import sk.stuba.fiit.perconik.core.annotations.Unsupported; import sk.stuba.fiit.perconik.core.annotations.Version; import sk.stuba.fiit.perconik.core.listeners.TestRunListener; import sk.stuba.fiit.perconik.data.events.Event; import static sk.stuba.fiit.perconik.activity.listeners.test.TestCaseListener.Action.FINISH; import static sk.stuba.fiit.perconik.activity.listeners.test.TestCaseListener.Action.START; import static sk.stuba.fiit.perconik.activity.serializers.ConfigurableSerializer.StandardOption.TREE; import static sk.stuba.fiit.perconik.activity.serializers.Serializations.identifyObject; import static sk.stuba.fiit.perconik.data.content.StructuredContents.key; /** * TODO * * @author Pavol Zbell * @since 1.0 */ @Version("0.0.0.alpha") @Unsupported public final class TestCaseListener extends ActivityListener implements TestRunListener { public TestCaseListener() {} enum Action implements ActivityListener.Action { START, FINISH; private final String name; private final String path; private Action() { this.name = actionName("eclipse", "test", "case", this); this.path = actionPath(this.name); } public String getName() { return this.name; } public String getPath() { return this.path; } } static Event build(final long time, final Action action, final ITestCaseElement element) { Event data = LocalEvent.of(time, action.getName()); data.put(key("case"), new TestCaseElementSerializer(TREE).serialize(element)); data.put(key("case", "session"), identifyObject(element.getTestRunSession())); return data; } void process(final long time, final Action action, final ITestCaseElement element) { this.send(action.getPath(), build(time, action, element)); } void execute(final long time, final Action action, final ITestCaseElement element) { this.execute(new Runnable() { public void run() { process(time, action, element); } }); } public void testCaseStarted(final ITestCaseElement element) { final long time = this.currentTime(); this.execute(time, START, element); } public void testCaseFinished(final ITestCaseElement element) { final long time = this.currentTime(); this.execute(time, FINISH, element); } public void sessionLaunched(final ITestRunSession session) { // ignore } public void sessionStarted(final ITestRunSession session) { // ignore } public void sessionFinished(final ITestRunSession session) { // ignore } }