modules/graphics/src/test/java/com/sun/javafx/css/StyleManagerTest.java
Print this page
rev 6979 : RT-37025: StyleManager failed to remove stylesheet containers that reference children of a parent that is removed from the scene
@@ -125,11 +125,11 @@
public void testSetDefaultUserAgentStyleshseet_String() {
StyleManager sm = StyleManager.getInstance();
sm.setDefaultUserAgentStylesheet("/com/sun/javafx/css/ua0.css");
int index = indexOf(sm.platformUserAgentStylesheetContainers, "/com/sun/javafx/css/ua0.css");
- assertEquals(0,index);
+ assertEquals(0, index);
}
@Test
public void testSetUserAgentStyleshseet_String_Multiple() {
StyleManager sm = StyleManager.getInstance();
@@ -289,10 +289,29 @@
assertEquals(0,index);
}
@Test
+ public void testForgetParent_withStylesheets() {
+
+ Scene scene = new Scene(new Group(new Rectangle(){{ getStyleClass().add("rect"); }}));
+
+ StyleManager sm = StyleManager.getInstance();
+ sm.setDefaultUserAgentStylesheet("/com/sun/javafx/css/ua0.css");
+
+ int index = indexOf(sm.platformUserAgentStylesheetContainers,"/com/sun/javafx/css/ua0.css");
+ assertEquals(0,index);
+
+ sm.forget(scene.getRoot());
+
+ // forgetting the scene should not affect the platform user-agent stylesheets
+ index = indexOf(sm.platformUserAgentStylesheetContainers,"/com/sun/javafx/css/ua0.css");
+ assertEquals(0,index);
+
+ }
+
+ @Test
public void testForgetParent_withSceneUAStylesheet() {
Scene scene = new Scene(new Group(new Rectangle(){{ getStyleClass().add("rect"); }}));
scene.setUserAgentStylesheet("/com/sun/javafx/css/ua1.css");
@@ -344,11 +363,11 @@
index = indexOf(sm.userAgentStylesheetContainers,"/com/sun/javafx/css/ua0.css");
assertEquals(-1, index);
index = indexOf(sm.userAgentStylesheetContainers,"/com/sun/javafx/css/ua1.css");
- assertEquals(0,index);
+ assertEquals(0, index);
index = indexOf(sm.platformUserAgentStylesheetContainers,"/com/sun/javafx/css/ua1.css");
assertEquals(-1, index);
sm.forget(scene0.getRoot());
@@ -453,11 +472,11 @@
StyleManager sm = StyleManager.getInstance();
sm.setDefaultUserAgentStylesheet("/com/sun/javafx/css/ua0.css");
int index = indexOf(sm.platformUserAgentStylesheetContainers,"/com/sun/javafx/css/ua0.css");
- assertEquals(0,index);
+ assertEquals(0, index);
index = indexOf(sm.userAgentStylesheetContainers,"/com/sun/javafx/css/ua0.css");
assertEquals(-1, index);
index = indexOf(sm.userAgentStylesheetContainers,"/com/sun/javafx/css/ua1.css");
@@ -549,11 +568,11 @@
StyleManager sm = StyleManager.getInstance();
sm.setDefaultUserAgentStylesheet("/com/sun/javafx/css/ua0.css");
int index = indexOf(sm.platformUserAgentStylesheetContainers,"/com/sun/javafx/css/ua0.css");
- assertEquals(0,index);
+ assertEquals(0, index);
index = indexOf(sm.userAgentStylesheetContainers,"/com/sun/javafx/css/ua0.css");
assertEquals(-1, index);
index = indexOf(sm.userAgentStylesheetContainers,"/com/sun/javafx/css/ua1.css");
@@ -886,6 +905,57 @@
assertNotNull(container);
}
+ @Test
+ public void testRT_37025() {
+
+ //
+ // The issue in RT-37025 was that the stylesheet container wasn't getting removed even
+ // though the parent had been forgotten. The StyleManager#forget(Parent) method didn't
+ // look to see if _any_ stylesheet container had the parent as a reference.
+ //
+ final StyleManager sm = StyleManager.getInstance();
+
+ // This test needs a bit more complexity to the scene-graph
+ Group group = null;
+ Pane pane = new Pane(
+ new Group(
+ new Pane(
+ // I want these to be a Parent, not a Node
+ new Group(new Pane(){{ getStyleClass().add("rect"); }}),
+ group = new Group(new Pane(){{ getStyleClass().add("rect"); }})
+ )
+ )
+ );
+ pane.getStylesheets().add("/com/sun/javafx/css/ua0.css");
+ group.getStylesheets().add("/com/sun/javafx/css/ua1.css");
+
+ Group root = new Group(pane);
+ Scene scene = new Scene(root);
+
+ root.applyCss();
+
+ assertTrue(sm.stylesheetContainerMap.containsKey("/com/sun/javafx/css/ua0.css"));
+ StyleManager.StylesheetContainer container = sm.stylesheetContainerMap.get("/com/sun/javafx/css/ua0.css");
+ assertEquals(7, container.parentUsers.list.size());
+
+ assertTrue(sm.stylesheetContainerMap.containsKey("/com/sun/javafx/css/ua1.css"));
+ container = sm.stylesheetContainerMap.get("/com/sun/javafx/css/ua1.css");
+ assertEquals(2, container.parentUsers.list.size());
+
+ ((Pane)group.getParent()).getChildren().remove(group);
+
+ assertFalse(sm.stylesheetContainerMap.containsKey("/com/sun/javafx/css/ua1.css"));
+ assertTrue(sm.stylesheetContainerMap.containsKey("/com/sun/javafx/css/ua0.css"));
+ container = sm.stylesheetContainerMap.get("/com/sun/javafx/css/ua0.css");
+ assertEquals(5, container.parentUsers.list.size());
+
+ scene.setRoot(new Group());
+ assertFalse(sm.stylesheetContainerMap.containsKey("/com/sun/javafx/css/ua0.css"));
+ assertFalse(StyleManager.cacheContainerMap.containsKey(root));
+ assertTrue(StyleManager.cacheContainerMap.containsKey(scene.getRoot()));
+
+ }
+
}