package pluginbase.debugsession;
import org.junit.Before;
import org.junit.Test;
import pluginbase.messages.messaging.MessageReceiver;
import static junit.framework.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.*;
public class DebugStreamTest {
private TestSubscription subscription;
private DebugStream systemOut;
private DebugStream systemErr;
@Before
public void setup() throws Exception {
MessageReceiver messageReceiver = mock(MessageReceiver.class);
subscription = new TestSubscription(messageReceiver);
systemOut = new DebugStream("System.out", System.out);
System.setOut(systemOut);
systemErr = new DebugStream("System.err", System.err);
System.setErr(systemErr);
}
@Test
public void testNullArgs() {
try {
systemOut.subscribeToDebugBroadcast(null);
fail();
} catch (IllegalArgumentException e) {
assertTrue(e.getMessage().endsWith("must not be null"));
}
try {
systemOut.unsubscribeFromDebugBroadcast(null);
fail();
} catch (IllegalArgumentException e) {
assertTrue(e.getMessage().endsWith("must not be null"));
}
try {
systemOut.hasDebugBroadcastSubscription(null);
fail();
} catch (IllegalArgumentException e) {
assertTrue(e.getMessage().endsWith("must not be null"));
}
}
@Test
public void testAcceptSubscription() {
assertTrue(systemOut.subscribeToDebugBroadcast(subscription));
assertTrue(systemOut.hasDebugBroadcastSubscription(subscription));
assertFalse(systemOut.subscribeToDebugBroadcast(subscription));
}
@Test
public void testCancelSubscription() {
assertFalse(systemOut.unsubscribeFromDebugBroadcast(subscription));
assertTrue(systemOut.subscribeToDebugBroadcast(subscription));
assertTrue(systemOut.unsubscribeFromDebugBroadcast(subscription));
}
@Test
public void testRecordMessageToBroadcast() {
subscription.assertNotSameLastMessage(String.format(DebugStream.DEBUG_PREFIX, "System.out") + "Test");
subscription.assertNotSameLastMessage(String.format(DebugStream.DEBUG_PREFIX, "System.err") + "Test");
systemOut.subscribeToDebugBroadcast(subscription);
systemErr.subscribeToDebugBroadcast(subscription);
System.out.println("Test");
subscription.assertSameLastMessage(String.format(DebugStream.DEBUG_PREFIX, "System.out") + "Test");
System.err.println("Test");
subscription.assertSameLastMessage(String.format(DebugStream.DEBUG_PREFIX, "System.err") + "Test");
}
}