// Path: src/test/java/adapter/MockAdapter.java
// public class MockAdapter implements BotanAdapter {
//     @Override
//     public void run() throws BotanException {
// 
//     }
// 
//     @Override
//     public void say(BotanMessage message) {
// 
//     }
// 
//     @Override
//     public void initialize(Botan botan) {
// 
//     }
// 
//     @Override
//     public void beforeShutdown() {
// 
//     }
// }
// 
// Path: src/test/java/utils/HandlersTestUtils.java
// public class HandlersTestUtils {
// 	public HandlersTestUtils() {
// 	}
// 
// 	/**
// 	 * Handlersで登録した正規表現文字列パターンで処理が反応することのテスト
// 	 * @param botan Botan本体
// 	 * @param list チェック対象
// 	 */
// 	public void regexTest(final Botan botan, final List<RegexTestPattern> list) {
// 
// 		Collections.unmodifiableList(list)
// 				.stream()
// 				.forEach(testPattern -> {
// 					// before: set mock
// 					final AtomicInteger times = new AtomicInteger();
// 					MockUp<Consumer<BotanMessage>> spy = new MockUp<Consumer<BotanMessage>>() {
// 						@Mock
// 						@SuppressWarnings("unused")
// 						public void accept(BotanMessage message) {
// 							times.incrementAndGet();
// 						}
// 					};
// 					botan.getHandlers()
// 							.stream()
// 							.filter(handler -> testPattern.getDescription().equals("") || handler.getDescription().equals(testPattern.getDescription()))
// 							.forEach(handler -> handler.setHandle(spy.getMockInstance()));
// 
// 					// given: handlerが登録されている場合
// 					// when: 規定のパターンのメッセージを受け取った時に
// 					botan.receive(new BotanMessageSimple(testPattern.getMessage()));
// 					// then: 想定の回数分処理が呼ばれる
// 					assertThat(times.get(), is(testPattern.getInvocations()));
// 				});
// 	}
// 
// 	public void replyTest(final Botan botan, final String receivedMessage, final String replyMessage) {
// 		// before: set mock for verify
// 		final AtomicReference<String> replayMessage = new AtomicReference<>();
// 
// 		new MockUp<BotanMessage>() {
// 			@Mock
// 			@SuppressWarnings("unused")
// 			public void reply(String message) {
// 				replayMessage.set(message);
// 			}
// 		};
// 
// 		// given: handlerが登録されている場合
// 		// when: 規定のパターンのメッセージを受け取った時に
// 		botan.receive(new BotanMessageSimple(receivedMessage));
// 		// then: 想定されたメッセージが返信される
// 		assertThat(replayMessage.get(), is(replyMessage));
// 	}
// }
// 
// Path: src/test/java/utils/pattern/InvocationRegexPattern.java
// public final class InvocationRegexPattern extends RegexTestPattern{
// 	public InvocationRegexPattern(final String pattern) {
// 		super(pattern, 1);
// 	}
// 
// 	public InvocationRegexPattern(final String description, final String pattern) {
// 		super(description, pattern, 1);
// 	}
// }
// 
// Path: src/test/java/utils/pattern/NotInvocationRegexPattern.java
// public final class NotInvocationRegexPattern extends RegexTestPattern{
// 	public NotInvocationRegexPattern(final String pattern) {
// 		super(pattern, 0);
// 	}
// 	public NotInvocationRegexPattern(final String description, final String pattern) {
// 		super(description, pattern, 0);
// 	}
// }


import adapter.MockAdapter;
import com.github.masahitojp.botan.Botan;
import com.github.masahitojp.botan.brain.LocalBrain;
import com.github.masahitojp.botan.exception.BotanException;
import mockit.Mock;
import mockit.MockUp;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import utils.HandlersTestUtils;
import utils.pattern.InvocationRegexPattern;
import utils.pattern.NotInvocationRegexPattern;
import java.util.Arrays;
import java.util.Date;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
package handlers;





public class DiagnosticsHandlersTest {
    Botan botan;
    @Before
    public void setUp() throws BotanException {
        botan = new Botan.BotanBuilder()
                .setAdapter(new MockAdapter())
                .setBrain(new LocalBrain())
                .setMessageHandlers(new DiagnosticsHandlers())
                .build();
        botan.start();
    }

    @After
    public void tearDown() {
        botan.stop();
    }

