package hudson.plugins.cobertura;
import hudson.plugins.cobertura.targets.CoverageResult;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.easymock.EasyMock;
import org.easymock.IMocksControl;
import org.junit.Assert;
import org.junit.Test;
public class ChartTest
{
public static final File TEMP_IMAGE_FOLDER = new File("temp");
private IMocksControl ctl;
@Test(expected = NullPointerException.class)
public void noGraph() throws IOException
{
new CoverageChart( null, true, 0 );
}
@Test(expected = NullPointerException.class)
public void oneResult() throws Exception
{
ctl = EasyMock.createControl();
CoverageResult result = new CoverageResultBuilder( ctl ).data().create();
new CoverageChart( result, true, 0 );
}
@SuppressWarnings("unchecked")
@Test
public void simple() throws IOException
{
ctl = EasyMock.createControl();
CoverageResult result = new CoverageResultBuilder( ctl ).data().data().create();
CoverageChart chartData = new CoverageChart( result, true, 0 );
Assert.assertEquals( 74, chartData.getLowerBound() );
Assert.assertEquals( 101, chartData.getUpperBound() );
assertEquals( Arrays.asList( "#1", "#2" ), chartData.getDataset().getColumnKeys() );
complete( chartData, new File( TEMP_IMAGE_FOLDER, "chart_simple.png" ).getPath() );
}
@SuppressWarnings("unchecked")
@Test
public void someMore() throws IOException
{
ctl = EasyMock.createControl();
CoverageResult result = new CoverageResultBuilder( ctl )//
.result( 100, 100, 200, 300, 400, 500 )//
.result( 100, 100, 200, 300, 400, 500 )//
.result( 100, 200, 300, 400, 500, 600 )//
.create();
CoverageChart chartData = new CoverageChart( result, true, 0 );
Assert.assertEquals( 9, chartData.getLowerBound() );
Assert.assertEquals( 61, chartData.getUpperBound() );
assertEquals( Arrays.asList( "#1", "#2", "#3" ), chartData.getDataset().getColumnKeys() );
complete( chartData, new File( TEMP_IMAGE_FOLDER, "chart_multiple.png" ).getPath() );
}
@SuppressWarnings("unchecked")
@Test
public void fullRange() throws IOException
{
ctl = EasyMock.createControl();
CoverageResult result = new CoverageResultBuilder( ctl )//
.result( 0 )//
.result( 0 )//
.result( 1000 )//
.result( 1000 ).create();
CoverageChart chartData = new CoverageChart( result, true, 0 );
Assert.assertEquals( -1, chartData.getLowerBound() );
Assert.assertEquals( 101, chartData.getUpperBound() );
assertEquals( Arrays.asList( "#1", "#2", "#3", "#4" ), chartData.getDataset().getColumnKeys() );
complete( chartData, new File( TEMP_IMAGE_FOLDER, "chart_full_range.png" ).getPath() );
}
@SuppressWarnings("unchecked")
@Test
public void closeup() throws IOException
{
ctl = EasyMock.createControl();
CoverageResult result = new CoverageResultBuilder( ctl )//
.result( 105 )//
.result( 115 )//
.result( 108 )//
.result( 111, 108, 107, 114, 113, 109 ).create();
CoverageChart chartData = new CoverageChart( result, true, 0 );
Assert.assertEquals( 10, chartData.getLowerBound() );
Assert.assertEquals( 12, chartData.getUpperBound() );
assertEquals( Arrays.asList( "#1", "#2", "#3", "#4" ), chartData.getDataset().getColumnKeys() );
complete( chartData, new File( TEMP_IMAGE_FOLDER, "/chart_closeup.png" ).getPath() );
}
@SuppressWarnings("unchecked")
@Test
public void nozoom() throws IOException
{
ctl = EasyMock.createControl();
CoverageResult result = new CoverageResultBuilder( ctl )//
.result( 105 )//
.result( 115 )//
.result( 108 )//
.result( 111, 108, 107, 114, 113, 109 ).create();
CoverageChart chartData = new CoverageChart( result, false, 0 );
Assert.assertEquals( -1, chartData.getLowerBound() );
Assert.assertEquals( 101, chartData.getUpperBound() );
assertEquals( Arrays.asList( "#1", "#2", "#3", "#4" ), chartData.getDataset().getColumnKeys() );
complete( chartData, new File( TEMP_IMAGE_FOLDER, "chart_nozoom.png" ).getPath() );
}
protected void complete( CoverageChart chartData, String filename ) throws IOException
{
ctl.verify();
}
public <T> void assertEquals( List<T> expected, List<T> actual )
{
Assert.assertEquals( new ArrayList<T>( expected ).toString(), new ArrayList<T>( actual ).toString() );
}
}