changeset 1105:28f01d4898b6

Automated merge with ssh://jpgodine@jfxsrc.us.oracle.com//javafx/2.2/MASTER/jfx/rt
author jpgodine@JPGODINE-LAP.st-users.us.oracle.com
date Tue, 22 May 2012 08:29:11 -0700
parents 862bbb9698c8 fe2f0694b18e
children 30fbc03b40cd
files
diffstat 159 files changed, 9504 insertions(+), 196 deletions(-) [+]
line wrap: on
line diff
--- a/build-defs.xml	Mon May 21 14:09:46 2012 -0700
+++ b/build-defs.xml	Tue May 22 08:29:11 2012 -0700
@@ -89,8 +89,20 @@
         <clean-project/>
     </target>
 
-    <target name="test" depends="jar">
-        <test-project/>
+    <target name="-check-smoke-test-excludes" unless="is-full-test">
+        <property name="test.excludes" value="${smoke.test.excludes}"/>
+    </target>
+
+    <target name="-init-test" depends="-check-smoke-test-excludes">
+    </target>
+
+    <target name="full-test">
+        <property name="is-full-test" value="true"/>
+        <antcall target="test"/>
+    </target>
+
+    <target name="test" depends="-init-test,jar">
+        <test-project excludes="${test.excludes}"/>
     </target>
 
     <target name="test-single" depends="jar">
@@ -195,6 +207,7 @@
 
     <macrodef name="test-project">
         <attribute name="testsrc" default="${test.dir}"/>
+        <attribute name="excludes" default=""/>
         <sequential>
             <!-- compile all test sources -->
             <build-tests testsrc="@{testsrc}"/>
--- a/javafx-concurrent/project.properties	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-concurrent/project.properties	Tue May 22 08:29:11 2012 -0700
@@ -18,3 +18,6 @@
     ${runtime.dist.root.dir}/../artifacts/sdk/rt/lib/jfxrt.jar:\
     ${build.test.classes.dir}
 run.jvmargs=-Djavafx.toolkit=com.sun.javafx.pgstub.StubToolkit
+smoke.test.excludes=\
+    javafx/concurrent/ServiceLifecycleTest.class \
+    javafx/concurrent/ServiceWithSecurityManagerTest.class
--- a/javafx-ui-common/build-closed.xml	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/build-closed.xml	Tue May 22 08:29:11 2012 -0700
@@ -22,16 +22,7 @@
     <import file="../build-defs.xml"/>
     <import file="build-common.xml"/>
 
-    <target name="test" depends="init,jar">
-      <!-- create a META-INF directory and copy over the fonts.mf file from
-         the unit test workspace. This is necessary so that the
-         FontManagerTest unit test can check that the embedded font logic
-         works -->
-      <mkdir dir="${build.test.classes.dir}/META-INF" />
-      <copy todir="${build.test.classes.dir}/META-INF"
-            file="test/unit/com/sun/javafx/scene/text/fonts.mf" />
-      <unzip src="${jfx.amble-fonts.jar}" dest="${build.test.classes.dir}" />
-      <test-project />
-  </target>
+    <target name="test" depends="javafx-ui-common-common.test"/>
+    <target name="-pre-coverage" depends="javafx-ui-common-common.-pre-coverage"/>
 
 </project>
--- a/javafx-ui-common/build.xml	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/build.xml	Tue May 22 08:29:11 2012 -0700
@@ -4,4 +4,7 @@
 
     <import file="../build-defs.xml"/>
     <import file="build-common.xml"/>
+
+    <target name="test" depends="javafx-ui-common-common.test"/>
+    <target name="-pre-coverage" depends="javafx-ui-common-common.-pre-coverage"/>
 </project>
--- a/javafx-ui-common/src/com/sun/javafx/css/Selector.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/com/sun/javafx/css/Selector.java	Tue May 22 08:29:11 2012 -0700
@@ -53,10 +53,8 @@
 import javafx.scene.Node;
 import javafx.scene.Scene;
 
-import org.w3c.dom.css.CSSRule;
-
 /**
- * Used by {@link CSSRule} to determine whether or not the rule applies to a 
+ * Used by CSSRule to determine whether or not the rule applies to a 
  * given object.
  *
  */
--- a/javafx-ui-common/src/com/sun/javafx/embed/EmbeddedSceneInterface.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/com/sun/javafx/embed/EmbeddedSceneInterface.java	Tue May 22 08:29:11 2012 -0700
@@ -60,7 +60,12 @@
      * A notification about key event received by host container.
      */
     public void keyEvent(int type, int key, char[] chars, int modifiers);
-
+    
+    /*
+     * A notification about menu event received by host container.
+     */
+    public void menuEvent(int x, int y, int xAbs, int yAbs, boolean isKeyboardTrigger);
+    
     public boolean traverseOut(Direction dir);
     
     public void setDragStartListener(EmbeddedSceneDragStartListenerInterface l);
--- a/javafx-ui-common/src/com/sun/javafx/scene/transform/TransformUtils.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/com/sun/javafx/scene/transform/TransformUtils.java	Tue May 22 08:29:11 2012 -0700
@@ -147,5 +147,31 @@
                     getMyx(), getMyy(), getMyz(), getTy(),
                     getMzx(), getMzy(), getMzz(), getTz());
         }
+
+        /**
+         * Returns a string representation of this {@code Affine} object.
+         * @return a string representation of this {@code Affine} object.
+         */
+        @Override
+        public String toString() {
+            final StringBuilder sb = new StringBuilder("Transform [");
+
+            sb.append("mxx=").append(getMxx());
+            sb.append(", mxy=").append(getMxy());
+            sb.append(", mxz=").append(getMxz());
+            sb.append(", tx=").append(getTx());
+
+            sb.append(", myx=").append(getMyx());
+            sb.append(", myy=").append(getMyy());
+            sb.append(", myz=").append(getMyz());
+            sb.append(", ty=").append(getTy());
+
+            sb.append(", mzx=").append(getMzx());
+            sb.append(", mzy=").append(getMzy());
+            sb.append(", mzz=").append(getMzz());
+            sb.append(", tz=").append(getTz());
+
+            return sb.append("]").toString();
+        }
     }
 }
--- a/javafx-ui-common/src/com/sun/javafx/stage/PopupEventRedirector.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/com/sun/javafx/stage/PopupEventRedirector.java	Tue May 22 08:29:11 2012 -0700
@@ -94,13 +94,17 @@
 
         if ((event.getEventType() == KeyEvent.KEY_PRESSED)
                 && ESCAPE_KEY_COMBINATION.match(event)) {
-            handleEscapeKeyPressedEvent();
+            handleEscapeKeyPressedEvent(event);
         }
     }
 
-    private void handleEscapeKeyPressedEvent() {
+    private void handleEscapeKeyPressedEvent(final Event event) {
         if (popupWindow.isHideOnEscape()) {
             popupWindow.doAutoHide();
+
+            if (popupWindow.getConsumeAutoHidingEvents()) {
+                event.consume();
+            }
         }
     }
 
@@ -121,10 +125,9 @@
 
             popupWindow.doAutoHide();
 
-            // we can consume the press which caused the autohide here,
-            // if we do that it won't have any effect in the target window
-            // from discussions, not consuming it seems preferable
-            // event.consume();
+            if (popupWindow.getConsumeAutoHidingEvents()) {
+                event.consume();
+            }
         }
     }
 
--- a/javafx-ui-common/src/com/sun/javafx/tk/DummyToolkit.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/com/sun/javafx/tk/DummyToolkit.java	Tue May 22 08:29:11 2012 -0700
@@ -156,6 +156,11 @@
     }
 
     @Override
+    public PlatformImage createPlatformImage(int w, int h) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
     public void startup(Runnable runnable) {
         throw new UnsupportedOperationException("Not supported yet.");
     }
--- a/javafx-ui-common/src/com/sun/javafx/tk/ImageLoader.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/com/sun/javafx/tk/ImageLoader.java	Tue May 22 08:29:11 2012 -0700
@@ -29,8 +29,8 @@
 public interface ImageLoader {
     public boolean getError();
     public int getFrameCount();
-    public Object[] getFrames();
-    public Object getFrame(int index);
+    public PlatformImage[] getFrames();
+    public PlatformImage getFrame(int index);
     public int getFrameDelay(int index);
     public int getWidth();
     public int getHeight();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/src/com/sun/javafx/tk/PlatformImage.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.javafx.tk;
+
+import java.nio.Buffer;
+import javafx.scene.image.PixelFormat;
+import javafx.scene.image.WritablePixelFormat;
+
+/**
+ * Common interface to all toolkit-specific objects used to store image
+ * data for a javafx.image.Image object.
+ */
+public interface PlatformImage {
+    /**
+     * @param x X coordinate of pixel
+     * @param y Y coordinate of pixel
+     * @return the non-premultiplied pixel in integer ARGB component ordering.
+     */
+    public int getArgb(int x, int y);
+
+    /**
+     * @param x X coordinate of pixel
+     * @param y Y coordinate of pixel
+     * @param argbpre non-premultiplied pixel data to store in integer ARGB
+     *  component ordering
+     */
+    public void setArgb(int x, int y, int argb);
+
+    /**
+     * @param x X coordinate of pixel
+     * @param y Y coordinate of pixel
+     * @return the premultiplied pixel in integer ARGB component ordering.
+     */
+    public int getArgbPre(int x, int y);
+
+    /**
+     * @param x X coordinate of pixel
+     * @param y Y coordinate of pixel
+     * @param argbpre premultiplied pixel data to store in integer ARGB
+     *  component ordering
+     */
+    public void setArgbPre(int x, int y, int argbpre);
+
+    /**
+     * @return the PixelFormat to use for the pixel data transfer methods
+     * getPixels() and setPixels().
+     */
+    public PixelFormat getPlatformPixelFormat();
+
+    public boolean isWritable();
+    public PlatformImage promoteToWritableImage();
+
+    public <T extends Buffer>
+        void getPixels(int x, int y, int w, int h,
+                       T pixels, WritablePixelFormat<T> pixelformat,
+                       int scanlineBytes);
+    
+    public <T extends Buffer>
+        void setPixels(int x, int y, int w, int h,
+                       T pixels, PixelFormat<T> pixelformat,
+                       int scanlineBytes);
+}
--- a/javafx-ui-common/src/com/sun/javafx/tk/Toolkit.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/com/sun/javafx/tk/Toolkit.java	Tue May 22 08:29:11 2012 -0700
@@ -498,6 +498,8 @@
     
     public abstract ImageLoader loadPlatformImage(Object platformImage);
 
+    public abstract PlatformImage createPlatformImage(int w, int h);
+
     // Indicates the default state of smooth for ImageView and MediaView
     // Subclasses may override this to provide a platform-specific default
     public boolean getDefaultImageSmooth() { return true; }
--- a/javafx-ui-common/src/javafx/animation/FadeTransition.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/javafx/animation/FadeTransition.java	Tue May 22 08:29:11 2012 -0700
@@ -66,7 +66,7 @@
  *     FadeTransition ft = new FadeTransition(Duration.millis(3000), rect);
  *     ft.setFromValue(1.0);
  *     ft.setToValue(0.3);
- *     ft.setRepeatCount(4);
+ *     ft.setCycleCount(4);
  *     ft.setAutoReverse(true);
  * 
  *     ft.play();
--- a/javafx-ui-common/src/javafx/animation/FillTransition.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/javafx/animation/FillTransition.java	Tue May 22 08:29:11 2012 -0700
@@ -59,7 +59,7 @@
  *     rect.setArcWidth(50);
  * 
  *     FillTransition ft = new FillTransition(Duration.millis(3000), rect, Color.RED, Color.BLUE);
- *     ft.setRepeatCount(4);
+ *     ft.setCycleCount(4);
  *     ft.setAutoReverse(true);
  * 
  *     ft.play();
--- a/javafx-ui-common/src/javafx/animation/ParallelTransition.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/javafx/animation/ParallelTransition.java	Tue May 22 08:29:11 2012 -0700
@@ -63,21 +63,21 @@
  *     FadeTransition ft = new FadeTransition(SEC_3);
  *     ft.setFromValue(1.0f);
  *     ft.setToValue(0.3f);
- *     ft.setRepeatCount(2f);
+ *     ft.setCycleCount(2f);
  *     ft.setAutoReverse(true);
  *     TranslateTransition tt = new TranslateTransition(SEC_2);
  *     tt.setFromX(-100f);
  *     tt.setToX(100f);
- *     tt.setRepeatCount(2f);
+ *     tt.setCycleCount(2f);
  *     tt.setAutoReverse(true);
  *     RotateTransition rt = new RotateTransition(SEC_3);
  *     rt.setByAngle(180f);
- *     rt.setRepeatCount(4f);
+ *     rt.setCycleCount(4f);
  *     rt.setAutoReverse(true);
  *     ScaleTransition st = new ScaleTransition(SEC_2);
  *     st.setByX(1.5f);
  *     st.setByY(1.5f);
- *     st.setRepeatCount(2f);
+ *     st.setCycleCount(2f);
  *     st.setAutoReverse(true);
  * 
  *     ParallelTransition pt = new ParallelTransition(rect, ft, tt, rt, st);
--- a/javafx-ui-common/src/javafx/animation/PathTransition.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/javafx/animation/PathTransition.java	Tue May 22 08:29:11 2012 -0700
@@ -71,7 +71,7 @@
  *     pathTransition.setNode(rect);
  *     pathTransition.setPath(path);
  *     pathTransition.setOrientation(OrientationType.ORTHOGONAL_TO_TANGENT);
- *     pathTransition.setRepeatCount(4f);
+ *     pathTransition.setCycleCount(4f);
  *     pathTransition.setAutoReverse(true);
  * 
  *     pathTransition.play();
--- a/javafx-ui-common/src/javafx/animation/PauseTransition.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/javafx/animation/PauseTransition.java	Tue May 22 08:29:11 2012 -0700
@@ -51,7 +51,7 @@
  * 
  *     RotateTransition rt = new RotateTransition(Duration.millis(3000), rect);
  *     rt.setByAngle(180);
- *     rt.setRepeatCount(4f);
+ *     rt.setCycleCount(4f);
  *     rt.setAutoReverse(true);
  *     SequentialTransition seqTransition = new SequentialTransition (
  *         new PauseTransition(Duration.millis(1000)), // wait a second
--- a/javafx-ui-common/src/javafx/animation/RotateTransition.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/javafx/animation/RotateTransition.java	Tue May 22 08:29:11 2012 -0700
@@ -66,7 +66,7 @@
  * 
  *     RotateTransition rt = new RotateTransition(Duration.millis(3000), rect);
  *     rt.setByAngle(180);
- *     rt.setRepeatCount(4);
+ *     rt.setCycleCount(4);
  *     rt.setAutoReverse(true);
  * 
  *     rt.play();
--- a/javafx-ui-common/src/javafx/animation/ScaleTransition.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/javafx/animation/ScaleTransition.java	Tue May 22 08:29:11 2012 -0700
@@ -70,7 +70,7 @@
  *     ScaleTransition st = new ScaleTransition(Duration.millis(2000), rect);
  *     st.setByX(1.5f);
  *     st.setByY(1.5f);
- *     st.setRepeatCount(4f);
+ *     st.setCycleCount(4f);
  *     st.setAutoReverse(true);
  * 
  *     st.play();
--- a/javafx-ui-common/src/javafx/animation/SequentialTransition.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/javafx/animation/SequentialTransition.java	Tue May 22 08:29:11 2012 -0700
@@ -66,21 +66,21 @@
  *     FadeTransition ft = new FadeTransition(SEC_3);
  *     ft.setFromValue(1.0f);
  *     ft.setToValue(0.3f);
- *     ft.setRepeatCount(2f);
+ *     ft.setCycleCount(2f);
  *     ft.setAutoReverse(true);
  *     TranslateTransition tt = new TranslateTransition(SEC_2);
  *     tt.setFromX(-100f);
  *     tt.setToX(100f);
- *     tt.setRepeatCount(2f);
+ *     tt.setCycleCount(2f);
  *     tt.setAutoReverse(true);
  *     RotateTransition rt = new RotateTransition(SEC_3);
  *     rt.setByAngle(180f);
- *     rt.setRepeatCount(4f);
+ *     rt.setCycleCount(4f);
  *     rt.setAutoReverse(true);
  *     ScaleTransition st = new ScaleTransition(SEC_2);
  *     st.setByX(1.5f);
  *     st.setByY(1.5f);
- *     st.setRepeatCount(2f);
+ *     st.setCycleCount(2f);
  *     st.setAutoReverse(true);
  * 
  *     SequentialTransition seqT = new SequentialTransition (rect, pt, ft, tt, rt, st);
--- a/javafx-ui-common/src/javafx/animation/StrokeTransition.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/javafx/animation/StrokeTransition.java	Tue May 22 08:29:11 2012 -0700
@@ -60,7 +60,7 @@
  *     rect.setFill(null);
  * 
  *     StrokeTransition st = new StrokeTransition(Duration.millis(3000), rect, Color.RED, Color.BLUE);
- *     st.setRepeatCount(4);
+ *     st.setCycleCount(4);
  *     st.setAutoReverse(true);
  * 
  *     st.play();
--- a/javafx-ui-common/src/javafx/animation/TranslateTransition.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/javafx/animation/TranslateTransition.java	Tue May 22 08:29:11 2012 -0700
@@ -68,7 +68,7 @@
  * 
  *     TranslateTransition tt = new TranslateTransition(Duration.millis(2000), rect);
  *     tt.setByX(200f);
- *     tt.setRepeatCount(4f);
+ *     tt.setCycleCount(4f);
  *     tt.setAutoReverse(true);
  * 
  *     tt.play();
--- a/javafx-ui-common/src/javafx/scene/Node.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/javafx/scene/Node.java	Tue May 22 08:29:11 2012 -0700
@@ -633,6 +633,7 @@
                     }
                     updateTreeVisible();
                     oldParent = newParent;
+                    invalidateLocalToSceneTransform();
                 }
 
                 @Override
@@ -3732,14 +3733,13 @@
      */
     @Deprecated
     public final void impl_transformsChanged() {
+        if (!transformDirty) {
+            impl_markDirty(DirtyBits.NODE_TRANSFORM);
+            transformDirty = true;
+            transformedBoundsChanged();
+        }
         invalidateLocalToParentTransform();
         invalidateLocalToSceneTransform();
-        if (transformDirty) {
-            return;
-        }
-        impl_markDirty(DirtyBits.NODE_TRANSFORM);
-        transformDirty = true;
-        transformedBoundsChanged();
     }
 
     /**
@@ -4289,9 +4289,9 @@
      *
      * <p>
      * Note that when you register a listener or a binding to this property,
-     * it needs to be invalidated every time transformation changes in any
-     * of this node's parents. This means that registering a listener on this
-     * property on many nodes may seriously affect performance of
+     * it needs to listen for invalidation on all its parents to the root node.
+     * This means that registering a listener on this
+     * property on many nodes may negatively affect performance of
      * transformation changes in their common parents.
      * </p>
      */
@@ -4329,6 +4329,16 @@
                 && nodeTransformation.hasTransforms();
     }
 
+    // for tests only
+    Transform getCurrentLocalToSceneTransformState() {
+        if (nodeTransformation == null ||
+                nodeTransformation.localToSceneTransform == null) {
+            return null;
+        }
+
+        return nodeTransformation.localToSceneTransform.transform;
+    }
+
     private static final double DEFAULT_TRANSLATE_X = 0;
     private static final double DEFAULT_TRANSLATE_Y = 0;
     private static final double DEFAULT_TRANSLATE_Z = 0;
@@ -4460,6 +4470,17 @@
                     }
 
                     @Override
