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 }