package com.github.triceo.splitlog; import java.util.SortedSet; import java.util.TreeSet; import org.assertj.core.api.Assertions; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import com.github.triceo.splitlog.api.Follower; import com.github.triceo.splitlog.api.LogWatchBuilder; import com.github.triceo.splitlog.api.Message; @RunWith(Parameterized.class) public class NestingTest extends DefaultFollowerBaseTest { public NestingTest(final LogWatchBuilder builder) { super(builder); } @Test public void testNesting() { final String message1 = "test1"; final String message2 = "test2"; final String message3 = "test3"; final String message4 = "test4"; final String message5 = "test5"; final Follower follower = this.getLogWatch().startFollowing(); // make sure the messages are received by the first follower LogWriter.write(follower, message1); String result = LogWriter.write(follower, message2); Assertions.assertThat(result).isEqualTo(message2); Assertions.assertThat(follower.getMessages().size()).isEqualTo(1); // start a second follower, send some messages final Follower nestedFollower = this.getLogWatch().startFollowing(); result = LogWriter.write(follower, message3); result = LogWriter.write(follower, message4); Assertions.assertThat(result).isEqualTo(message4); this.getLogWatch().stopFollowing(nestedFollower); // send another message, so the original follower has something extra Assertions.assertThat(nestedFollower.isStopped()).isTrue(); result = LogWriter.write(follower, message5); // and make sure that the original follower has all messages final SortedSet<Message> messages = new TreeSet<>(follower.getMessages()); DefaultFollowerBaseTest.assertProperOrder(messages, message1, message2, message3, message4); // and the nested follower has only the two while it was running final SortedSet<Message> nestedMessages = new TreeSet<>(nestedFollower.getMessages()); DefaultFollowerBaseTest.assertProperOrder(nestedMessages, message2, message3); } }