+                    public Transform get() {
+                        Transform t = super.get();
+                        if (listenerReasons == 0) {
+                            // we don't get invalidation notifications
+                            // so we must expect it to be always invalid
+                            invalidate();
+                        }
+                        return t;
+                    }
+
+                    @Override
                     public void addListener(InvalidationListener listener) {
                         incListenerReasons();
                         if (localToSceneListeners == null) {
@@ -4805,7 +4826,7 @@
         }
 
         public boolean hasTransforms() {
-            return (transforms != null);
+            return (transforms != null && !transforms.isEmpty());
         }
 
         public boolean hasScaleOrRotate() {
--- a/javafx-ui-common/src/javafx/scene/Scene.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/javafx/scene/Scene.java	Tue May 22 08:29:11 2012 -0700
@@ -80,6 +80,7 @@
 import com.sun.javafx.collections.TrackableObservableList;
 import com.sun.javafx.css.StyleManager;
 import com.sun.javafx.cursor.CursorFrame;
+import com.sun.javafx.event.EventQueue;
 import com.sun.javafx.geom.PickRay;
 import com.sun.javafx.geom.transform.Affine2D;
 import com.sun.javafx.geom.transform.BaseTransform;
@@ -102,6 +103,7 @@
 import java.util.Arrays;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
+import javafx.application.Platform;
 import javafx.beans.property.ObjectProperty;
 import javafx.beans.property.ObjectPropertyBase;
 import javafx.beans.property.ReadOnlyDoubleProperty;
@@ -2373,6 +2375,17 @@
                 boolean _shiftDown, boolean _controlDown,
                 boolean _altDown, boolean _metaDown, boolean _direct) {
 
+            if (Double.isNaN(x) || Double.isNaN(y) ||
+                    Double.isNaN(screenX) || Double.isNaN(screenY)) {
+                if (cursorScenePos == null || cursorScreenPos == null) {
+                    return;
+                }
+                x = cursorScenePos.getX();
+                y = cursorScenePos.getY();
+                screenX = cursorScreenPos.getX();
+                screenY = cursorScreenPos.getY();
+            }
+
             Scene.this.processGestureEvent(SwipeEvent.impl_swipeEvent(
                     eventType, touchCount, x, y, screenX, screenY,
                     _shiftDown, _controlDown, _altDown, _metaDown, _direct), 
@@ -3092,10 +3105,20 @@
 
         private Cursor currCursor;
         private CursorFrame currCursorFrame;
+        private EventQueue queue = new EventQueue();
+
+        private Runnable pickProcess = new Runnable() {
+
+            @Override
+            public void run() {
+                process(lastEvent, true);
+            }
+        };
 
         private void pulse() {
             if (hover && lastEvent != null) {
-                process(lastEvent, true);
+                //Shouldn't run user code directly. User can call stage.showAndWait() and block the pulse.
+                Platform.runLater(pickProcess);
             }
         }
 
@@ -3161,7 +3184,7 @@
                             (k < 0 || exitedEventTarget != pdrEventTargets.get(k))) {
                          break;
                     }
-                    Event.fireEvent(exitedEventTarget, MouseEvent.impl_copy(
+                    queue.postEvent(MouseEvent.impl_copy(
                             exitedEventTarget, exitedEventTarget, e,
                             MouseEvent.MOUSE_EXITED_TARGET));
                 }
@@ -3173,7 +3196,7 @@
                             (k < 0 || enteredEventTarget != pdrEventTargets.get(k))) {
                         break;
                     }
-                    Event.fireEvent(enteredEventTarget, MouseEvent.impl_copy(
+                    queue.postEvent(MouseEvent.impl_copy(
                             enteredEventTarget, enteredEventTarget, e,
                             MouseEvent.MOUSE_ENTERED_TARGET));
                 }
@@ -3184,6 +3207,7 @@
                     currentEventTargets.add(newEventTargets.get(j));
                 }
             }
+            queue.fire();
         }
 
         private void process(MouseEvent e, boolean onPulse) {
--- a/javafx-ui-common/src/javafx/scene/doc-files/cssref.html	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/javafx/scene/doc-files/cssref.html	Tue May 22 08:29:11 2012 -0700
@@ -2999,6 +2999,48 @@
           <td>&nbsp;</td>
         </tr>
         <tr>
+          <td class="propertyname">-fx-font-scale</td>
+          <td class="value"><a href="#typenumber" class="typelink">&lt;number&gt;</a></td>
+          <td>1</td>
+          <td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td class="propertyname">-fx-min-width</td>
+          <td class="value"><a href="#typesize" class="typelink">&lt;size&gt;</a></td>
+          <td>0</td>
+          <td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td class="propertyname">-fx-min-height</td>
+          <td class="value"><a href="#typesize" class="typelink">&lt;size&gt;</a></td>
+          <td>0</td>
+          <td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td class="propertyname">-fx-pref-width</td>
+          <td class="value"><a href="#typesize" class="typelink">&lt;size&gt;</a></td>
+          <td>800</td>
+          <td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td class="propertyname">-fx-pref-height</td>
+          <td class="value"><a href="#typesize" class="typelink">&lt;size&gt;</a></td>
+          <td>600</td>
+          <td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td class="propertyname">-fx-max-width</td>
+          <td class="value"><a href="#typesize" class="typelink">&lt;size&gt;</a></td>
+          <td>Double.MAX_VALUE</td>
+          <td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td class="propertyname">-fx-max-height</td>
+          <td class="value"><a href="#typesize" class="typelink">&lt;size&gt;</a></td>
+          <td>Double.MAX_VALUE</td>
+          <td>&nbsp;</td>
+        </tr>
+        <tr>
           <td colspan="4" class="parents">Also has all properties of <a href="#parent">Parent</a></td>
         </tr>
       </tbody>
--- a/javafx-ui-common/src/javafx/scene/image/Image.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/javafx/scene/image/Image.java	Tue May 22 08:29:11 2012 -0700
@@ -25,10 +25,7 @@
 
 package javafx.scene.image;
 
-import java.io.File;
 import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URI;
 import java.util.LinkedList;
 import java.util.Queue;
 
@@ -45,12 +42,19 @@
 import com.sun.javafx.runtime.async.AsyncOperation;
 import com.sun.javafx.runtime.async.AsyncOperationListener;
 import com.sun.javafx.tk.ImageLoader;
+import com.sun.javafx.tk.PlatformImage;
 import com.sun.javafx.tk.Toolkit;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.nio.Buffer;
+import java.nio.ByteBuffer;
+import java.nio.IntBuffer;
 import javafx.beans.property.ReadOnlyBooleanProperty;
 import javafx.beans.property.ReadOnlyBooleanWrapper;
 import javafx.beans.property.ReadOnlyDoubleProperty;
 import javafx.beans.property.ReadOnlyDoubleWrapper;
 import javafx.beans.property.ReadOnlyObjectProperty;
+import javafx.scene.paint.Color;
 
 /**
  * The {@code Image} class represents graphical images and is used for loading
@@ -63,6 +67,12 @@
  * image's aspect ratio.
  * </p>
  *
+ * <p>
+ * All URLs supported by {@link URL} can be passed to the constructor.
+ * If the passed string is not a valid URL, but a path instead, the Image is
+ * searched on the classpath in that case.
+ * </p>
+ *
  * <p>Use {@link ImageView} for displaying images loaded with this
  * class. The same {@code Image} instance can be displayed by multiple
  * {@code ImageView}s.</p>
@@ -74,23 +84,30 @@
 
 // load an image in background, displaying a placeholder while it's loading
 // (assuming there's an ImageView node somewhere displaying this image)
-Image image1 = new Image("flower.png", true);
+// The image is located in default package of the classpath
+Image image1 = new Image("/flower.png", true);
 
 // load an image and resize it to 100x150 without preserving its original
 // aspect ratio
-Image image2 = new Image("flower.png", 100, 150, false, false);
+// The image is located in my.res package of the classpath
+Image image2 = new Image("my/res/flower.png", 100, 150, false, false);
 
 // load an image and resize it to width of 100 while preserving its
 // original aspect ratio, using faster filtering method
-Image image3 = new Image("flower.png", 100, 0, false, false);
+// The image is downloaded from the supplied URL through http protocol
+Image image3 = new Image("http://sample.com/res/flower.png", 100, 0, false, false);
 
 // load an image and resize it only in one dimension, to the height of 100 and
 // the original width, without preserving original aspect ratio
-Image image4 = new Image("flower.png", 0, 100, false, false);
+// The image is located in the current working directory
+Image image4 = new Image("file:flower.png", 0, 100, false, false);
 
 </PRE>
  */
 public class Image {
+
+    // Matches strings that start with a valid URI scheme
+    private static final String URL_QUICKMATCH = "^\\p{Alpha}[\\p{Alnum}+.-]*:.*$";
     /**
      * The string representing the URL to use in fetching the pixel data.
      *
@@ -102,6 +119,7 @@
      * @treatAsPrivate implementation detail
      * @deprecated This is an internal API that is not intended for use and will be removed in the next version
      */
+    // SB-dependency: RT-21216 has been filed to track this
     @Deprecated
     public final String impl_getUrl() {
         return url;
@@ -431,7 +449,7 @@
      * @treatAsPrivate implementation detail
      * @deprecated This is an internal API that is not intended for use and will be removed in the next version
      */
-    private ObjectPropertyImpl<Object> platformImage;
+    private ObjectPropertyImpl<PlatformImage> platformImage;
 
     /**
      * @treatAsPrivate implementation detail
@@ -448,18 +466,22 @@
      * @treatAsPrivate implementation detail
      */
     @Deprecated
-    public final ReadOnlyObjectProperty<Object> impl_platformImageProperty() {
+    public final ReadOnlyObjectProperty<PlatformImage> impl_platformImageProperty() {
         return platformImagePropertyImpl();
     }
 
-    private ObjectPropertyImpl<Object> platformImagePropertyImpl() {
+    private ObjectPropertyImpl<PlatformImage> platformImagePropertyImpl() {
         if (platformImage == null) {
-            platformImage = new ObjectPropertyImpl<Object>("platformImage");
+            platformImage = new ObjectPropertyImpl<PlatformImage>("platformImage");
         }
 
         return platformImage;
     }
 
+    void pixelsDirty() {
+        platformImagePropertyImpl().fireValueChangedEvent();
+    }
+
     private final class ObjectPropertyImpl<T>
             extends ReadOnlyObjectPropertyBase<T> {
         private final String name;
@@ -503,11 +525,12 @@
     }
 
     /**
-     * Construct an {@code Image} which pixels are loaded from the specified
+     * Constructs an {@code Image} with content loaded from the specified
      * url.
      *
      * @param url the string representing the URL to use in fetching the pixel
      *      data
+     * @see #Image(java.lang.String, java.io.InputStream, double, double, boolean, boolean, boolean)
      * @throws NullPointerException if URL is null
      * @throws IllegalArgumentException if URL is invalid or unsupported
      */
@@ -521,6 +544,7 @@
      *
      * @param url the string representing the URL to use in fetching the pixel
      *      data
+     * @see #Image(java.lang.String, java.io.InputStream, double, double, boolean, boolean, boolean)
      * @param backgroundLoading indicates whether the image
      *      is being loaded in the background
      * @throws NullPointerException if URL is null
@@ -536,6 +560,7 @@
      *
      * @param url the string representing the URL to use in fetching the pixel
      *      data
+     * @see #Image(java.lang.String, java.io.InputStream, double, double, boolean, boolean, boolean)
      * @param requestedWidth the image's bounding box width
      * @param requestedHeight the image's bounding box height
      * @param preserveRatio indicates whether to preserve the aspect ratio of
@@ -557,6 +582,10 @@
     /**
      * Construct a new {@code Image} with the specified parameters.
      *
+     * The <i>url</i> without scheme is threated as relative to classpath,
+     * url with scheme is treated accordingly to the scheme using
+     * {@link URL#openStream()}
+     *
      * @param url the string representing the URL to use in fetching the pixel
      *      data
      * @param requestedWidth the image's bounding box width
@@ -585,7 +614,7 @@
     }
 
     /**
-     * Construct an {@code Image} which pixels are loaded from the specified
+     * Construct an {@code Image} with content loaded from the specified
      * input stream.
      *
      * @param is the stream from which to load the image
@@ -617,9 +646,25 @@
         initialize(null);
     }
 
-    private Image(Object platformImage) {
+    /**
+     * Construct a new empty {@code Image} with the specified dimensions
+     * filled with transparent pixels to be used with the
+     * {@link #setArgb(int, int, int) setArgb()}
+     * and
+     * {@link #setColor(int, int, javafx.scene.paint.Color) setColor()}
+     * methods to create a completely custom image.
+     * 
+     * @param width the width of the empty image
+     * @param height the height of the empty image
+     */
+    Image(int width, int height) {
+        this(null, null, width, height, false, false, false);
+        initialize(Toolkit.getToolkit().createPlatformImage(width, height));
+    }
+
+    private Image(Object externalImage) {
         this(null, null, 0, 0, false, false, false);
-        initialize(platformImage);
+        initialize(externalImage);
     }
 
     private Image(String url, InputStream is,
@@ -659,13 +704,13 @@
 
     private ImageTask backgroundTask;
 
-    private void initialize(Object platformImage) {
+    private void initialize(Object externalImage) {
         // we need to check the original values here, because setting placeholder
         // changes platformImage, so wrong branch of if would be used
-        if (platformImage != null) {
+        if (externalImage != null) {
             // Make an image from the provided platform-specific image
             // object (e.g. a BufferedImage in the case of the Swing profile)
-            ImageLoader loader = loadPlatformImage(platformImage);
+            ImageLoader loader = loadPlatformImage(externalImage);
             finishImage(loader);
         } else if (isBackgroundLoading() && (impl_source == null)) {
             // Load image in the background.
@@ -707,7 +752,7 @@
     // Generates the animation Timeline for multiframe images.
     private void makeAnimationTimeline(ImageLoader loader) {
         // create and start the animation thread.
-        final Object[] frames = loader.getFrames();
+        final PlatformImage[] frames = loader.getFrames();
 
         timeline = new Timeline();
         timeline.setCycleCount(Timeline.INDEFINITE);
@@ -730,7 +775,7 @@
 
     private KeyFrame createPlatformImageSetKeyFrame(
             final long duration,
-            final Object platformImage) {
+            final PlatformImage platformImage) {
         return new KeyFrame(Duration.millis(duration),
                             new EventHandler<ActionEvent>() {
                                     @Override
@@ -786,7 +831,7 @@
         return new Image(image);
     }
 
-    private void setPlatformImageWH(final Object newPlatformImage,
+    private void setPlatformImageWH(final PlatformImage newPlatformImage,
                                     final double newWidth,
                                     final double newHeight) {
         if ((impl_getPlatformImage() == newPlatformImage)
@@ -814,7 +859,7 @@
         }
     }
 
-    private void storePlatformImageWH(final Object platformImage,
+    private void storePlatformImageWH(final PlatformImage platformImage,
                                       final double width,
                                       final double height) {
         platformImagePropertyImpl().store(platformImage);
@@ -917,13 +962,22 @@
             throw new IllegalArgumentException("URL must not be empty");
         }
 
-        final URI baseUri = getBaseUri();
-        final URI resolvedUri;
         try {
-            resolvedUri = (baseUri != null) ? baseUri.resolve(url)
-                                            : URI.create(url);
-
-            return resolvedUri.toURL().toString();
+            if (!url.matches(URL_QUICKMATCH)) {
+                final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+                URL resource;
+                if (url.charAt(0) == '/') {
+                    resource = contextClassLoader.getResource(url.substring(1));
+                } else {
+                    resource = contextClassLoader.getResource(url);
+                }
+                if (resource == null) {
+                    throw new IllegalArgumentException("Invalid URL or resource not found");
+                }
+                return resource.toString();
+            }
+            // Use URL constructor for validation
+            return new URL(url).toString();
         } catch (final IllegalArgumentException e) {
             throw new IllegalArgumentException(
                     constructDetailedExceptionMessage("Invalid URL", e), e);
@@ -957,16 +1011,6 @@
                        cause.getCause());
     }
 
-    private static URI getBaseUri() {
-        try {
-            // we might want to use getDocumentBase() from HostServices here,
-            // but that would be an incompatible change
-            return new File("").toURI();
-        } catch (final Exception e) {
-            return null;
-        }
-    }
-
     /**
      * This method converts a JavaFX Image to the specified image class or
      * to an image of the same class and the same format as specified image.
@@ -1024,4 +1068,107 @@
     boolean isAnimation() {
         return timeline != null;
     }
+
+    boolean pixelsReadable() {
+        return (getProgress() >= 1.0 && !isAnimation() && !isError());
+    }
+
+    private PixelReader reader;
+    /**
+     * This method returns a {@code PixelReader} that provides access to
+     * read the pixels of the image, if the image is readable.
+     * If this method returns null then this image does not support reading
+     * at this time.
+     * This method will return null if the image is being loaded from a
+     * source and is still incomplete {the progress is still < 1.0) or if
+     * there was an error.
+     * This method may also return null for some images in a format that
+     * is not supported for reading and writing pixels to.
+     * 
+     * @return the {@code PixelReader} for reading the pixel data of the image
+     */
+    public PixelReader getPixelReader() {
+        if (!pixelsReadable()) {
+            return null;
+        }
+        if (reader == null) {
+            reader = new PixelReader() {
+                @Override
+                public PixelFormat getPixelFormat() {
+                    PlatformImage pimg = platformImage.get();
+//                    if (pimg == null) {
+//                        return null;
+//                    }
+                    return pimg.getPlatformPixelFormat();
+                }
+
+                @Override
+                public int getArgb(int x, int y) {
+                    PlatformImage pimg = platformImage.get();
+                    return pimg.getArgb(x, y);
+                }
+
+                @Override
+                public Color getColor(int x, int y) {
+                    int argb = getArgb(x, y);
+                    int a = argb >>> 24;
+                    int r = (argb >> 16) & 0xff;
+                    int g = (argb >>  8) & 0xff;
+                    int b = (argb      ) & 0xff;
+                    return Color.rgb(r, g, b, a / 255.0);
+                }
+
+                @Override
+                public <T extends Buffer>
+                    void getPixels(int x, int y, int w, int h,
+                                   WritablePixelFormat<T> pixelformat,
+                                   T buffer, int scanlineStride)
+                {
+                    PlatformImage pimg = platformImage.get();
+                    for (int j = 0; j < h; j++) {
+                        for (int i = 0; i < w; i++) {
+                            pixelformat.setArgb(buffer, i, j, scanlineStride,
+                                                pimg.getArgb(x+i, y+j));
+                        }
+                    }
+//                    checkPixelAccess(true, false).getPixels(x, y, w, h,
+//                                                            buffer, pixelformat, scanlineStride);
+                }
+
+                @Override
+                public void getPixels(int x, int y, int w, int h,
+                                    WritablePixelFormat<ByteBuffer> pixelformat,
+                                    byte buffer[], int offset, int scanlineStride)
+                {
+                    ByteBuffer bytebuf = ByteBuffer.wrap(buffer);
+                    bytebuf.position(offset);
+                    getPixels(x, y, w, h, pixelformat, bytebuf, scanlineStride);
+//                    checkPixelAccess(true, false).getPixels(x, y, w, h,
+//                                                            buffer, pixelformat, scanlineStride);
+                }
+
+                @Override
+                public void getPixels(int x, int y, int w, int h,
+                                    WritablePixelFormat<IntBuffer> pixelformat,
+                                    int buffer[], int offset, int scanlineStride)
+                {
+                    IntBuffer intbuf = IntBuffer.wrap(buffer);
+                    intbuf.position(offset);
+                    getPixels(x, y, w, h, pixelformat, intbuf, scanlineStride);
+//                    checkPixelAccess(true, false).getPixels(x, y, w, h,
+//                                                            buffer, pixelformat, scanlineStride);
+                }
+            };
+        }
+        return reader;
+    }
+
+    PlatformImage getWritablePlatformImage() {
+        PlatformImage pimg = platformImage.get();
+        if (!pimg.isWritable()) {
+            pimg = pimg.promoteToWritableImage();
+            platformImage.set(pimg);
+        }
+        return pimg;
+    }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/src/javafx/scene/image/PixelFormat.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,261 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.image;
+
+import java.nio.Buffer;
+import java.nio.ByteBuffer;
+import java.nio.IntBuffer;
+import java.util.Arrays;
+
+/**
+ * A {@code PixelFormat} object defines the layout of data for a pixel of
+ * a given format.
+ */
+public abstract class PixelFormat<T extends Buffer> {
+    public enum Type {
+        /**
+         * The pixels are stored in 32-bit integers with the premultiplied
+         * components stored in order, from MSb to LSb:
+         * alpha, red, green, blue.
+         */
+        INT_ARGB_PRE,
+        /**
+         * The pixels are stored in 32-bit integers with the non-premultiplied
+         * components stored in order, from MSb to LSb:
+         * alpha, red, green, blue.
+         */
+        INT_ARGB,
+        /**
+         * The pixels are stored in adjacent bytes with the premultiplied
+         * components stored in order of increasing index:
+         * blue, green, red, alpha.
+         */
+        BYTE_BGRA_PRE,
+        /**
+         * The pixels are stored in adjacent bytes with the non-premultiplied
+         * components stored in order of increasing index:
+         * blue, green, red, alpha.
+         */
+        BYTE_BGRA,
+        /**
+         * The opaque pixels are stored in adjacent bytes with the color
+         * components stored in order of increasing index:
+         * red, gree, blue.
+         */
+        BYTE_RGB,
+        /**
+         * The pixel colors are referenced by byte indices stored in the
+         * pixel array, with the byte interpreted as an unsigned index into
+         * a list of colors provided by the {@code PixelFormat} object.
+         */
+        BYTE_INDEXED,
+    }
+
+    private Type type;
+
+    PixelFormat(Type type) {
+        this.type = type;
+    }
+
+    public static WritablePixelFormat<IntBuffer> getIntArgbInstance() {
+        return WritablePixelFormat.IntArgb.INSTANCE;
+    }
+
+    public static WritablePixelFormat<IntBuffer> getIntArgbPreInstance() {
+        return WritablePixelFormat.IntArgbPre.INSTANCE;
+    }
+
+    public static WritablePixelFormat<ByteBuffer> getByteBgraInstance() {
+        return WritablePixelFormat.ByteBgra.INSTANCE;
+    }
+
+    public static WritablePixelFormat<ByteBuffer> getByteBgraPreInstance() {
+        return WritablePixelFormat.ByteBgraPre.INSTANCE;
+    }
+
+    public static PixelFormat<ByteBuffer> getByteRgbInstance() {
+        return ByteRgb.instance;
+    }
+
+    public static PixelFormat<ByteBuffer>
+        createByteIndexedPremultipliedInstance(int colors[])
+    {
+        return IndexedPixelFormat.createByte(colors, true);
+    }
+
+    public static PixelFormat<ByteBuffer>
+        createByteIndexedInstance(int colors[])
+    {
+        return IndexedPixelFormat.createByte(colors, false);
+    }
+
+    public Type getType() {
+        return type;
+    }
+
+    public abstract boolean isWritable();
+
+    public abstract boolean isPremultiplied();
+
+    static int NonPretoPre(int nonpre) {
+        int a = nonpre >>> 24;
+        if (a == 0xff) return nonpre;
+        if (a == 0x00) return 0;
+        int r = (nonpre >> 16) & 0xff;
+        int g = (nonpre >>  8) & 0xff;
+        int b = (nonpre      ) & 0xff;
+        r = (r * a) / 0xff;
+        g = (g * a) / 0xff;
+        b = (b * a) / 0xff;
+        return (a << 24) | (r << 16) | (g << 8) | b;
+    }
+
+    static int PretoNonPre(int pre) {
+        int a = pre >>> 24;
+        if (a == 0xff || a == 0x00) return pre;
+        int r = (pre >> 16) & 0xff;
+        int g = (pre >>  8) & 0xff;
+        int b = (pre      ) & 0xff;
+        int halfa = a >> 1;
+        r = (r >= a) ? 0xff : (r * 0xff + halfa) / a;
+        g = (g >= a) ? 0xff : (g * 0xff + halfa) / a;
+        b = (b >= a) ? 0xff : (b * 0xff + halfa) / a;
+        return (a << 24) | (r << 16) | (g << 8) | b;
+    }
+
+    /**
+     * Reads a 32-bit integer representation of the color from the buffer
+     * at the specified coordinates.
+     * The 32-bit integer will contain the 4 color components in separate
+     * 8-bit fields in ARGB order from the most significant byte to the least
+     * significant byte.
+     * The buffer should be positioned to the start of the pixel data such
+     * that {@code buf.get(0)} would return the pixel information for the
+     * pixel at coordinates {@code (0, 0)}.
+     * The {@scanlineStride} parameter defines the distance from the pixel
+     * data at the start of one row to the pixel data at the start of the
+     * immediately following row at the next higher Y coordinate.  Usually,
+     * {@scanlineStride} is the same as the width of the image multiplied
+     * by the number of data elements per pixel (1 for the case of the
+     * integer and indexed formats, or 3 or 4 in the case of the byte
+     * formats), but some images may have further padding between rows for
+     * alignment or other purposes.
+     * 
+     * @param buf the buffer of pixel data
+     * @param x the X coordinate of the pixel to be read
+     * @param y the Y coordinate of the pixel to be read
+     * @param scanlineStride the number of buffer elements between the
+     *        start of adjacent pixel rows in the buffer
+     * @return a 32-bit value with the color of the pixel in a format
+     *         similar to the {@code Type.INT_ARGB} pixel format
+     */
+    public abstract int getArgb(T buf, int x, int y, int scanlineStride);
+
+    static class ByteRgb extends PixelFormat<ByteBuffer> {
+        static final ByteRgb instance = new ByteRgb();
+
+        private ByteRgb() {
+            super(Type.BYTE_RGB);
+        }
+
+        @Override
+        public boolean isWritable() {
+            return true;
+        }
+
+        @Override
+        public boolean isPremultiplied() {
+            return false;
+        }
+
+        @Override
+        public int getArgb(ByteBuffer buf, int x, int y, int scanlineStride) {
+            int index = y * scanlineStride + x * 4;
+            int r = buf.get(index    ) & 0xff;
+            int g = buf.get(index + 1) & 0xff;
+            int b = buf.get(index + 2) & 0xff;
+            return (0xff << 24) | (r << 16) | (g << 8) | b;
+        }
+    }
+
+    static class IndexedPixelFormat extends PixelFormat<ByteBuffer> {
+        int precolors[];
+        int nonprecolors[];
+        boolean premult;
+
+        static PixelFormat createByte(int colors[], boolean premult) {
+            return new IndexedPixelFormat(Type.BYTE_INDEXED, premult,
+                                          Arrays.copyOf(colors, 256));
+        }
+
+        private IndexedPixelFormat(Type type, boolean premult, int colors[]) {
+            super(type);
+            if (premult) {
+                this.precolors = colors;
+            } else {
+                this.nonprecolors = colors;
+            }
+            this.premult = premult;
+        }
+
+        @Override
+        public boolean isWritable() {
+            return false;
+        }
+
+        @Override
+        public boolean isPremultiplied() {
+            return premult;
+        }
+
+        private int[] getPreColors() {
+            if (precolors == null) {
+                int colors[] = new int[nonprecolors.length];
+                for (int i = 0; i < colors.length; i++) {
+                    colors[i] = NonPretoPre(nonprecolors[i]);
+                }
+                this.precolors = colors;
+            }
+            return precolors;
+        }
+
+        private int[] getNonPreColors() {
+            if (nonprecolors == null) {
+                int colors[] = new int[precolors.length];
+                for (int i = 0; i < colors.length; i++) {
+                    colors[i] = PretoNonPre(precolors[i]);
+                }
+                this.nonprecolors = colors;
+            }
+            return nonprecolors;
+        }
+
+        @Override
+        public int getArgb(ByteBuffer buf, int x, int y, int scanlineStride) {
+            return getNonPreColors()[buf.get(y * scanlineStride + x) & 0xff];
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/src/javafx/scene/image/PixelReader.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,173 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.image;
+
+import java.nio.Buffer;
+import java.nio.ByteBuffer;
+import java.nio.IntBuffer;
+import javafx.scene.paint.Color;
+
+/**
+ * This interface defines methods for retrieving the pixel data from an
+ * {@link Image} or other surface containing pixels.
+ */
+public interface PixelReader {
+    /**
+     * This method returns the {@code PixelFormat} in which the surface
+     * stores its pixels, or a roughly equivalent pixel format into which
+     * it can easily convert its pixels for purposes of reading them.
+     * 
+     * @return the {@code PixelFormat} that best describes the underlying
+     *         pixels
+     */
+    public PixelFormat getPixelFormat();
+
+    /**
+     * Reads a 32-bit integer representation of the color of a pixel
+     * from the specified coordinates in the surface.
+     * The 32-bit integer will contain the 4 color components in separate
+     * 8-bit fields in ARGB order from the most significant byte to the least
+     * significant byte.
+     * 
+     * @param x the X coordinate of the pixel color to read
+     * @param y the Y coordinate of the pixel color to read
+     * @return a 32-bit representation of the color in a format described
+     *         by the {@link PixelFormat.Type.BYTE_ARGB} PixelFormat type.
+     */
+    public int getArgb(int x, int y);
+
+    /**
+     * Reads the color of a pixel from the specified coordinates in the
+     * surface and returns the value as a {@link Color} object.
+     * 
+     * @param x the X coordinate of the pixel color to read
+     * @param y the Y coordinate of the pixel color to read
+     * @return the Color object representing the color of the indicated
+     *         pixel
+     */
+    public Color getColor(int x, int y);
+
+    /**
+     * Reads pixel data from a rectangular region of the surface into the
+     * specified buffer.
+     * The format to be used for pixels in the buffer is defined by the
+     * {@link PixelFormat} object and pixel format conversions will be
+     * performed as needed to store the data in the indicated format.
+     * The buffer is assumed to be positioned to the location where the
+     * first pixel data from the image pixel at location {@code (x, y)}
+     * will be stored.
+     * Pixel data for a row will be stored in adjacent locations within
+     * the buffer packed as tightly as possible for increasing X
+     * coordinates.
+     * Pixel data for adjacent rows will be stored offset from each other
+     * by the number of buffer data elements defined by
+     * {@code scanlineStride}.
+     * 
+     * @param x the X coordinate of the rectangular region to read
+     * @param y the Y coordinate of the rectangular region to read
+     * @param w the width of the rectangular region to read
+     * @param h the height of the rectangular region to read
+     * @param pixelformat the {@code PixelFormat} object defining the format
+     *        to store the pixels into buffer
+     * @param buffer a buffer of a type appropriate for the indicated
+     *        {@code PixelFormat} object
+     * @param scanlineStride the distance between the pixel data for the
+     *        start of one row of data in the buffer to the start of the
+     *        next row of data.
+     */
+    public <T extends Buffer>
+        void getPixels(int x, int y, int w, int h,
+                       WritablePixelFormat<T> pixelformat,
+                       T buffer, int scanlineStride);
+
+    /**
+     * Reads pixel data from a rectangular region of the surface into the
+     * specified byte array.
+     * The format to be used for pixels in the buffer is defined by the
+     * {@link PixelFormat} object and pixel format conversions will be
+     * performed as needed to store the data in the indicated format.
+     * The {@code pixelformat} must be a compatible
+     * {@code PixelFormat<ByteBuffer>} type.
+     * The data for the first pixel at location {@code (x, y)} will be
+     * read into the array index specified by the {@code offset} parameter.
+     * Pixel data for a row will be stored in adjacent locations within
+     * the array packed as tightly as possible for increasing X
+     * coordinates.
+     * Pixel data for adjacent rows will be stored offset from each other
+     * by the number of byte array elements defined by
+     * {@code scanlineStride}.
+     * 
+     * @param x the X coordinate of the rectangular region to read
+     * @param y the Y coordinate of the rectangular region to read
+     * @param w the width of the rectangular region to read
+     * @param h the height of the rectangular region to read
+     * @param pixelformat the {@code PixelFormat<ByteBuffer>} object
+     *        defining the byte format to store the pixels into buffer
+     * @param buffer a byte array to store the returned pixel data
+     * @param offset the offset into {@code buffer} to store the first
+     *        pixel data
+     * @param scanlineStride the distance between the pixel data for the
+     *        start of one row of data in the buffer to the start of the
+     *        next row of data
+     */
+    public void getPixels(int x, int y, int w, int h,
+                          WritablePixelFormat<ByteBuffer> pixelformat,
+                          byte buffer[], int offset, int scanlineStride);
+
+    /**
+     * Reads pixel data from a rectangular region of the surface into the
+     * specified int array.
+     * The format to be used for pixels in the buffer is defined by the
+     * {@link PixelFormat} object and pixel format conversions will be
+     * performed as needed to store the data in the indicated format.
+     * The {@code pixelformat} must be a compatible
+     * {@code PixelFormat<IntBuffer>} type.
+     * The data for the first pixel at location {@code (x, y)} will be
+     * read into the array index specified by the {@code offset} parameter.
+     * Pixel data for a row will be stored in adjacent locations within
+     * the array packed as tightly as possible for increasing X
+     * coordinates.
+     * Pixel data for adjacent rows will be stored offset from each other
+     * by the number of int array elements defined by
+     * {@code scanlineStride}.
+     * 
+     * @param x the X coordinate of the rectangular region to read
+     * @param y the Y coordinate of the rectangular region to read
+     * @param w the width of the rectangular region to read
+     * @param h the height of the rectangular region to read
+     * @param pixelformat the {@code PixelFormat<IntBuffer>} object
+     *        defining the int format to store the pixels into buffer
+     * @param buffer a int array to store the returned pixel data
+     * @param offset the offset into {@code buffer} to store the first
+     *        pixel data
+     * @param scanlineStride the distance between the pixel data for the
+     *        start of one row of data in the buffer to the start of the
+     *        next row of data
+     */
+    public void getPixels(int x, int y, int w, int h,
+                          WritablePixelFormat<IntBuffer> pixelformat,
+                          int buffer[], int offset, int scanlineStride);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/src/javafx/scene/image/PixelWriter.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,202 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.image;
+
+import java.nio.Buffer;
+import java.nio.ByteBuffer;
+import java.nio.IntBuffer;
+import javafx.scene.paint.Color;
+
+/**
+ * This interface defines methods for writing the pixel data of a
+ * {@link WritableImage} or other surface containing writable pixels.
+ */
+public interface PixelWriter {
+    /**
+     * This method returns the {@code PixelFormat} in which the surface
+     * stores its pixels, or a roughly equivalent pixel format from which
+     * it can easily convert pixels for purposes of writing them.
+     * 
+     * @return the {@code PixelFormat} that best describes the underlying
+     *         pixels
+     */
+    public PixelFormat getPixelFormat();
+
+    /**
+     * Stores pixel data for a color into the specified coordinates of the
+     * surface.
+     * The 32-bit integer {@code argb} parameter will contain the 4 color
+     * components in separate 8-bit fields in ARGB order from the most
+     * significant byte to the least significant byte.
+     * 
+     * @param x the X coordinate of the pixel color to write
+     * @param y the Y coordinate of the pixel color to write
+     * @param argb the color information to write, specified in a format
+     *         described by the {@link PixelFormat.Type.BYTE_ARGB}
+     *         PixelFormat type.
+     */
+    public void setArgb(int x, int y, int argb);
+
+    /**
+     * Stores pixel data for a {@link Color} into the specified coordinates
+     * of the surface.
+     * 
+     * @param x the X coordinate of the pixel color to write
+     * @param y the Y coordinate of the pixel color to write
+     * @param c the Color to write
+     */
+    public void setColor(int x, int y, Color c);
+
+    /**
+     * Stores pixel data from a buffer into a rectangular region of the
+     * surface.
+     * The format of the pixels in the buffer is defined by the
+     * {@link PixelFormat} object and pixel format conversions will be
+     * performed as needed to store the data into the surface.
+     * The buffer is assumed to be positioned to the location where the
+     * first pixel data to be stored in the surface pixel at location
+     * {@code (x, y)} is located.
+     * Pixel data for a row will be read from adjacent locations within
+     * the buffer packed as tightly as possible for increasing X
+     * coordinates.
+     * Pixel data for adjacent rows will be read offset from each other
+     * by the number of buffer data elements defined by
+     * {@code scanlineStride}.
+     * 
+     * @param x the X coordinate of the rectangular region to write
+     * @param y the Y coordinate of the rectangular region to write
+     * @param w the width of the rectangular region to write
+     * @param h the height of the rectangular region to write
+     * @param pixelformat the {@code PixelFormat} object defining the format
+     *        to read the pixels from the buffer
+     * @param buffer a buffer of a type appropriate for the indicated
+     *        {@code PixelFormat} object
+     * @param scanlineStride the distance between the pixel data for the
+     *        start of one row of data in the buffer to the start of the
+     *        next row of data.
+     */
+    public <T extends Buffer>
+        void setPixels(int x, int y, int w, int h,
+                       PixelFormat<T> pixelformat,
+                       T buffer, int scanlineStride);
+
+    /**
+     * Stores pixel data from a byte array into a rectangular region of the
+     * surface.
+     * The format of the pixels in the buffer is defined by the
+     * {@link PixelFormat} object and pixel format conversions will be
+     * performed as needed to store the data into the surface.
+     * The {@code pixelformat} must be a compatible
+     * {@code PixelFormat<ByteBuffer>} type.
+     * The data for the first pixel at location {@code (x, y)} will be
+     * read from the array index specified by the {@code offset} parameter.
+     * Pixel data for a row will be read from adjacent locations within
+     * the array packed as tightly as possible for increasing X
+     * coordinates.
+     * Pixel data for adjacent rows will be read offset from each other
+     * by the number of byte array elements defined by
+     * {@code scanlineStride}.
+     * 
+     * @param x the X coordinate of the rectangular region to write
+     * @param y the Y coordinate of the rectangular region to write
+     * @param w the width of the rectangular region to write
+     * @param h the height of the rectangular region to write
+     * @param pixelformat the {@code PixelFormat<ByteBuffer>} object
+     *        defining the byte format to read the pixels from buffer
+     * @param buffer a byte array containing the pixel data to store
+     * @param offset the offset into {@code buffer} to read the first
+     *        pixel data
+     * @param scanlineStride the distance between the pixel data for the
+     *        start of one row of data in the buffer to the start of the
+     *        next row of data
+     */
+    public void setPixels(int x, int y, int w, int h,
+                          PixelFormat<ByteBuffer> pixelformat,
+                          byte buffer[], int offset, int scanlineStride);
+
+    /**
+     * Stores pixel data from an int array into a rectangular region of the
+     * surface.
+     * The format of the pixels in the buffer is defined by the
+     * {@link PixelFormat} object and pixel format conversions will be
+     * performed as needed to store the data into the surface.
+     * The {@code pixelformat} must be a compatible
+     * {@code PixelFormat<IntBuffer>} type.
+     * The data for the first pixel at location {@code (x, y)} will be
+     * read from the array index specified by the {@code offset} parameter.
+     * Pixel data for a row will be read from adjacent locations within
+     * the array packed as tightly as possible for increasing X
+     * coordinates.
+     * Pixel data for adjacent rows will be read offset from each other
+     * by the number of int array elements defined by
+     * {@code scanlineStride}.
+     * 
+     * @param x the X coordinate of the rectangular region to write
+     * @param y the Y coordinate of the rectangular region to write
+     * @param w the width of the rectangular region to write
+     * @param h the height of the rectangular region to write
+     * @param pixelformat the {@code PixelFormat<IntBuffer>} object
+     *        defining the int format to read the pixels from buffer
+     * @param buffer an int array to containing the pixel data to store
+     * @param offset the offset into {@code buffer} to read the first
+     *        pixel data
+     * @param scanlineStride the distance between the pixel data for the
+     *        start of one row of data in the buffer to the start of the
+     *        next row of data
+     */
+    public void setPixels(int x, int y, int w, int h,
+                          PixelFormat<IntBuffer> pixelformat,
+                          int buffer[], int offset, int scanlineStride);
+
+    /**
+     * Stores pixel data retrieved from a {@code PixelReader} instance
+     * into a rectangular region of the surface.
+     * The data for the pixel on the surface at {@code (dstx, dsty)}
+     * will be retrieved from the {@code reader} from its location
+     * {@code (srcx, srcy)}.
+     * This method performs an operation which is semantically equivalent to
+     * (though likely much faster than) this pseudo-code:
+     * <pre>
+     *     for (int y = 0; y < h, y++) {
+     *         for (int x = 0; x < w; x++) {
+     *             setArgb(dstx + x, dsty + y,
+     *                     reader.getArgb(srcx + x, srcy + y));
+     *         }
+     *     }
+     * </pre>
+     * 
+     * @param dstx the X coordinate of the rectangular region to write
+     * @param dsty the Y coordinate of the rectangular region to write
+     * @param w the width of the rectangular region to write
+     * @param h the height of the rectangular region to write
+     * @param reader the {@link PixelReader} used to get the pixel data
+     *        to write
+     * @param srcx the X coordinate of the data to read from {@code reader}
+     * @param srcy the Y coordinate of the data to read from {@code reader}
+     */
+    public void setPixels(int dstx, int dsty, int w, int h,
+                          PixelReader reader, int srcx, int srcy);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/src/javafx/scene/image/WritableImage.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,215 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.image;
+
+import com.sun.javafx.tk.PlatformImage;
+import java.nio.Buffer;
+import java.nio.ByteBuffer;
+import java.nio.IntBuffer;
+import javafx.beans.property.ReadOnlyObjectProperty;
+import javafx.scene.paint.Color;
+
+/**
+ * The {@code WritableImage} class represents a custom graphical image
+ * that is constructed from pixels supplied by the application, and possibly
+ * from {@code PixelReader} objects from any number of sources, including
+ * images read from a file or URL.
+ */
+public class WritableImage extends Image {
+    /**
+     * Construct an empty image of the specified dimensions.
+     * The image will initially be filled with transparent pixels.
+     * Images constructed this way will always be readable and writable
+     * so the corresponding getPixelReader() and getPixelWriter() will
+     * always return valid objects.
+     * 
+     * @param width the desired width of the writable image
+     * @param height the desired height of the desired image
+     */
+    public WritableImage(int width, int height) {
+        super(width, height);
+    }
+
+    /**
+     * Construct an image of the specified dimensions, initialized from
+     * the indicated {@link PixelReader}.
+     * The image will initially be filled with data returned from the
+     * {@code PixelReader}.
+     * If the {@code PixelReader} accesses a surface that does not contain
+     * the necessary number of pixel rows and columns then an
+     * {@link ArrayIndexOutOfBoundsException} will be thrown.
+     * Images constructed this way will always be readable and writable
+     * so the corresponding getPixelReader() and getPixelWriter() will
+     * always return valid objects.
+     * 
+     * @param width the desired width of the writable image and the
+     *        width of the region to be read from the {@code reader}
+     * @param height the desired height of the desired image and the
+     *        width of the region to be read from the {@code reader}
+     * @throws ArrayIndexOutOfBoundsException if the {@code reader} does
+     *         not access a surface of at least the requested dimensions
+     */
+    public WritableImage(PixelReader reader, int width, int height) {
+        super(width, height);
+        getPixelWriter().setPixels(0, 0, width, height, reader, 0, 0);
+    }
+
+    /**
+     * Construct an image of the specified dimensions, initialized from
+     * the indicated region of the {@link PixelReader}.
+     * The image will initially be filled with data returned from the
+     * {@code PixelReader} for the specified region.
+     * If the {@code PixelReader} accesses a surface that does not contain
+     * the necessary number of pixel rows and columns then an
+     * {@link ArrayIndexOutOfBoundsException} will be thrown.
+     * Images constructed this way will always be readable and writable
+     * so the corresponding getPixelReader() and getPixelWriter() will
+     * always return valid objects.
+     * 
+     * @param x the X coordinate of the upper left corner of the region to
+     *        read from the {@code reader}
+     * @param y the Y coordinate of the upper left corner of the region to
+     *        read from the {@code reader}
+     * @param width the desired width of the writable image and the
+     *        width of the region to be read from the {@code reader}
+     * @param height the desired height of the desired image and the
+     *        width of the region to be read from the {@code reader}
+     * @throws ArrayIndexOutOfBoundsException if the {@code reader} does
+     *         not access a surface containing at least the indicated region
+     */
+    public WritableImage(PixelReader reader,
+                         int x, int y, int width, int height)
+    {
+        super(width, height);
+        getPixelWriter().setPixels(0, 0, width, height, reader, x, y);
+    }
+
+    @Override
+    boolean isAnimation() {
+        return true;
+    }
+
+    @Override
+    boolean pixelsReadable() {
+        return true;
+    }
+
+    private PixelWriter writer;
+    /**
+     * This method returns a {@code PixelWriter} that provides access to
+     * write the pixels of the image.
+     * 
+     * @return the {@code PixelWriter} for writing pixels to the image
+     */
+    public PixelWriter getPixelWriter() {
+        if (getProgress() < 1.0 || isError()) {
+            return null;
+        }
+        if (writer == null) {
+            writer = new PixelWriter() {
+                ReadOnlyObjectProperty<PlatformImage> pimgprop =
+                    impl_platformImageProperty();
+
+                @Override
+                public PixelFormat getPixelFormat() {
+                    PlatformImage pimg = getWritablePlatformImage();
+                    return pimg.getPlatformPixelFormat();
+                }
+
+                @Override
+                public void setArgb(int x, int y, int argb) {
+                    getWritablePlatformImage().setArgb(x, y, argb);
+                    pixelsDirty();
+                }
+
+                @Override
+                public void setColor(int x, int y, Color c) {
+                    int a = (int) Math.round(c.getOpacity() * 255);
+                    int r = (int) Math.round(c.getRed()     * 255);
+                    int g = (int) Math.round(c.getGreen()   * 255);
+                    int b = (int) Math.round(c.getBlue()    * 255);
+                    setArgb(x, y, (a << 24) | (r << 16) | (g << 8) | b);
+                }
+
+                @Override
+                public <T extends Buffer>
+                    void setPixels(int x, int y, int w, int h,
+                                   PixelFormat<T> pixelformat,
+                                   T buffer, int scanlineStride)
+                {
+                    PlatformImage pimg = getWritablePlatformImage();
+                    for (int j = 0; j < h; j++) {
+                        for (int i = 0; i < w; i++) {
+                            int argb = pixelformat.getArgb(buffer, i, j,
+                                                           scanlineStride);
+                            pimg.setArgb(x+i, y+j, argb);
+                        }
+                    }
+//                    checkPixelAccess(true, true).setPixels(x, y, w, h,
+//                                                           buffer, pixelformat, scanlineStride);
+                    pixelsDirty();
+                }
+
+                @Override
+                public void setPixels(int x, int y, int w, int h,
+                                      PixelFormat<ByteBuffer> pixelformat,
+                                      byte buffer[], int offset, int scanlineStride)
+                {
+                    ByteBuffer bytebuf = ByteBuffer.wrap(buffer);
+                    bytebuf.position(offset);
+                    setPixels(x, y, w, h, pixelformat, bytebuf, scanlineStride);
+//                    checkPixelAccess(true, false).getPixels(x, y, w, h,
+//                                                            buffer, pixelformat, scanlineStride);
+                }
+
+                @Override
+                public void setPixels(int x, int y, int w, int h,
+                                      PixelFormat<IntBuffer> pixelformat,
+                                      int buffer[], int offset, int scanlineStride)
+                {
+                    IntBuffer intbuf = IntBuffer.wrap(buffer);
+                    intbuf.position(offset);
+                    setPixels(x, y, w, h, pixelformat, intbuf, scanlineStride);
+//                    checkPixelAccess(true, false).getPixels(x, y, w, h,
+//                                                            buffer, pixelformat, scanlineStride);
+                }
+
+                @Override
+                public void setPixels(int writex, int writey, int w, int h,
+                                      PixelReader reader, int readx, int ready)
+                {
+                    for (int y = 0; y < h; y++) {
+                        for (int x = 0; x < w; x++) {
+                            setArgb(writex + x, writey + y,
+                                    reader.getArgb(readx + x, ready + y));
+                        }
+                    }
+                }
+            };
+        }
+        return writer;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/src/javafx/scene/image/WritablePixelFormat.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,215 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.image;
+
+import java.nio.Buffer;
+import java.nio.ByteBuffer;
+import java.nio.IntBuffer;
+
+/**
+ * A {@link PixelFormat} object representing a pixel format that can store
+ * full colors and so can be used as a destination format to write pixel
+ * data from an arbitrary image.
+ */
+public abstract class WritablePixelFormat<T extends Buffer>
+    extends PixelFormat<T>
+{
+    WritablePixelFormat(Type type) {
+        super(type);
+    }
+
+    @Override
+    public boolean isWritable() {
+        return true;
+    }
+
+    /**
+     * Stores a 32-bit integer representation of the color in the buffer
+     * at the specified coordinates.
+     * The 32-bit integer will contain the 4 color components in separate
+     * 8-bit fields in ARGB order from the most significant byte to the least
+     * significant byte.
+     * The buffer should be positioned to the start of the pixel data such
+     * that {@code buf.get(0)} would return the pixel information for the
+     * pixel at coordinates {@code (0, 0)}.
+     * The {@scanlineStride} parameter defines the distance from the pixel
+     * data at the start of one row to the pixel data at the start of the
+     * immediately following row at the next higher Y coordinate.  Usually,
+     * {@scanlineStride} is the same as the width of the image multiplied
+     * by the number of data elements per pixel (1 for the case of the
+     * integer and indexed formats, or 3 or 4 in the case of the byte
+     * formats), but some images may have further padding between rows for
+     * alignment or other purposes.
+     * 
+     * @param buf the buffer of pixel data
+     * @param x the X coordinate of the pixel to be read
+     * @param y the Y coordinate of the pixel to be read
+     * @param scanlineStride the number of buffer elements between the
+     *        start of adjacent pixel rows in the buffer
+     * @param argb a 32-bit value with the color to be stored in the pixel
+     *        in a format similar to the {@code Type.INT_ARGB} pixel format
+     */
+    public abstract void setArgb(T buf, int x, int y, int scanlineStride,
+                                 int argb);
+
+    static class IntArgb extends WritablePixelFormat<IntBuffer> {
+        static final IntArgb INSTANCE = new IntArgb();
+
+        private IntArgb() {
+            super(Type.INT_ARGB);
+        }
+
+        @Override
+        public boolean isPremultiplied() {
+            return false;
+        }
+
+        @Override
+        public int getArgb(IntBuffer buf, int x, int y, int scanlineStride) {
+            return buf.get(y * scanlineStride + x);
+        }
+
+        @Override
+        public void setArgb(IntBuffer buf, int x, int y, int scanlineStride,
+                            int argb)
+        {
+            buf.put(y * scanlineStride + x, argb);
+        }
+    }
+
+    static class IntArgbPre extends WritablePixelFormat<IntBuffer> {
+        static final IntArgbPre INSTANCE = new IntArgbPre();
+
+        private IntArgbPre() {
+            super(Type.INT_ARGB_PRE);
+        }
+
+        @Override
+        public boolean isPremultiplied() {
+            return true;
+        }
+
+        @Override
+        public int getArgb(IntBuffer buf, int x, int y, int scanlineStride) {
+            return PretoNonPre(buf.get(y * scanlineStride + x));
+        }
+
+        @Override
+        public void setArgb(IntBuffer buf, int x, int y, int scanlineStride,
+                            int argb)
+        {
+            buf.put(y * scanlineStride + x, NonPretoPre(argb));
+        }
+    }
+
+    static class ByteBgra extends WritablePixelFormat<ByteBuffer> {
+        static final ByteBgra INSTANCE = new ByteBgra();
+
+        private ByteBgra() {
+            super(Type.BYTE_BGRA);
+        }
+
+        @Override
+        public boolean isPremultiplied() {
+            return false;
+        }
+
+        @Override
+        public int getArgb(ByteBuffer buf, int x, int y, int scanlineStride) {
+            int index = y * scanlineStride + x * 4;
+            int b = buf.get(index    ) & 0xff;
+            int g = buf.get(index + 1) & 0xff;
+            int r = buf.get(index + 2) & 0xff;
+            int a = buf.get(index + 3) & 0xff;
+            return (a << 24) | (r << 16) | (g << 8) | b;
+        }
+
+        @Override
+        public void setArgb(ByteBuffer buf, int x, int y, int scanlineStride,
+                            int argb)
+        {
+            int index = y * scanlineStride + x * 4;
+            buf.put(index,     (byte) (argb >> 24));
+            buf.put(index + 1, (byte) (argb >> 16));
+            buf.put(index + 2, (byte) (argb >>  8));
+            buf.put(index + 3, (byte) (argb      ));
+        }
+    }
+
+    static class ByteBgraPre extends WritablePixelFormat<ByteBuffer> {
+        static final ByteBgraPre INSTANCE = new ByteBgraPre();
+
+        private ByteBgraPre() {
+            super(Type.BYTE_BGRA_PRE);
+        }
+
+        @Override
+        public boolean isPremultiplied() {
+            return true;
+        }
+
+        @Override
+        public int getArgb(ByteBuffer buf, int x, int y, int scanlineStride) {
+            int index = y * scanlineStride + x * 4;
+            int b = buf.get(index    ) & 0xff;
+            int g = buf.get(index + 1) & 0xff;
+            int r = buf.get(index + 2) & 0xff;
+            int a = buf.get(index + 3) & 0xff;
+            if (a > 0x00 && a < 0xff) {
+                int halfa = a >> 1;
+                r = (r >= a) ? 0xff : (r * 0xff + halfa) / a;
+                g = (g >= a) ? 0xff : (g * 0xff + halfa) / a;
+                b = (b >= a) ? 0xff : (b * 0xff + halfa) / a;
+            }
+            return (a << 24) | (r << 16) | (g << 8) | b;
+        }
+
+        @Override
+        public void setArgb(ByteBuffer buf, int x, int y, int scanlineStride,
+                            int argb)
+        {
+            int index = y * scanlineStride + x * 4;
+            int a = (argb >>> 24);
+            int r, g, b;
+            if (a > 0x00) {
+                r = (argb >> 16) & 0xff;
+                g = (argb >>  8) & 0xff;
+                b = (argb      ) & 0xff;
+                if (a < 0xff) {
+                    r = (r * a) / 0xff;
+                    g = (g * a) / 0xff;
+                    b = (b * a) / 0xff;
+                }
+            } else {
+                a = r = g = b = 0;
+            }
+            buf.put(index,     (byte) a);
+            buf.put(index + 1, (byte) r);
+            buf.put(index + 2, (byte) g);
+            buf.put(index + 3, (byte) b);
+        }
+    }
+}
--- a/javafx-ui-common/src/javafx/scene/input/MouseEvent.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/javafx/scene/input/MouseEvent.java	Tue May 22 08:29:11 2012 -0700
@@ -398,6 +398,7 @@
      * @treatAsPrivate implementation detail
      * @deprecated This is an internal API that is not intended for use and will be removed in the next version
      */
+    // SB-dependency: RT-21224 has been filed to track this
     @Deprecated
     private static MouseEvent impl_mouseEvent(Object _source, EventTarget _target,
           double _x, double _y,
--- a/javafx-ui-common/src/javafx/scene/transform/Affine.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/javafx/scene/transform/Affine.java	Tue May 22 08:29:11 2012 -0700
@@ -66,9 +66,9 @@
     }
 
     // to be published
-    Affine(Double mxx, Double mxy, Double mxz, Double tx,
-            Double myx, Double myy, Double myz, Double ty,
-            Double mzx, Double mzy, Double mzz, Double tz) {
+    Affine(double mxx, double mxy, double mxz, double tx,
+            double myx, double myy, double myz, double ty,
+            double mzx, double mzy, double mzz, double tz) {
         if (mxx != 1.0) this.mxxProperty().set(mxx);
         if (mxy != 0.0) this.mxyProperty().set(mxy);
         if (mxz != 0.0) this.mxzProperty().set(mxz);
--- a/javafx-ui-common/src/javafx/scene/transform/Scale.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/javafx/scene/transform/Scale.java	Tue May 22 08:29:11 2012 -0700
@@ -35,9 +35,9 @@
  * by the specified factors. The matrix representing the scaling transformation
  * is as follows:
  * <pre>
- *              [ x    0   0   0 ]
- *              [ 0    y   0   0 ]
- *              [ 0    0   z   0 ]
+ *              [ x   0   0   (1-x)*pivotX ]
+ *              [ 0   y   0   (1-y)*pivotY ]
+ *              [ 0   0   z   (1-z)*pivotZ ]
  * </pre>
  */
 public class Scale extends Transform {
@@ -336,6 +336,23 @@
         return getZ();
     }
 
+    @Override
+    public double getTx() {
+        return (1-getX()) * getPivotX();
+    }
+
+    @Override
+    public double getTy() {
+        return (1-getY()) * getPivotY();
+    }
+
+    @Override
+    public double getTz() {
+        return (1-getZ()) * getPivotZ();
+    }
+
+
+
     /**
      * @treatAsPrivate implementation detail
      * @deprecated This is an internal API that is not intended for use and will be removed in the next version
--- a/javafx-ui-common/src/javafx/stage/PopupWindow.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/src/javafx/stage/PopupWindow.java	Tue May 22 08:29:11 2012 -0700
@@ -246,6 +246,28 @@
     public final BooleanProperty hideOnEscapeProperty() { return hideOnEscape; }
 
     /**
+     * Specifies whether the event, which caused the Popup to hide, should be
+     * consumed. Having the event consumed prevents it from triggering some
+     * additional UI response in the Popup's owner window.
+     * @defaultValue true
+     */
+    private BooleanProperty consumeAutoHidingEvents =
+            new SimpleBooleanProperty(this, "consumeAutoHidingEvents",
+                                      true);
+
+    public final void setConsumeAutoHidingEvents(boolean value) {
+        consumeAutoHidingEvents.set(value);
+    }
+
+    public final boolean getConsumeAutoHidingEvents() {
+        return consumeAutoHidingEvents.get();
+    }
+
+    public final BooleanProperty consumeAutoHidingEventsProperty() {
+        return consumeAutoHidingEvents;
+    }
+
+    /**
      * Show the popup.
      * @param owner The owner of the popup. This must not be null.
      */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/com/sun/javafx/scene/transform/TrasformUtilsTest.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.sun.javafx.scene.transform;
+
+import com.sun.javafx.test.TransformHelper;
+import javafx.scene.transform.Transform;
+import com.sun.javafx.geom.transform.Affine3D;
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class TrasformUtilsTest {
+    @Test
+    public void shouldCreateCorrectImmutableTransform() {
+        Transform t = TransformUtils.immutableTransform(
+                1,  2,  3,  4,
+                5,  6,  7,  8,
+                9, 10, 11, 12);
+
+        TransformHelper.assertMatrix(t,
+                1,  2,  3,  4,
+                5,  6,  7,  8,
+                9, 10, 11, 12);
+    }
+
+    @Test
+    public void immutableTransformShouldApplyCorrectly() {
+        Affine3D a = new Affine3D();
+        a.translate(10, 20);
+
+        Transform t = TransformUtils.immutableTransform(
+                1,  2,  3,  4,
+                5,  6,  7,  8,
+                9, 10, 11, 12);
+
+        t.impl_apply(a);
+
+        TransformHelper.assertMatrix(a,
+                1,  2,  3, 14,
+                5,  6,  7, 28,
+                9, 10, 11, 12);
+    }
+
+    @Test
+    public void immutableTransformShouldCopyCorrectly() {
+        Transform src = TransformUtils.immutableTransform(
+                1,  2,  3,  4,
+                5,  6,  7,  8,
+                9, 10, 11, 12);
+
+        Transform t = src.impl_copy();
+
+        TransformHelper.assertMatrix(t,
+                1,  2,  3,  4,
+                5,  6,  7,  8,
+                9, 10, 11, 12);
+    }
+
+    @Test public void testImmutableTransformToString() {
+        final Transform trans = TransformUtils.immutableTransform(
+                1,  2,  3,  4,
+                5,  6,  7,  8,
+                9, 10, 11, 12);
+        
+        String s = trans.toString();
+
+        assertNotNull(s);
+        assertFalse(s.isEmpty());
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/com/sun/javafx/test/BuilderTestBase.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,196 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.javafx.test;
+
+import com.sun.javafx.test.binding.ReflectionHelper;
+import java.lang.reflect.Array;
+
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.junit.Test;
+
+
+public abstract class BuilderTestBase {
+    private final Configuration configuration;
+
+    public BuilderTestBase(final Configuration configuration) {
+        this.configuration = configuration;
+    }
+
+    @Test
+    public void testBuilder() {
+        configuration.buildTest();
+    }
+
+    @Test
+    public void testEllipsis() {
+        configuration.ellipsisTest();
+    }
+
+    public static class Configuration {
+        private final List<BuilderProperty> properties;
+        private final List<BuilderProperty> typedProperties;
+        private final Class<?> bean;
+
+        private static class BuilderProperty {
+            public PropertyReference propertyReference;
+            public Object expectedValue;
+            public ValueComparator comparator = ValueComparator.DEFAULT;
+            public Class<?> type;
+            BuilderProperty(PropertyReference pr,
+                    Object value,
+                    ValueComparator comparator,
+                    Class<?> type) {
+                this.propertyReference = pr;
+                this.expectedValue = value;
+                this.comparator = comparator;
+                this.type = type;
+            }
+        }
+
+        public Configuration(Class<?> bean) {
+            properties = new LinkedList<BuilderProperty> ();
+            typedProperties = new LinkedList<BuilderProperty> ();
+            this.bean = bean;
+        }
+
+        public void addProperty(String property, Object propertyValue) {
+            PropertyReference pr = PropertyReference.createForBean(bean, property);
+            properties.add(new BuilderProperty(pr, propertyValue, ValueComparator.DEFAULT, null));
+        }
+
+        public void addProperty(String property, Object propertyValue, ValueComparator comparator) {
+            PropertyReference pr = PropertyReference.createForBean(bean, property);
+            properties.add(new BuilderProperty(pr, propertyValue, comparator, null));
+        }
+
+        public void addProperty(String property, Class<?> elementType, Collection values) {
+            PropertyReference pr = PropertyReference.createForBean(bean, property);
+            properties.add(new BuilderProperty(pr, values, ValueComparator.DEFAULT, elementType));
+            typedProperties.add(new BuilderProperty(pr, values, ValueComparator.DEFAULT, elementType));
+        }
+
+        public void buildTest() {
+            // create builder
+            final String builderClassName = bean.getName() + "Builder";
+
+            Class<?> builderClass;
+            try {
+                builderClass = Class.forName(builderClassName);
+            } catch (final ClassNotFoundException e) {
+                // if there is no builder for the bean, we return
+                return;
+            }
+
+            Method createMethod = ReflectionHelper.getMethod(builderClass, "create");
+            Object builder = ReflectionHelper.invokeMethod(null, createMethod);
+
+            for (BuilderProperty builderProperty : properties) {
+                PropertyReference property = builderProperty.propertyReference;
+                Object value = builderProperty.expectedValue;
+
+                Method m = null;
+                Class<?> valueType = property.getValueType();
+                try {
+                    m = ReflectionHelper.getMethod(builderClass, property.getPropertyName(), valueType);
+                } catch (RuntimeException e) {
+                    // in some cases Collections are handled separately in builders
+                    // we need to use Collection class directly
+                    if (Collection.class.isAssignableFrom(valueType)) {
+                        valueType = Collection.class;
+                        m = ReflectionHelper.getMethod(builderClass, property.getPropertyName(), valueType);
+                    } else {
+                        throw e;
+                    }
+                }
+                ReflectionHelper.invokeMethod(builder, m, value);
+            }
+
+            // create new object via builder
+            Method buildMethod = ReflectionHelper.getMethod(builderClass, "build");
+            Object object = ReflectionHelper.invokeMethod(builder, buildMethod);
+
+
+            // check whether the object was created correctly
+            for (BuilderProperty builderProperty : properties) {
+                PropertyReference property = builderProperty.propertyReference;
+                Object expectedValue = builderProperty.expectedValue;
+
+                builderProperty.comparator.assertEquals(expectedValue, property.getValue(object));
+            }
+        }
+
+        public void ellipsisTest() {
+            if (typedProperties.isEmpty()) {
+                return; // nothing to test
+            }
+
+            // create builder
+            final String builderClassName = bean.getName() + "Builder";
+
+            Class<?> builderClass;
+            try {
+                builderClass = Class.forName(builderClassName);
+            } catch (final ClassNotFoundException e) {
+                // if there is no builder for the bean, we return
+                return;
+            }
+
+            Method createMethod = ReflectionHelper.getMethod(builderClass, "create");
+            Object builder = ReflectionHelper.invokeMethod(null, createMethod);
+
+            for (BuilderProperty builderProperty : typedProperties) {
+                PropertyReference property = builderProperty.propertyReference;
+                Object value = builderProperty.expectedValue;
+
+
+                Class<?> valueType = Array.newInstance(builderProperty.type, 0).getClass();
+                Method m = ReflectionHelper.getMethod(builderClass, property.getPropertyName(), valueType);
+                ReflectionHelper.invokeMethod(builder, m, (Object) ((Collection) value).toArray());
+            }
+
+            // create new object via builder
+            Method buildMethod = ReflectionHelper.getMethod(builderClass, "build");
+            Object object = ReflectionHelper.invokeMethod(builder, buildMethod);
+
+
+            // check whether the object was created correctly
+            for (BuilderProperty builderProperty : typedProperties) {
+                PropertyReference property = builderProperty.propertyReference;
+                Object expectedValue = builderProperty.expectedValue;
+
+                builderProperty.comparator.assertEquals(expectedValue, property.getValue(object));
+            }
+        }
+    }
+
+    public static Object[] config(final Configuration configuration) {
+        return new Object[] { configuration };
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/com/sun/javafx/test/DoubleComparator.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.javafx.test;
+
+public class DoubleComparator extends ValueComparator {
+
+    private double delta;
+
+    public DoubleComparator(double delta) {
+        this.delta = delta;
+    }
+
+    @Override
+    public boolean equals(Object expected, Object actual) {
+        if (expected == actual) {
+            return true;
+        }
+
+        if (!(expected instanceof Number)) {
+            return false;
+        }
+        if (!(actual instanceof Number)) {
+            return false;
+        }
+
+        double bExpectend = ((Number) expected).doubleValue();
+        double bActual = ((Number) actual).doubleValue();
+
+        if (Math.abs(bExpectend - bActual) > delta) {
+            return false;
+        }
+
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/com/sun/javafx/test/TransformHelper.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.sun.javafx.test;
+
+import javafx.scene.transform.Transform;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+import com.sun.javafx.geom.transform.Affine3D;
+import javafx.scene.Node;
+import javafx.scene.transform.Affine;
+
+public class TransformHelper {
+    public static void assertMatrix(Transform matrix,
+            double mxx, double mxy, double mxz, double tx,
+            double myx, double myy, double myz, double ty,
+            double mzx, double mzy, double mzz, double tz) {
+        assertEquals(mxx, matrix.getMxx(), 0.00001);
+        assertEquals(mxy, matrix.getMxy(), 0.00001);
+        assertEquals(mxz, matrix.getMxz(), 0.00001);
+        assertEquals(tx, matrix.getTx(), 0.00001);
+        assertEquals(myx, matrix.getMyx(), 0.00001);
+        assertEquals(myy, matrix.getMyy(), 0.00001);
+        assertEquals(myz, matrix.getMyz(), 0.00001);
+        assertEquals(ty, matrix.getTy(), 0.00001);
+        assertEquals(mzx, matrix.getMzx(), 0.00001);
+        assertEquals(mzy, matrix.getMzy(), 0.00001);
+        assertEquals(mzz, matrix.getMzz(), 0.00001);
+        assertEquals(tz, matrix.getTz(), 0.00001);
+    }
+
+    public static void assertMatrix(Affine3D matrix,
+            double mxx, double mxy, double mxz, double tx,
+            double myx, double myy, double myz, double ty,
+            double mzx, double mzy, double mzz, double tz) {
+        assertEquals(mxx, matrix.getMxx(), 0.00001);
+        assertEquals(mxy, matrix.getMxy(), 0.00001);
+        assertEquals(mxz, matrix.getMxz(), 0.00001);
+        assertEquals(tx, matrix.getMxt(), 0.00001);
+        assertEquals(myx, matrix.getMyx(), 0.00001);
+        assertEquals(myy, matrix.getMyy(), 0.00001);
+        assertEquals(myz, matrix.getMyz(), 0.00001);
+        assertEquals(ty, matrix.getMyt(), 0.00001);
+        assertEquals(mzx, matrix.getMzx(), 0.00001);
+        assertEquals(mzy, matrix.getMzy(), 0.00001);
+        assertEquals(mzz, matrix.getMzz(), 0.00001);
+        assertEquals(tz, matrix.getMzt(), 0.00001);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/animation/FadeTransition_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.animation;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.shape.Rectangle;
+import javafx.util.Duration;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class FadeTransition_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(FadeTransition.class);
+
+        cfg.addProperty("duration", Duration.INDEFINITE);
+        cfg.addProperty("fromValue", 1.0);
+        cfg.addProperty("byValue", 2.0);
+        cfg.addProperty("toValue", 3.0);
+        cfg.addProperty("node", new Rectangle());
+        cfg.addProperty("interpolator", Interpolator.DISCRETE);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public FadeTransition_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/animation/FillTransition_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.animation;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.paint.Color;
+import javafx.scene.shape.Rectangle;
+import javafx.util.Duration;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class FillTransition_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(FillTransition.class);
+
+        cfg.addProperty("duration", Duration.INDEFINITE);
+        cfg.addProperty("fromValue", Color.RED);
+        cfg.addProperty("toValue", Color.BLUE);
+        cfg.addProperty("shape", new Rectangle());
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public FillTransition_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/animation/ParallelTransition_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.animation;
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.shape.Rectangle;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class ParallelTransition_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(ParallelTransition.class);
+
+        cfg.addProperty("children", Animation.class, Arrays.asList(new FadeTransition(), new FillTransition()));
+        cfg.addProperty("node", new Rectangle());
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public ParallelTransition_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/animation/PathTransition_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.animation;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.animation.PathTransition.OrientationType;
+import javafx.scene.shape.Rectangle;
+import javafx.util.Duration;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class PathTransition_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(PathTransition.class);
+
+        cfg.addProperty("duration", Duration.INDEFINITE);
+        cfg.addProperty("path", new Rectangle());
+        cfg.addProperty("orientation", OrientationType.ORTHOGONAL_TO_TANGENT);
+        cfg.addProperty("node", new Rectangle());
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public PathTransition_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/animation/PauseTransition_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.animation;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.util.Duration;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class PauseTransition_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(PauseTransition.class);
+
+        cfg.addProperty("duration", Duration.INDEFINITE);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public PauseTransition_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/animation/RotateTransition_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.animation;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.geometry.Point3D;
+import javafx.scene.shape.Rectangle;
+import javafx.util.Duration;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class RotateTransition_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(RotateTransition.class);
+
+        cfg.addProperty("duration", Duration.INDEFINITE);
+        cfg.addProperty("axis", new Point3D(0.0, 1.0, 2.0));
+        cfg.addProperty("fromAngle", 1.0);
+        cfg.addProperty("byAngle", 2.0);
+        cfg.addProperty("toAngle", 3.0);
+        cfg.addProperty("node", new Rectangle());
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public RotateTransition_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/animation/ScaleTransition_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.animation;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.shape.Rectangle;
+import javafx.util.Duration;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class ScaleTransition_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(ScaleTransition.class);
+
+        cfg.addProperty("duration", Duration.INDEFINITE);
+        cfg.addProperty("fromX", 1.0);
+        cfg.addProperty("fromY", 4.0);
+        cfg.addProperty("fromZ", 7.0);
+        cfg.addProperty("byX", 2.0);
+        cfg.addProperty("byY", 5.0);
+        cfg.addProperty("byZ", 8.0);
+        cfg.addProperty("toX", 3.0);
+        cfg.addProperty("toY", 6.0);
+        cfg.addProperty("toZ", 9.0);
+        cfg.addProperty("node", new Rectangle());
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public ScaleTransition_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/animation/SequentialTransition_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.animation;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.shape.Rectangle;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class SequentialTransition_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(SequentialTransition.class);
+
+        cfg.addProperty("children", Animation.class, Arrays.asList(new FadeTransition(), new FillTransition()));
+        cfg.addProperty("node", new Rectangle());
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public SequentialTransition_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/animation/StrokeTransition_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.animation;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.paint.Color;
+import javafx.scene.shape.Rectangle;
+import javafx.util.Duration;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class StrokeTransition_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(StrokeTransition.class);
+
+        cfg.addProperty("duration", Duration.INDEFINITE);
+        cfg.addProperty("fromValue", Color.RED);
+        cfg.addProperty("toValue", Color.BLUE);
+        cfg.addProperty("shape", new Rectangle());
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public StrokeTransition_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/animation/TranslateTransition_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.animation;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.shape.Rectangle;
+import javafx.util.Duration;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class TranslateTransition_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(TranslateTransition.class);
+
+        cfg.addProperty("duration", Duration.INDEFINITE);
+        cfg.addProperty("fromX", 1.0);
+        cfg.addProperty("fromY", 4.0);
+        cfg.addProperty("fromZ", 7.0);
+        cfg.addProperty("byX", 2.0);
+        cfg.addProperty("byY", 5.0);
+        cfg.addProperty("byZ", 8.0);
+        cfg.addProperty("toX", 3.0);
+        cfg.addProperty("toY", 6.0);
+        cfg.addProperty("toZ", 9.0);
+        cfg.addProperty("node", new Rectangle());
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public TranslateTransition_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/geometry/BoundingBox_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.geometry;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class BoundingBox_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(BoundingBox.class);
+
+        cfg.addProperty("minX", 1.0);
+        cfg.addProperty("minY", 2.0);
+        cfg.addProperty("minZ", 3.0);
+        cfg.addProperty("width", 10.0);
+        cfg.addProperty("height", 20.0);
+        cfg.addProperty("depth", 30.0);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public BoundingBox_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/geometry/Dimension2D_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.geometry;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Dimension2D_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Dimension2D.class);
+
+        cfg.addProperty("width", 10.0);
+        cfg.addProperty("height", 20.0);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Dimension2D_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/geometry/Insets_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.geometry;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Insets_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Insets.class);
+
+        cfg.addProperty("top", 10.0);
+        cfg.addProperty("right", 20.0);
+        cfg.addProperty("bottom", 30.0);
+        cfg.addProperty("left", 40.0);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Insets_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/geometry/Point2D_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.geometry;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Point2D_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Point2D.class);
+
+        cfg.addProperty("x", 10.0);
+        cfg.addProperty("y", 20.0);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Point2D_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/geometry/Point3D_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.geometry;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Point3D_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Point3D.class);
+
+        cfg.addProperty("x", 10.0);
+        cfg.addProperty("y", 20.0);
+        cfg.addProperty("z", 30.0);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Point3D_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/geometry/Rectangle2D_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.geometry;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Rectangle2D_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Rectangle2D.class);
+
+        cfg.addProperty("minX", 1.0);
+        cfg.addProperty("minY", 2.0);
+        cfg.addProperty("width", 10.0);
+        cfg.addProperty("height", 20.0);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Rectangle2D_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/Group_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene;
+
+
+import com.sun.javafx.scene.traversal.TraversalEngine;
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.shape.Rectangle;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Group_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Group.class);
+
+        cfg.addProperty("autoSizeChildren", false);
+        cfg.addProperty("children", Node.class, Arrays.asList(new Rectangle()));
+        cfg.addProperty("impl_traversalEngine", new TraversalEngine(new Group(), true));
+        cfg.addProperty("stylesheets", String.class, Arrays.asList("test.css"));
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Group_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/ImageCursor_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.image.TestImages;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class ImageCursor_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(ImageCursor.class);
+
+        cfg.addProperty("image", TestImages.TEST_IMAGE_100x200);
+        cfg.addProperty("hotspotX", 0.5);
+        cfg.addProperty("hotspotY", 0.6);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public ImageCursor_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/Node_LocalToParentTransform_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package javafx.scene;
+
+import com.sun.javafx.test.TransformHelper;
+import javafx.scene.transform.Translate;
+import javafx.scene.shape.Rectangle;
+import javafx.beans.Observable;
+import javafx.beans.InvalidationListener;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+public class Node_LocalToParentTransform_Test {
+    private boolean notified;
+
+    @Test
+    public void notTransformedNodeShouldReturnIdentity() {
+        Node n = new Rectangle(20, 20);
+        TransformHelper.assertMatrix(n.getLocalToParentTransform(),
+                1, 0, 0, 0,
+                0, 1, 0, 0,
+                0, 0, 1, 0);
+    }
+
+    @Test
+    public void shouldConsiderBothTransformListAndConvenientTransforms() {
+        Node n = new Rectangle(20, 20);
+
+        n.setTranslateX(10);
+        n.setScaleY(10);
+        n.getTransforms().add(new Translate(5, 6));
+
+        TransformHelper.assertMatrix(n.getLocalToParentTransform(),
+                1,  0, 0,  15,
+                0, 10, 0, -30,
+                0,  0, 1,   0);
+    }
+
+    @Test
+    public void shouldBeUpToDate() {
+        Node n = new Rectangle(20, 20);
+
+        n.setTranslateX(10);
+
+        TransformHelper.assertMatrix(n.getLocalToParentTransform(),
+                1, 0, 0, 10,
+                0, 1, 0, 0,
+                0, 0, 1, 0);
+
+        n.setTranslateX(20);
+
+        TransformHelper.assertMatrix(n.getLocalToParentTransform(),
+                1, 0, 0, 20,
+                0, 1, 0,  0,
+                0, 0, 1,  0);
+    }
+
+    @Test
+    public void shouldBeNotifiedWhenNodeTransforms() {
+        final Node n = new Rectangle(20, 20);
+        n.localToParentTransformProperty().addListener(new InvalidationListener() {
+            public void invalidated(Observable o) {
+                if (!notified) {
+                    notified = true;
+                    TransformHelper.assertMatrix(n.getLocalToParentTransform(),
+                        1, 0, 0, 10,
+                        0, 1, 0, 20,
+                        0, 0, 1,  0);
+                }
+            }
+        });
+
+        notified = false;
+        n.getTransforms().add(new Translate(10, 20));
+        assertTrue(notified);
+
+        n.getTransforms().clear();
+        n.getTransforms().add(new Translate(10, 0));
+        n.getLocalToParentTransform();
+
+        notified = false;
+        n.setTranslateY(20);
+        assertTrue(notified);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/Node_LocalToSceneTransform_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,351 @@
+/*
+ * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package javafx.scene;
+
+import com.sun.javafx.test.TransformHelper;
+import javafx.scene.transform.Translate;
+import javafx.scene.shape.Rectangle;
+import javafx.beans.Observable;
+import java.lang.reflect.Method;
+import javafx.beans.InvalidationListener;
+import javafx.beans.property.ReadOnlyObjectProperty;
+import javafx.scene.transform.Transform;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+public class Node_LocalToSceneTransform_Test {
+    private boolean notified;
+
+    @Test
+    public void notTransformedNodeShouldReturnIdentity() {
+        Node n = new Rectangle(20, 20);
+        TransformHelper.assertMatrix(n.getLocalToSceneTransform(),
+                1, 0, 0, 0,
+                0, 1, 0, 0,
+                0, 0, 1, 0);
+    }
+
+    @Test
+    public void noListenersShouldBeAddedByDefault() throws Exception {
+        Node r = new Rectangle(20, 20);
+        Group n = new Group(r);
+        Group p = new Group(n);
+
+        p.getLocalToSceneTransform();
+        n.getLocalToSceneTransform();
+        r.getLocalToSceneTransform();
+
+        p.setTranslateX(10);
+        p.setRotate(80);
+
+        // n didn't react on its parent's transformation
+        TransformHelper.assertMatrix(n.getCurrentLocalToSceneTransformState(),
+                1, 0, 0, 0,
+                0, 1, 0, 0,
+                0, 0, 1, 0);
+    }
+
+    @Test
+    public void shouldConsiderAllParents() {
+        Node n = new Rectangle(20, 20);
+        Group p1 = new Group(n);
+        Group p2 = new Group(p1);
+
+        n.setTranslateX(10);
+        p1.setTranslateY(20);
+        p2.getTransforms().add(new Translate(5, 6));
+
+        TransformHelper.assertMatrix(n.getLocalToSceneTransform(),
+                1, 0, 0, 15,
+                0, 1, 0, 26,
+                0, 0, 1, 0);
+    }
+
+    @Test
+    public void shouldBeUpToDate() {
+        Node n = new Rectangle(20, 20);
+        Group p1 = new Group(n);
+        Group p2 = new Group(p1);
+
+        n.setTranslateX(10);
+        p1.setTranslateY(20);
+        p2.getTransforms().add(new Translate(5, 6));
+
+        TransformHelper.assertMatrix(n.getLocalToSceneTransform(),
+                1, 0, 0, 15,
+                0, 1, 0, 26,
+                0, 0, 1, 0);
+
+        n.setTranslateX(0);
+        p1.setTranslateY(0);
+        p2.getTransforms().clear();
+        p2.setScaleY(10);
+
+        TransformHelper.assertMatrix(n.getLocalToSceneTransform(),
+                1,  0, 0,   0,
+                0, 10, 0, -90,
+                0,  0, 1,   0);
+    }
+
+    @Test
+    public void shouldBeNotifiedWhenThisTransforms() {
+        final Node n = new Rectangle(20, 20);
+        n.localToSceneTransformProperty().addListener(new InvalidationListener() {
+            public void invalidated(Observable o) {
+                notified = true;
+                TransformHelper.assertMatrix(n.getLocalToSceneTransform(),
+                    1, 0, 0, 10,
+                    0, 1, 0, 20,
+                    0, 0, 1,  0);
+            }
+        });
+
+        notified = false;
+        n.getTransforms().add(new Translate(10, 20));
+        assertTrue(notified);
+    }
+    
+    @Test
+    public void shouldBeNotifiedWhenParentTransforms() {
+        final Node n = new Rectangle(20, 20);
+        final Group g = new Group(n);
+        n.localToSceneTransformProperty().addListener(new InvalidationListener() {
+            public void invalidated(Observable o) {
+                notified = true;
+                TransformHelper.assertMatrix(n.getLocalToSceneTransform(),
+                    1, 0, 0, 10,
+                    0, 1, 0, 20,
+                    0, 0, 1,  0);
+            }
+        });
+
+        notified = false;
+        g.getTransforms().add(new Translate(10, 20));
+        assertTrue(notified);
+    }
+
+    @Test
+    public void shouldBeNotifiedOnReparent() {
+        final Node n = new Rectangle(20, 20);
+        final Group g = new Group(n);
+        final Group g2 = new Group();
+        g2.setTranslateX(100);
+
+        n.localToSceneTransformProperty().addListener(new InvalidationListener() {
+            public void invalidated(Observable o) {
+                if (n.getParent() != null) {
+                    notified = true;
+                    TransformHelper.assertMatrix(n.getLocalToSceneTransform(),
+                        1, 0, 0, 100,
+                        0, 1, 0,   0,
+                        0, 0, 1,   0);
+                } else {
+                    TransformHelper.assertMatrix(n.getLocalToSceneTransform(),
+                        1, 0, 0, 0,
+                        0, 1, 0, 0,
+                        0, 0, 1, 0);
+                }
+            }
+        });
+
+        notified = false;
+        g2.getChildren().add(n);
+        assertTrue(notified);
+    }
+
+    @Test
+    public void shouldBeNotifiedWhenParentTransformsAfterReparent() {
+        final Node n = new Rectangle(20, 20);
+        final Group g = new Group(n);
+        final Group g2 = new Group();
+        g.setTranslateX(50);
+        g2.setTranslateX(100);
+
+        n.localToSceneTransformProperty().addListener(new InvalidationListener() {
+            public void invalidated(Observable o) {
+                if (!notified) {
+                    notified = true;
+                    TransformHelper.assertMatrix(n.getLocalToSceneTransform(),
+                        1, 0, 0, 60,
+                        0, 1, 0,  0,
+                        0, 0, 1,  0);
+                } else {
+                    // enable next invalidation
+                    n.getLocalToSceneTransform();
+                }
+            }
+        });
+
+        // disable listener
+        notified = true;
+        g2.getChildren().add(n);
+        // enable listener
+        notified = false;
+        g2.setTranslateX(60);
+        assertTrue(notified);
+    }
+
+    @Test
+    public void shouldUnregisterListenersWhenNotNeeded() {
+        final Node n = new Rectangle(20, 20);
+        final Group p1 = new Group(n);
+        final Group p2 = new Group(p1);
+
+        InvalidationListener lstnr = new InvalidationListener() {
+            public void invalidated(Observable o) {
+                n.getLocalToSceneTransform();
+            }
+        };
+
+        n.localToSceneTransformProperty().addListener(lstnr);
+
+        // with listener on leave, parents update
+        p2.setTranslateX(30);
+        TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
+                1, 0, 0, 30,
+                0, 1, 0,  0,
+                0, 0, 1,  0);
+
+        // without listener on leave, parents don't update
+        n.localToSceneTransformProperty().removeListener(lstnr);
+        p2.setTranslateX(60);
+        TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
+                1, 0, 0, 30,
+                0, 1, 0,  0,
+                0, 0, 1,  0);
+
+        // with listener on leave again, parents update again
+        n.localToSceneTransformProperty().addListener(lstnr);
+        p2.setTranslateX(90);
+        TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
+                1, 0, 0, 90,
+                0, 1, 0,  0,
+                0, 0, 1,  0);
+    }
+
+    @Test
+    public void shouldUnregisterListenersWhenReparent() {
+        final Node n = new Rectangle(20, 20);
+        final Group p1 = new Group(n);
+        final Group p2 = new Group(p1);
+        final Group g = new Group();
+
+        InvalidationListener lstnr = new InvalidationListener() {
+            public void invalidated(Observable o) {
+                n.getLocalToSceneTransform();
+            }
+        };
+
+        n.localToSceneTransformProperty().addListener(lstnr);
+
+        // with listener on leave, parents update
+        p2.setTranslateX(30);
+        TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
+                1, 0, 0, 30,
+                0, 1, 0,  0,
+                0, 0, 1,  0);
+
+        // child with listener is moved away, parents stop updating
+        g.getChildren().add(n);
+        p2.setTranslateX(60);
+        TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
+                1, 0, 0, 30,
+                0, 1, 0,  0,
+                0, 0, 1,  0);
+
+        // leaf with listener moved back, parents update again
+        p1.getChildren().add(n);
+        p2.setTranslateX(90);
+        TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
+                1, 0, 0, 90,
+                0, 1, 0,  0,
+                0, 0, 1,  0);
+    }
+
+    @Test
+    public void shouldNotUnregisterListenerIfThereIsOtherReason() {
+        final Node n = new Rectangle(20, 20);
+        final Group p1 = new Group(n);
+        final Group p2 = new Group(p1);
+        final Group g = new Group();
+
+        InvalidationListener nlstnr = new InvalidationListener() {
+            public void invalidated(Observable o) {
+                n.getLocalToSceneTransform();
+            }
+        };
+        InvalidationListener plstnr = new InvalidationListener() {
+            public void invalidated(Observable o) {
+                p1.getLocalToSceneTransform();
+            }
+        };
+
+        n.localToSceneTransformProperty().addListener(nlstnr);
+        p1.localToSceneTransformProperty().addListener(plstnr);
+
+        // with listeners, parents update
+        p2.setTranslateX(30);
+        TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
+                1, 0, 0, 30,
+                0, 1, 0,  0,
+                0, 0, 1,  0);
+
+        // child moved away, but there is still listener on parent
+        g.getChildren().add(n);
+        p2.setTranslateX(60);
+        TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
+                1, 0, 0, 60,
+                0, 1, 0,  0,
+                0, 0, 1,  0);
+
+        // removed even the listener on parent, now we can stop updating
+        p1.localToSceneTransformProperty().removeListener(plstnr);
+        p2.setTranslateX(90);
+        TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
+                1, 0, 0, 60,
+                0, 1, 0,  0,
+                0, 0, 1,  0);
+
+        // return both listener and child
+        p1.localToSceneTransformProperty().addListener(plstnr);
+        p1.getChildren().add(n);
+
+        // remove the listener, must still update because of the child
+        p1.localToSceneTransformProperty().removeListener(plstnr);
+        p2.setTranslateX(45);
+        TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
+                1, 0, 0, 45,
+                0, 1, 0,  0,
+                0, 0, 1,  0);
+
+        // remove the child as well, now we can stop updating
+        g.getChildren().add(n);
+        p2.setTranslateX(25);
+        TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
+                1, 0, 0, 45,
+                0, 1, 0,  0,
+                0, 0, 1,  0);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/Node_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,309 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.event.Event;
+import javafx.event.EventDispatchChain;
+import javafx.event.EventDispatcher;
+import javafx.event.EventHandler;
+import javafx.geometry.Point2D;
+import javafx.scene.effect.BlendMode;
+import javafx.scene.effect.BoxBlur;
+import javafx.scene.input.InputMethodRequests;
+import javafx.scene.shape.Rectangle;
+import javafx.scene.transform.Rotate;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Node_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Rectangle.class);
+
+        cfg.addProperty("blendMode", BlendMode.ADD);
+        cfg.addProperty("cache", true);
+        cfg.addProperty("cacheHint", CacheHint.QUALITY);
+        cfg.addProperty("clip", new Rectangle());
+        cfg.addProperty("cursor", Cursor.HAND);
+        cfg.addProperty("depthTest", DepthTest.ENABLE);
+        cfg.addProperty("disable", true);
+        cfg.addProperty("effect", new BoxBlur());
+        cfg.addProperty("eventDispatcher", new EventDispatcher() {
+            @Override
+            public Event dispatchEvent(Event event, EventDispatchChain tail) {
+                return null;
+            }
+        });
+        cfg.addProperty("focusTraversable", true);
+        cfg.addProperty("id", "ID");
+        cfg.addProperty("inputMethodRequests", new InputMethodRequests() {
+            @Override
+            public Point2D getTextLocation(int i) {
+                return null;
+            }
+            @Override
+            public int getLocationOffset(int i, int i1) {
+                return 0;
+            }
+            @Override
+            public void cancelLatestCommittedText() {
+            }
+            @Override
+            public String getSelectedText() {
+                return "";
+            }
+        });
+        cfg.addProperty("layoutX", 1.0);
+        cfg.addProperty("layoutY", 2.0);
+        cfg.addProperty("managed", true);
+        cfg.addProperty("mouseTransparent", true);
+        cfg.addProperty("onContextMenuRequested", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onDragDetected", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onDragDone", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onDragDropped", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onDragEntered", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onDragExited", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onDragOver", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onInputMethodTextChanged", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onKeyPressed", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onKeyReleased", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onKeyTyped", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseClicked", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseDragEntered", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseDragExited", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseDragged", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseDragOver", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseDragReleased", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseEntered", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseExited", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseMoved", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMousePressed", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseReleased", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onRotate", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onRotationFinished", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onRotationStarted", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onScroll", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onScrollFinished", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onScrollStarted", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onSwipeDown", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onSwipeLeft", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onSwipeRight", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onSwipeUp", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onTouchMoved", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onTouchPressed", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onTouchReleased", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onTouchStationary", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onZoom", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onZoomFinished", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onZoomStarted", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("opacity", 0.7);
+        cfg.addProperty("pickOnBounds", true);
+        cfg.addProperty("rotate", 0.2);
+        cfg.addProperty("scaleX", 1.0);
+        cfg.addProperty("scaleY", 2.0);
+        cfg.addProperty("scaleZ", 3.0);
+        cfg.addProperty("style", "");
+        cfg.addProperty("translateX", 1.0);
+        cfg.addProperty("translateY", 1.0);
+        cfg.addProperty("translateZ", 1.0);
+        cfg.addProperty("userData", null);
+        cfg.addProperty("visible", false);
+        cfg.addProperty("styleClass", String.class, Arrays.asList(""));
+        cfg.addProperty("transforms",  Arrays.asList(new Rotate()));
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Node_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/PerspectiveCamera_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene;
+
+
+import com.sun.javafx.scene.traversal.TraversalEngine;
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.shape.Rectangle;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class PerspectiveCamera_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(PerspectiveCamera.class);
+
+        cfg.addProperty("fieldOfView", 1.0);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public PerspectiveCamera_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/Scene_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,269 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.event.Event;
+import javafx.event.EventDispatchChain;
+import javafx.event.EventDispatcher;
+import javafx.event.EventHandler;
+import javafx.scene.paint.Color;
+import javafx.scene.shape.Rectangle;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Scene_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Scene.class);
+
+        cfg.addProperty("camera", new PerspectiveCamera());
+        cfg.addProperty("cursor", Cursor.HAND);
+        cfg.addProperty("eventDispatcher", new EventDispatcher() {
+            @Override
+            public Event dispatchEvent(Event event, EventDispatchChain tail) {
+                return null;
+            }
+        });
+        cfg.addProperty("fill", Color.BLUE);
+        cfg.addProperty("onContextMenuRequested", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onDragDetected", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onDragDone", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onDragDropped", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onDragEntered", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onDragExited", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onDragOver", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onInputMethodTextChanged", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onKeyPressed", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onKeyReleased", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onKeyTyped", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseClicked", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseDragEntered", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseDragExited", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseDragged", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseDragOver", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseDragReleased", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseEntered", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseExited", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseMoved", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMousePressed", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onMouseReleased", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onRotate", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onRotationFinished", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onRotationStarted", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onScroll", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onScrollFinished", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onScrollStarted", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onSwipeDown", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onSwipeLeft", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onSwipeRight", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onSwipeUp", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onTouchMoved", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onTouchPressed", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onTouchReleased", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onTouchStationary", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onZoom", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onZoomFinished", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("onZoomStarted", new EventHandler<Event>() {
+            @Override
+            public void handle(Event event) {
+            }
+        });
+        cfg.addProperty("root", new Group());
+        cfg.addProperty("width", 100.0);
+        cfg.addProperty("height", 200.0);
+        cfg.addProperty("depthBuffer", true);
+        cfg.addProperty("stylesheets", Arrays.asList("test.css"));
+
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Scene_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
\ No newline at end of file
--- a/javafx-ui-common/test/unit/javafx/scene/Scene_properties_Test.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/test/unit/javafx/scene/Scene_properties_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -25,6 +25,7 @@
 
 package javafx.scene;
 
+import com.sun.javafx.cursor.CursorFrame;
 import com.sun.javafx.event.EventHandlerManager;
 import java.util.Arrays;
 import java.util.Collection;
@@ -67,11 +68,18 @@
 //            config(testScene, "height", , ),
             config(testScene, "camera", null, new ParallelCamera()),
             config(testScene, "fill", Color.WHITE, Color.BLACK),
+            config(testScene, "fill", null, Color.TRANSPARENT),
             config(testScene, "root", new Group(), new Pane()),
+            config(testScene, "cursor", null, new Cursor("TestCursor") {
+                @Override public CursorFrame impl_getCurrentFrame() {
+                    throw new UnsupportedOperationException("Not supported yet.");
+                }
+            }),
             config(testScene, "cursor", Cursor.DEFAULT, Cursor.CROSSHAIR),
             config(testScene, "eventDispatcher",
                    null,
                    new EventHandlerManager(null)),
+            config(testScene, "camera", null, new PerspectiveCamera()),
             config(testScene, "onMouseClicked", null, testEventHandler),
             config(testScene, "onMouseDragged", null, testEventHandler),
             config(testScene, "onMouseEntered", null, testEventHandler),
@@ -88,6 +96,34 @@
             config(testScene, "onKeyPressed", null, testEventHandler),
             config(testScene, "onKeyReleased", null, testEventHandler),
             config(testScene, "onKeyTyped", null, testEventHandler),
+            config(testScene, "onContextMenuRequested", null, testEventHandler),
+            config(testScene, "onDragDetected", null, testEventHandler),
+            config(testScene, "onDragDone", null, testEventHandler),
+            config(testScene, "onDragDropped", null, testEventHandler),
+            config(testScene, "onDragEntered", null, testEventHandler),
+            config(testScene, "onDragExited", null, testEventHandler),
+            config(testScene, "onDragOver", null, testEventHandler),
+            config(testScene, "onMouseDragEntered", null, testEventHandler),
+            config(testScene, "onMouseDragExited", null, testEventHandler),
+            config(testScene, "onMouseDragOver", null, testEventHandler),
+            config(testScene, "onMouseDragReleased", null, testEventHandler),
+            config(testScene, "onRotate", null, testEventHandler),
+            config(testScene, "onRotationStarted", null, testEventHandler),
+            config(testScene, "onRotationFinished", null, testEventHandler),
+            config(testScene, "onZoom", null, testEventHandler),
+            config(testScene, "onZoomStarted", null, testEventHandler),
+            config(testScene, "onZoomFinished", null, testEventHandler),
+            config(testScene, "onScroll", null, testEventHandler),
+            config(testScene, "onScrollStarted", null, testEventHandler),
+            config(testScene, "onScrollFinished", null, testEventHandler),
+            config(testScene, "onSwipeLeft", null, testEventHandler),
+            config(testScene, "onSwipeRight", null, testEventHandler),
+            config(testScene, "onSwipeUp", null, testEventHandler),
+            config(testScene, "onSwipeDown", null, testEventHandler),
+            config(testScene, "onTouchPressed", null, testEventHandler),
+            config(testScene, "onTouchReleased", null, testEventHandler),
+            config(testScene, "onTouchMoved", null, testEventHandler),
+            config(testScene, "onTouchStationary", null, testEventHandler),
             config(testScene, "onInputMethodTextChanged",
                    null, testEventHandler)
         });
--- a/javafx-ui-common/test/unit/javafx/scene/Scenegraph_eventHandlers_Test.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/test/unit/javafx/scene/Scenegraph_eventHandlers_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -45,6 +45,9 @@
 import org.junit.runners.Parameterized.Parameters;
 
 import com.sun.javafx.test.PropertyReference;
+import com.sun.javafx.test.MouseEventGenerator;
+import javafx.scene.input.ContextMenuEvent;
+import javafx.scene.input.SwipeEvent;
 
 @RunWith(Parameterized.class)
 public final class Scenegraph_eventHandlers_Test {
@@ -55,6 +58,8 @@
 
     @Parameters
     public static Collection data() {
+        final MouseEventGenerator mouseEventGenerator =
+                new MouseEventGenerator();
         return Arrays.asList(new Object[][] {
             {
                 KeyEvent.KEY_PRESSED,
@@ -71,31 +76,58 @@
             }, {
                 MouseEvent.MOUSE_PRESSED,
                 "onMousePressed",
-                createTestMouseEvent(MouseEvent.MOUSE_PRESSED)
+                mouseEventGenerator.generateMouseEvent(
+                        MouseEvent.MOUSE_PRESSED, 0, 0)
             }, {
                 MouseEvent.MOUSE_RELEASED,
                 "onMouseReleased",
-                createTestMouseEvent(MouseEvent.MOUSE_RELEASED)
+                mouseEventGenerator.generateMouseEvent(
+                        MouseEvent.MOUSE_RELEASED, 0, 0)
             }, {
                 MouseEvent.MOUSE_CLICKED,
                 "onMouseClicked",
-                createTestMouseEvent(MouseEvent.MOUSE_CLICKED)
+                mouseEventGenerator.generateMouseEvent(
+                        MouseEvent.MOUSE_CLICKED, 0, 0)
             }, {
                 MouseEvent.MOUSE_ENTERED,
                 "onMouseEntered",
-                createTestMouseEvent(MouseEvent.MOUSE_ENTERED)
+                mouseEventGenerator.generateMouseEvent(
+                        MouseEvent.MOUSE_ENTERED, 0, 0)
             }, {
                 MouseEvent.MOUSE_EXITED,
                 "onMouseExited",
-                createTestMouseEvent(MouseEvent.MOUSE_EXITED)
+                mouseEventGenerator.generateMouseEvent(
+                        MouseEvent.MOUSE_EXITED, 0, 0)
             }, {
                 MouseEvent.MOUSE_MOVED,
                 "onMouseMoved",
-                createTestMouseEvent(MouseEvent.MOUSE_MOVED)
+                mouseEventGenerator.generateMouseEvent(
+                        MouseEvent.MOUSE_MOVED, 0, 0)
             }, {
                 MouseEvent.MOUSE_DRAGGED,
                 "onMouseDragged",
-                createTestMouseEvent(MouseEvent.MOUSE_DRAGGED)
+                mouseEventGenerator.generateMouseEvent(
+                        MouseEvent.MOUSE_DRAGGED, 0, 0)
+            }, {
+                SwipeEvent.SWIPE_LEFT,
+                "onSwipeLeft",
+                createSwipeEvent(SwipeEvent.SWIPE_LEFT)
+            }, {
+                SwipeEvent.SWIPE_RIGHT,
+                "onSwipeRight",
+                createSwipeEvent(SwipeEvent.SWIPE_RIGHT)
+            }, {
+                SwipeEvent.SWIPE_UP,
+                "onSwipeUp",
+                createSwipeEvent(SwipeEvent.SWIPE_UP)
+            }, {
+                SwipeEvent.SWIPE_DOWN,
+                "onSwipeDown",
+                createSwipeEvent(SwipeEvent.SWIPE_DOWN)
+            }, {
+                ContextMenuEvent.CONTEXT_MENU_REQUESTED,
+                "onContextMenuRequested",
+                createContextMenuEvent()
             }
         });
     }
@@ -313,27 +345,17 @@
                                       keyEventType);
     }
 
-    private static Event createTestMouseEvent(
-            final EventType<MouseEvent> mouseEventType) {
-        MouseButton button = MouseButton.NONE;
-        boolean primaryButtonDown = false;
-        int clickCount = 0;
+    private static Event createContextMenuEvent() {
+        return ContextMenuEvent.impl_contextEvent(10, 10,
+          10, 10, false, ContextMenuEvent.CONTEXT_MENU_REQUESTED);
+    }
 
-        if ((mouseEventType == MouseEvent.MOUSE_RELEASED)
-                || (mouseEventType == MouseEvent.MOUSE_CLICKED)) {
-            button = MouseButton.PRIMARY;
-            clickCount = 1;
-        } else if (mouseEventType == MouseEvent.MOUSE_PRESSED) {
-            button = MouseButton.PRIMARY;
-            primaryButtonDown = true;
-            clickCount = 1;
-        }
-
-        return MouseEvent.impl_mouseEvent(0, 0, 0, 0,
-                                          button, clickCount,
-                                          false, false, false, false,
-                                          false, primaryButtonDown,
-                                          false, false, false, mouseEventType);
+    private static Event createSwipeEvent(final EventType<SwipeEvent> type) {
+        return SwipeEvent.impl_swipeEvent(
+                type,
+                1,
+                100, 100, 100, 100,
+                false, false, false, false, true);
     }
 
     private static void setEventHandler(
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/Blend_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Blend_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Blend.class);
+
+        cfg.addProperty("mode", BlendMode.SRC_ATOP);
+        cfg.addProperty("opacity", 0.5);
+        cfg.addProperty("bottomInput", new BoxBlur());
+        cfg.addProperty("topInput", new BoxBlur());
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Blend_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/Bloom_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Bloom_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Bloom.class);
+
+        cfg.addProperty("input", new BoxBlur());
+        cfg.addProperty("threshold", 0.6);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Bloom_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/BoxBlur_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class BoxBlur_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(BoxBlur.class);
+
+        cfg.addProperty("input", new BoxBlur());
+        cfg.addProperty("width", 200.0);
+        cfg.addProperty("height", 200.0);
+        cfg.addProperty("iterations", 3);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public BoxBlur_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/ColorAdjust_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class ColorAdjust_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(ColorAdjust.class);
+
+        cfg.addProperty("input", new BoxBlur());
+        cfg.addProperty("hue", 0.5);
+        cfg.addProperty("saturation", 0.5);
+        cfg.addProperty("contrast", 0.5);
+        cfg.addProperty("brightness", 0.5);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public ColorAdjust_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/ColorInput_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.paint.Color;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class ColorInput_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(ColorInput.class);
+
+        cfg.addProperty("paint", Color.BLUE);
+        cfg.addProperty("x", 200.0);
+        cfg.addProperty("y", 200.0);
+        cfg.addProperty("width", 200.0);
+        cfg.addProperty("height", 200.0);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public ColorInput_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/DisplacementMap_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class DisplacementMap_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(DisplacementMap.class);
+
+        cfg.addProperty("input", new BoxBlur());
+        cfg.addProperty("mapData", new FloatMap());
+        cfg.addProperty("scaleX", 0.5);
+        cfg.addProperty("scaleY", 0.5);
+        cfg.addProperty("offsetX", 10.0);
+        cfg.addProperty("offsetY", 10.0);
+        cfg.addProperty("wrap", true);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public DisplacementMap_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/DistantLight_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.paint.Color;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class DistantLight_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Light.Distant.class);
+
+        cfg.addProperty("color", Color.YELLOW);
+        cfg.addProperty("azimuth", 100);
+        cfg.addProperty("elevation", 101);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public DistantLight_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/DropShadow_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.paint.Color;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class DropShadow_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(DropShadow.class);
+
+        cfg.addProperty("input", new BoxBlur());
+        cfg.addProperty("radius", 4.0);
+        cfg.addProperty("width", 9.0);
+        cfg.addProperty("height", 9.0);
+        cfg.addProperty("blurType", BlurType.THREE_PASS_BOX);
+        cfg.addProperty("spread", 0.5);
+        cfg.addProperty("color", Color.RED);
+        cfg.addProperty("offsetX", 50.0);
+        cfg.addProperty("offsetY", 50.0);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public DropShadow_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/FloatMap_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class FloatMap_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(FloatMap.class);
+
+        cfg.addProperty("width", 128);
+        cfg.addProperty("height", 64);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public FloatMap_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/GaussianBlur_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class GaussianBlur_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(GaussianBlur.class);
+
+        cfg.addProperty("input", new BoxBlur());
+        cfg.addProperty("radius", 200.0);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public GaussianBlur_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/Glow_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Glow_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Glow.class);
+
+        cfg.addProperty("input", new BoxBlur());
+        cfg.addProperty("level", 0.6);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Glow_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- a/javafx-ui-common/test/unit/javafx/scene/effect/ImageInputTest.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/ImageInputTest.java	Tue May 22 08:29:11 2012 -0700
@@ -85,7 +85,7 @@
     @Test
     public void testSetSource() {
         // try setting non-existing image
-        Image i = new Image("test");
+        Image i = new Image("javafx/scene/image/test.png");
         effect.setSource(i);
         assertEquals(i, effect.getSource());
         pulse();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/ImageInput_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.image.TestImages;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class ImageInput_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(ImageInput.class);
+
+        cfg.addProperty("source", TestImages.TEST_IMAGE_100x200);
+        cfg.addProperty("x", 200.0);
+        cfg.addProperty("y", 200.0);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public ImageInput_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/InnerShadow_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.paint.Color;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class InnerShadow_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(InnerShadow.class);
+
+        cfg.addProperty("input", new BoxBlur());
+        cfg.addProperty("radius", 4.0);
+        cfg.addProperty("width", 9.0);
+        cfg.addProperty("height", 9.0);
+        cfg.addProperty("blurType", BlurType.THREE_PASS_BOX);
+        cfg.addProperty("choke", 0.5);
+        cfg.addProperty("color", Color.RED);
+        cfg.addProperty("offsetX", 50.0);
+        cfg.addProperty("offsetY", 50.0);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public InnerShadow_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/Lighting_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Lighting_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Lighting.class);
+
+        cfg.addProperty("bumpInput", new BoxBlur());
+        cfg.addProperty("contentInput", new BoxBlur());
+        cfg.addProperty("light", new Light.Point());
+        cfg.addProperty("diffuseConstant", 1.6);
+        cfg.addProperty("specularConstant", 0.6);
+        cfg.addProperty("specularExponent", 30.6);
+        cfg.addProperty("surfaceScale", 0.7);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Lighting_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/MotionBlur_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class MotionBlur_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(MotionBlur.class);
+
+        cfg.addProperty("input", new BoxBlur());
+        cfg.addProperty("radius", 40.0);
+        cfg.addProperty("angle", 45.0);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public MotionBlur_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/PerspectiveTransform_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class PerspectiveTransform_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(PerspectiveTransform.class);
+
+        cfg.addProperty("input", new BoxBlur());
+        cfg.addProperty("ulx", 10.0);
+        cfg.addProperty("uly", 11.0);
+        cfg.addProperty("urx", 12.0);
+        cfg.addProperty("ury", 13.0);
+        cfg.addProperty("llx", 14.0);
+        cfg.addProperty("lly", 15.0);
+        cfg.addProperty("lrx", 16.0);
+        cfg.addProperty("lry", 17.0);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public PerspectiveTransform_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/PointLight_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.paint.Color;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class PointLight_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Light.Point.class);
+
+        cfg.addProperty("Color", Color.BLUE);
+        cfg.addProperty("x", 100);
+        cfg.addProperty("y", 101);
+        cfg.addProperty("z", 102);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public PointLight_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/Reflection_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Reflection_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Reflection.class);
+
+        cfg.addProperty("input", new BoxBlur());
+        cfg.addProperty("topOffset", 50.6);
+        cfg.addProperty("topOpacity", 0.1);
+        cfg.addProperty("bottomOpacity", 0.7);
+        cfg.addProperty("fraction", 0.4);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Reflection_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/SepiaTone_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class SepiaTone_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(SepiaTone.class);
+
+        cfg.addProperty("input", new BoxBlur());
+        cfg.addProperty("level", 0.6);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public SepiaTone_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/Shadow_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+
+import com.sun.javafx.test.BuilderTestBase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.paint.Color;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Shadow_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Shadow.class);
+
+        cfg.addProperty("input", new BoxBlur());
+        cfg.addProperty("radius", 4.0);
+        cfg.addProperty("width", 9.0);
+        cfg.addProperty("height", 9.0);
+        cfg.addProperty("blurType", BlurType.THREE_PASS_BOX);
+        cfg.addProperty("color", Color.RED);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Shadow_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/effect/SpotLight_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.effect;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.awt.Color;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class SpotLight_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Light.Spot.class);
+
+        cfg.addProperty("Color", Color.BLACK);
+        cfg.addProperty("pointsAtX", 100);
+        cfg.addProperty("pointsAtY", 101);
+        cfg.addProperty("pointsAtZ", 102);
+        cfg.addProperty("x", 200);
+        cfg.addProperty("y", 201);
+        cfg.addProperty("z", 202);
+        cfg.addProperty("specularExponent", 0.6);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public SpotLight_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- a/javafx-ui-common/test/unit/javafx/scene/image/ImageTest.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/test/unit/javafx/scene/image/ImageTest.java	Tue May 22 08:29:11 2012 -0700
@@ -51,6 +51,7 @@
 
 import javafx.beans.InvalidationListener;
 import javafx.beans.Observable;
+import org.junit.Ignore;
 
 public final class ImageTest {
     private final StubToolkit toolkit;
@@ -507,6 +508,30 @@
         final Image image = Image.impl_fromExternalImage(fakeExternalImage);
         verifyLoadedImage(image, 0, 0, false, false, 123, 456);
     }
+    
+    @Test
+    public void createImageFromClasspathTest() {
+        final String url = "javafx/scene/image/test.png";
+        final String resolvedUrl = Thread.currentThread().getContextClassLoader().getResource(url).toString();
+        registerImage(resolvedUrl, 100, 200);
+        
+        final Image image = new Image(url);
+
+        assertEquals(resolvedUrl, image.impl_getUrl());
+        verifyLoadedImage(image, 0, 0, false, false, 100, 200);
+    }
+    
+    @Test
+    public void createImageFromClasspathTest_withLeadingSlash() {
+        final String url = "/javafx/scene/image/test.png";
+        final String resolvedUrl = Thread.currentThread().getContextClassLoader().getResource(url.substring(1)).toString();
+        registerImage(resolvedUrl, 100, 200);
+        
+        final Image image = new Image(url);
+
+        assertEquals(resolvedUrl, image.impl_getUrl());
+        verifyLoadedImage(image, 0, 0, false, false, 100, 200);
+    }
 
     @Test(expected=NullPointerException.class)
     public void createImageFromNullUrlTest() {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/image/ImageView_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.image;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.geometry.Rectangle2D;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class ImageView_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(ImageView.class);
+        cfg.addProperty("fitWidth", 100.0);
+        cfg.addProperty("fitHeight", 101.0);
+        cfg.addProperty("x", 102.0);
+        cfg.addProperty("y", 103.0);
+        cfg.addProperty("image", TestImages.TEST_IMAGE_100x200);
+        cfg.addProperty("viewport", new Rectangle2D(0, 0, 10, 10));
+        cfg.addProperty("smooth", false);
+        cfg.addProperty("preserveRatio", false);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public ImageView_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- a/javafx-ui-common/test/unit/javafx/scene/input/DragAndDropTest.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/test/unit/javafx/scene/input/DragAndDropTest.java	Tue May 22 08:29:11 2012 -0700
@@ -56,6 +56,7 @@
 import com.sun.javafx.tk.TKDragSourceListener;
 import com.sun.javafx.tk.TKDropTargetListener;
 import com.sun.javafx.tk.Toolkit;
+import com.sun.javafx.test.MouseEventGenerator;
 
 public class DragAndDropTest {
     
@@ -1251,37 +1252,6 @@
         
     }
     
-    // Event generators
-    
-    private static class MouseEventGenerator {
-        private boolean primaryButtonDown = false;
-
-        public MouseEvent generateMouseEvent(EventType<MouseEvent> type,
-                double x, double y) {
-
-            MouseButton button = MouseButton.NONE;
-            if (type == MouseEvent.MOUSE_PRESSED ||
-                    type == MouseEvent.MOUSE_RELEASED ||
-                    type == MouseEvent.MOUSE_CLICKED) {
-                button = MouseButton.PRIMARY;
-            }
-
-            if (type == MouseEvent.MOUSE_PRESSED) {
-                primaryButtonDown = true;
-            }
-
-            MouseEvent event = MouseEvent.impl_mouseEvent(x, y, x, y, button,
-                    1, false, false, false, false, false, primaryButtonDown,
-                    false, false, false, type);
-
-            if (type == MouseEvent.MOUSE_RELEASED) {
-                primaryButtonDown = false;
-            }
-
-            return event;
-        }
-    }
-    
     private static class DragEventGenerator {
         public DragEvent generateDragEvent(double x,
                 double y, Dragboard db, TransferMode tm) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/input/KeyCharacterCombination_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.input;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class KeyCharacterCombination_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(KeyCharacterCombination.class);
+        cfg.addProperty("alt", KeyCombination.ModifierValue.ANY);
+        cfg.addProperty("shift", KeyCombination.ModifierValue.ANY);
+        cfg.addProperty("meta", KeyCombination.ModifierValue.ANY);
+        cfg.addProperty("control", KeyCombination.ModifierValue.ANY);
+        cfg.addProperty("shortcut", KeyCombination.ModifierValue.ANY);
+        cfg.addProperty("character", "a");
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public KeyCharacterCombination_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/input/KeyCodeCombination_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.input;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class KeyCodeCombination_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(KeyCodeCombination.class);
+        cfg.addProperty("alt", KeyCombination.ModifierValue.ANY);
+        cfg.addProperty("shift", KeyCombination.ModifierValue.ANY);
+        cfg.addProperty("meta", KeyCombination.ModifierValue.ANY);
+        cfg.addProperty("control", KeyCombination.ModifierValue.ANY);
+        cfg.addProperty("shortcut", KeyCombination.ModifierValue.ANY);
+        cfg.addProperty("code", KeyCode.A);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public KeyCodeCombination_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/input/Mnemonic_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.input;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.shape.Rectangle;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Mnemonic_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Mnemonic.class);
+        cfg.addProperty("keyCombination", KeyCombination.keyCombination("Shortcut+C"));
+        cfg.addProperty("node", new Rectangle());
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Mnemonic_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- a/javafx-ui-common/test/unit/javafx/scene/input/MouseDragEventTest.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/test/unit/javafx/scene/input/MouseDragEventTest.java	Tue May 22 08:29:11 2012 -0700
@@ -32,6 +32,8 @@
 import javafx.scene.shape.Rectangle;
 import javafx.stage.Stage;
 
+import com.sun.javafx.test.MouseEventGenerator;
+
 import static org.junit.Assert.*;
 import org.junit.Test;
 
@@ -530,37 +532,6 @@
         w.clear();
     }
 
-
-    private static class MouseEventGenerator {
-        private boolean primaryButtonDown = false;
-
-        public MouseEvent generateMouseEvent(EventType<MouseEvent> type,
-                double x, double y) {
-
-            MouseButton button = MouseButton.NONE;
-            if (type == MouseEvent.MOUSE_PRESSED ||
-                    type == MouseEvent.MOUSE_RELEASED ||
-                    type == MouseEvent.MOUSE_DRAGGED) {
-                button = MouseButton.PRIMARY;
-            }
-
-            if (type == MouseEvent.MOUSE_PRESSED ||
-                    type == MouseEvent.MOUSE_DRAGGED) {
-                primaryButtonDown = true;
-            }
-
-            if (type == MouseEvent.MOUSE_RELEASED) {
-                primaryButtonDown = false;
-            }
-
-            MouseEvent event = MouseEvent.impl_mouseEvent(x, y, x, y, button,
-                    1, false, false, false, false, false, primaryButtonDown,
-                    false, false, false, type);
-
-            return event;
-        }
-    }
-
     private class World {
         private HandledNode scene;
         private HandledNode source;
--- a/javafx-ui-common/test/unit/javafx/scene/input/RotateEventTest.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/test/unit/javafx/scene/input/RotateEventTest.java	Tue May 22 08:29:11 2012 -0700
@@ -370,6 +370,56 @@
         assertTrue(rotated);
     }
 
+    @Test
+    public void unknownLocalShouldBeFixedByMousePosition() {
+        MouseEventGenerator gen = new MouseEventGenerator();
+        Scene scene = createScene();
+        Rectangle rect =
+                (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
+        rect.setOnRotate(new EventHandler<RotateEvent>() {
+            @Override public void handle(RotateEvent event) {
+                assertEquals(150.0, event.getSceneX(), 0.0001);
+                assertEquals(150.0, event.getSceneY(), 0.0001);
+                rotated = true;
+            }
+        });
+
+        rotated = false;
+
+        scene.impl_processMouseEvent(
+                gen.generateMouseEvent(MouseEvent.MOUSE_MOVED, 250, 250));
+
+        ((StubScene) scene.impl_getPeer()).getListener().rotateEvent(
+                RotateEvent.ROTATE, 2, 3,
+                Double.NaN, Double.NaN, Double.NaN, Double.NaN,
+                true, false, true, false, true, false);
+
+        assertFalse(rotated);
+
+        scene.impl_processMouseEvent(
+                gen.generateMouseEvent(MouseEvent.MOUSE_MOVED, 150, 150));
+
+        ((StubScene) scene.impl_getPeer()).getListener().rotateEvent(
+                RotateEvent.ROTATE, 2, 3,
+                Double.NaN, Double.NaN, Double.NaN, Double.NaN,
+                true, false, true, false, true, false);
+
+        assertTrue(rotated);
+    }
+
+    @Test public void testToString() {
+        RotateEvent e = RotateEvent.impl_rotateEvent(RotateEvent.ROTATE,
+            10, 20,
+            100, 100, 200, 200,
+            false, false, false, false,
+            true, false);
+
+        String s = e.toString();
+
+        assertNotNull(s);
+        assertFalse(s.isEmpty());
+    }
+
     private Scene createScene() {
         final Group root = new Group();
         
--- a/javafx-ui-common/test/unit/javafx/scene/input/ScrollEventTest.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/test/unit/javafx/scene/input/ScrollEventTest.java	Tue May 22 08:29:11 2012 -0700
@@ -543,6 +543,60 @@
         assertTrue(scrolled);
     }
 
+    @Test
+    public void unknownLocalShouldBeFixedByMousePosition() {
+        MouseEventGenerator gen = new MouseEventGenerator();
+        Scene scene = createScene();
+        Rectangle rect =
+                (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
+
+        rect.setOnScroll(new EventHandler<ScrollEvent>() {
+            @Override public void handle(ScrollEvent event) {
+                assertEquals(150.0, event.getSceneX(), 0.0001);
+                assertEquals(150.0, event.getSceneY(), 0.0001);
+                scrolled = true;
+            }
+        });
+
+        scrolled = false;
+
+        scene.impl_processMouseEvent(
+                gen.generateMouseEvent(MouseEvent.MOUSE_MOVED, 250, 250));
+
+        ((StubScene) scene.impl_getPeer()).getListener().scrollEvent(
+                ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3,
+                Double.NaN, Double.NaN, Double.NaN, Double.NaN,
+                true, false, true, false, true, false);
+
+        assertFalse(scrolled);
+
+        scene.impl_processMouseEvent(
+                gen.generateMouseEvent(MouseEvent.MOUSE_MOVED, 150, 150));
+
+        ((StubScene) scene.impl_getPeer()).getListener().scrollEvent(
+                ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3,
+                Double.NaN, Double.NaN, Double.NaN, Double.NaN,
+                true, false, true, false, true, false);
+
+        assertTrue(scrolled);
+    }
+
+    @Test public void testToString() {
+        ScrollEvent e = ScrollEvent.impl_scrollEvent(ScrollEvent.SCROLL,
+            10, 10, 20, 20,
+            ScrollEvent.HorizontalTextScrollUnits.NONE, 0,
+            ScrollEvent.VerticalTextScrollUnits.NONE, 0,
+            3,
+            100, 100, 200, 200,
+            false, false, false, false,
+            true, false);
+
+        String s = e.toString();
+
+        assertNotNull(s);
+        assertFalse(s.isEmpty());
+    }
+
     private Scene createScene() {
         final Group root = new Group();
         
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/input/SwipeEventTest.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,246 @@
+/*
+ * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package javafx.scene.input;
+
+import com.sun.javafx.pgstub.StubScene;
+import com.sun.javafx.test.MouseEventGenerator;
+import javafx.event.EventHandler;
+import javafx.scene.Group;
+import javafx.scene.Scene;
+import javafx.scene.shape.Rectangle;
+import javafx.stage.Stage;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+public class SwipeEventTest {
+
+    private boolean swiped;
+
+    @Test
+    public void shouldDeliverSwipeLeftEventToPickedNode() {
+        Scene scene = createScene();
+        Rectangle rect =
+                (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
+
+        swiped = false;
+        rect.setOnSwipeLeft(new EventHandler<SwipeEvent>() {
+            @Override public void handle(SwipeEvent event) {
+                swiped = true;
+            }
+        });
+
+        ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
+                SwipeEvent.SWIPE_LEFT, 1, 1, 1, 1, 1,
+                false, false, false, false, false);
+
+        assertFalse(swiped);
+
+        ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
+                SwipeEvent.SWIPE_LEFT, 1, 150, 150, 150, 150,
+                false, false, false, false, false);
+
+        assertTrue(swiped);
+    }
+
+    @Test
+    public void shouldPassTouchCount() {
+        Scene scene = createScene();
+        Rectangle rect =
+                (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
+
+        swiped = false;
+
+        rect.setOnSwipeUp(new EventHandler<SwipeEvent>() {
+            @Override public void handle(SwipeEvent event) {
+                assertEquals(3, event.getTouchCount());
+                swiped = true;
+            }
+        });
+
+        ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
+                SwipeEvent.SWIPE_UP, 3, 150, 150, 150, 150,
+                false, false, false, false, false);
+
+        assertTrue(swiped);
+    }
+
+    @Test
+    public void shouldPassCoordinates() {
+        Scene scene = createScene();
+        Rectangle rect =
+                (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
+
+        swiped = false;
+
+        rect.setOnSwipeUp(new EventHandler<SwipeEvent>() {
+            @Override public void handle(SwipeEvent event) {
+                assertEquals(151.0, event.getX(), 0.0001);
+                assertEquals(152.0, event.getY(), 0.0001);
+                assertEquals(153.0, event.getScreenX(), 0.0001);
+                assertEquals(154.0, event.getScreenY(), 0.0001);
+                swiped = true;
+            }
+        });
+
+        ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
+                SwipeEvent.SWIPE_UP, 3, 151, 152, 153, 154,
+                false, false, false, false, false);
+
+        assertTrue(swiped);
+    }
+
+    @Test
+    public void shouldPassDirect() {
+        Scene scene = createScene();
+        Rectangle rect =
+                (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
+
+        swiped = false;
+
+        rect.setOnSwipeDown(new EventHandler<SwipeEvent>() {
+            @Override public void handle(SwipeEvent event) {
+                assertEquals(swiped, event.isDirect());
+                swiped = !swiped;
+            }
+        });
+
+        ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
+                SwipeEvent.SWIPE_DOWN, 3, 151, 152, 153, 154,
+                false, false, false, false, false);
+
+        assertTrue(swiped);
+
+        ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
+                SwipeEvent.SWIPE_DOWN, 3, 151, 152, 153, 154,
+                false, false, false, false, true);
+
+        assertFalse(swiped);
+    }
+
+    @Test
+    public void handlingAnyShouldGetAllTypes() {
+        Scene scene = createScene();
+        Rectangle rect =
+                (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
+
+        rect.addEventHandler(SwipeEvent.ANY, new EventHandler<SwipeEvent>() {
+            @Override public void handle(SwipeEvent event) {
+                swiped = true;
+            }
+        });
+
+        swiped = false;
+        ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
+                SwipeEvent.SWIPE_UP, 3, 151, 152, 153, 154,
+                false, false, false, false, false);
+        assertTrue(swiped);
+
+        swiped = false;
+        ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
+                SwipeEvent.SWIPE_DOWN, 3, 151, 152, 153, 154,
+                false, false, false, false, false);
+        assertTrue(swiped);
+
+        swiped = false;
+        ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
+                SwipeEvent.SWIPE_LEFT, 3, 151, 152, 153, 154,
+                false, false, false, false, false);
+        assertTrue(swiped);
+
+        swiped = false;
+        ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
+                SwipeEvent.SWIPE_RIGHT, 3, 151, 152, 153, 154,
+                false, false, false, false, false);
+        assertTrue(swiped);
+    }
+
+    @Test
+    public void unknownLocalShouldBeFixedByMousePosition() {
+        MouseEventGenerator gen = new MouseEventGenerator();
+        Scene scene = createScene();
+        Rectangle rect =
+                (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
+
+        rect.setOnSwipeRight(new EventHandler<SwipeEvent>() {
+            @Override public void handle(SwipeEvent event) {
+                assertEquals(150.0, event.getSceneX(), 0.0001);
+                assertEquals(150.0, event.getSceneY(), 0.0001);
+                swiped = true;
+            }
+        });
+
+        swiped = false;
+
+        scene.impl_processMouseEvent(
+                gen.generateMouseEvent(MouseEvent.MOUSE_MOVED, 250, 250));
+
+        ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
+                SwipeEvent.SWIPE_RIGHT, 3,
+                Double.NaN, Double.NaN, Double.NaN, Double.NaN,
+                false, false, false, false, false);
+
+        assertFalse(swiped);
+
+        scene.impl_processMouseEvent(
+                gen.generateMouseEvent(MouseEvent.MOUSE_MOVED, 150, 150));
+
+        ((StubScene) scene.impl_getPeer()).getListener().swipeEvent(
+                SwipeEvent.SWIPE_RIGHT, 3,
+                Double.NaN, Double.NaN, Double.NaN, Double.NaN,
+                false, false, false, false, false);
+
+        assertTrue(swiped);
+    }
+
+    @Test public void testToString() {
+        SwipeEvent e = SwipeEvent.impl_swipeEvent(SwipeEvent.SWIPE_RIGHT,
+            3,
+            100, 100, 200, 200,
+            false, false, false, false,
+            true);
+
+        String s = e.toString();
+
+        assertNotNull(s);
+        assertFalse(s.isEmpty());
+    }
+
+    private Scene createScene() {
+        final Group root = new Group();
+
+        final Scene scene = new Scene(root, 400, 400);
+
+        Rectangle rect = new Rectangle(100, 100, 100, 100);
+        Rectangle rect2 = new Rectangle(200, 200, 100, 100);
+
+        root.getChildren().addAll(rect, rect2);
+
+        Stage stage = new Stage();
+        stage.setScene(scene);
+        stage.show();
+
+        return scene;
+    }
+}
--- a/javafx-ui-common/test/unit/javafx/scene/input/TouchEventTest.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/test/unit/javafx/scene/input/TouchEventTest.java	Tue May 22 08:29:11 2012 -0700
@@ -448,6 +448,103 @@
     }
 
     @Test
+    public void shouldMaintainIDMappingInDynamicConditions() {
+        Scene scene = createScene();
+        Rectangle rect =
+                (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
+
+        touched = 0;
+        rect.setOnTouchPressed(new EventHandler<TouchEvent>() {
+            @Override public void handle(TouchEvent event) {
+                touched++;
+                switch(event.getTouchPoint().getId()) {
+                    case 1:
+                        assertEquals(110.0, event.getTouchPoint().getX(), 0.0001);
+                        assertEquals(110.0, event.getTouchPoint().getY(), 0.0001);
+                        assertEquals(1, event.getTouchPoints().get(0).getId());
+                        assertEquals(2, event.getTouchPoints().get(1).getId());
+                        assertEquals(1, touched);
+                        break;
+                    case 2:
+                        assertEquals(120.0, event.getTouchPoint().getX(), 0.0001);
+                        assertEquals(120.0, event.getTouchPoint().getY(), 0.0001);
+                        assertEquals(1, event.getTouchPoints().get(0).getId());
+                        assertEquals(2, event.getTouchPoints().get(1).getId());
+                        assertEquals(2, touched);
+                        break;
+                    case 3:
+                        assertEquals(160.0, event.getTouchPoint().getX(), 0.0001);
+                        assertEquals(160.0, event.getTouchPoint().getY(), 0.0001);
+                        assertEquals(2, event.getTouchPoints().get(0).getId());
+                        assertEquals(3, event.getTouchPoints().get(1).getId());
+                        assertEquals(3, touched);
+                        break;
+                    default:
+                        fail("Wrong touch point id " + event.getTouchPoint().getId());
+                }
+            }
+        });
+
+        rect.setOnTouchMoved(new EventHandler<TouchEvent>() {
+            @Override public void handle(TouchEvent event) {
+                touched++;
+                switch(event.getTouchPoint().getId()) {
+                    case 2:
+                        assertEquals(120.0, event.getTouchPoint().getX(), 0.0001);
+                        assertEquals(120.0, event.getTouchPoint().getY(), 0.0001);
+                        assertEquals(2, event.getTouchPoints().get(0).getId());
+                        assertEquals(3, event.getTouchPoints().get(1).getId());
+                        assertEquals(4, touched);
+                        break;
+                    case 3:
+                        assertEquals(160.0, event.getTouchPoint().getX(), 0.0001);
+                        assertEquals(160.0, event.getTouchPoint().getY(), 0.0001);
+                        assertEquals(2, event.getTouchPoints().get(0).getId());
+                        assertEquals(3, event.getTouchPoints().get(1).getId());
+                        assertEquals(5, touched);
+                        break;
+                    default:
+                        fail("Wrong touch point id " + event.getTouchPoint().getId());
+                }
+            }
+        });
+
+        ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
+                System.currentTimeMillis(), 2, true, false, false, false, false);
+        ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
+                TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
+        ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
+                TouchPoint.State.PRESSED, 127, 120, 120, 120, 120);
+        ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
+
+        ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
+                System.currentTimeMillis(), 2, true, false, false, false, false);
+        ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
+                TouchPoint.State.STATIONARY, 127, 120, 120, 120, 120);
+        ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
+                TouchPoint.State.RELEASED, 1368, 120, 120, 120, 120);
+        ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
+
+        ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
+                System.currentTimeMillis(), 2, true, false, false, false, false);
+        ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
+                TouchPoint.State.PRESSED, 11, 160, 160, 160, 160);
+        ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
+                TouchPoint.State.STATIONARY, 127, 120, 120, 120, 120);
+        ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
+
+        ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
+                System.currentTimeMillis(), 2, true, false, false, false, false);
+        ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
+                TouchPoint.State.MOVED, 11, 160, 160, 160, 160);
+        ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
+                TouchPoint.State.MOVED, 127, 120, 120, 120, 120);
+        ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
+
+        assertEquals(5, touched);
+    }
+
+    @Test
     public void shouldResetIDsAfterGesture() {
         Scene scene = createScene();
         Rectangle rect =
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/input/TouchPoint_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.input;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.shape.Rectangle;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class TouchPoint_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(TouchPoint.class);
+
+        cfg.addProperty("x", 1.0);
+        cfg.addProperty("y", 1.0);
+        cfg.addProperty("screenX", 1.0);
+        cfg.addProperty("screenY", 1.0);
+        cfg.addProperty("state", TouchPoint.State.MOVED);
+        cfg.addProperty("id", 1);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public TouchPoint_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- a/javafx-ui-common/test/unit/javafx/scene/input/ZoomEventTest.java	Mon May 21 14:09:46 2012 -0700
+++ b/javafx-ui-common/test/unit/javafx/scene/input/ZoomEventTest.java	Tue May 22 08:29:11 2012 -0700
@@ -370,6 +370,57 @@
         assertTrue(zoomed);
     }
 
+    @Test
+    public void unknownLocalShouldBeFixedByMousePosition() {
+        MouseEventGenerator gen = new MouseEventGenerator();
+        Scene scene = createScene();
+        Rectangle rect =
+                (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
+
+        rect.setOnZoom(new EventHandler<ZoomEvent>() {
+            @Override public void handle(ZoomEvent event) {
+                assertEquals(150.0, event.getSceneX(), 0.0001);
+                assertEquals(150.0, event.getSceneY(), 0.0001);
+                zoomed = true;
+            }
+        });
+
+        zoomed = false;
+
+        scene.impl_processMouseEvent(
+                gen.generateMouseEvent(MouseEvent.MOUSE_MOVED, 250, 250));
+
+        ((StubScene) scene.impl_getPeer()).getListener().zoomEvent(
+                ZoomEvent.ZOOM, 2, 3,
+                Double.NaN, Double.NaN, Double.NaN, Double.NaN,
+                true, false, true, false, true, false);
+
+        assertFalse(zoomed);
+
+        scene.impl_processMouseEvent(
+                gen.generateMouseEvent(MouseEvent.MOUSE_MOVED, 150, 150));
+
+        ((StubScene) scene.impl_getPeer()).getListener().zoomEvent(
+                ZoomEvent.ZOOM, 2, 3,
+                Double.NaN, Double.NaN, Double.NaN, Double.NaN,
+                true, false, true, false, true, false);
+
+        assertTrue(zoomed);
+    }
+
+    @Test public void testToString() {
+        ZoomEvent e = ZoomEvent.impl_zoomEvent(ZoomEvent.ZOOM,
+            10, 20,
+            100, 100, 200, 200,
+            false, false, false, false,
+            true, false);
+
+        String s = e.toString();
+
+        assertNotNull(s);
+        assertFalse(s.isEmpty());
+    }
+
     private Scene createScene() {
         final Group root = new Group();
         
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/layout/AnchorPane_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.layout;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.Group;
+import javafx.scene.shape.Circle;
+import javafx.scene.shape.Rectangle;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class AnchorPane_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(AnchorPane.class);
+        cfg.addProperty("children", Arrays.asList(new Group(), new Rectangle(), new Circle()));
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public AnchorPane_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/layout/BorderPane_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.layout;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.shape.Rectangle;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class BorderPane_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(BorderPane.class);
+        cfg.addProperty("bottom", new Rectangle());
+        cfg.addProperty("center", new Rectangle());
+        cfg.addProperty("left", new Rectangle());
+        cfg.addProperty("right", new Rectangle());
+        cfg.addProperty("top", new Rectangle());
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public BorderPane_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/layout/ColumnConstraints_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.layout;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.geometry.HPos;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class ColumnConstraints_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(ColumnConstraints.class);
+        cfg.addProperty("maxWidth", 105.0);
+        cfg.addProperty("minWidth", 10.0);
+        cfg.addProperty("percentWidth", 10.0);
+        cfg.addProperty("prefWidth", 100.0);
+        cfg.addProperty("fillWidth", false);
+        cfg.addProperty("halignment", HPos.CENTER);
+        cfg.addProperty("hgrow", Priority.ALWAYS);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public ColumnConstraints_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/layout/FlowPane_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.layout;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.geometry.HPos;
+import javafx.geometry.Orientation;
+import javafx.geometry.Pos;
+import javafx.geometry.VPos;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class FlowPane_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(FlowPane.class);
+        cfg.addProperty("alignment", Pos.BASELINE_CENTER);
+        cfg.addProperty("rowValignment", VPos.BASELINE);
+        cfg.addProperty("columnHalignment", HPos.CENTER);
+        cfg.addProperty("hgap", 100.0);
+        cfg.addProperty("vgap", 101.0);
+        cfg.addProperty("orientation", Orientation.HORIZONTAL);
+        cfg.addProperty("prefWrapLength", 102.0);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public FlowPane_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/layout/GridPane_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.layout;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.geometry.HPos;
+import javafx.geometry.Orientation;
+import javafx.geometry.Pos;
+import javafx.geometry.VPos;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class GridPane_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(GridPane.class);
+
+        cfg.addProperty("gridLinesVisible", true);
+        cfg.addProperty("alignment", Pos.BASELINE_CENTER);
+        cfg.addProperty("hgap", 100.0);
+        cfg.addProperty("vgap", 101.0);
+        cfg.addProperty("columnConstraints", ColumnConstraints.class, Arrays.asList(new ColumnConstraints()));
+        cfg.addProperty("rowConstraints", RowConstraints.class, Arrays.asList(new RowConstraints()));
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public GridPane_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/layout/HBox_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.layout;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.geometry.Pos;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class HBox_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(HBox.class);
+
+        cfg.addProperty("alignment", Pos.BASELINE_CENTER);
+        cfg.addProperty("fillHeight", false);
+        cfg.addProperty("spacing", 101.0);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public HBox_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/layout/Pane_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.layout;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.Group;
+import javafx.scene.Node;
+import javafx.scene.shape.Circle;
+import javafx.scene.shape.Rectangle;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Pane_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Pane.class);
+        cfg.addProperty("children", Node.class, Arrays.asList(new Group(), new Rectangle(), new Circle()));
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Pane_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/layout/Region_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.layout;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.geometry.Insets;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Region_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Region.class);
+
+        cfg.addProperty("minWidth", 100.0);
+        cfg.addProperty("minHeight", 101.0);
+        cfg.addProperty("prefWidth", 102.0);
+        cfg.addProperty("prefHeight", 103.0);
+        cfg.addProperty("maxWidth", 104.0);
+        cfg.addProperty("maxHeight", 105.0);
+        cfg.addProperty("padding", Insets.EMPTY);
+        cfg.addProperty("snapToPixel", true);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Region_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/layout/RowConstraints_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.layout;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.geometry.VPos;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class RowConstraints_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(RowConstraints.class);
+        cfg.addProperty("maxHeight", 105.0);
+        cfg.addProperty("minHeight", 10.0);
+        cfg.addProperty("percentHeight", 10.0);
+        cfg.addProperty("prefHeight", 100.0);
+        cfg.addProperty("fillHeight", false);
+        cfg.addProperty("valignment", VPos.CENTER);
+        cfg.addProperty("vgrow", Priority.ALWAYS);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public RowConstraints_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/layout/StackPane_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.layout;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.geometry.Pos;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class StackPane_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(StackPane.class);
+
+        cfg.addProperty("alignment", Pos.BASELINE_CENTER);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public StackPane_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/layout/TilePane_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.layout;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.geometry.HPos;
+import javafx.geometry.Orientation;
+import javafx.geometry.Pos;
+import javafx.geometry.VPos;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class TilePane_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(TilePane.class);
+
+        cfg.addProperty("alignment", Pos.BASELINE_CENTER);
+        cfg.addProperty("hgap", 100.0);
+        cfg.addProperty("vgap", 101.0);
+        cfg.addProperty("orientation", Orientation.HORIZONTAL);
+        cfg.addProperty("prefColumns", 10);
+        cfg.addProperty("prefRows", 9);
+        cfg.addProperty("prefTileWidth", 1.1);
+        cfg.addProperty("prefTileHeight", 1.0);
+        cfg.addProperty("tileAlignment", Pos.CENTER_LEFT);
+
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public TilePane_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/layout/VBox_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.layout;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.geometry.Pos;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class VBox_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(VBox.class);
+
+        cfg.addProperty("alignment", Pos.BASELINE_CENTER);
+        cfg.addProperty("fillWidth", true);
+        cfg.addProperty("spacing", 101.0);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public VBox_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/paint/Color_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.paint;
+
+import com.sun.javafx.test.BuilderTestBase;
+import com.sun.javafx.test.DoubleComparator;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Color_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        DoubleComparator comparator = new DoubleComparator(1e-5);
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Color.class);
+
+        cfg.addProperty("red", 0.0, comparator);
+        cfg.addProperty("green", 1.0, comparator);
+        cfg.addProperty("blue", 0.7, comparator);
+        cfg.addProperty("opacity", 0.6, comparator);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Color_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/paint/LinearGradient_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.paint;
+
+import com.sun.javafx.test.BuilderTestBase;
+import com.sun.javafx.test.DoubleComparator;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class LinearGradient_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(LinearGradient.class);
+
+        cfg.addProperty("startX", 0.2);
+        cfg.addProperty("startY", 0.3);
+        cfg.addProperty("endX", 0.4);
+        cfg.addProperty("endY", 0.6);
+        cfg.addProperty("proportional", false);
+        cfg.addProperty("cycleMethod", CycleMethod.NO_CYCLE);
+        cfg.addProperty("stops",  (List<Stop>)Arrays.asList(new Stop(0.0, Color.RED), new Stop(1.0, Color.BEIGE)) );
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public LinearGradient_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/paint/RadialGradient_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.paint;
+
+import com.sun.javafx.test.BuilderTestBase;
+import com.sun.javafx.test.DoubleComparator;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class RadialGradient_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(RadialGradient.class);
+
+        cfg.addProperty("centerX", 0.2);
+        cfg.addProperty("centerY", 0.3);
+        cfg.addProperty("focusAngle", 0.4);
+        cfg.addProperty("focusDistance", 0.6);
+        cfg.addProperty("radius", 0.8);
+        cfg.addProperty("proportional", false);
+        cfg.addProperty("cycleMethod", CycleMethod.NO_CYCLE);
+        cfg.addProperty("stops",  (List<Stop>)Arrays.asList(new Stop(0.0, Color.RED), new Stop(1.0, Color.BEIGE)) );
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public RadialGradient_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/paint/Stop_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.paint;
+
+import com.sun.javafx.test.BuilderTestBase;
+import com.sun.javafx.test.DoubleComparator;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Stop_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Stop.class);
+
+        cfg.addProperty("color", Color.BEIGE);
+        cfg.addProperty("offset", 0.6);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Stop_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/shape/ArcTo_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.shape;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class ArcTo_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(ArcTo.class);
+
+        cfg.addProperty("x", 0.2);
+        cfg.addProperty("y", 0.3);
+        cfg.addProperty("XAxisRotation", 0.4);
+        cfg.addProperty("radiusX", 0.6);
+        cfg.addProperty("radiusY", 0.8);
+        cfg.addProperty("sweepFlag", true);
+        cfg.addProperty("largeArcFlag", true);
+        cfg.addProperty("absolute", false);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public ArcTo_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/shape/Arc_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.shape;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+import javafx.scene.paint.Color;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Arc_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Arc.class);
+
+        cfg.addProperty("centerX", 0.2);
+        cfg.addProperty("centerY", 0.3);
+        cfg.addProperty("length", 0.4);
+        cfg.addProperty("startAngle", 0.6);
+        cfg.addProperty("radiusX", 0.6);
+        cfg.addProperty("radiusY", 0.8);
+        cfg.addProperty("type", ArcType.CHORD);
+        cfg.addProperty("fill", Color.RED);
+        cfg.addProperty("smooth", true);
+        cfg.addProperty("stroke", Color.ALICEBLUE );
+        cfg.addProperty("strokeDashArray", Double.class, Arrays.asList(5.0, 7.0, 1.0, 3.0));
+        cfg.addProperty("strokeDashOffset", 0.5);
+        cfg.addProperty("strokeLineCap", StrokeLineCap.BUTT);
+        cfg.addProperty("strokeLineJoin", StrokeLineJoin.BEVEL);
+        cfg.addProperty("strokeMiterLimit", 0.7);
+        cfg.addProperty("strokeType", StrokeType.CENTERED);
+        cfg.addProperty("strokeWidth", 1.1);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Arc_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/shape/Circle_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.shape;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Circle_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Circle.class);
+
+        cfg.addProperty("centerX", 0.2);
+        cfg.addProperty("centerY", 0.3);
+        cfg.addProperty("radius", 0.6);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Circle_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/shape/ClosePath_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.shape;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class ClosePath_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(ClosePath.class);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public ClosePath_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/shape/CubicCurveTo_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.shape;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class CubicCurveTo_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(CubicCurveTo.class);
+
+        cfg.addProperty("x", 0.2);
+        cfg.addProperty("y", 0.3);
+        cfg.addProperty("controlX1", 0.4);
+        cfg.addProperty("controlY1", 0.5);
+        cfg.addProperty("controlX2", 0.6);
+        cfg.addProperty("controlY2", 0.7);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public CubicCurveTo_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/shape/CubicCurve_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.shape;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class CubicCurve_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(CubicCurve.class);
+
+        cfg.addProperty("startX", 0.2);
+        cfg.addProperty("startY", 0.3);
+        cfg.addProperty("endX", 0.5);
+        cfg.addProperty("endY", 0.6);
+        cfg.addProperty("controlX1", 0.4);
+        cfg.addProperty("controlY1", 0.5);
+        cfg.addProperty("controlX2", 0.6);
+        cfg.addProperty("controlY2", 0.7);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public CubicCurve_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/shape/Ellipse_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.shape;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Ellipse_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Ellipse.class);
+
+        cfg.addProperty("centerX", 0.2);
+        cfg.addProperty("centerY", 0.3);
+        cfg.addProperty("radiusX", 0.6);
+        cfg.addProperty("radiusY", 0.8);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Ellipse_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/shape/HLineTo_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.shape;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class HLineTo_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(HLineTo.class);
+
+        cfg.addProperty("x", 0.2);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public HLineTo_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/shape/LineTo_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.shape;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class LineTo_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(LineTo.class);
+
+        cfg.addProperty("x", 0.2);
+        cfg.addProperty("y", 0.3);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public LineTo_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/shape/Line_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.shape;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Line_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Line.class);
+
+        cfg.addProperty("startX", 0.2);
+        cfg.addProperty("startY", 0.3);
+        cfg.addProperty("endX", 0.4);
+        cfg.addProperty("endY", 0.5);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Line_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/shape/MoveTo_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.shape;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class MoveTo_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(MoveTo.class);
+
+        cfg.addProperty("x", 0.2);
+        cfg.addProperty("y", 0.3);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public MoveTo_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/shape/Path_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.shape;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Path_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Path.class);
+
+        cfg.addProperty("elements", PathElement.class, Arrays.asList(new MoveTo(10, 10), new ClosePath()));
+        cfg.addProperty("fillRule", FillRule.EVEN_ODD);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Path_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/shape/Polygon_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.shape;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Polygon_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Polygon.class);
+
+        cfg.addProperty("points", Double.class, Arrays.asList(10.0, 20.0, 100.0, 200.0, 200.0));
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Polygon_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/shape/Polyline_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.shape;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Polyline_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Polyline.class);
+
+        cfg.addProperty("points", Double.class, Arrays.asList(10.0, 20.0, 100.0, 200.0, 200.0));
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Polyline_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/shape/QuadCurveTo_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.shape;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class QuadCurveTo_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(QuadCurveTo.class);
+
+        cfg.addProperty("x", 0.2);
+        cfg.addProperty("y", 0.3);
+        cfg.addProperty("controlX", 0.4);
+        cfg.addProperty("controlY", 0.5);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public QuadCurveTo_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/shape/QuadCurve_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.shape;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class QuadCurve_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(QuadCurve.class);
+
+        cfg.addProperty("startX", 0.2);
+        cfg.addProperty("startY", 0.3);
+        cfg.addProperty("endX", 0.5);
+        cfg.addProperty("endY", 0.6);
+        cfg.addProperty("controlX", 0.4);
+        cfg.addProperty("controlY", 0.5);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public QuadCurve_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/shape/Rectangle_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.shape;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class Rectangle_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTestBase.Configuration cfg = new BuilderTestBase.Configuration(Rectangle.class);
+
+        cfg.addProperty("x", 0.2);
+        cfg.addProperty("y", 0.3);
+        cfg.addProperty("width", 100.4);
+        cfg.addProperty("height", 100.6);
+        cfg.addProperty("arcWidth", 105.0);
+        cfg.addProperty("arcHeight", 106.0);
+
+        return Arrays.asList(new Object[] {
+            config(cfg)
+        });
+    }
+
+    public Rectangle_builder_Test(final Configuration configuration) {
+        super(configuration);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-common/test/unit/javafx/scene/shape/SVGPath_builder_Test.java	Tue May 22 08:29:11 2012 -0700
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.shape;
+
+import com.sun.javafx.test.BuilderTestBase;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class SVGPath_builder_Test extends BuilderTestBase {
+    @Parameters
+    public static Collection data() {
+        BuilderTest