package hudson.plugins.testabilityexplorer.report;
import org.testng.annotations.Test;
import hudson.plugins.testabilityexplorer.PluginBaseTest;
import hudson.plugins.testabilityexplorer.report.costs.Statistic;
import hudson.plugins.testabilityexplorer.report.costs.CostSummary;
import hudson.plugins.testabilityexplorer.report.costs.ClassCost;
import hudson.plugins.testabilityexplorer.report.costs.MethodCost;
import hudson.plugins.testabilityexplorer.report.detail.ClassCostDetail;
import hudson.plugins.testabilityexplorer.report.detail.MethodCostDetail;
import hudson.model.AbstractBuild;
import java.util.GregorianCalendar;
import java.util.Collection;
import static org.testng.Assert.*;
/**
* Tests the CostDetailBuilder.
*/
@Test
public class CostDetailBuilderTest extends PluginBaseTest
{
public void testBuildDetail()
{
CostDetailBuilder costDetailBuilder = new CostDetailBuilder();
AbstractBuild<?,?> build = createBuild(11, GregorianCalendar.getInstance());
Collection<Statistic> statistics = createStatistics();
ClassCost classCost = null;
for (Statistic statistic : statistics)
{
CostSummary summary = statistic.getCostSummary();
Collection<ClassCost> costStack = summary.getCostStack();
for (ClassCost cost : costStack)
{
classCost = cost;
break;
}
}
assertNotNull(classCost);
Object o = costDetailBuilder.buildDetail("class." + classCost.getName(), "", build, statistics);
assertTrue(o instanceof ClassCostDetail);
ClassCostDetail classCostDetail = (ClassCostDetail) o;
ClassCost cost = classCostDetail.getClassCost();
assertTrue(classCost == cost);
assertEquals(classCostDetail.getDisplayName(), "hudson.plugins.testabilityexplorer.testabilityexplorer.PluginBaseTest");
assertTrue(classCostDetail.toString().contains("ClassCost: Name: hudson.plugins.testabilityexplorer.testabilityexplorer.PluginBaseTest, Cost: 20"));
AbstractBuild<?, ?> owner = classCostDetail.getOwner();
assertTrue(build == owner);
}
public void testFindMatch()
{
CostDetailBuilder costDetailBuilder = new CostDetailBuilder();
String s1 = costDetailBuilder.findMatch("class.Foo:line.65");
assertNotNull(s1);
assertEquals(s1, "65");
assertNull(costDetailBuilder.findMatch("class.Foo:line65"));
assertNull(costDetailBuilder.findMatch("class.Foo:inline.65"));
assertNotNull(costDetailBuilder.findMatch("class.Foo:line.65/"));
}
public void testLookupMethodCost()
{
CostDetailBuilder costDetailBuilder = new CostDetailBuilder();
AbstractBuild<?,?> build = createBuild(11, GregorianCalendar.getInstance());
Collection<Statistic> statistics = createStatistics();
ClassCost classCost = null;
for (Statistic statistic : statistics)
{
CostSummary summary = statistic.getCostSummary();
Collection<ClassCost> costStack = summary.getCostStack();
for (ClassCost cost : costStack)
{
classCost = cost;
break;
}
}
assertNotNull(classCost);
classCost.addToCostStack(new MethodCost("foo", 1, 1, 67, 1, 1, "foo"));
Object o1 = costDetailBuilder.buildDetail("class." + classCost.getName(), "", build, statistics);
assertTrue(o1 instanceof ClassCostDetail);
Object o2 = costDetailBuilder.buildDetail("class." + classCost.getName(), "class." + classCost.getName() + ":line.56", build, statistics);
assertTrue(o2 instanceof MethodCostDetail);
Object o3 = costDetailBuilder.buildDetail("class." + classCost.getName(), "class." + classCost.getName() + ":line.67", build, statistics);
assertTrue(o3 instanceof MethodCostDetail);
assertTrue(costDetailBuilder.buildDetail("class." + classCost.getName(), "class." + classCost.getName() + ":line67", build, statistics) instanceof ClassCostDetail);
assertTrue(costDetailBuilder.buildDetail("class." + classCost.getName(), "class." + classCost.getName() + ":", build, statistics) instanceof ClassCostDetail);
assertTrue(costDetailBuilder.buildDetail("class." + classCost.getName(), "class." + classCost.getName() + ":line", build, statistics) instanceof ClassCostDetail);
assertTrue(costDetailBuilder.buildDetail("class." + classCost.getName(), "class." + classCost.getName() + ":line1", build, statistics) instanceof ClassCostDetail);
assertTrue(costDetailBuilder.buildDetail("class." + classCost.getName(), "class." + classCost.getName() + ":line.11", build, statistics) instanceof ClassCostDetail);
assertTrue(costDetailBuilder.buildDetail("class." + classCost.getName(), "class." + classCost.getName() + ":line.116895", build, statistics) instanceof ClassCostDetail);
assertTrue(costDetailBuilder.buildDetail("class." + classCost.getName(), "class." + classCost.getName() + ".133:line", build, statistics) instanceof ClassCostDetail);
assertTrue(costDetailBuilder.buildDetail("class." + classCost.getName(), "class." + classCost.getName() + ":line.56.fldjlfsj", build, statistics) instanceof ClassCostDetail);
assertTrue(costDetailBuilder.buildDetail("class." + classCost.getName(), "class." + classCost.getName() + ":line.56.", build, statistics) instanceof ClassCostDetail);
assertTrue(costDetailBuilder.buildDetail("class." + classCost.getName(), "class." + classCost.getName() + ":line.56:line.5", build, statistics) instanceof ClassCostDetail);
assertTrue(costDetailBuilder.buildDetail("class." + classCost.getName(), "class." + classCost.getName() + ":inline.56", build, statistics) instanceof ClassCostDetail);
}
}