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,135 ****
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);
}
@Test
public void testSetUserAgentStyleshseet_String_Multiple() {
StyleManager sm = StyleManager.getInstance();
--- 125,135 ----
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);
}
@Test
public void testSetUserAgentStyleshseet_String_Multiple() {
StyleManager sm = StyleManager.getInstance();
*** 289,298 ****
--- 289,317 ----
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,354 ****
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);
index = indexOf(sm.platformUserAgentStylesheetContainers,"/com/sun/javafx/css/ua1.css");
assertEquals(-1, index);
sm.forget(scene0.getRoot());
--- 363,373 ----
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);
index = indexOf(sm.platformUserAgentStylesheetContainers,"/com/sun/javafx/css/ua1.css");
assertEquals(-1, index);
sm.forget(scene0.getRoot());
*** 453,463 ****
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);
index = indexOf(sm.userAgentStylesheetContainers,"/com/sun/javafx/css/ua0.css");
assertEquals(-1, index);
index = indexOf(sm.userAgentStylesheetContainers,"/com/sun/javafx/css/ua1.css");
--- 472,482 ----
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);
index = indexOf(sm.userAgentStylesheetContainers,"/com/sun/javafx/css/ua0.css");
assertEquals(-1, index);
index = indexOf(sm.userAgentStylesheetContainers,"/com/sun/javafx/css/ua1.css");
*** 549,559 ****
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);
index = indexOf(sm.userAgentStylesheetContainers,"/com/sun/javafx/css/ua0.css");
assertEquals(-1, index);
index = indexOf(sm.userAgentStylesheetContainers,"/com/sun/javafx/css/ua1.css");
--- 568,578 ----
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);
index = indexOf(sm.userAgentStylesheetContainers,"/com/sun/javafx/css/ua0.css");
assertEquals(-1, index);
index = indexOf(sm.userAgentStylesheetContainers,"/com/sun/javafx/css/ua1.css");
*** 886,891 ****
--- 905,961 ----
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()));
+
+ }
+
}