1 /*
   2  * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package javafx.scene.effect;
  27 
  28 import static com.sun.javafx.test.TestHelper.box;
  29 import static org.junit.Assert.assertEquals;
  30 import static org.junit.Assert.assertNull;
  31 import javafx.beans.property.DoubleProperty;
  32 import javafx.beans.property.SimpleDoubleProperty;
  33 import javafx.scene.paint.Color;
  34 
  35 import org.junit.Before;
  36 import org.junit.Test;
  37 
  38 import com.sun.scenario.effect.AbstractShadow.ShadowMode;
  39 import com.sun.scenario.effect.Color4f;
  40 
  41 public class InnerShadowTest extends EffectsTestBase {
  42     private InnerShadow effect;
  43     private static final Color4f red =  new Color4f(
  44                 (float) Color.RED.getRed(),
  45                 (float) Color.RED.getGreen(),
  46                 (float) Color.RED.getBlue(),
  47                 (float) Color.RED.getOpacity()
  48                 );
  49     private static final Color4f black =  new Color4f(
  50                 (float) Color.BLACK.getRed(),
  51                 (float) Color.BLACK.getGreen(),
  52                 (float) Color.BLACK.getBlue(),
  53                 (float) Color.BLACK.getOpacity()
  54                 );
  55 
  56     @Before
  57     public void setUp() {
  58         effect = new InnerShadow();
  59         setupTest(effect);
  60     }
  61 
  62     @Test
  63     public void testSetBlurType() {
  64         // try setting correct value
  65         effect.setBlurType(BlurType.ONE_PASS_BOX);
  66         assertEquals(BlurType.ONE_PASS_BOX, effect.getBlurType());
  67         pulse();
  68         assertEquals(ShadowMode.ONE_PASS_BOX, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getShadowMode());
  69 
  70         effect.setBlurType(BlurType.TWO_PASS_BOX);
  71         assertEquals(BlurType.TWO_PASS_BOX, effect.getBlurType());
  72         pulse();
  73         assertEquals(ShadowMode.TWO_PASS_BOX, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getShadowMode());
  74 
  75         effect.setBlurType(BlurType.THREE_PASS_BOX);
  76         assertEquals(BlurType.THREE_PASS_BOX, effect.getBlurType());
  77         pulse();
  78         assertEquals(ShadowMode.THREE_PASS_BOX, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getShadowMode());
  79 
  80         effect.setBlurType(BlurType.GAUSSIAN);
  81         assertEquals(BlurType.GAUSSIAN, effect.getBlurType());
  82         pulse();
  83         assertEquals(ShadowMode.GAUSSIAN, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getShadowMode());
  84     }
  85 
  86     @Test
  87     public void testDefaultBlurType() {
  88         // default value should be BlurType.THREE_PASS_BOX
  89         assertEquals(BlurType.THREE_PASS_BOX, effect.getBlurType());
  90         assertEquals(BlurType.THREE_PASS_BOX, effect.blurTypeProperty().get());
  91         pulse();
  92         assertEquals(ShadowMode.THREE_PASS_BOX, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getShadowMode());
  93     }
  94 
  95     @Test
  96     public void testNullBlurType() {
  97         // null should default to BlurType.THREE_PASS_BOX in render tree
  98         effect.setBlurType(null);
  99         assertNull(effect.getBlurType());
 100         assertNull(effect.blurTypeProperty().get());
 101         pulse();
 102         assertEquals(ShadowMode.THREE_PASS_BOX, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getShadowMode());
 103     }
 104 
 105     @Test
 106     public void testSetColor() {
 107         // try setting correct value
 108         effect.setColor(Color.RED);
 109         assertEquals(Color.RED, effect.getColor());
 110         pulse();
 111         Color4f actual = ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getColor();
 112         assertColor4fEquals(red, actual);
 113     }
 114 
 115     @Test
 116     public void testDefaultColor() {
 117         // default value should be Color.BLACK
 118         assertEquals(Color.BLACK, effect.getColor());
 119         assertEquals(Color.BLACK, effect.colorProperty().get());
 120         pulse();
 121         Color4f actual = ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getColor();
 122         assertColor4fEquals(black, actual);
 123     }
 124 
 125     @Test
 126     public void testNullColor() {
 127         // null color should default to Color.BLACK in render tree
 128         effect.setColor(null);
 129         assertNull(effect.getColor());
 130         assertNull(effect.colorProperty().get());
 131         pulse();
 132         Color color = Color.BLACK;
 133         Color4f black = new Color4f((float) color.getRed(), (float) color.getGreen(),
 134                 (float) color.getBlue(), (float) color.getOpacity());
 135         Color4f actual = ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getColor();
 136         assertColor4fEquals(black, actual);
 137     }
 138 
 139     @Test
 140     public void testSetWidth() {
 141         // try setting correct value
 142         effect.setWidth(9.0f);
 143         assertEquals(9.0f, effect.getWidth(), 1e-100);
 144         pulse();
 145         assertEquals(9.0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianWidth(), 1e-100);
 146         // test that radius changed appropriately
 147         // radius = (((width + height)/2) -1) /2
 148         assertEquals(7.0f, effect.getRadius(), 1e-100);
 149     }
 150 
 151     @Test
 152     public void testDefaultWidth() {
 153         // default value should be 21
 154         assertEquals(21f, effect.getWidth(), 1e-100);
 155         assertEquals(21f, effect.widthProperty().get(), 1e-100);
 156         pulse();
 157         assertEquals(21f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianWidth(), 1e-100);
 158     }
 159 
 160     @Test
 161     public void testMinWidth() {
 162         // 0 should be ok
 163         effect.setWidth(0);
 164         // try setting value smaller than minimal
 165         effect.setWidth(-0.1f);
 166         assertEquals(-0.1f, effect.getWidth(), 1e-100);
 167         pulse();
 168         assertEquals(0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianWidth(), 1e-100);        
 169     }
 170 
 171     @Test
 172     public void testMaxWidth() {
 173         // 255 should be ok
 174         effect.setWidth(255);
 175         // try setting value greater than maximal
 176         effect.setWidth(255.1f);
 177         assertEquals(255.1f, effect.getWidth(), 1e-100);
 178         pulse();
 179         assertEquals(255f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianWidth(), 1e-100);              
 180     }
 181 
 182     @Test
 183     public void testSetHeight() {
 184         // try setting correct value
 185         effect.setHeight(9.0f);
 186         assertEquals(9.0f, effect.getHeight(), 1e-100);
 187         pulse();
 188         assertEquals(9.0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianHeight(), 1e-100);
 189         // check that radius changed appropriately
 190         // radius = (((width + height)/2) -1) /2        
 191         assertEquals(7.0f, effect.getRadius(), 1e-100);
 192     }
 193 
 194     @Test
 195     public void testDefaultHeight() {
 196         // default value should be 21
 197         assertEquals(21f, effect.getHeight(), 1e-100);
 198         assertEquals(21f, effect.heightProperty().get(), 1e-100);
 199         pulse();
 200         assertEquals(21f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianHeight(), 1e-100);
 201     }
 202 
 203     @Test
 204     public void testMinHeight() {
 205         // 0 should be ok
 206         effect.setHeight(0);
 207         // try setting value smaller than minimal
 208         effect.setHeight(-0.1f);
 209         assertEquals(-0.1f, effect.getHeight(), 1e-100);
 210         pulse();
 211         assertEquals(0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianHeight(), 1e-100);       
 212     }
 213 
 214     @Test
 215     public void testMaxHeight() {
 216         // 255 should be ok
 217         effect.setHeight(1);
 218         // try setting value greater than maximal
 219         effect.setHeight(255.1f);
 220         assertEquals(255.1f, effect.getHeight(), 1e-100);
 221         pulse();
 222         assertEquals(255f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianHeight(), 1e-100);               
 223     }
 224 
 225     @Test
 226     public void testSetRadius() {
 227         // try setting correct value
 228         effect.setRadius(4.0f);
 229         assertEquals(4.0f, effect.getRadius(), 1e-100);
 230         pulse();
 231         assertEquals(4.0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getRadius(), 1e-100);
 232         // test that width and height changed appropriately
 233         assertEquals(9.0f, effect.getHeight(), 1e-100);
 234         assertEquals(9.0f, effect.getWidth(), 1e-100);
 235     }
 236 
 237     @Test
 238     public void testDefaultRadius() {
 239         // default value should be 10
 240         assertEquals(10f, effect.getRadius(), 1e-100);
 241         assertEquals(10f, effect.radiusProperty().get(), 1e-100);
 242         pulse();
 243         assertEquals(10f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getRadius(), 1e-100);
 244     }
 245 
 246     @Test
 247     public void testMinRadius() {
 248         // 0 should be ok
 249         effect.setRadius(0);
 250         // try setting value smaller than minimal
 251         effect.setRadius(-0.1f);
 252         assertEquals(-0.1f, effect.getRadius(), 1e-100);
 253         pulse();
 254         assertEquals(0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getRadius(), 1e-100);        
 255     }
 256 
 257     @Test
 258     public void testMaxRadius() {
 259         // 127 should be ok
 260         effect.setRadius(127);
 261         // try setting value greater than maximal
 262         effect.setRadius(127.1f);
 263         assertEquals(127.1f, effect.getRadius(), 1e-100);
 264         pulse();
 265         assertEquals(127f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getRadius(), 1e-100);                
 266     }
 267 
 268     @Test
 269     public void testRadiusNotNegative() {
 270         effect.setHeight(0.1f);
 271         effect.setWidth(0.1f);
 272         // radius should be 0, not negative
 273         assertEquals(0f, effect.getRadius(), 1e-100);
 274         pulse();
 275         assertEquals(0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getRadius(), 1e-100);
 276 
 277         effect.setWidth(0.2f);
 278         effect.setHeight(0.2f);
 279         // radius should be 0, not negative
 280         assertEquals(0f, effect.getRadius(), 1e-100);
 281         pulse();
 282         assertEquals(0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getRadius(), 1e-100);
 283     }
 284 
 285     @Test
 286     public void testSetChoke() {
 287         // try setting correct value
 288         effect.setChoke(1.0f);
 289         assertEquals(1.0f, effect.getChoke(), 1e-100);
 290         pulse();
 291         assertEquals(1.0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getChoke(), 1e-100);
 292     }
 293 
 294     @Test
 295     public void testDefaultChoke() {
 296         // default value should be 0
 297         assertEquals(0f, effect.getChoke(), 1e-100);
 298         assertEquals(0f, effect.chokeProperty().get(), 1e-100);
 299         pulse();
 300         assertEquals(0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getChoke(), 1e-100);
 301     }
 302 
 303     @Test
 304     public void testMinChoke() {
 305         // 0 should be ok
 306         effect.setChoke(0);
 307         // try setting value smaller than minimal
 308         effect.setChoke(-0.1f);
 309         assertEquals(-0.1f, effect.getChoke(), 1e-100);
 310         pulse();
 311         assertEquals(0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getChoke(), 1e-100);        
 312     }
 313 
 314     @Test
 315     public void testMaxChoke() {
 316         // 1 should be ok
 317         effect.setChoke(1);
 318         // try setting value greater than maximal
 319         effect.setChoke(1.1f);
 320         assertEquals(1.1f, effect.getChoke(), 1e-100);
 321         pulse();
 322         assertEquals(1f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getChoke(), 1e-100);
 323    }
 324 
 325     @Test
 326     public void testSetOffsetX() {
 327         // try setting correct value
 328         effect.setOffsetX(1.0f);
 329         assertEquals(1.0f, effect.getOffsetX(), 1e-100);
 330         pulse();
 331         assertEquals(1.0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getOffsetX(), 1e-100);
 332     }
 333 
 334     @Test
 335     public void testDefaultOffsetX() {
 336         // default value should be 0
 337         assertEquals(0f, effect.getOffsetX(), 1e-100);
 338         assertEquals(0f, effect.offsetXProperty().get(), 1e-100);
 339         pulse();
 340         assertEquals(0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getOffsetX(), 1e-100);
 341     }
 342 
 343     @Test
 344     public void testSetOffsetY() {
 345         // try setting correct value
 346         effect.setOffsetY(1.0f);
 347         assertEquals(1.0f, effect.getOffsetY(), 1e-100);
 348         pulse();
 349         assertEquals(1.0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getOffsetY(), 1e-100);
 350     }
 351 
 352     @Test
 353     public void testDefaultOffsetY() {
 354         // default value should be 0
 355         assertEquals(0f, effect.getOffsetY(), 1e-100);
 356         assertEquals(0f, effect.offsetYProperty().get(), 1e-100);
 357         pulse();
 358         assertEquals(0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getOffsetY(), 1e-100);
 359     }
 360 
 361     @Test
 362     public void testCreateWithParams2() {
 363         effect = new InnerShadow(4, Color.RED);
 364         setEffect(effect);
 365         assertEquals(4, effect.getRadius(), 1e-100);
 366         assertEquals(Color.RED, effect.getColor());
 367         // test that width and height changed appropriately
 368         assertEquals(9, effect.getHeight(), 1e-100);
 369         assertEquals(9, effect.getWidth(), 1e-100);
 370 
 371         pulse();
 372         assertEquals(4, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getRadius(), 1e-100);
 373         assertEquals(9, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianWidth(), 1e-100);
 374         assertEquals(9, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianHeight(), 1e-100);
 375         Color4f actual = ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getColor();
 376         assertColor4fEquals(red, actual);
 377     }
 378 
 379     @Test
 380     public void testCreateWithParams4() {
 381         effect = new InnerShadow(4, 1, 1, Color.RED);
 382         setEffect(effect);
 383         assertEquals(4, effect.getRadius(), 1e-100);
 384         assertEquals(1, effect.getOffsetX(), 1e-100);
 385         assertEquals(1, effect.getOffsetY(), 1e-100);
 386         assertEquals(Color.RED, effect.getColor());
 387 
 388         // test that width and height changed appropriately
 389         assertEquals(9, effect.getHeight(), 1e-100);
 390         assertEquals(9, effect.getWidth(), 1e-100);
 391 
 392         pulse();
 393         
 394         assertEquals(4, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getRadius(), 1e-100);
 395         assertEquals(9, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianWidth(), 1e-100);
 396         assertEquals(9, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianHeight(), 1e-100);
 397         assertEquals(1, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getOffsetX(), 1e-100);
 398         assertEquals(1, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getOffsetY(), 1e-100);
 399 
 400         Color4f actual = ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getColor();
 401         assertColor4fEquals(red, actual);
 402     }
 403     
 404     @Test
 405     public void testCreateWithParams6() {
 406         effect = new InnerShadow(BlurType.GAUSSIAN, Color.RED, 4, 0.5, 1, 2);
 407         setupTest(effect);
 408         assertEquals(1, effect.getOffsetX(), 1e-100);
 409         assertEquals(2, effect.getOffsetY(), 1e-100);
 410         assertEquals(4, effect.getRadius(), 1e-100);
 411         assertEquals(0.5, effect.getChoke(), 1e-100);
 412         assertEquals(Color.RED, effect.getColor());
 413         assertEquals(BlurType.GAUSSIAN, effect.getBlurType());
 414         // test that width and height changed appropriately
 415         assertEquals(9, effect.getHeight(), 1e-100);
 416         assertEquals(9, effect.getWidth(), 1e-100);
 417         pulse();
 418         assertEquals(4f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianRadius(), 1e-100);
 419         assertEquals(0.5f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getChoke(), 1e-100);
 420         assertEquals(1f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getOffsetX(), 1e-100);
 421         assertEquals(2f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getOffsetY(), 1e-100);
 422         assertEquals(ShadowMode.GAUSSIAN, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getShadowMode());
 423         Color4f actual = ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getColor();
 424         assertColor4fEquals(red, actual);
 425     }
 426 
 427     @Test
 428     public void testCreateWithDefaultParams2() {
 429         effect = new InnerShadow(10, Color.BLACK);
 430         setEffect(effect);
 431         assertEquals(10, effect.getRadius(), 1e-100);
 432         assertEquals(Color.BLACK, effect.getColor());
 433         // test that width and height changed appropriately
 434         assertEquals(21, effect.getHeight(), 1e-100);
 435         assertEquals(21, effect.getWidth(), 1e-100);
 436 
 437         pulse();
 438         assertEquals(10f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getRadius(), 1e-100);
 439         assertEquals(21f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianWidth(), 1e-100);
 440         assertEquals(21f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianHeight(), 1e-100);
 441         Color4f actual = ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getColor();
 442         assertColor4fEquals(black, actual);
 443     }
 444 
 445     @Test
 446     public void testCreateWithDefaultParams4() {
 447         effect = new InnerShadow(10, 0, 0, Color.BLACK);
 448         setEffect(effect);
 449         assertEquals(10, effect.getRadius(), 1e-100);
 450         assertEquals(0, effect.getOffsetX(), 1e-100);
 451         assertEquals(0, effect.getOffsetY(), 1e-100);
 452         assertEquals(Color.BLACK, effect.getColor());
 453 
 454         // test that width and height changed appropriately
 455         assertEquals(21, effect.getHeight(), 1e-100);
 456         assertEquals(21, effect.getWidth(), 1e-100);
 457 
 458         pulse();
 459         
 460         assertEquals(10f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getRadius(), 1e-100);
 461         assertEquals(21f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianWidth(), 1e-100);
 462         assertEquals(21f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianHeight(), 1e-100);
 463         assertEquals(0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getOffsetX(), 1e-100);
 464         assertEquals(0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getOffsetY(), 1e-100);
 465 
 466         Color4f actual = ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getColor();
 467         assertColor4fEquals(black, actual);
 468     }
 469     
 470     @Test
 471     public void testCreateWithDefaultParams6() {
 472         effect = new InnerShadow(BlurType.THREE_PASS_BOX, Color.BLACK, 10, 0, 0, 0);
 473         setupTest(effect);
 474         assertEquals(0, effect.getOffsetX(), 1e-100);
 475         assertEquals(0, effect.getOffsetY(), 1e-100);
 476         assertEquals(10, effect.getRadius(), 1e-100);
 477         assertEquals(0, effect.getChoke(), 1e-100);
 478         assertEquals(Color.BLACK, effect.getColor());
 479         assertEquals(BlurType.THREE_PASS_BOX, effect.getBlurType());
 480         // test that width and height changed appropriately
 481         assertEquals(21, effect.getHeight(), 1e-100);
 482         assertEquals(21, effect.getWidth(), 1e-100);
 483         pulse();
 484         assertEquals(10f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianRadius(), 1e-100);
 485         assertEquals(0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getChoke(), 1e-100);
 486         assertEquals(0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getOffsetX(), 1e-100);
 487         assertEquals(0f, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getOffsetY(), 1e-100);
 488         assertEquals(ShadowMode.THREE_PASS_BOX, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getShadowMode());
 489         Color4f actual = ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getColor();
 490         assertColor4fEquals(black, actual);
 491     }
 492 
 493     @Test
 494     public void testHeightSynced() throws Exception {
 495         checkDoublePropertySynced(
 496                 "javafx.scene.effect.InnerShadow", "height",
 497                 "com.sun.scenario.effect.InnerShadow", "gaussianHeight", 9);
 498         assertEquals(7, effect.getRadius(), 1e-100);
 499     }
 500 
 501     @Test
 502     public void testWidthSynced() throws Exception {
 503         checkDoublePropertySynced(
 504                 "javafx.scene.effect.InnerShadow", "width",
 505                 "com.sun.scenario.effect.InnerShadow", "gaussianWidth", 9);
 506         assertEquals(7, effect.getRadius(), 1e-100);
 507     }
 508 
 509     @Test
 510     public void testBlurTypeSynced() throws Exception {
 511         checkObjectPropertySynced(
 512                 "javafx.scene.effect.InnerShadow", "blurType",
 513                 "com.sun.scenario.effect.InnerShadow", "shadowMode",
 514                 BlurType.TWO_PASS_BOX, ShadowMode.TWO_PASS_BOX,
 515                 BlurType.GAUSSIAN);
 516     }
 517 
 518     @Test
 519     public void testOffsetXSynced() throws Exception {
 520         checkDoublePropertySynced(
 521                 "javafx.scene.effect.InnerShadow", "offsetX",
 522                 "com.sun.scenario.effect.InnerShadow", "offsetX", 10);
 523     }
 524 
 525     @Test
 526     public void testOffsetYSynced() throws Exception {
 527         checkDoublePropertySynced(
 528                 "javafx.scene.effect.InnerShadow", "offsetY",
 529                 "com.sun.scenario.effect.InnerShadow", "offsetY", 10);
 530     }
 531 
 532     @Test
 533     public void testRadiusSynced() throws Exception {
 534         checkDoublePropertySynced(
 535                 "javafx.scene.effect.InnerShadow", "radius",
 536                 "com.sun.scenario.effect.InnerShadow", "radius", 4);
 537         assertEquals(9, effect.getHeight(), 1e-100);
 538         assertEquals(9, effect.getWidth(), 1e-100);
 539     }
 540 
 541     @Test
 542     public void testChokeSynced() throws Exception {
 543         checkDoublePropertySynced(
 544                 "javafx.scene.effect.InnerShadow", "choke",
 545                 "com.sun.scenario.effect.InnerShadow", "choke", 0.3);
 546     }
 547 
 548     @Test
 549     public void testInputSynced() throws Exception {
 550         BoxBlur blur = new BoxBlur();
 551         checkEffectPropertySynced(
 552                 "javafx.scene.effect.InnerShadow", "input",
 553                 "com.sun.scenario.effect.InnerShadow", "contentInput",
 554                 blur, (com.sun.scenario.effect.BoxBlur)blur.impl_getImpl());
 555     }
 556 
 557     @Test
 558     public void testColorSynced() throws Exception {
 559         Color4f result = (Color4f) getObjectPropertySynced(
 560                 "javafx.scene.effect.InnerShadow", "color",
 561                 "com.sun.scenario.effect.InnerShadow", "color",
 562                 Color.RED);
 563         assertColor4fEquals(red, result);
 564     }
 565 
 566     // test whether width/height are changing correctly if radius is bound
 567     // and one of them is changed
 568     @Test
 569     public void testRadiusBound() throws Exception {
 570         DoubleProperty boundRadius = new SimpleDoubleProperty();
 571 
 572         effect.radiusProperty().bind(boundRadius);
 573 
 574         boundRadius.set(4);
 575         effect.setWidth(9);
 576 
 577         assertEquals(9, effect.getHeight(), 1e-100);
 578         pulse();
 579         assertEquals(9, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianHeight(), 1e-100);
 580         assertEquals(9, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianWidth(), 1e-100);
 581         assertEquals(4, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianRadius(), 1e-100);
 582 
 583         effect.setHeight(3);
 584         assertEquals(15, effect.getWidth(), 1e-100);
 585         pulse();
 586         assertEquals(15, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianWidth(), 1e-100);
 587     }
 588 
 589     // test whether width/radius are changing correctly if height is bound
 590     // and one of them is changed    
 591     @Test
 592     public void testHeightBound() throws Exception {
 593         DoubleProperty boundHeight = new SimpleDoubleProperty();
 594 
 595         effect.heightProperty().bind(boundHeight);
 596 
 597         boundHeight.set(9);
 598         effect.setRadius(4);
 599 
 600         assertEquals(9, effect.getWidth(), 1e-100);
 601         pulse();
 602         assertEquals(9, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianHeight(), 1e-100);
 603         assertEquals(9, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianWidth(), 1e-100);
 604         assertEquals(4, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianRadius(), 1e-100);
 605 
 606         effect.setWidth(3);
 607         assertEquals(2.5, effect.getRadius(), 1e-100);
 608     }
 609 
 610     // test whether height/radius are changing correctly if width is bound
 611     // and one of them is changed
 612     @Test
 613     public void testWidthBound() throws Exception {
 614         DoubleProperty boundWidth = new SimpleDoubleProperty();
 615 
 616         effect.widthProperty().bind(boundWidth);
 617 
 618         boundWidth.set(9);
 619         effect.setRadius(4);
 620 
 621         assertEquals(9, effect.getHeight(), 1e-100);
 622         pulse();
 623         assertEquals(9, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianHeight(), 1e-100);
 624         assertEquals(9, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianWidth(), 1e-100);
 625         assertEquals(4, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianRadius(), 1e-100);
 626 
 627         effect.setHeight(3);
 628         assertEquals(2.5, effect.getRadius(), 1e-100);
 629     }
 630 
 631     // Test for special cases when 2 of width, height, radius are bound
 632     @Test
 633     public void testRadiusWidthBound() throws Exception {
 634         DoubleProperty boundRadius = new SimpleDoubleProperty();
 635         DoubleProperty boundWidth = new SimpleDoubleProperty();
 636 
 637         effect.radiusProperty().bind(boundRadius);
 638         effect.widthProperty().bind(boundWidth);
 639 
 640         boundRadius.set(4);
 641         boundWidth.set(9);
 642 
 643         assertEquals(9, effect.getHeight(), 1e-100);
 644         pulse();
 645         assertEquals(9, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianHeight(), 1e-100);
 646         assertEquals(9, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianWidth(), 1e-100);
 647         assertEquals(4, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianRadius(), 1e-100);
 648 
 649         // set radius once again to be sure that the order of calls is not
 650         // important
 651         boundRadius.set(7);
 652         assertEquals(21, effect.getHeight(), 1e-100);
 653         pulse();
 654         assertEquals(21, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianHeight(), 1e-100);
 655     }
 656 
 657     @Test
 658     public void testRadiusHeightBound() throws Exception {
 659         DoubleProperty boundRadius = new SimpleDoubleProperty();
 660         DoubleProperty boundHeight = new SimpleDoubleProperty();
 661 
 662         effect.radiusProperty().bind(boundRadius);
 663         effect.heightProperty().bind(boundHeight);
 664 
 665         boundRadius.set(4);
 666         boundHeight.set(9);
 667 
 668         assertEquals(9, effect.getWidth(), 1e-100);
 669         pulse();
 670         assertEquals(9, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianHeight(), 1e-100);
 671         assertEquals(9, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianWidth(), 1e-100);
 672         assertEquals(4, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianRadius(), 1e-100);
 673 
 674         boundRadius.set(7);
 675         assertEquals(21, effect.getWidth(), 1e-100);
 676         pulse();
 677         assertEquals(21, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianWidth(), 1e-100);
 678     }
 679 
 680     @Test
 681     public void testWidthHeightBound() throws Exception {
 682         DoubleProperty boundWidth = new SimpleDoubleProperty();
 683         DoubleProperty boundHeight = new SimpleDoubleProperty();
 684 
 685         effect.widthProperty().bind(boundWidth);
 686         effect.heightProperty().bind(boundHeight);
 687 
 688         boundHeight.set(9);
 689         boundWidth.set(9);
 690 
 691         assertEquals(4, effect.getRadius(), 1e-100);
 692         pulse();
 693         assertEquals(9, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianHeight(), 1e-100);
 694         assertEquals(9, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianWidth(), 1e-100);
 695         assertEquals(4, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianRadius(), 1e-100);
 696 
 697         boundHeight.set(21);
 698         assertEquals(7, effect.getRadius(), 1e-100);
 699         pulse();
 700         assertEquals(7, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianRadius(), 1e-100);
 701     }
 702 
 703     // all radius, width and height are bound, radius is ignored in this case
 704     // just test that it doesn't end in infinite loop
 705     @Test
 706     public void testWidthHeightRadiusBound() {
 707         DoubleProperty boundWidth = new SimpleDoubleProperty();
 708         DoubleProperty boundHeight = new SimpleDoubleProperty();
 709         DoubleProperty boundRadius = new SimpleDoubleProperty();
 710 
 711         effect.widthProperty().bind(boundWidth);
 712         effect.heightProperty().bind(boundHeight);
 713         effect.radiusProperty().bind(boundRadius);
 714 
 715         boundHeight.set(9);
 716         boundWidth.set(9);
 717         boundRadius.set(5);
 718 
 719         pulse();
 720         assertEquals(9, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianHeight(), 1e-100);
 721         assertEquals(9, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianWidth(), 1e-100);
 722         assertEquals(4, ((com.sun.scenario.effect.InnerShadow) effect.impl_getImpl()).getGaussianRadius(), 1e-100);
 723     }
 724 
 725     @Test
 726     public void testBounds() {
 727         assertEquals(box(0, 0, 100, 100), n.getBoundsInLocal());
 728     }
 729 
 730     @Test
 731     public void testBoundsWidthInput() {
 732         assertEquals(box(0, 0, 100, 100), n.getBoundsInLocal());
 733         BoxBlur blur = new BoxBlur();
 734         effect.setInput(blur);
 735         assertEquals(box(-2, -2, 104, 104), n.getBoundsInLocal());
 736     }
 737 }