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
|
||||
public List<Series> getSeries() {
|
||||
return series;
|
||||
return Collections.unmodifiableList(series);
|
||||
}
|
||||
|
||||
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