package com.jetbrains.actionscript.profiler.calltree;
import com.intellij.psi.xml.XmlTag;
import com.jetbrains.actionscript.profiler.sampler.FrameInfo;
import com.jetbrains.actionscript.profiler.sampler.FrameUtil;
import org.jetbrains.annotations.NotNull;
import org.junit.Assert;
public class CallTreeTestUtil {
private CallTreeTestUtil() {
}
public static CallTree getCallTreeFromXmlFile(@NotNull XmlTag rootTag) {
CallTreeNode root = getCallTreeNodeFromXmlTag(rootTag);
return new CallTree(root);
}
private static CallTreeNode getCallTreeNodeFromXmlTag(XmlTag rootTag) {
int count = Integer.MAX_VALUE;
String countStr = rootTag.getAttributeValue("count");
if (countStr != null) {
count = Integer.parseInt(countStr);
}
FrameInfo frameInfo = FrameUtil.getFrameInfo(rootTag.getName());
CallTreeNode node = new CallTreeNode(frameInfo, count);
if (rootTag.isEmpty()) {
return node;
}
for (XmlTag childTag : rootTag.getSubTags()) {
CallTreeNode childNode = getCallTreeNodeFromXmlTag(childTag);
node.addChildRecursive(childNode);
Assert.assertTrue("Bad edge " + node.getFrameInfo() + "->" + childNode.getFrameInfo(), childNode.calcSelfTiming() <= count);
}
return node;
}
}