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