Author: abearez
Date: Sat Nov 30 01:20:16 2019
New Revision: 1870602

URL: http://svn.apache.org/viewvc?rev=1870602&view=rev
Log:
Add test to remove chart data series

Added:
    
poi/trunk/src/ooxml/testcases/org/apache/poi/xddf/usermodel/chart/TestXDDFChartRemoveSeries.java
Modified:
    
poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java

Modified: 
poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java?rev=1870602&r1=1870601&r2=1870602&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java 
(original)
+++ 
poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java 
Sat Nov 30 01:20:16 2019
@@ -99,7 +99,7 @@ public abstract class XDDFChartData {
      */
     @Deprecated
     public List<Series> getSeries() {
-        return series;
+        return Collections.unmodifiableList(series);
     }
 
     public final int getSeriesCount() {

Added: 
poi/trunk/src/ooxml/testcases/org/apache/poi/xddf/usermodel/chart/TestXDDFChartRemoveSeries.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xddf/usermodel/chart/TestXDDFChartRemoveSeries.java?rev=1870602&view=auto
==============================================================================
--- 
poi/trunk/src/ooxml/testcases/org/apache/poi/xddf/usermodel/chart/TestXDDFChartRemoveSeries.java
 (added)
+++ 
poi/trunk/src/ooxml/testcases/org/apache/poi/xddf/usermodel/chart/TestXDDFChartRemoveSeries.java
 Sat Nov 30 01:20:16 2019
@@ -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";
+    }
+
+}
\ No newline at end of file



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@poi.apache.org
For additional commands, e-mail: commits-h...@poi.apache.org

Reply via email to