package javaflow.utils;
import javaflow.components.api.Packet;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import static org.mockito.Mockito.*;
public class PacketFormatterTest {
PacketFormatter formatter;
@BeforeMethod
public void setUp(){
formatter = new PacketFormatter();
}
@Test
public void contentAndIdIsIncluded(){
Packet p = createPacket(1123l, "content abcd1234");
when(p.getType()).thenReturn(Packet.PacketType.NORMAL);
String result = formatter.format(p);
Assert.assertTrue(result.contains("#1123: content abcd1234"),result);
}
private Packet createPacket() {
return createPacket(1,"content");
}
private Packet createPacket(long id, Object content) {
Packet packet = mock(Packet.class);
when(packet.getId()).thenReturn(id);
when(packet.getType()).thenReturn(Packet.PacketType.NORMAL);
when(packet.getContent()).thenReturn(content);
return packet;
}
@Test
public void messageTypeIsIncluded(){
PacketFormatter formatter = new PacketFormatter();
Packet startPacket = createPacket();
Packet endPacket = createPacket();
beStart(startPacket);
beEnd(endPacket);
String startResult = formatter.format(startPacket);
String endResult = formatter.format(endPacket);
Assert.assertTrue(startResult.contains("START"),startResult);
Assert.assertTrue(endResult.contains("END"),endResult);
}
private void beEnd(Packet endPacket) {
when(endPacket.getType()).thenReturn(Packet.PacketType.END);
}
private void beStart(Packet startPacket) {
when(startPacket.getType()).thenReturn(Packet.PacketType.START);
}
@Test
public void messageMetadataIsIncluded(){
PacketFormatter formatter = new PacketFormatter();
Packet p = createPacket();
when(p.getMetadataKeys()).thenReturn(Arrays.asList("a","b"));
when(p.getMetadata("a")).thenReturn("1");
when(p.getMetadata("b")).thenReturn(2);
when(p.getType()).thenReturn(Packet.PacketType.NORMAL);
String result = formatter.format(p);
Assert.assertTrue(result.contains("{a:1, b:2}"),result);
}
@Test
public void chainIsIncluded(){
List<Packet<?>> chain = new ArrayList<>();
Packet p = createPacket();
Packet c1 = createPacket();
chain.add(c1);
when(c1.getId()).thenReturn(12l);
when(c1.getContent()).thenReturn("content");
when(p.getId()).thenReturn(3l);
when(p.getContent()).thenReturn("abcd");
when(p.getType()).thenReturn(Packet.PacketType.NORMAL);
when(p.isTree()).thenReturn(true);
when(p.iterator()).thenReturn(chain.iterator());
String result = formatter.format(p);
Assert.assertTrue(result.contains("#3: abcd"),result);
Assert.assertTrue(result.contains(" #12: content"),result);
}
}