< prev index next >

modules/controls/src/test/java/test/javafx/scene/chart/XYChartTestBase.java

Print this page
rev 9945 : 8089755: AreaChart area color change when series is removed

@@ -23,15 +23,18 @@
  * questions.
  */
 
 package test.javafx.scene.chart;
 
+import java.util.HashMap;
+import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
 
 import javafx.scene.Node;
 import javafx.scene.chart.XYChart;
 import javafx.scene.chart.XYChartShim;
+import static org.junit.Assert.assertEquals;
 
 
 public abstract class XYChartTestBase extends ChartTestBase {
 
     protected int countSymbols(XYChart chart, String style) {

@@ -40,6 +43,87 @@
          for (Node n : childrenList) {
             if (n.getStyleClass().contains(style)) numSymbols++;
          }
          return numSymbols;
     }
+
+    ObservableList<XYChart.Series<?, ?>> createTestSeries() {
+        ObservableList<XYChart.Series<?, ?>> list = FXCollections.observableArrayList();
+        for (int i = 0; i != 10; i++) {
+            XYChart.Series<Number, Number> series = new XYChart.Series<>();
+            series.getData().add(new XYChart.Data<>(i*10, i*10));
+            series.getData().add(new XYChart.Data<>(i*20, i*20));
+            series.getData().add(new XYChart.Data<>(i*30, i*30));
+            list.add(series);
+        }
+        return list;
+    }
+
+    abstract void checkSeriesStyleClasses(XYChart.Series<?, ?> series,
+            int seriesIndex, int colorIndex);
+    abstract void checkDataStyleClasses(XYChart.Data<?, ?> data,
+            int seriesIndex, int dataIndex, int colorIndex);
+
+    void checkSeriesRemoveAnimatedStyleClasses(XYChart chart, int nodesPerSeries, int fadeOutTime) {
+        ObservableList<XYChart.Series<?, ?>> series = createTestSeries();
+        int seriesSize = series.size();
+        HashMap<XYChart.Series<?, ?>, Integer> seriesColors = new HashMap<>();
+        for (int i = 0; i != seriesSize; i++) {
+            XYChart.Series<?, ?> s = series.get(i);
+            seriesColors.put(s, i % 8);
+        }
+        chart.getData().addAll(series);
+        pulse();
+        assertEquals(nodesPerSeries * seriesSize, XYChartShim.getPlotChildren(chart).size());
+        for (int i = 0; i != seriesSize; i++) {
+            XYChart.Series<?, ?> s = series.get(i);
+            int colorIndex = seriesColors.get(s);
+            checkSeriesStyleClasses(s, i, colorIndex);
+            for (int j = 0; j != s.getData().size(); j++) {
+                checkDataStyleClasses(s.getData().get(j), i, j, colorIndex);
+            }
+        }
+
+        chart.setAnimated(true);
+        chart.getData().remove(1);
+        toolkit.setAnimationTime(fadeOutTime/2);
+        assertEquals(nodesPerSeries * seriesSize, XYChartShim.getPlotChildren(chart).size());
+        // colors shouldn't change
+        // data index should change
+        for (int i = 0; i != seriesSize; i++) {
+            XYChart.Series<?, ?> s = series.get(i);
+            int seriesIndex = chart.getData().indexOf(s);
+            int seriesStyleIndex = seriesIndex == -1 ? i : seriesIndex;
+            int colorIndex = seriesColors.get(s);
+            checkSeriesStyleClasses(s, seriesStyleIndex, seriesColors.get(s));
+            for (int j = 0; j != s.getData().size(); j++) {
+                checkDataStyleClasses(s.getData().get(j), seriesStyleIndex, j, colorIndex);
+            }
+        }
+
+        toolkit.setAnimationTime(fadeOutTime);
+        assertEquals(nodesPerSeries * (seriesSize - 1), XYChartShim.getPlotChildren(chart).size());
+        for (int i = 0; i != seriesSize; i++) {
+            XYChart.Series<?, ?> s = series.get(i);
+            int seriesIndex = chart.getData().indexOf(s);
+            int seriesStyleIndex = seriesIndex == -1 ? i : seriesIndex;
+            int colorIndex = seriesColors.get(s);
+            checkSeriesStyleClasses(s, seriesStyleIndex, seriesColors.get(s));
+            for (int j = 0; j != s.getData().size(); j++) {
+                checkDataStyleClasses(s.getData().get(j), seriesStyleIndex, j, colorIndex);
+            }
+        }
+
+        chart.getData().add(series.get(1));
+        seriesColors.put(series.get(1), 1);
+        toolkit.setAnimationTime(fadeOutTime);
+        assertEquals(nodesPerSeries * seriesSize, XYChartShim.getPlotChildren(chart).size());
+        for (int i = 0; i != seriesSize; i++) {
+            XYChart.Series s = (XYChart.Series) chart.getData().get(i);
+            int colorIndex = seriesColors.get(s);
+            checkSeriesStyleClasses(s, i, colorIndex);
+            for (int j = 0; j != s.getData().size(); j++) {
+                checkDataStyleClasses((XYChart.Data<?, ?>) s.getData().get(j), i, j, colorIndex);
+            }
+        }
+    }
 }
< prev index next >