package com.github.masahitojp.implementation.handlers; import com.github.masahitojp.botan.Botan; import com.github.masahitojp.botan.brain.LocalBrain; import com.github.masahitojp.botan.adapter.MockAdapter; import com.github.masahitojp.botan.exception.BotanException; import com.github.masahitojp.botan.message.BotanMessage; import com.github.masahitojp.botan.message.BotanMessageSimple; import mockit.Mock; import mockit.MockUp; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; import static org.hamcrest.Matchers.*; import static org.hamcrest.MatcherAssert.*; public class PingHandlersTest { private Botan botan; @Before public void startUp() throws BotanException { botan = new Botan.BotanBuilder() .setAdapter(new MockAdapter()) .setBrain(new LocalBrain()) .setMessageHandlers(new PingMessageHandlers()) .build(); botan.start(); } @After public void tearDown() { botan.stop(); } @Test public void handlersRegistrationTest() { assertThat(botan.getHandlers().size(), is(1)); } @Test public void regexTest() { final AtomicInteger a = new AtomicInteger(); MockUp<Consumer<BotanMessage>> spy = new MockUp<Consumer<BotanMessage>>(){ @Mock @SuppressWarnings("unused") public void accept(BotanMessage message) { a.incrementAndGet(); } }; botan.getHandlers().stream().filter(handler -> handler.getDescription().equals("ping method")).forEach(handler -> handler.setHandle(spy.getMockInstance())); botan.receive(new BotanMessageSimple("botan ping")); assertThat(a.get(), is(1)); } @Test public void MessageTest() { final AtomicReference<String> a = new AtomicReference<>(); new MockUp<BotanMessage>(){ @Mock @SuppressWarnings("unused") public void reply(String message) { a.set(message); } }; botan.receive(new BotanMessageSimple("botan ping")); assertThat(a.get(), is("pong")); } }