package com.jetbrains.actionscript.profiler.calltree;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.psi.xml.XmlFile;
import com.intellij.psi.xml.XmlTag;
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
import com.jetbrains.actionscript.profiler.sampler.FrameInfo;
import com.jetbrains.actionscript.profiler.sampler.FrameUtil;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.util.Map;
abstract public class CallTreeTest extends LightCodeInsightFixtureTestCase {
@Override
protected String getBasePath() {
return "/contrib/flex/tools/profiler/testdata";
}
protected void doTest(String fileName, String resultsFileName) throws IOException {
doTest(getTestXMLFile(fileName), getTestXMLFile(resultsFileName));
}
private void doTest(@NotNull XmlFile xmlFile, @NotNull XmlFile resultsXmlFile) {
final CallTree callTree = CallTreeTestUtil.getCallTreeFromXmlFile(xmlFile.getRootTag());
final Pair<Map<FrameInfo, Long>, Map<FrameInfo, Long>> maps = getMaps(callTree, xmlFile.getRootTag());
checkResults(resultsXmlFile, maps.getFirst(), maps.getSecond());
}
protected Pair<Map<FrameInfo, Long>, Map<FrameInfo, Long>> getMaps(CallTree callTree, XmlTag rootTag) {
return callTree.getTimeMaps();
}
private static void checkResults(XmlFile resultsXmlFile, Map<FrameInfo, Long> countMap, Map<FrameInfo, Long> selfTimeMap) {
final XmlTag rootTag = resultsXmlFile.getRootTag();
assertNotNull(rootTag);
checkResults(rootTag.getSubTags(), countMap, selfTimeMap);
}
private static void checkResults(XmlTag[] subTags, Map<FrameInfo, Long> countMap, Map<FrameInfo, Long> selfTimeMap) {
assertEquals("different sizes", subTags.length, countMap.size());
assertEquals("different sizes", subTags.length, selfTimeMap.size());
for (XmlTag xmlTag : subTags) {
String name = xmlTag.getName();
Long count = Long.parseLong(xmlTag.getAttributeValue("count"));
Long selftime = Long.parseLong(xmlTag.getAttributeValue("selftime"));
FrameInfo frameInfo = FrameUtil.getFrameInfo(name);
assertEquals("bad count for " + name, count, countMap.get(frameInfo));
assertEquals("bad selftime for " + name, selftime, selfTimeMap.get(frameInfo));
}
}
@NotNull
private XmlFile getTestXMLFile(String fileName) throws IOException {
File file = new File(getTestDataPath() + File.separator + fileName);
assertTrue("File doesn't exists " + fileName, file.exists());
FileType fileType = FileTypeManager.getInstance().getFileTypeByFileName(fileName);
return (XmlFile)createLightFile(fileType, FileUtil.loadFile(file));
}
}