    @Test
    public void handlersRegistrationTest() {
        assertThat(botan.getHandlers().size(), is(2));
    }
    @Test
    public void regex() {
        new HandlersTestUtils().regexTest(
// Path: src/test/java/adapter/MockAdapter.java
// public class MockAdapter implements BotanAdapter {
//     @Override
//     public void run() throws BotanException {
// 
//     }
// 
//     @Override
//     public void say(BotanMessage message) {
// 
//     }
// 
//     @Override
//     public void initialize(Botan botan) {
// 
//     }
// 
//     @Override
//     public void beforeShutdown() {
// 
//     }
// }
// 
// Path: src/test/java/utils/HandlersTestUtils.java
// public class HandlersTestUtils {
// 	public HandlersTestUtils() {
// 	}
// 
// 	/**
// 	 * Handlersで登録した正規表現文字列パターンで処理が反応することのテスト
// 	 * @param botan Botan本体
// 	 * @param list チェック対象
// 	 */
// 	public void regexTest(final Botan botan, final List<RegexTestPattern> list) {
// 
// 		Collections.unmodifiableList(list)
// 				.stream()
// 				.forEach(testPattern -> {
// 					// before: set mock
// 					final AtomicInteger times = new AtomicInteger();
// 					MockUp<Consumer<BotanMessage>> spy = new MockUp<Consumer<BotanMessage>>() {
// 						@Mock
// 						@SuppressWarnings("unused")
// 						public void accept(BotanMessage message) {
// 							times.incrementAndGet();
// 						}
// 					};
// 					botan.getHandlers()
// 							.stream()
// 							.filter(handler -> testPattern.getDescription().equals("") || handler.getDescription().equals(testPattern.getDescription()))
// 							.forEach(handler -> handler.setHandle(spy.getMockInstance()));
// 
// 					// given: handlerが登録されている場合
// 					// when: 規定のパターンのメッセージを受け取った時に
// 					botan.receive(new BotanMessageSimple(testPattern.getMessage()));
// 					// then: 想定の回数分処理が呼ばれる
// 					assertThat(times.get(), is(testPattern.getInvocations()));
// 				});
// 	}
// 
// 	public void replyTest(final Botan botan, final String receivedMessage, final String replyMessage) {
// 		// before: set mock for verify
// 		final AtomicReference<String> replayMessage = new AtomicReference<>();
// 
// 		new MockUp<BotanMessage>() {
// 			@Mock
// 			@SuppressWarnings("unused")
// 			public void reply(String message) {
// 				replayMessage.set(message);
// 			}
// 		};
// 
// 		// given: handlerが登録されている場合
// 		// when: 規定のパターンのメッセージを受け取った時に
// 		botan.receive(new BotanMessageSimple(receivedMessage));
// 		// then: 想定されたメッセージが返信される
// 		assertThat(replayMessage.get(), is(replyMessage));
// 	}
// }
// 
// Path: src/test/java/utils/pattern/InvocationRegexPattern.java
// public final class InvocationRegexPattern extends RegexTestPattern{
// 	public InvocationRegexPattern(final String pattern) {
// 		super(pattern, 1);
// 	}
// 
// 	public InvocationRegexPattern(final String description, final String pattern) {
// 		super(description, pattern, 1);
// 	}
// }
// 
// Path: src/test/java/utils/pattern/NotInvocationRegexPattern.java
// public final class NotInvocationRegexPattern extends RegexTestPattern{
// 	public NotInvocationRegexPattern(final String pattern) {
// 		super(pattern, 0);
// 	}
// 	public NotInvocationRegexPattern(final String description, final String pattern) {
// 		super(description, pattern, 0);
// 	}
// }


// Path: src/test/java/handlers/DiagnosticsHandlersTest.java
import adapter.MockAdapter;
import com.github.masahitojp.botan.Botan;
import com.github.masahitojp.botan.brain.LocalBrain;
import com.github.masahitojp.botan.exception.BotanException;
import mockit.Mock;
import mockit.MockUp;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import utils.HandlersTestUtils;
import utils.pattern.InvocationRegexPattern;
import utils.pattern.NotInvocationRegexPattern;
import java.util.Arrays;
import java.util.Date;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

package handlers;





public class DiagnosticsHandlersTest {
    Botan botan;
    @Before
    public void setUp() throws BotanException {
        botan = new Botan.BotanBuilder()
                .setAdapter(new MockAdapter())
                .setBrain(new LocalBrain())
                .setMessageHandlers(new DiagnosticsHandlers())
                .build();
        botan.start();
    }

    @After
    public void tearDown() {
        botan.stop();
    }

    @Test
    public void handlersRegistrationTest() {
        assertThat(botan.getHandlers().size(), is(2));
    }
    @Test
    public void regex() {
        new HandlersTestUtils().regexTest(
                botan,