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())); + + } + }