package charts.builder;
import static java.util.Arrays.asList;
import static org.fest.assertions.Assertions.assertThat;
import static org.junit.Assert.fail;
import java.awt.Dimension;
import java.io.FileInputStream;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
import charts.Chart.UnsupportedFormatException;
import charts.ChartType;
import charts.Region;
import charts.builder.spreadsheet.XlsDataSource;
import charts.builder.spreadsheet.XlsxDataSource;
import charts.representations.Format;
public class ChartBuilderTest {
private final static ChartBuilder chartBuilder = new DefaultChartBuilder(
new DataSourceFactory() {
@Override
public DataSource getDataSource(String id) throws Exception {
return getDatasource(ChartType.valueOf(id));
}
});
@Test
public void format() throws Exception {
for (final ChartType ct : ChartType.values()) {
for (final Format f : new Format[]{Format.CSV, Format.SVG}) {
format(ct, f);
}
}
}
public void format(ChartType chartType, Format format) throws Exception {
final List<charts.Chart> charts = chartBuilder.getCharts(
chartType.name(),
chartType,
asList(getDefaultTestingRegion(chartType)),
Collections.<String, String>emptyMap());
assertThat(charts).as("No chart generated for "+chartType).isNotEmpty();
final charts.Chart chart = charts.get(0);
assertThat(chart.getDescription().getType()).isEqualTo(chartType);
try {
chart.outputAs(format, new Dimension(0,0));
} catch (UnsupportedFormatException ufe) {
fail(chartType+" should support "+format+" output.");
}
}
public static DataSource getDatasource(ChartType t) {
try {
String filename = getChartTypeFile(t);
if(filename.endsWith(".xlsx")) {
return new XlsxDataSource(new FileInputStream(getChartTypeFile(t)));
} else {
return new XlsDataSource(new FileInputStream(getChartTypeFile(t)));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static Region getDefaultTestingRegion(ChartType t) {
switch (t) {
case TSA:
return Region.BURDEKIN;
case GRAINS_PS:
return Region.FITZROY;
case CORAL_HCC:
case CORAL_SCC:
case CORAL_JUV:
case CORAL_MA:
return Region.WET_TROPICS;
case GROUNDCOVER:
case GROUNDCOVER_BELOW_50:
return Region.WET_TROPICS;
//$CASES-OMITTED$
default:
return Region.GBR;
}
}
public static String getChartTypeFile(ChartType t) {
switch (t) {
case COTS_OUTBREAK:
return "test/cots_outbreak.xlsx";
case ANNUAL_RAINFALL:
return "test/annual_rainfall.xlsx";
case GRAZING_PS:
case HORTICULTURE_PS:
case SUGARCANE_PS:
case GRAINS_PS:
return "test/management_practice_systems.xlsx";
case MARINE:
case MARINE_CT:
case MARINE_ST:
case MARINE_WQT:
return "test/marine.xls";
case PROGRESS_TABLE:
case PROGRESS_TABLE_REGION:
case PROGRESS_TABLE_TILE:
return "test/progress_table.xlsx";
case TSA:
return "test/seagrass_cover.xls";
case TTT_CANE_AND_HORT:
case TTT_GRAZING:
case TTT_NITRO_AND_PEST:
case TTT_SEDIMENT:
return "test/tracking_towards_targets.xlsx";
case GROUNDCOVER:
return "test/groundcover.xlsx";
case GROUNDCOVER_BELOW_50:
return "test/groundcover_below_50.xlsx";
case LOADS:
case LOADS_DIN:
case LOADS_PSII:
case LOADS_PN:
case LOADS_PP:
case LOADS_TSS:
return "test/loads.xlsx";
case CORAL_HCC:
case CORAL_SCC:
case CORAL_MA:
case CORAL_JUV:
case CORAL_HCC_GBR:
case CORAL_SCC_GBR:
case CORAL_MA_GBR:
case CORAL_JUV_GBR:
return "test/coral.xls";
case PSII_MAX_HEQ:
case PSII_TRENDS:
return "test/pesticides.xlsx";
case RIPARIAN_FOREST_LOSS_TOTAL:
case RIPARIAN_FOREST_LOSS:
return "test/riparian_2010.xlsx";
case WETLANDS_LOSS:
case WETLANDS_REMAINING:
return "test/wetlands.xlsx";
case TOTAL_SUSPENDED_SEDIMENT:
return "test/TSS.xlsx";
case CHLOROPHYLL_A:
return "test/Chloro.xlsx";
default:
throw new RuntimeException("Unknown chart type: "+t);
}
}
}