package com.insightfullogic.honest_profiler.framework.checker;
import static org.junit.Assert.assertEquals;
import java.util.List;
import java.util.Optional;
import com.insightfullogic.honest_profiler.core.aggregation.grouping.FrameGrouping;
import com.insightfullogic.honest_profiler.core.aggregation.grouping.ThreadGrouping;
import com.insightfullogic.honest_profiler.core.aggregation.result.straight.Node;
import com.insightfullogic.honest_profiler.core.aggregation.result.straight.Tree;
/**
* {@link CheckAdapter} for checking a {@link Tree} directly.
*/
public class TreeCheckAdapter implements CheckAdapter<String[]>
{
private Tree tree;
public TreeCheckAdapter(Tree tree)
{
this.tree = tree;
}
@Override
public ThreadGrouping getThreadGrouping()
{
return tree.getGrouping().getThreadGrouping();
}
@Override
public FrameGrouping getFrameGrouping()
{
return tree.getGrouping().getFrameGrouping();
}
@Override
public void assertSizeEquals(int expected)
{
assertEquals(msg("Size"), expected, tree.flatten().count());
}
@Override
public void assertSelfCntEquals(String[] keys, int expected)
{
assertEquals(msg(keys + ": Slf #"), expected, getNode(keys).getSelfCnt());
}
@Override
public void assertTotalCntEquals(String[] keys, int expected)
{
assertEquals(msg(keys + ": Tot #"), expected, getNode(keys).getTotalCnt());
}
@Override
public void assertSelfTimeEquals(String[] keys, long expected)
{
assertEquals(msg(keys + ": Slf Time"), expected, getNode(keys).getSelfTime());
}
@Override
public void assertTotalTimeEquals(String[] keys, long expected)
{
assertEquals(msg(keys + ": Tot Time"), expected, getNode(keys).getTotalTime());
}
@Override
public void assertSelfCntPctEquals(String[] keys, double expected)
{
assertEquals(msg(keys + ": Slf # %"), expected, getNode(keys).getSelfCntPct(), .00001);
}
@Override
public void assertTotalCntPctEquals(String[] keys, double expected)
{
assertEquals(msg(keys + ": Tot # %"), expected, getNode(keys).getTotalCntPct(), .00001);
}
@Override
public void assertSelfTimePctEquals(String[] keys, double expected)
{
assertEquals(msg(keys + ": Slf Time %"), expected, getNode(keys).getSelfTimePct(), .00001);
}
@Override
public void assertTotalTimePctEquals(String[] keys, double expected)
{
assertEquals(msg(keys + ": Tot Time %"), expected, getNode(keys).getTotalTimePct(), .00001);
}
private String msg(String value)
{
return value
+ " wrong ("
+ getThreadGrouping()
+ ", "
+ getFrameGrouping()
+ ")\n"
+ tree.toString();
}
private Node getNode(String... keys)
{
if (keys == null || keys.length == 0)
{
return null;
}
List<Node> children = tree.getData();
Optional<Node> result = null;
for (String key : keys)
{
result = children.stream().filter(node -> key.equals(node.getKey())).findFirst();
if (!result.isPresent())
{
return null;
}
children = result.get().getChildren();
}
return result.get();
}
}