1 package com.sun.javafx.css; 2 3 4 import com.sun.javafx.css.Declaration; 5 import com.sun.javafx.css.Rule; 6 import com.sun.javafx.css.Selector; 7 import com.sun.javafx.css.StyleManager; 8 import com.sun.javafx.css.Stylesheet; 9 import javafx.collections.FXCollections; 10 import javafx.collections.ObservableList; 11 import javafx.collections.ObservableSet; 12 import javafx.css.CssMetaData; 13 import javafx.css.PseudoClass; 14 import javafx.css.Styleable; 15 import javafx.scene.paint.Color; 16 import org.junit.Ignore; 17 import org.junit.Test; 18 19 import java.io.FilePermission; 20 import java.lang.reflect.ReflectPermission; 21 import java.net.URL; 22 import java.security.Permission; 23 import java.util.List; 24 import java.util.PropertyPermission; 25 26 import static org.junit.Assert.*; 27 import static org.junit.Assume.*; 28 29 /** 30 * Created by dgrieve on 9/17/14. 31 */ 32 public class StylesheetWithSecurityManagerTest { 33 34 static final Styleable styleable = new Styleable() { 35 @Override 36 public String getTypeSelector() { 37 return "*"; 38 } 39 40 @Override 41 public String getId() { 42 return null; 43 } 44 45 ObservableList<String> styleClasses = FXCollections.observableArrayList("root"); 46 @Override 47 public ObservableList<String> getStyleClass() { 48 return styleClasses; 49 } 50 51 @Override 52 public String getStyle() { 53 return null; 54 } 55 56 @Override 57 public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() { 58 return null; 59 } 60 61 @Override 62 public Styleable getStyleableParent() { 63 return null; 64 } 65 66 @Override 67 public ObservableSet<PseudoClass> getPseudoClassStates() { 68 return FXCollections.<PseudoClass>emptyObservableSet(); 69 } 70 }; 71 72 @Test 73 public void testRT_38395() throws Exception { 74 75 System.setSecurityManager(new TestSecurityManager()); 76 Stylesheet stylesheet = StyleManager.loadStylesheet("com/sun/javafx/scene/control/skin/modena/modena.css"); 77 assertNotNull(stylesheet); 78 79 Color base = null; 80 for(Rule rule : stylesheet.getRules()) { 81 for (Selector s : rule.getSelectors()) { 82 if (s.applies(styleable)) { 83 for(Declaration decl : rule.getDeclarations()) { 84 if ("-fx-base".equals(decl.getProperty())) { 85 base = (Color)decl.getParsedValue().convert(null); 86 } 87 } 88 } 89 } 90 } 91 assertNotNull(base); 92 Color expected = Color.web("#ececec"); 93 assertEquals(expected.getRed(), base.getGreen(), 1E-6); 94 assertEquals(expected.getGreen(), base.getGreen(), 1E-6); 95 assertEquals(expected.getBlue(), base.getBlue(), 1E-6); 96 } 97 98 @Test 99 public void testRT_38395_the_sequel() throws Exception { 100 101 System.setSecurityManager(new TestSecurityManager()); 102 Stylesheet stylesheet = StyleManager.loadStylesheet("com/sun/javafx/css/StylesheetTest.css"); 103 assertNotNull(stylesheet); 104 105 Color hoverBase = null; 106 for(Rule rule : stylesheet.getRules()) { 107 for (Selector s : rule.getSelectors()) { 108 if (s.applies(styleable)) { 109 for(Declaration decl : rule.getDeclarations()) { 110 if ("-fx-hover-base".equals(decl.getProperty())) { 111 hoverBase = (Color)decl.getParsedValue().convert(null); 112 } 113 } 114 } 115 } 116 } 117 assertNotNull(hoverBase); 118 assertEquals(Color.YELLOW.getRed(), hoverBase.getRed(), 1E-6); 119 assertEquals(Color.YELLOW.getGreen(), hoverBase.getGreen(), 1E-6); 120 assertEquals(Color.YELLOW.getBlue(), hoverBase.getBlue(), 1E-6); 121 } 122 123 // 124 // The code in URLConverter that this attempts to test only checks to see whether or not there is a SecurityManager. 125 // 126 static class TestSecurityManager extends SecurityManager { 127 @Override 128 public void checkPermission(Permission perm) { 129 return; 130 } 131 } 132 }