mirror of https://github.com/apache/poi.git
Add test to remove chart data series
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1870602 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
2a982f62ec
commit
bb90cfccf0
|
@ -99,7 +99,7 @@ public abstract class XDDFChartData {
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public List<Series> getSeries() {
|
public List<Series> getSeries() {
|
||||||
return series;
|
return Collections.unmodifiableList(series);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final int getSeriesCount() {
|
public final int getSeriesCount() {
|
||||||
|
|
|
@ -0,0 +1,191 @@
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
package org.apache.poi.xddf.usermodel.chart;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFDrawing;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test case for bug 63153
|
||||||
|
*/
|
||||||
|
public class TestXDDFChartRemoveSeries {
|
||||||
|
final File resultDir = new File("build/custom-reports-test");
|
||||||
|
String procName = null;
|
||||||
|
String fileName = null;
|
||||||
|
XSSFWorkbook workbook = null;
|
||||||
|
XSSFSheet sheet = null;
|
||||||
|
XDDFScatterChartData chartData = null;
|
||||||
|
XDDFChart chart = null;
|
||||||
|
final int MAX_NUM_SERIES = 1;
|
||||||
|
|
||||||
|
public TestXDDFChartRemoveSeries() {
|
||||||
|
resultDir.mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This creates a workbook with one worksheet, which contains a single
|
||||||
|
* scatter chart.
|
||||||
|
*/
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
final boolean bDebug = false;
|
||||||
|
workbook = new XSSFWorkbook();
|
||||||
|
sheet = workbook.createSheet();
|
||||||
|
|
||||||
|
final XSSFDrawing xssfDrawing = sheet.createDrawingPatriarch();
|
||||||
|
final XSSFClientAnchor anchor = xssfDrawing.createAnchor(0, 0, 0, 0, 1, 5, 20, 20);
|
||||||
|
if (bDebug) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
chart = xssfDrawing.createChart(anchor);
|
||||||
|
final XDDFValueAxis bottomAxis = chart.createValueAxis(AxisPosition.BOTTOM);
|
||||||
|
final XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
|
||||||
|
|
||||||
|
// Initialize data data sources
|
||||||
|
|
||||||
|
final Double dX[] = new Double[5];
|
||||||
|
final Double dY1[] = new Double[5];
|
||||||
|
final Double dY2[] = new Double[5];
|
||||||
|
|
||||||
|
for (int n = 0; n < 5; ++n) {
|
||||||
|
dX[n] = (double) n;
|
||||||
|
dY1[n] = 2.0 * n;
|
||||||
|
dY2[n] = (double) (n * n);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
final XDDFNumericalDataSource<Double> xData = XDDFDataSourcesFactory.fromArray(dX, null);
|
||||||
|
final XDDFNumericalDataSource<Double> yData1 = XDDFDataSourcesFactory.fromArray(dY1, null);
|
||||||
|
final XDDFNumericalDataSource<Double> yData2 = XDDFDataSourcesFactory.fromArray(dY2, null);
|
||||||
|
|
||||||
|
// Create the chartdata
|
||||||
|
|
||||||
|
chartData = (XDDFScatterChartData) chart.createData(ChartTypes.SCATTER, bottomAxis, leftAxis);
|
||||||
|
|
||||||
|
// Add the series
|
||||||
|
|
||||||
|
chartData.addSeries(xData, yData1);
|
||||||
|
chartData.addSeries(xData, yData2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method writes the workbook to resultDir/fileName.
|
||||||
|
*/
|
||||||
|
@After
|
||||||
|
public void cleanup() {
|
||||||
|
if (workbook == null) {
|
||||||
|
System.out.println(String.format(Locale.ROOT, "%s: workbook==null", procName));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fileName == null) {
|
||||||
|
System.out.println(String.format(Locale.ROOT, "%s: fileName==null", procName));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Finish up
|
||||||
|
chart.plot(chartData);
|
||||||
|
final int index = workbook.getSheetIndex(sheet);
|
||||||
|
workbook.setSelectedTab(index);
|
||||||
|
workbook.setActiveSheet(index);
|
||||||
|
workbook.setFirstVisibleTab(index);
|
||||||
|
|
||||||
|
final File file = new File(resultDir, fileName);
|
||||||
|
try (OutputStream fileOut = new FileOutputStream(file)) {
|
||||||
|
workbook.write(fileOut);
|
||||||
|
System.out.println(
|
||||||
|
String.format(Locale.ROOT, "%s: test file written to %s", procName, file.getAbsolutePath()));
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.err.println(e.getMessage());
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
workbook.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the first series by calling chartData.getSeries().remove(0).
|
||||||
|
* <p>
|
||||||
|
* This used to corrupt the workbook but the returned <code>List</code> is unmodifiable.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testRemoveSeries0() {
|
||||||
|
procName = "testRemoveSeries0";
|
||||||
|
fileName = procName + ".xlsx";
|
||||||
|
|
||||||
|
try {
|
||||||
|
chartData.getSeries().remove(0);
|
||||||
|
} catch (UnsupportedOperationException uoe) {
|
||||||
|
assertEquals(2, chartData.getSeriesCount());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the first series by calling chartData.removeSeries(0).
|
||||||
|
* <p>
|
||||||
|
* This will not corrupt the workbook.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testBugFixRemoveSeries0() {
|
||||||
|
procName = "testBugFixRemoveSeries0";
|
||||||
|
fileName = procName + ".xlsx";
|
||||||
|
|
||||||
|
chartData.removeSeries(0);
|
||||||
|
assertEquals(1, chartData.getSeriesCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the second series by calling chartData.removeSeries(1).
|
||||||
|
* <p>
|
||||||
|
* This will not corrupt the workbook.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testBugFixRemoveSeries1() {
|
||||||
|
procName = "testBugFixRemoveSeries1";
|
||||||
|
fileName = procName + ".xlsx";
|
||||||
|
|
||||||
|
chartData.removeSeries(1);
|
||||||
|
assertEquals(1, chartData.getSeriesCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Do not remove any series from the chart.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testDontRemoveSeries() {
|
||||||
|
procName = "testDontRemoveSeries";
|
||||||
|
fileName = procName + ".xlsx";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue