You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by gr...@apache.org on 2020/03/02 22:53:33 UTC

[royale-asjs] branch develop updated (6aca2b5 -> 16d92d3)

This is an automated email from the ASF dual-hosted git repository.

gregdove pushed a change to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git.


    from 6aca2b5  more improvements to item editing
     new 5766087  Fixing a bunch of -Poption-with-swf issues in the maven examples builds
     new 16d92d3  Fixes for function bindings, improved consistency between swf and JS, and addition of first round of Binding unit tests, more to come.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 examples/blog/pom.xml                              |   7 +
 examples/crux/pom.xml                              |  43 ++-
 examples/express/GitHubCommitLogViewer/pom.xml     |   7 +
 examples/express/pom.xml                           |   7 +
 examples/mxroyale/pom.xml                          |  35 +++
 examples/royale/ASDoc/pom.xml                      |   8 +
 examples/royale/pom.xml                            |  15 ++
 .../projects/BindingJS/src/test/royale/build.xml   | 193 ++++++++++++++
 .../main/royale/org/apache/royale/html/Label.as    |   1 +
 frameworks/projects/Binding/build.xml              |  13 +-
 .../org/apache/royale/binding/PropertyWatcher.as   |  18 +-
 .../royale/FlexUnitRoyaleApplication-config.xml    |   0
 .../src/test/royale/FlexUnitRoyaleApplication.mxml |  97 +++++++
 .../projects/Binding/src/test/royale/build.xml     | 116 ++++++++
 .../test/royale/flexUnitTests/BindingTester.as}    |  40 ++-
 .../flexUnitTests/binding/BindableCoreTests.as     | 295 +++++++++++++++++++++
 .../flexUnitTests/binding/BindingCoreTests.as      | 240 +++++++++++++++++
 .../flexUnitTests/binding/support/IBindingTest.as  |  28 ++
 .../BaseWithAccesorVariantsBindableClass.as        |  93 +++++++
 .../bindables/BaseWithBindableAndUnbindableVars.as |  29 ++
 .../support/bindables/BaseWithBindableClass.as     |  27 ++
 .../support/bindables/BaseWithBindableGetter.as    |  69 +++++
 .../support/bindables/BaseWithBindableVar.as       |  28 ++
 .../bindables/BaseWithGetterBindableClass.as       |  42 +++
 .../binding/support/bindables/BindableMxmlTest.as  |  33 +++
 .../binding/support/bindables/BindableSetterVO.as  |  38 +++
 .../binding/support/bindables/BindableSubVO1.as    |  33 +++
 .../binding/support/bindables/BindableSubVO2.as    |  33 +++
 .../binding/support/bindables/BindableSubVO3.as    |  33 +++
 .../bindables/BindableWithConstructorInit.as       |  46 ++++
 .../binding/support/bindables/UnbindableBase.as    |  31 +++
 .../support/bindables/UnbindableIntermediateVO.as  |  31 +++
 .../binding/support/bindings/DeepBindingsA.mxml    | 159 +++++++++++
 .../support/bindings/FunctionBindingsA.mxml        | 284 ++++++++++++++++++++
 .../support/bindings/RendereBindingTestA.mxml      | 135 ++++++++++
 .../binding/support/bindings/SimpleBindingsA.mxml  |  82 ++++++
 .../binding/support/bindings/SimpleBindingsB.mxml  | 173 ++++++++++++
 .../support/bindings/bindables/OneLayerBindable.as |  40 +++
 .../support/bindings/bindables/TwoLayerBindable.as |  29 ++
 .../binding/utils/BindableTestUtil.as              | 138 ++++++++++
 .../flexUnitTests/binding/utils/BindingTestUtil.as |  78 ++++++
 .../apache/royale/reflection/getAliasByClass.as    |   2 +-
 42 files changed, 2813 insertions(+), 36 deletions(-)
 create mode 100644 frameworks/js/projects/BindingJS/src/test/royale/build.xml
 copy frameworks/projects/{Core => Binding}/src/test/royale/FlexUnitRoyaleApplication-config.xml (100%)
 create mode 100644 frameworks/projects/Binding/src/test/royale/FlexUnitRoyaleApplication.mxml
 create mode 100644 frameworks/projects/Binding/src/test/royale/build.xml
 copy frameworks/projects/{Reflection/src/main/royale/org/apache/royale/reflection/getAliasByClass.as => Binding/src/test/royale/flexUnitTests/BindingTester.as} (50%)
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/BindableCoreTests.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/BindingCoreTests.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/IBindingTest.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithAccesorVariantsBindableClass.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithBindableAndUnbindableVars.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithBindableClass.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithBindableGetter.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithBindableVar.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithGetterBindableClass.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableMxmlTest.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableSetterVO.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableSubVO1.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableSubVO2.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableSubVO3.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableWithConstructorInit.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/UnbindableBase.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/UnbindableIntermediateVO.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/DeepBindingsA.mxml
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/FunctionBindingsA.mxml
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/RendereBindingTestA.mxml
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/SimpleBindingsA.mxml
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/SimpleBindingsB.mxml
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/bindables/OneLayerBindable.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/bindables/TwoLayerBindable.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/utils/BindableTestUtil.as
 create mode 100644 frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/utils/BindingTestUtil.as


[royale-asjs] 01/02: Fixing a bunch of -Poption-with-swf issues in the maven examples builds

Posted by gr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gregdove pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git

commit 576608716371ca9721657063a35f20a2b145bdd4
Author: greg-dove <gr...@gmail.com>
AuthorDate: Tue Mar 3 10:22:16 2020 +1300

    Fixing a bunch of -Poption-with-swf issues in the maven examples builds
---
 examples/blog/pom.xml                          |  7 +++++
 examples/crux/pom.xml                          | 43 +++++++++++++++++++++++++-
 examples/express/GitHubCommitLogViewer/pom.xml |  7 +++++
 examples/express/pom.xml                       |  7 +++++
 examples/mxroyale/pom.xml                      | 35 +++++++++++++++++++++
 examples/royale/ASDoc/pom.xml                  |  8 +++++
 examples/royale/pom.xml                        | 15 +++++++++
 7 files changed, 121 insertions(+), 1 deletion(-)

diff --git a/examples/blog/pom.xml b/examples/blog/pom.xml
index 7dd4bb7..60e9100 100644
--- a/examples/blog/pom.xml
+++ b/examples/blog/pom.xml
@@ -179,6 +179,13 @@
           <type>swc</type>
           <classifier>swf</classifier>
         </dependency>
+        <dependency>
+          <groupId>org.apache.royale.framework</groupId>
+          <artifactId>Basic</artifactId>
+          <version>0.9.7-SNAPSHOT</version>
+          <type>swc</type>
+          <classifier>swf</classifier>
+        </dependency>
       </dependencies>
     </profile>
   </profiles>
diff --git a/examples/crux/pom.xml b/examples/crux/pom.xml
index 45091d8..3af2069 100644
--- a/examples/crux/pom.xml
+++ b/examples/crux/pom.xml
@@ -121,7 +121,13 @@
       <type>swc</type>
       <classifier>js</classifier>
     </dependency>
-
+    <dependency>
+      <groupId>org.apache.royale.framework</groupId>
+      <artifactId>Network</artifactId>
+      <version>0.9.7-SNAPSHOT</version>
+      <type>swc</type>
+      <classifier>js</classifier>
+    </dependency>
     <!-- Import the shared unit-tests we want to run on all examples -->
     <dependency>
       <groupId>org.apache.royale.examples</groupId>
@@ -184,6 +190,41 @@
           <type>swc</type>
           <classifier>swf</classifier>
         </dependency>
+        <dependency>
+          <groupId>org.apache.royale.framework</groupId>
+          <artifactId>Effects</artifactId>
+          <version>0.9.7-SNAPSHOT</version>
+          <type>swc</type>
+          <classifier>swf</classifier>
+        </dependency>
+        <dependency>
+          <groupId>org.apache.royale.framework</groupId>
+          <artifactId>Basic</artifactId>
+          <version>0.9.7-SNAPSHOT</version>
+          <type>swc</type>
+          <classifier>swf</classifier>
+        </dependency>
+        <dependency>
+          <groupId>org.apache.royale.framework</groupId>
+          <artifactId>MXRoyale</artifactId>
+          <version>0.9.7-SNAPSHOT</version>
+          <type>swc</type>
+          <classifier>swf</classifier>
+        </dependency>
+        <dependency>
+          <groupId>org.apache.royale.framework</groupId>
+          <artifactId>Reflection</artifactId>
+          <version>0.9.7-SNAPSHOT</version>
+          <type>swc</type>
+          <classifier>swf</classifier>
+        </dependency>
+        <dependency>
+          <groupId>org.apache.royale.framework</groupId>
+          <artifactId>Network</artifactId>
+          <version>0.9.7-SNAPSHOT</version>
+          <type>swc</type>
+          <classifier>swf</classifier>
+        </dependency>
       </dependencies>
     </profile>
   </profiles>
diff --git a/examples/express/GitHubCommitLogViewer/pom.xml b/examples/express/GitHubCommitLogViewer/pom.xml
index a4b11d8..2a1aaa2 100644
--- a/examples/express/GitHubCommitLogViewer/pom.xml
+++ b/examples/express/GitHubCommitLogViewer/pom.xml
@@ -67,6 +67,13 @@
           <type>swc</type>
           <classifier>swf</classifier>
         </dependency>
+        <dependency>
+          <groupId>org.apache.royale.framework</groupId>
+          <artifactId>Basic</artifactId>
+          <version>0.9.7-SNAPSHOT</version>
+          <type>swc</type>
+          <classifier>swf</classifier>
+        </dependency>
       </dependencies>
     </profile>
   </profiles>
diff --git a/examples/express/pom.xml b/examples/express/pom.xml
index 1565be8..99d0092 100644
--- a/examples/express/pom.xml
+++ b/examples/express/pom.xml
@@ -198,6 +198,13 @@
           <type>swc</type>
           <classifier>swf</classifier>
         </dependency>
+        <dependency>
+          <groupId>org.apache.royale.framework</groupId>
+          <artifactId>DragDrop</artifactId>
+          <version>0.9.7-SNAPSHOT</version>
+          <type>swc</type>
+          <classifier>swf</classifier>
+        </dependency>
       </dependencies>
     </profile>
   </profiles>
diff --git a/examples/mxroyale/pom.xml b/examples/mxroyale/pom.xml
index 593b106..9cdc18b 100644
--- a/examples/mxroyale/pom.xml
+++ b/examples/mxroyale/pom.xml
@@ -152,6 +152,13 @@
         </dependency>
         <dependency>
           <groupId>org.apache.royale.framework</groupId>
+          <artifactId>Basic</artifactId>
+          <version>0.9.7-SNAPSHOT</version>
+          <type>swc</type>
+          <classifier>swf</classifier>
+        </dependency>
+        <dependency>
+          <groupId>org.apache.royale.framework</groupId>
           <artifactId>Language</artifactId>
           <version>0.9.7-SNAPSHOT</version>
           <type>swc</type>
@@ -187,6 +194,20 @@
         </dependency>
         <dependency>
           <groupId>org.apache.royale.framework</groupId>
+          <artifactId>Reflection</artifactId>
+          <version>0.9.7-SNAPSHOT</version>
+          <type>swc</type>
+          <classifier>swf</classifier>
+        </dependency>
+        <dependency>
+          <groupId>org.apache.royale.framework</groupId>
+          <artifactId>Effects</artifactId>
+          <version>0.9.7-SNAPSHOT</version>
+          <type>swc</type>
+          <classifier>swf</classifier>
+        </dependency>
+        <dependency>
+          <groupId>org.apache.royale.framework</groupId>
           <artifactId>MXRoyale</artifactId>
           <version>0.9.7-SNAPSHOT</version>
           <type>swc</type>
@@ -194,6 +215,20 @@
         </dependency>
         <dependency>
           <groupId>org.apache.royale.framework</groupId>
+          <artifactId>Text</artifactId>
+          <version>0.9.7-SNAPSHOT</version>
+          <type>swc</type>
+          <classifier>swf</classifier>
+        </dependency>
+        <dependency>
+          <groupId>org.apache.royale.framework</groupId>
+          <artifactId>TLF</artifactId>
+          <version>0.9.7-SNAPSHOT</version>
+          <type>swc</type>
+          <classifier>swf</classifier>
+        </dependency>
+        <dependency>
+          <groupId>org.apache.royale.framework</groupId>
           <artifactId>SparkRoyale</artifactId>
           <version>0.9.7-SNAPSHOT</version>
           <type>swc</type>
diff --git a/examples/royale/ASDoc/pom.xml b/examples/royale/ASDoc/pom.xml
index 0056e80..638ca33 100644
--- a/examples/royale/ASDoc/pom.xml
+++ b/examples/royale/ASDoc/pom.xml
@@ -105,6 +105,14 @@
           <type>swc</type>
           <classifier>swf</classifier>
         </dependency>
+        <dependency>
+          <groupId>org.apache.royale.framework</groupId>
+          <artifactId>BasicTheme</artifactId>
+          <version>0.9.7-SNAPSHOT</version>
+          <type>swc</type>
+          <scope>theme</scope>
+          <classifier>swf</classifier>
+        </dependency>
       </dependencies>
     </profile>
   </profiles>
diff --git a/examples/royale/pom.xml b/examples/royale/pom.xml
index be37fc5..98716ea 100644
--- a/examples/royale/pom.xml
+++ b/examples/royale/pom.xml
@@ -75,6 +75,7 @@
     <module>TeamPage</module>
     <module>TodoListSampleApp</module>
     <module>TreeExample</module>
+
   </modules>
 
   <build>
@@ -182,6 +183,20 @@
         </dependency>
         <dependency>
           <groupId>org.apache.royale.framework</groupId>
+          <artifactId>Basic</artifactId>
+          <version>0.9.7-SNAPSHOT</version>
+          <type>swc</type>
+          <classifier>swf</classifier>
+        </dependency>
+        <dependency>
+          <groupId>org.apache.royale.framework</groupId>
+          <artifactId>Effects</artifactId>
+          <version>0.9.7-SNAPSHOT</version>
+          <type>swc</type>
+          <classifier>swf</classifier>
+        </dependency>
+        <dependency>
+          <groupId>org.apache.royale.framework</groupId>
           <artifactId>HTML</artifactId>
           <version>0.9.7-SNAPSHOT</version>
           <type>swc</type>


[royale-asjs] 02/02: Fixes for function bindings, improved consistency between swf and JS, and addition of first round of Binding unit tests, more to come.

Posted by gr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gregdove pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git

commit 16d92d3920015417b02facf77c44341ec75bdaf2
Author: greg-dove <gr...@gmail.com>
AuthorDate: Tue Mar 3 10:50:39 2020 +1300

    Fixes for function bindings, improved consistency between swf and JS, and addition of first round of Binding unit tests, more to come.
---
 .../projects/BindingJS/src/test/royale/build.xml   | 193 ++++++++++++++
 .../main/royale/org/apache/royale/html/Label.as    |   1 +
 frameworks/projects/Binding/build.xml              |  13 +-
 .../org/apache/royale/binding/PropertyWatcher.as   |  18 +-
 .../royale/FlexUnitRoyaleApplication-config.xml    | 105 ++++++++
 .../src/test/royale/FlexUnitRoyaleApplication.mxml |  97 +++++++
 .../projects/Binding/src/test/royale/build.xml     | 116 ++++++++
 .../test/royale/flexUnitTests/BindingTester.as}    |  40 ++-
 .../flexUnitTests/binding/BindableCoreTests.as     | 295 +++++++++++++++++++++
 .../flexUnitTests/binding/BindingCoreTests.as      | 240 +++++++++++++++++
 .../flexUnitTests/binding/support/IBindingTest.as  |  28 ++
 .../BaseWithAccesorVariantsBindableClass.as        |  93 +++++++
 .../bindables/BaseWithBindableAndUnbindableVars.as |  29 ++
 .../support/bindables/BaseWithBindableClass.as     |  27 ++
 .../support/bindables/BaseWithBindableGetter.as    |  69 +++++
 .../support/bindables/BaseWithBindableVar.as       |  28 ++
 .../bindables/BaseWithGetterBindableClass.as       |  42 +++
 .../binding/support/bindables/BindableMxmlTest.as  |  33 +++
 .../binding/support/bindables/BindableSetterVO.as  |  38 +++
 .../binding/support/bindables/BindableSubVO1.as    |  33 +++
 .../binding/support/bindables/BindableSubVO2.as    |  33 +++
 .../binding/support/bindables/BindableSubVO3.as    |  33 +++
 .../bindables/BindableWithConstructorInit.as       |  46 ++++
 .../binding/support/bindables/UnbindableBase.as    |  31 +++
 .../support/bindables/UnbindableIntermediateVO.as  |  31 +++
 .../binding/support/bindings/DeepBindingsA.mxml    | 159 +++++++++++
 .../support/bindings/FunctionBindingsA.mxml        | 284 ++++++++++++++++++++
 .../support/bindings/RendereBindingTestA.mxml      | 135 ++++++++++
 .../binding/support/bindings/SimpleBindingsA.mxml  |  82 ++++++
 .../binding/support/bindings/SimpleBindingsB.mxml  | 173 ++++++++++++
 .../support/bindings/bindables/OneLayerBindable.as |  40 +++
 .../support/bindings/bindables/TwoLayerBindable.as |  29 ++
 .../binding/utils/BindableTestUtil.as              | 138 ++++++++++
 .../flexUnitTests/binding/utils/BindingTestUtil.as |  78 ++++++
 .../apache/royale/reflection/getAliasByClass.as    |   2 +-
 35 files changed, 2797 insertions(+), 35 deletions(-)

diff --git a/frameworks/js/projects/BindingJS/src/test/royale/build.xml b/frameworks/js/projects/BindingJS/src/test/royale/build.xml
new file mode 100644
index 0000000..fece394
--- /dev/null
+++ b/frameworks/js/projects/BindingJS/src/test/royale/build.xml
@@ -0,0 +1,193 @@
+<?xml version="1.0"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+
+
+<project name="BindingJS.test" default="main" basedir=".">
+    <property name="ROYALE_HOME" location="../../../../../../.."/>
+    
+    <property file="${ROYALE_HOME}/env.properties"/>
+    <property environment="env"/>
+    <property file="${ROYALE_HOME}/local.properties"/>
+    <property file="${ROYALE_HOME}/build.properties"/>
+    <property name="ROYALE_HOME" value="${env.ROYALE_HOME}"/>
+    <property name="ROYALE_SWF_COMPILER_HOME" value="${env.ROYALE_SWF_COMPILER_HOME}"/>
+    <property name="target.name" value="BindingJS-${release.version}.swc" />
+
+    <!--
+        Windows browser:
+            try chrome first because it's the most popular browser
+            otherwise, try to fall back to firefox
+            DON'T use internet explorer! it cannot run scripts in local pages
+    -->
+    <condition property="royaleunit.browser" value="${env.ProgramFiles}/Google/Chrome/Application/chrome.exe">
+        <and>
+            <os family="windows"/>
+            <available file="${env.ProgramFiles}/Google/Chrome/Application/chrome.exe"/>
+        </and>
+    </condition>
+    <condition property="royaleunit.browser" value="${env.ProgramFiles(x86)}/Google/Chrome/Application/chrome.exe">
+        <and>
+            <os family="windows"/>
+            <available file="${env.ProgramFiles(x86)}/Google/Chrome/Application/chrome.exe"/>
+        </and>
+    </condition>
+    <condition property="royaleunit.browser" value="${env.ProgramFiles}/Mozilla Firefox/firefox.exe">
+        <and>
+            <os family="windows"/>
+            <available file="${env.ProgramFiles}/Mozilla Firefox/firefox.exe"/>
+        </and>
+    </condition>
+    <condition property="royaleunit.browser" value="${env.ProgramFiles(x86)}/Mozilla Firefox/firefox.exe">
+        <and>
+            <os family="windows"/>
+            <available file="${env.ProgramFiles(x86)}/Mozilla Firefox/firefox.exe"/>
+        </and>
+    </condition>
+
+    <!--
+        macOS browser:
+            try chrome first because it's the most popular browser
+            otherwise, try to fall back to firefox
+            DON'T use safari! it asks the user to confirm opening local pages
+    -->
+    <condition property="royaleunit.browser" value="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome">
+        <and>
+            <os family="mac"/>
+            <available file="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"/>
+        </and>
+    </condition>
+    <condition property="royaleunit.browser" value="/Applications/Firefox.app/Contents/MacOS/firefox">
+        <and>
+            <os family="mac"/>
+            <available file="/Applications/Firefox.app/Contents/MacOS/firefox"/>
+        </and>
+    </condition>
+
+    <!--
+        Linux/Unix browser
+    -->
+    <condition property="royaleunit.browser" value="/usr/bin/firefox">
+        <and>
+            <os family="unix"/>
+            <available file="/usr/bin/firefox"/>
+        </and>
+    </condition>
+
+    <property name="report.dir" value="${basedir}/out" />
+
+    <target name="main" depends="clean,compile,test" description="Clean test of ${target.name}">
+    </target>
+
+    <target name="clean">
+        <delete failonerror="false" includeemptydirs="true">
+            <fileset dir="${basedir}/target">
+                <include name="**/**"/>
+            </fileset>
+        </delete>
+        <delete failonerror="false" includeemptydirs="true">
+            <fileset dir="${report.dir}">
+                <include name="**/**"/>
+            </fileset>
+        </delete>
+    </target>
+    
+    <path id="lib.path">
+      <fileset dir="${ROYALE_COMPILER_HOME}/lib" includes="compiler-royaleTasks.jar"/>
+      <fileset dir="${ROYALE_COMPILER_HOME}/lib" includes="royaleUnitTasks.jar"/>
+    </path>
+
+    <target name="compile" description="Cross-compiles tests">
+        <echo message="Cross-compiling tests"/>
+        <echo message="ROYALE_HOME: ${ROYALE_HOME}"/>
+        <echo message="ROYALE_SWF_COMPILER_HOME: ${ROYALE_SWF_COMPILER_HOME}"/>
+        <echo message="playerglobal.version: ${playerglobal.version}"/>
+
+        <!-- Load the <compc> task. We can't do this at the <project> level -->
+        <!-- because targets that run before flexTasks.jar gets built would fail. -->
+        <taskdef resource="flexTasks.tasks" classpathref="lib.path"/>
+        <!--
+            Link in the classes (and their dependencies) for the MXML tags
+            listed in this project's manifest.xml.
+            Also link the additional classes (and their dependencies)
+            listed in RoyaleUIClasses.as,
+            because these aren't referenced by the manifest classes.
+            Keep the standard metadata when compiling.
+            Include the appropriate CSS files and assets in the SWC.
+            Don't include any resources in the SWC.
+            Write a bundle list of referenced resource bundles
+            into the file bundles.properties in this directory.
+        -->
+        <mxmlc fork="true"
+               file="${basedir}/../../../../../../projects/Collections/src/test/royale/FlexUnitRoyaleApplication.mxml">
+            <jvmarg line="${mxmlc.jvm.args}"/>
+            <!--
+            <jvmarg value="-Xdebug" />
+            <jvmarg value="-Xnoagent" />
+            <jvmarg value="-Xrunjdwp:transport=dt_socket,address=8763,server=y,suspend=y" />
+             -->
+            <arg value="-debug" />
+            <arg value="-compiler.targets=JSRoyale" />
+            <arg value="-js-output=target" />
+            <arg value="+playerglobal.version=${playerglobal.version}" />
+            <arg value="+env.PLAYERGLOBAL_HOME=${env.PLAYERGLOBAL_HOME}" />
+        </mxmlc>
+    </target>
+
+    <target name="check-royaleunit-browser" if="royaleunit.browser" unless="skip-tests">
+        <!--
+            if the royaleunit.browser property was provided manually,
+            check if the file actually exists
+        -->
+        <condition property="royaleunit.browser.exists">
+            <and>
+                <isset property="royaleunit.browser" />
+                <available file="${royaleunit.browser}" type="file" />
+            </and>
+        </condition>
+        
+        <fail unless="royaleunit.browser.exists" message="Invalid royaleunit.browser path: &quot;${royaleunit.browser}&quot;. To skip RoyaleUnit tests, use -Dskip-tests." />
+    </target>
+
+    <target name="test" depends="check-royaleunit-browser" if="royaleunit.browser.exists" unless="skip-tests">
+        <!-- Load the <royaleunit> task. We can't do this at the <project> level -->
+        <!-- because targets that run before royaleUnitTasks.jar gets built would fail. -->
+        <taskdef resource="royaleUnitTasks.tasks" classpathref="lib.path"/>
+		<mkdir dir="${report.dir}" />
+		<royaleunit
+            player="html"
+            swf="${basedir}/target/bin/js-debug/index.html"
+            command="${royaleunit.browser}"
+		    workingDir="${basedir}"
+		    toDir="${report.dir}"
+			haltonfailure="true"
+			verbose="true"
+			localTrusted="true"
+			timeout="90000" />
+        
+		<!-- Generate readable JUnit-style reports -->
+		<junitreport todir="${report.dir}">
+			<fileset dir="${report.dir}">
+				<include name="TEST-*.xml" />
+			</fileset>
+			<report format="frames" todir="${report.dir}/html" />
+		</junitreport>
+        
+    </target>
+</project>
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/Label.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/Label.as
index 1510121..1b22ae3 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/Label.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/Label.as
@@ -114,6 +114,7 @@ package org.apache.royale.html
             {
                 if (textNode)
                 {
+                    value = value != null ? value + '' : '';
                     _text = value;
                     textNode.nodeValue = value;
                     sendEvent(this,"textChange");
diff --git a/frameworks/projects/Binding/build.xml b/frameworks/projects/Binding/build.xml
index 5dde71a..3683d49 100644
--- a/frameworks/projects/Binding/build.xml
+++ b/frameworks/projects/Binding/build.xml
@@ -35,7 +35,7 @@
     </tstamp>
     <echo>swc-date is ${royale.swc-date}</echo>
 
-    <target name="main" depends="clean,check-compiler,compile,compile-js,copy-swc,test" description="Full build of ${ant.project.name}.swc">
+    <target name="main" depends="clean,check-compiler,compile,compile-js,copy-swc" description="Full build of ${ant.project.name}.swc">
     </target>
     
     <target name="compile-js">
@@ -63,9 +63,18 @@
             </not>
         </condition>
     </target>
-    
+
     <target name="test" depends="check-for-tests,check-compiler" unless="skip-tests">
         <ant dir="src/test/royale" />
+        <antcall target="test-js" />
+    </target>
+
+    <target name="test-js">
+        <ant dir="${ROYALE_HOME}/frameworks/js/projects/${ant.project.name}JS/" inheritAll="false" target="test">
+            <property name="ROYALE_SWF_COMPILER_HOME" value="${ROYALE_SWF_COMPILER_HOME}"/>
+            <property name="ROYALE_COMPILER_HOME" value="${ROYALE_COMPILER_HOME}"/>
+            <property name="ROYALE_HOME" value="${ROYALE_HOME}"/>
+        </ant>
     </target>
     
     <target name="clean">
diff --git a/frameworks/projects/Binding/src/main/royale/org/apache/royale/binding/PropertyWatcher.as b/frameworks/projects/Binding/src/main/royale/org/apache/royale/binding/PropertyWatcher.as
index 4ef3b03..15c9a0d 100644
--- a/frameworks/projects/Binding/src/main/royale/org/apache/royale/binding/PropertyWatcher.as
+++ b/frameworks/projects/Binding/src/main/royale/org/apache/royale/binding/PropertyWatcher.as
@@ -150,15 +150,19 @@ package org.apache.royale.binding
          */                
         protected function changeHandler(event:Event):void
         {
-            if (event is ValueChangeEvent)
-            {   //normally it is 'generic' ValueChangeEvent.VALUE_CHANGE, but it can be other types, eg. "currentStateChange", so check here:
-                if (event.type == ValueChangeEvent.VALUE_CHANGE) {
-                    var propName:String = ValueChangeEvent(event).propertyName;
+            if (propertyName) {
+                if (event is ValueChangeEvent)
+                {   //normally it is 'generic' ValueChangeEvent.VALUE_CHANGE, but it can be other types, eg. "currentStateChange", so check here:
+                    if (event.type == ValueChangeEvent.VALUE_CHANGE) {
+                        var propName:String = ValueChangeEvent(event).propertyName;
 
-                    if (propName != propertyName)
-                        return;
+                        if (propName != propertyName) {
+                            return;
+                        }
+
+                    }
+                    //@todo investigate possible optimization here. We can assume we already know the new Value and old Value via the event.
                 }
-                //@todo investigate possible optimization here. We can assume we already know the new Value and old Value via the event.
             }
             
             wrapUpdate(updateProperty);
diff --git a/frameworks/projects/Binding/src/test/royale/FlexUnitRoyaleApplication-config.xml b/frameworks/projects/Binding/src/test/royale/FlexUnitRoyaleApplication-config.xml
new file mode 100644
index 0000000..6d2a736
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/FlexUnitRoyaleApplication-config.xml
@@ -0,0 +1,105 @@
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<royale-config>
+
+    <compiler>
+        <accessible>false</accessible>
+        
+        <targets>
+            <target>SWF</target>
+        </targets>
+        <strict-xml>true</strict-xml>
+
+        <external-library-path>
+            <path-element>{playerglobalHome}/{targetPlayerMajorVersion}.{targetPlayerMinorVersion}/playerglobal.swc</path-element>
+        </external-library-path>
+        
+        <js-external-library-path>
+            <path-element>../../../../../../js/libs/js.swc</path-element>
+            <path-element>../../../../../../js/libs/gcl.swc</path-element>
+        </js-external-library-path>
+        
+        <library-path>
+            <path-element>../../../../../libs/Basic.swc</path-element>
+            <path-element>../../../../../libs/Binding.swc</path-element>
+            <path-element>../../../../../libs/Core.swc</path-element>
+            <path-element>../../../../../libs/Graphics.swc</path-element>
+            <path-element>../../../../../libs/Collections.swc</path-element>
+            <path-element>../../../../../libs/Language.swc</path-element>
+            <path-element>../../../../../libs/Reflection.swc</path-element>
+            <path-element>../../../../../libs/RoyaleUnit.swc</path-element>
+        </library-path>
+        
+        <js-library-path>
+            <path-element>../../../../../js/libs/BasicJS.swc</path-element>
+            <path-element>../../../../../js/libs/BindingJS.swc</path-element>
+            <path-element>../../../../../js/libs/CoreJS.swc</path-element>
+            <path-element>../../../../../js/libs/GraphicsJS.swc</path-element>
+            <path-element>../../../../../js/libs/CollectionsJS.swc</path-element>
+            <path-element>../../../../../js/libs/LanguageJS.swc</path-element>
+            <path-element>../../../../../js/libs/ReflectionJS.swc</path-element>
+            <path-element>../../../../../js/libs/RoyaleUnitJS.swc</path-element>
+        </js-library-path>
+
+        <allow-subclass-overrides>true</allow-subclass-overrides>
+
+        <mxml>
+            <children-as-data>true</children-as-data>
+        </mxml>
+        <binding-value-change-event>org.apache.royale.events.ValueChangeEvent</binding-value-change-event>
+        <binding-value-change-event-kind>org.apache.royale.events.ValueChangeEvent</binding-value-change-event-kind>
+        <binding-value-change-event-type>valueChange</binding-value-change-event-type>
+        <fxg-base-class>flash.display.Sprite</fxg-base-class>
+
+        <keep-as3-metadata>
+          <name>Bindable</name>
+          <name>Managed</name>
+          <name>ChangeEvent</name>
+          <name>NonCommittingChangeEvent</name>
+          <name>Transient</name>
+          <name>SWFOverride</name>
+
+          <!-- RoyaleUnit -->
+          <name>Test</name>
+          <name>Before</name>
+          <name>After</name>
+          <name>BeforeClass</name>
+          <name>AfterClass</name>
+          <name>Ignore</name>
+          <name>Suite</name>
+          <name>RunWith</name>
+        </keep-as3-metadata>
+    
+        <locale/>
+        
+        <library-path/>
+
+        <namespaces>
+            <namespace>
+                <uri>library://ns.apache.org/royale/basic</uri>
+                <manifest>../../main/resources/basic-manifest.xml</manifest>
+            </namespace>
+        </namespaces>
+        
+        <warn-no-constructor>false</warn-no-constructor>
+    </compiler>
+    
+    <target-player>${playerglobal.version}</target-player>
+
+</royale-config>
diff --git a/frameworks/projects/Binding/src/test/royale/FlexUnitRoyaleApplication.mxml b/frameworks/projects/Binding/src/test/royale/FlexUnitRoyaleApplication.mxml
new file mode 100644
index 0000000..1944776
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/FlexUnitRoyaleApplication.mxml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+
+<js:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
+                   xmlns:js="library://ns.apache.org/royale/basic" 
+                   xmlns:test="org.apache.royale.test.*" 
+                   applicationComplete="runTests()"
+                   >
+    <fx:Declarations>
+        <test:RoyaleUnitCore id="core"/>
+    </fx:Declarations>
+    <fx:Script>
+        <![CDATA[
+            COMPILE::SWF
+            {
+                import flash.system.fscommand;
+            }
+
+            import flexUnitTests.BindingTester;
+            
+            import org.apache.royale.events.Event;
+            import org.apache.royale.test.listeners.CIListener;
+            import org.apache.royale.test.Runtime;
+
+
+            private static var _instance:FlexUnitRoyaleApplication;
+            public static function getInstance():FlexUnitRoyaleApplication{
+                return _instance;
+            }
+
+            public function get bindingsTestParent():Group{
+                return bindingTestHolder;
+            }
+
+            //account for swf version variance in some test results due to fixed player bugs etc
+            public function getSwfVersion():uint{
+                COMPILE::SWF{
+                    return this.stage.loaderInfo.bytes[3];
+
+                }
+                return 0;
+            }
+
+            public function getPlayerVersion():String{
+                COMPILE::SWF{
+                    import flash.system.Capabilities;
+                    return Capabilities.version;
+                }
+                return '';
+            }
+
+            public function runTests():void
+            {
+                _instance = this;
+                Runtime.swfVersion = getSwfVersion();
+                core.addListener(new CIListener());
+                core.addEventListener(Event.COMPLETE, core_completeHandler);
+                core.runClasses(BindingTester);
+            }
+
+            private function core_completeHandler(event:Event):void
+            {
+                COMPILE::SWF
+                {
+                    fscommand("quit");
+                }
+            }
+            
+        ]]>
+    </fx:Script>
+    <js:valuesImpl>
+        <js:SimpleCSSValuesImpl />
+    </js:valuesImpl>
+    <js:initialView>
+        <js:View>
+            <js:Group localId="bindingTestHolder" />
+        </js:View>
+    </js:initialView>
+
+</js:Application>
diff --git a/frameworks/projects/Binding/src/test/royale/build.xml b/frameworks/projects/Binding/src/test/royale/build.xml
new file mode 100644
index 0000000..e309680
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/build.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+
+
+<project name="Binding.test" default="main" basedir=".">
+    <property name="ROYALE_HOME" location="../../../../../.."/>
+    
+    <property file="${ROYALE_HOME}/env.properties"/>
+    <property environment="env"/>
+    <property file="${ROYALE_HOME}/local.properties"/>
+    <property file="${ROYALE_HOME}/build.properties"/>
+    <property name="ROYALE_HOME" value="${env.ROYALE_HOME}"/>
+    <property name="ROYALE_SWF_COMPILER_HOME" value="${env.ROYALE_SWF_COMPILER_HOME}"/>
+    <property name="target.name" value="Binding-${release.version}.swc" />
+
+    <property name="report.dir" value="${basedir}/out" />
+
+    <target name="main" depends="clean,compile,test" description="Clean test of ${target.name}">
+    </target>
+    
+    <target name="clean">
+        <delete failonerror="false">
+            <fileset dir="${basedir}">
+                <include name="FlexUnitRoyaleApplication.swf"/>
+            </fileset>
+        </delete>
+        <delete failonerror="false" includeemptydirs="true">
+            <fileset dir="${report.dir}">
+                <include name="**/**"/>
+            </fileset>
+        </delete>
+    </target>
+    
+    <path id="lib.path">
+      <fileset dir="${ROYALE_COMPILER_HOME}/lib" includes="compiler-royaleTasks.jar"/>
+      <fileset dir="${ROYALE_COMPILER_HOME}/lib" includes="royaleUnitTasks.jar"/>
+    </path>
+
+    <target name="compile" description="Compiles FlexUnitRoyaleApplication.swf">
+        <echo message="Compiling FlexUnitRoyaleApplication.swf"/>
+        <echo message="ROYALE_HOME: ${ROYALE_HOME}"/>
+        <echo message="ROYALE_SWF_COMPILER_HOME: ${ROYALE_SWF_COMPILER_HOME}"/>
+        <echo message="playerglobal.version: ${playerglobal.version}"/>
+
+        <!-- Load the <compc> task. We can't do this at the <project> level -->
+        <!-- because targets that run before flexTasks.jar gets built would fail. -->
+        <taskdef resource="flexTasks.tasks" classpathref="lib.path"/>
+        <!--
+            Link in the classes (and their dependencies) for the MXML tags
+            listed in this project's manifest.xml.
+            Also link the additional classes (and their dependencies)
+            listed in RoyaleUIClasses.as,
+            because these aren't referenced by the manifest classes.
+            Keep the standard metadata when compiling.
+            Include the appropriate CSS files and assets in the SWC.
+            Don't include any resources in the SWC.
+            Write a bundle list of referenced resource bundles
+            into the file bundles.properties in this directory.
+        -->
+        <mxmlc fork="true"
+            file="${basedir}/FlexUnitRoyaleApplication.mxml"
+            output="${basedir}/FlexUnitRoyaleApplication.swf">
+            <jvmarg line="${mxmlc.jvm.args}"/>
+            <!--
+            <jvmarg value="-Xdebug" />
+            <jvmarg value="-Xnoagent" />
+            <jvmarg value="-Xrunjdwp:transport=dt_socket,address=8763,server=y,suspend=y" />
+             -->
+            <arg value="-debug=true" />
+            <arg value="-compiler.targets=SWF" />
+            <arg value="+playerglobal.version=${playerglobal.version}" />
+            <arg value="+env.PLAYERGLOBAL_HOME=${env.PLAYERGLOBAL_HOME}" />
+        </mxmlc>
+    </target>
+
+    <target name="test">
+        <!-- Load the <royaleunit> task. We can't do this at the <project> level -->
+        <!-- because targets that run before royaleUnitTasks.jar gets built would fail. -->
+        <taskdef resource="royaleUnitTasks.tasks" classpathref="lib.path"/>
+		<mkdir dir="${report.dir}" />
+		<royaleunit
+            swf="${basedir}/FlexUnitRoyaleApplication.swf"
+		    workingDir="${basedir}"
+		    toDir="${report.dir}"
+			haltonfailure="true"
+			verbose="true"
+			localTrusted="true"
+			timeout="90000" />
+        
+		<!-- Generate readable JUnit-style reports -->
+		<junitreport todir="${report.dir}">
+			<fileset dir="${report.dir}">
+				<include name="TEST-*.xml" />
+			</fileset>
+			<report format="frames" todir="${report.dir}/html" />
+		</junitreport>
+        
+    </target>
+</project>
diff --git a/frameworks/projects/Reflection/src/main/royale/org/apache/royale/reflection/getAliasByClass.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/BindingTester.as
similarity index 50%
copy from frameworks/projects/Reflection/src/main/royale/org/apache/royale/reflection/getAliasByClass.as
copy to frameworks/projects/Binding/src/test/royale/flexUnitTests/BindingTester.as
index d89efa7..2fff518 100644
--- a/frameworks/projects/Reflection/src/main/royale/org/apache/royale/reflection/getAliasByClass.as
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/BindingTester.as
@@ -16,34 +16,24 @@
 //  limitations under the License.
 //
 ////////////////////////////////////////////////////////////////////////////////
-package org.apache.royale.reflection {
+package flexUnitTests
+{
+    import flexUnitTests.binding.*
 
-
-COMPILE::SWF {
-    import flash.utils.describeType;
-}
-/**
-     * Retrieves a an alias for a class, based on an alias mapping, previously registered with
-     * registerClassAlias, or possibly using [RemoteClass(alias='someAlias')] metadata
-     *
-     * @param classObject the class to retrieve the alias for
-     * @return the most recently mapped alias, if found otherwise "" (empty string)
+    [Suite]
+    [RunWith("org.apache.royale.test.runners.SuiteRunner")]
+    /**
+     *  @royalesuppresspublicvarwarning
      */
-    public function getAliasByClass(classObject:Class):String {
-        var ret:String;
-        if (classObject == null) throw new TypeError("Parameter classObject must be non-null.");
-        COMPILE::SWF {
-            ret= flash.utils.describeType(classObject).@alias;
-            if (ret.length==0) ret = null;
+    public class BindingTester
+    {
+        public function BindingTester()
+        {
         }
 
-        COMPILE::JS {
-            var info:* = classObject.prototype.ROYALE_CLASS_INFO;
-            if (info) {
-                ret = info.alias;
-                if (ret == '') ret = null;
-            } else ret=null;
-        }
-        return ret;
+        public var bindableCoreTest:BindableCoreTests;
+    
+        public var bindingCoreTest:BindingCoreTests;
+
     }
 }
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/BindableCoreTests.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/BindableCoreTests.as
new file mode 100644
index 0000000..2c3a2ea
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/BindableCoreTests.as
@@ -0,0 +1,295 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding
+{
+    
+    import org.apache.royale.test.asserts.*;
+    import flexUnitTests.binding.support.bindables.*;
+    import flexUnitTests.binding.utils.BindableTestUtil;
+
+    import org.apache.royale.events.IEventDispatcher;
+    import org.apache.royale.events.ValueChangeEvent;
+    
+    /**
+     * @royalesuppresspublicvarwarning
+     */
+    public class BindableCoreTests
+    {
+        
+        public static var isJS:Boolean = COMPILE::JS;
+        
+        public static var testUtil:BindableTestUtil;
+        
+        [BeforeClass]
+        public static function setUpBeforeClass():void
+        {
+            testUtil = BindableTestUtil.instance;
+        }
+        
+        [AfterClass]
+        public static function tearDownAfterClass():void
+        {
+            testUtil.reset();
+            testUtil = null;
+        }
+        
+        [Before]
+        public function setUp():void
+        {
+
+        }
+        
+        [After]
+        public function tearDown():void
+        {
+            testUtil.reset();
+        }
+    
+        //no bindings, UnBindable is not IEventDispatcher
+        [Test] 
+        public function testBasicUnbindable():void
+        {
+            var unbindable:UnbindableBase = new UnbindableBase();
+            
+            assertFalse(unbindable is IEventDispatcher, 'unbindable should not have IEventDispatcher-ness')
+        }
+
+        [Test]
+        public function testBasicBindableVar():void
+        {
+            // a variable member is marked [Bindable], but the class itself is not
+            testUtil.reset();
+            var bindable:BaseWithBindableVar = new BaseWithBindableVar();
+
+            assertTrue(bindable is IEventDispatcher, 'bindable should have IEventDispatcher-ness');
+            
+            var bindableDispatcher:IEventDispatcher = bindable as IEventDispatcher;
+            testUtil.listenTo(bindableDispatcher, ValueChangeEvent.VALUE_CHANGE);
+            
+            bindable.bindableVarOfBaseWithBindableVar = 'a new assigned value';
+            bindable.bindableVarOfBaseWithBindableVar = 'a second assigned value';
+            
+            var expected:String = 
+                    '0:ValueChangeEvent::property(bindableVarOfBaseWithBindableVar), oldVal:(bindableVarOfBaseWithBindableVar_value), newValue:(a new assigned value)\n' +
+                    '1:ValueChangeEvent::property(bindableVarOfBaseWithBindableVar), oldVal:(a new assigned value), newValue:(a second assigned value)';
+            
+            assertEquals(testUtil.getSequenceString(), expected, 'Unexpected results from changes to a "bindable"');
+
+            testUtil.reset();
+        }
+
+        [Test]
+        public function testBasicBindableClass():void
+        {
+            // a class is marked [Bindable], but not its variable member(s)
+            testUtil.reset();
+            var bindable:BaseWithBindableClass = new BaseWithBindableClass();
+
+            assertTrue(bindable is IEventDispatcher, 'bindable should have IEventDispatcher-ness');
+
+            var bindableDispatcher:IEventDispatcher = bindable as IEventDispatcher;
+            testUtil.listenTo(bindableDispatcher, ValueChangeEvent.VALUE_CHANGE);
+
+            bindable.varOfBaseWithBindableClass = 'a new assigned value';
+            bindable.varOfBaseWithBindableClass = 'a second assigned value';
+
+            var expected:String =
+                    '0:ValueChangeEvent::property(varOfBaseWithBindableClass), oldVal:(varOfBaseWithBindableClass_value), newValue:(a new assigned value)\n' +
+                    '1:ValueChangeEvent::property(varOfBaseWithBindableClass), oldVal:(a new assigned value), newValue:(a second assigned value)';
+
+            assertEquals(testUtil.getSequenceString(), expected, 'Unexpected results from changes to a "bindable"');
+
+            testUtil.reset();
+        }
+
+
+        [Test]
+        public function testBasicBindableAndUnbindableVar():void
+        {
+            // a variable member is marked [Bindable] and another is not, and the class itself is not [Bindable]
+            testUtil.reset();
+            var bindable:BaseWithBindableAndUnbindableVars = new BaseWithBindableAndUnbindableVars();
+
+            assertTrue(bindable is IEventDispatcher, 'bindable should have IEventDispatcher-ness');
+
+            var bindableDispatcher:IEventDispatcher = bindable as IEventDispatcher;
+            testUtil.listenTo(bindableDispatcher, ValueChangeEvent.VALUE_CHANGE);
+
+            bindable.bindableVarOfBaseWithBindableAndUnbindableVars = 'a new assigned value for bindable';
+            bindable.unbindableVarOfBaseWithBindableAndUnbindableVars = 'a new assigned value for unbindable';
+            bindable.bindableVarOfBaseWithBindableAndUnbindableVars = 'a second assigned value for bindable';
+            bindable.unbindableVarOfBaseWithBindableAndUnbindableVars = 'a second assigned value for unbindable';
+            //events are only expected from the Bindable member:
+            var expected:String =
+                    '0:ValueChangeEvent::property(bindableVarOfBaseWithBindableAndUnbindableVars), oldVal:(bindableVarOfBaseWithBindableAndUnbindableVars_value), newValue:(a new assigned value for bindable)\n' +
+                    '1:ValueChangeEvent::property(bindableVarOfBaseWithBindableAndUnbindableVars), oldVal:(a new assigned value for bindable), newValue:(a second assigned value for bindable)';
+
+            assertEquals(testUtil.getSequenceString(), expected, 'Unexpected results from changes to a "bindable"');
+
+            testUtil.reset();
+        }
+
+        [Test]
+        public function testBasicBindableGetter():void
+        {
+            // an accessor member is marked [Bindable], but the class itself is not
+            testUtil.reset();
+            var bindable:BaseWithBindableGetter = new BaseWithBindableGetter();
+
+            assertTrue(bindable is IEventDispatcher, 'bindable should have IEventDispatcher-ness');
+
+            var bindableDispatcher:IEventDispatcher = bindable as IEventDispatcher;
+            testUtil.listenTo(bindableDispatcher, ValueChangeEvent.VALUE_CHANGE);
+
+            bindable.accessorOfBaseWithBindableGetter = 'a new assigned value';
+            bindable.accessorOfBaseWithBindableGetter = 'a second assigned value';
+            
+
+            var expected:String =
+                    '0:history:accessing value from original getter , accessorOfBaseWithBindableGetter_value\n' +
+                    '1:history:assigning value in original setter , a new assigned value\n' +
+                    '2:ValueChangeEvent::property(accessorOfBaseWithBindableGetter), oldVal:(accessorOfBaseWithBindableGetter_value), newValue:(a new assigned value)\n' +
+                    '3:history:accessing value from original getter , a new assigned value\n' +
+                    '4:history:assigning value in original setter , a second assigned value\n' +
+                    '5:ValueChangeEvent::property(accessorOfBaseWithBindableGetter), oldVal:(a new assigned value), newValue:(a second assigned value)';
+
+            assertEquals(testUtil.getSequenceString(), expected, 'Unexpected results from changes to a "bindable"');
+
+            testUtil.reset();
+        }
+
+
+        [Test]
+        public function testBasicBindableGetterVariations():void
+        {
+            // an accessor member is marked [Bindable], but the class itself is not
+            testUtil.reset();
+            var bindable:BaseWithBindableGetter = new BaseWithBindableGetter();
+
+            assertTrue(bindable is IEventDispatcher, 'bindable should have IEventDispatcher-ness');
+
+            var bindableDispatcher:IEventDispatcher = bindable as IEventDispatcher;
+            testUtil.listenTo(bindableDispatcher, ValueChangeEvent.VALUE_CHANGE);
+            testUtil.listenTo(bindableDispatcher,'testEvent');
+            testUtil.listenTo(bindableDispatcher,'somethingChanged');
+
+            bindable.accessorOfBaseWithBindableGetter2 = 'a new assigned value';
+            bindable.accessorOfBaseWithBindableGetter2 = 'a second assigned value';
+            bindable.something = 'this does not dispatch';
+            
+            
+
+            var expected:String =
+                    '0:history:accessing value from original getter , _accessorOfBaseWithBindableGetter2_value\n' +
+                    '1:history:assigning value in original setter , a new assigned value\n' +
+                    '2:org.apache.royale.events.Event(type="testEvent", bubbles=false, cancelable=false)\n' +
+                    '3:ValueChangeEvent::property(accessorOfBaseWithBindableGetter2), oldVal:(_accessorOfBaseWithBindableGetter2_value), newValue:(a new assigned value)\n' +
+                    '4:history:accessing value from original getter , a new assigned value\n' +
+                    '5:history:assigning value in original setter , a second assigned value\n' +
+                    '6:org.apache.royale.events.Event(type="testEvent", bubbles=false, cancelable=false)\n' +
+                    '7:ValueChangeEvent::property(accessorOfBaseWithBindableGetter2), oldVal:(a new assigned value), newValue:(a second assigned value)';
+
+            assertEquals(testUtil.getSequenceString(), expected, 'Unexpected results from changes to a "bindable"');
+
+            testUtil.reset();
+        }
+        
+        
+
+        [Test]
+        public function testBasicBindableClassGetter():void
+        {
+            // a class is marked [Bindable], but not its accessor member(s)
+            testUtil.reset();
+            var bindable:BaseWithGetterBindableClass = new BaseWithGetterBindableClass();
+
+            assertTrue(bindable is IEventDispatcher, 'bindable should have IEventDispatcher-ness');
+
+            var bindableDispatcher:IEventDispatcher = bindable as IEventDispatcher;
+            testUtil.listenTo(bindableDispatcher, ValueChangeEvent.VALUE_CHANGE);
+
+            bindable.accessorOfBaseWithGetterBindableClass = 'a new assigned value';
+            bindable.accessorOfBaseWithGetterBindableClass = 'a second assigned value';
+            
+
+            var expected:String =
+                    '0:history:accessing value from original getter , accessorOfBaseWithGetterBindableClass_value\n' +
+                    '1:history:assigning value in original setter , a new assigned value\n' +
+                    '2:ValueChangeEvent::property(accessorOfBaseWithGetterBindableClass), oldVal:(accessorOfBaseWithGetterBindableClass_value), newValue:(a new assigned value)\n' +
+                    '3:history:accessing value from original getter , a new assigned value\n' +
+                    '4:history:assigning value in original setter , a second assigned value\n' +
+                    '5:ValueChangeEvent::property(accessorOfBaseWithGetterBindableClass), oldVal:(a new assigned value), newValue:(a second assigned value)';
+
+            assertEquals(testUtil.getSequenceString(), expected, 'Unexpected results from changes to a "bindable"');
+
+            testUtil.reset();
+        }
+
+
+        [Test]
+        public function testBindableClassWithAccessorVariations():void
+        {
+            // a class is marked [Bindable], but not its accessor member(s)
+            testUtil.reset();
+            var bindable:BaseWithAccesorVariantsBindableClass = new BaseWithAccesorVariantsBindableClass();
+
+            assertTrue(bindable is IEventDispatcher, 'bindable should have IEventDispatcher-ness');
+
+            var bindableDispatcher:IEventDispatcher = bindable as IEventDispatcher;
+            testUtil.listenTo(bindableDispatcher, ValueChangeEvent.VALUE_CHANGE);
+            testUtil.listenTo(bindableDispatcher, 'alternateChanged');
+            testUtil.listenTo(bindableDispatcher, 'alternate2Changed');
+
+            bindable.accessorOfBaseWithAccesorVariantsBindableClass = 'a new assigned value';
+            bindable.accessorOfBaseWithAccesorVariantsBindableClass = 'a second assigned value';
+            var val:String = bindable.getterOnly;
+            bindable.setterOnly = 'assigned value for setterOnly with val from getter:' + val;
+            bindable.alternate = 'new value for alternate';
+            bindable.alternate = 'another new value for alternate';
+            bindable.alternate2 = 'new value for alternate2';
+            bindable.alternate2 = 'another new value for alternate2';
+            
+
+            var expected:String =
+                    '0:history:accessing value from original getter , BaseWithAccessorVariantsBindableClass_value\n' +
+                    '1:history:assigning value in original setter , a new assigned value\n' +
+                    '2:ValueChangeEvent::property(accessorOfBaseWithAccesorVariantsBindableClass), oldVal:(BaseWithAccessorVariantsBindableClass_value), newValue:(a new assigned value)\n' +
+                    '3:history:accessing value from original getter , a new assigned value\n' +
+                    '4:history:assigning value in original setter , a second assigned value\n' +
+                    '5:ValueChangeEvent::property(accessorOfBaseWithAccesorVariantsBindableClass), oldVal:(a new assigned value), newValue:(a second assigned value)\n' +
+                    '6:history:getting non bindable getterOnly , getterOnly\n' +
+                    '7:history:setting non bindable setterOnly , assigned value for setterOnly with val from getter:getterOnly\n' +
+                    '8:history:setting alternate value with explicit Bindable event , new value for alternate\n' +
+                    '9:org.apache.royale.events.Event(type="alternateChanged", bubbles=false, cancelable=false)\n' +
+                    '10:history:setting alternate value with explicit Bindable event , another new value for alternate\n' +
+                    '11:org.apache.royale.events.Event(type="alternateChanged", bubbles=false, cancelable=false)\n' +
+                    '12:history:setting alternate2 value with both types of Bindable event , new value for alternate2\n' +
+                    '13:org.apache.royale.events.Event(type="alternate2Changed", bubbles=false, cancelable=false)\n' +
+                    '14:history:setting alternate2 value with both types of Bindable event , another new value for alternate2\n' +
+                    '15:org.apache.royale.events.Event(type="alternate2Changed", bubbles=false, cancelable=false)';
+
+            
+            
+            assertEquals(testUtil.getSequenceString(), expected, 'Unexpected results from changes to a "bindable"');
+
+            testUtil.reset();
+        }
+        
+    }
+}
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/BindingCoreTests.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/BindingCoreTests.as
new file mode 100644
index 0000000..639c610
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/BindingCoreTests.as
@@ -0,0 +1,240 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding
+{
+
+    import flexUnitTests.binding.support.bindings.SimpleBindingsA;
+    import flexUnitTests.binding.support.bindings.SimpleBindingsB;
+    import flexUnitTests.binding.support.bindings.FunctionBindingsA;
+    import flexUnitTests.binding.support.bindings.DeepBindingsA;
+
+    import flexUnitTests.binding.support.IBindingTest;
+    import flexUnitTests.binding.utils.BindingTestUtil;
+    
+    import org.apache.royale.test.asserts.*;
+    import flexUnitTests.binding.support.*;
+    import org.apache.royale.html.Group;
+
+    
+    /**
+     * @royalesuppresspublicvarwarning
+     */
+    public class BindingCoreTests
+    {
+        
+        public static var isJS:Boolean = COMPILE::JS;
+        
+        [BeforeClass]
+        public static function setUpBeforeClass():void
+        {
+            var testParent:Group = FlexUnitRoyaleApplication.getInstance().bindingsTestParent;
+            BindingTestUtil.setTestParent(testParent)
+        }
+        
+        [AfterClass]
+        public static function tearDownAfterClass():void
+        {
+            BindingTestUtil.reset();
+        }
+
+        private var testInstance:Object;
+
+        [Before]
+        public function setUp():void
+        {
+
+        }
+        
+        [After]
+        public function tearDown():void
+        {
+            if (testInstance) {
+                BindingTestUtil.removeInstance(testInstance);
+            }
+        }
+
+        private function createTestInstance(clazz:Class):IBindingTest{
+            return (testInstance =  BindingTestUtil.createAndAddInstance(clazz)) as IBindingTest;
+        }
+
+    
+        //no bindings, just test startup values
+        [Test]
+        public function testPlainLabel():void
+        {
+
+            var simpleBindings:IBindingTest = createTestInstance(SimpleBindingsA);
+
+            //initial value should be '' for the textfield
+            assertEquals(simpleBindings.getBindingResultValue(0), '', 'Bad initial value in simple binding');
+
+
+        }
+        
+        
+        [Test]
+        public function testSimpleBindings():void
+        {
+            var simpleBindings:IBindingTest = createTestInstance(SimpleBindingsA);
+
+            //simpleBindings.labelText = 'testSimpleBindings';
+            simpleBindings.setInboundValue('testSimpleBindings', 0);
+            //simpleBindings.testLabel.text
+            assertEquals(simpleBindings.getBindingResultValue(0), 'testSimpleBindings', 'Bad binding text value in simple binding');
+
+            //simpleBindings.labelText = null;
+            simpleBindings.setInboundValue(null, 0);
+            //this was failing in js before a change in Basic Label
+            assertEquals(simpleBindings.getBindingResultValue(0), '', 'Bad null inbound value in simple text binding');
+
+            simpleBindings.setInboundValue(undefined, 0);
+            //this was failing in js before a change in Basic Label
+            assertEquals(simpleBindings.getBindingResultValue(0), '', 'Bad null inbound value in simple text binding');
+
+        }
+
+
+        [Test]
+        public function testSimpleBindingsB():void
+        {
+            var simpleBindings:IBindingTest = createTestInstance(SimpleBindingsB);
+
+            //simpleBindings.labelText = 'testSimpleBindings';
+            simpleBindings.setInboundValue('setStringValue', 0);
+            //simpleBindings.testLabel.text
+            assertEquals(simpleBindings.getBindingResultValue(0), 'setStringValue', 'Bad binding text value in simple binding');
+            assertEquals(simpleBindings.getBindingResultValue(1), 'setStringValue', 'Bad binding Object target value in simple binding');
+
+
+            //this is not really a Binding test, more a mxml codgen  test, there were errors before a compiler fix:
+            assertEquals(simpleBindings.getBindingResultValue(2), 'test', 'Bad codegen for fx:Object tag');
+
+            simpleBindings.setInboundValue('testval', 2);
+            assertEquals(simpleBindings.getBindingResultValue(2), 'testval', 'Bad codegen for fx:Object tag');
+            simpleBindings.setInboundValue('testval', 3);
+            assertEquals(simpleBindings.getBindingResultValue(3), 'testval', 'Bad codegen for fx:Object tag');
+
+
+            simpleBindings.setInboundValue(99, 4);
+            assertStrictlyEquals(simpleBindings.getBindingResultValue(4), 99, 'Bad binding numeric value in simple binding');
+            simpleBindings.setInboundValue(99, 5);
+            assertStrictlyEquals(simpleBindings.getBindingResultValue(5), '99', 'Bad binding text value in simple binding');
+
+
+            simpleBindings.setInboundValue(99, 6);
+            assertStrictlyEquals(simpleBindings.getBindingResultValue(6), 99, 'Bad binding numeric value in simple binding');
+
+            simpleBindings.setInboundValue(99, 7);
+            assertStrictlyEquals(simpleBindings.getBindingResultValue(7), 99, 'Bad binding numeric value in simple binding');
+
+        }
+
+
+
+
+        [Test]
+        public function testDeepBindingsA():void
+        {
+            var deepBindings:IBindingTest = createTestInstance(DeepBindingsA);
+
+            deepBindings.setInboundValue('setStringValue', 0);
+            //deepBindings.testLabel.text
+            assertEquals(deepBindings.getBindingResultValue(0), 'setStringValue', 'Bad binding text value in simple binding');
+            assertEquals(deepBindings.getBindingResultValue(1), 'setStringValue', 'Bad binding Object target value in simple binding');
+
+            deepBindings.setInboundValue(99, 2);
+            assertStrictlyEquals(deepBindings.getBindingResultValue(2), 99, 'Bad binding numeric value in simple binding');
+            deepBindings.setInboundValue(99, 3);
+            assertStrictlyEquals(deepBindings.getBindingResultValue(3), '99', 'Bad binding text value in simple binding');
+
+
+            deepBindings.setInboundValue(99, 4);
+            assertStrictlyEquals(deepBindings.getBindingResultValue(4), 99, 'Bad binding numeric value in simple binding');
+
+
+        }
+
+        [Test]
+        public function testFunctionBindingsA():void
+        {
+            var funcBindings:IBindingTest = createTestInstance(FunctionBindingsA);
+
+            //check startup values for all
+            assertEquals(funcBindings.getBindingResultValue(0), 'Internally false', 'Bad binding text value in function binding');
+            assertEquals(funcBindings.getBindingResultValue(1), 'Internally false', 'Bad binding Object target value in function binding');
+
+            assertEquals(funcBindings.getBindingResultValue(2), 'Inbound only', 'Bad binding text value in function binding');
+            assertEquals(funcBindings.getBindingResultValue(3), 'Inbound only', 'Bad binding Object target value in function binding');
+
+            assertEquals(funcBindings.getBindingResultValue(4), 'Internally false', 'Bad binding text value in function binding');
+            assertEquals(funcBindings.getBindingResultValue(5), 'Internally false', 'Bad binding Object target value in function binding');
+
+            assertEquals(funcBindings.getBindingResultValue(6), 'Inbound only', 'Bad binding text value in function binding');
+            assertEquals(funcBindings.getBindingResultValue(7), 'Inbound only', 'Bad binding Object target value in function binding');
+
+            funcBindings.setInboundValue(true,8);
+            assertEquals(funcBindings.getBindingResultValue(8), 'Internally true', 'Bad binding text value in function binding');
+            assertEquals(funcBindings.getBindingResultValue(9), 'Internally true', 'Bad binding Object target value in function binding');
+
+            funcBindings.setInboundValue(true,10);
+
+            assertEquals(funcBindings.getBindingResultValue(10), "Both are true", 'Bad binding text value in function binding');
+            assertEquals(funcBindings.getBindingResultValue(11), "Both are true", 'Bad binding Object target value in function binding');
+
+            //bindable2.bindableOne.toggle = value;
+            funcBindings.setInboundValue(true,12);
+
+            assertEquals(funcBindings.getBindingResultValue(12), 'Internally true', 'Bad binding text value in function binding');
+            funcBindings.setInboundValue(true,13);
+            assertEquals(funcBindings.getBindingResultValue(13), 'Internally true', 'Bad binding Object target value in function binding');
+            funcBindings.setInboundValue(false,13);
+            assertEquals(funcBindings.getBindingResultValue(13), 'Internally false', 'Bad binding Object target value in function binding');
+
+            funcBindings.setInboundValue(true,14);
+            assertEquals(funcBindings.getBindingResultValue(14), 'Internally true', 'Bad binding Object target value in function binding');
+
+            funcBindings.setInboundValue(false,14);
+            assertEquals(funcBindings.getBindingResultValue(14), 'Internally false', 'Bad binding Object target value in function binding');
+
+            funcBindings.setInboundValue(true,15);
+            assertEquals(funcBindings.getBindingResultValue(15), 'Internally true', 'Bad binding Object target value in function binding');
+
+            funcBindings.setInboundValue(false,15);
+            assertEquals(funcBindings.getBindingResultValue(15), 'Internally false', 'Bad binding Object target value in function binding');
+
+
+            funcBindings.setInboundValue(true,16);
+            assertEquals(funcBindings.getBindingResultValue(16), "Both are true", 'Bad binding Object target value in function binding');
+
+            funcBindings.setInboundValue(false,16);
+            assertEquals(funcBindings.getBindingResultValue(16), "Inbound only", 'Bad binding Object target value in function binding');
+
+
+            funcBindings.setInboundValue(true,17);
+            assertEquals(funcBindings.getBindingResultValue(17), "Both are true", 'Bad binding Object target value in function binding');
+
+            funcBindings.setInboundValue(false,17);
+            assertEquals(funcBindings.getBindingResultValue(17), "Inbound only", 'Bad binding Object target value in function binding');
+
+
+        }
+
+
+    }
+}
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/IBindingTest.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/IBindingTest.as
new file mode 100644
index 0000000..26dd829
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/IBindingTest.as
@@ -0,0 +1,28 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding.support {
+    public interface IBindingTest {
+
+        function get testName():String;
+        function get internalTestCount():uint;
+        function setInboundValue(value:*, internalTestNum:uint=0):void
+        function getBindingResultValue(internalTestNum:uint=0):*;
+
+    }
+}
\ No newline at end of file
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithAccesorVariantsBindableClass.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithAccesorVariantsBindableClass.as
new file mode 100644
index 0000000..46bcba3
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithAccesorVariantsBindableClass.as
@@ -0,0 +1,93 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding.support.bindables
+{
+	import flexUnitTests.binding.utils.BindableTestUtil;
+	import org.apache.royale.events.Event;
+	import org.apache.royale.events.IEventDispatcher;
+
+	[Bindable]
+	public class BaseWithAccesorVariantsBindableClass
+	{
+		private var _accessorOfBaseWithAccesorVariantsBindableClass:String = "BaseWithAccessorVariantsBindableClass_value";
+		private var _alternate:String = 'alternate_value';
+
+		public function get accessorOfBaseWithAccesorVariantsBindableClass():String
+		{
+			BindableTestUtil.instance.addHistoryItem('accessing value from original getter', _accessorOfBaseWithAccesorVariantsBindableClass);
+			return _accessorOfBaseWithAccesorVariantsBindableClass;
+		}
+		
+		public function set accessorOfBaseWithAccesorVariantsBindableClass(value:String):void
+		{
+			BindableTestUtil.instance.addHistoryItem('assigning value in original setter', value);
+			_accessorOfBaseWithAccesorVariantsBindableClass = value;
+		}
+		
+		private var _setterOnly:String;
+		public function set setterOnly(value:String):void{
+			BindableTestUtil.instance.addHistoryItem('setting non bindable setterOnly', value);
+			_setterOnly = value;
+		}
+
+
+		public function get getterOnly():String{
+			BindableTestUtil.instance.addHistoryItem('getting non bindable getterOnly', 'getterOnly');
+			return 'getterOnly';
+		}
+		
+		[Bindable('alternateChanged')]
+		public function get alternate():String{
+			BindableTestUtil.instance.addHistoryItem('getting alternate value with explicit Bindable event', _alternate);
+			return _alternate
+		}
+
+		public function set alternate(value:String):void{
+			BindableTestUtil.instance.addHistoryItem('setting alternate value with explicit Bindable event', value);
+			var dispatch:Boolean = value != _alternate;
+			_alternate = value;
+			if (dispatch) {
+				(this as IEventDispatcher).dispatchEvent(new Event('alternateChanged'));
+			}
+		}
+
+
+		private var _alternate2:String = 'alternate2_value';
+		[Bindable]
+		public function get alternate2():String{
+			BindableTestUtil.instance.addHistoryItem('getting alternate2 value with both types of Bindable event', _alternate2);
+			return _alternate2
+		}
+
+		[Bindable('alternate2Changed')]
+		public function set alternate2(value:String):void{
+			BindableTestUtil.instance.addHistoryItem('setting alternate2 value with both types of Bindable event', value);
+			var dispatch:Boolean = value != _alternate2;
+			_alternate2 = value;
+			if (dispatch) {
+				(this as IEventDispatcher).dispatchEvent(new Event('alternate2Changed'));
+			}
+		}
+
+		//this should get normal [Bindable] treatment from the class [Bindable] meta (because it is a variable):
+		[Bindable('somethingChanged')]
+		public var something:String;
+		
+	}
+}
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithBindableAndUnbindableVars.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithBindableAndUnbindableVars.as
new file mode 100644
index 0000000..f3b5066
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithBindableAndUnbindableVars.as
@@ -0,0 +1,29 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding.support.bindables
+{
+
+	public class BaseWithBindableAndUnbindableVars
+	{
+			[Bindable]
+			public var bindableVarOfBaseWithBindableAndUnbindableVars:String = "bindableVarOfBaseWithBindableAndUnbindableVars_value";
+
+			public var unbindableVarOfBaseWithBindableAndUnbindableVars:String = "unbindableVarOfBaseWithBindableAndUnbindableVars_value";
+	}
+}
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithBindableClass.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithBindableClass.as
new file mode 100644
index 0000000..4ebb202
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithBindableClass.as
@@ -0,0 +1,27 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding.support.bindables
+{
+
+	[Bindable]
+	public class BaseWithBindableClass
+	{
+		public var varOfBaseWithBindableClass:String = "varOfBaseWithBindableClass_value";
+	}
+}
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithBindableGetter.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithBindableGetter.as
new file mode 100644
index 0000000..bd4bc1b
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithBindableGetter.as
@@ -0,0 +1,69 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding.support.bindables
+{
+	import flexUnitTests.binding.utils.BindableTestUtil;
+	
+	import org.apache.royale.events.Event;
+	import org.apache.royale.events.IEventDispatcher;
+
+	public class BaseWithBindableGetter
+	{
+		private var _accessorOfBaseWithBindableGetter:String = "accessorOfBaseWithBindableGetter_value";
+		
+		[Bindable]
+		public function get accessorOfBaseWithBindableGetter():String
+		{
+			BindableTestUtil.instance.addHistoryItem('accessing value from original getter', _accessorOfBaseWithBindableGetter);
+			return _accessorOfBaseWithBindableGetter;
+		}
+		
+		public function set accessorOfBaseWithBindableGetter(value:String):void
+		{
+			BindableTestUtil.instance.addHistoryItem('assigning value in original setter', value);
+			_accessorOfBaseWithBindableGetter = value;
+		}
+
+		private var _accessorOfBaseWithBindableGetter2:String = '_accessorOfBaseWithBindableGetter2_value';
+
+		//this has at least one [Bindable] so should code-gen Bindable code
+		[Bindable]
+		[Bindable(event='testEvent')]
+		public function get accessorOfBaseWithBindableGetter2():String
+		{
+			BindableTestUtil.instance.addHistoryItem('accessing value from original getter', _accessorOfBaseWithBindableGetter2);
+			return _accessorOfBaseWithBindableGetter2;
+		}
+
+		public function set accessorOfBaseWithBindableGetter2(value:String):void
+		{
+			BindableTestUtil.instance.addHistoryItem('assigning value in original setter', value);
+			if (value != _accessorOfBaseWithBindableGetter2) {
+				_accessorOfBaseWithBindableGetter2 = value;
+				IEventDispatcher(this).dispatchEvent(new Event('testEvent'));
+			}
+
+		}
+
+		//this should be ignored, because this class itself is not marked [Bindable]
+		[Bindable('somethingChanged')]
+		public var something:String;
+
+	}
+}
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithBindableVar.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithBindableVar.as
new file mode 100644
index 0000000..ad7823b
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithBindableVar.as
@@ -0,0 +1,28 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding.support.bindables
+{
+
+	public class BaseWithBindableVar
+	{
+			[Bindable]
+			public var bindableVarOfBaseWithBindableVar:String = "bindableVarOfBaseWithBindableVar_value";
+
+	}
+}
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithGetterBindableClass.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithGetterBindableClass.as
new file mode 100644
index 0000000..8eedfae
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BaseWithGetterBindableClass.as
@@ -0,0 +1,42 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding.support.bindables
+{
+import flexUnitTests.binding.utils.BindableTestUtil;
+
+	[Bindable]
+	public class BaseWithGetterBindableClass
+	{
+		private var _accessorOfBaseWithGetterBindableClass:String = "accessorOfBaseWithGetterBindableClass_value";
+		
+
+		public function get accessorOfBaseWithGetterBindableClass():String
+		{
+			BindableTestUtil.instance.addHistoryItem('accessing value from original getter', _accessorOfBaseWithGetterBindableClass);
+			return _accessorOfBaseWithGetterBindableClass;
+		}
+		
+		public function set accessorOfBaseWithGetterBindableClass(value:String):void
+		{
+			BindableTestUtil.instance.addHistoryItem('assigning value in original setter', value);
+			_accessorOfBaseWithGetterBindableClass = value;
+		}
+
+	}
+}
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableMxmlTest.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableMxmlTest.as
new file mode 100644
index 0000000..d2e24b7
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableMxmlTest.as
@@ -0,0 +1,33 @@
+0.////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding.support.bindables
+{
+
+	public class BindableMxmlTest 
+	{
+			
+
+			
+			[Bindable]
+			public var fieldofBindableMxmlTest:String = "fieldofBindableMxmlTest_value";
+			
+
+
+	}
+}
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableSetterVO.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableSetterVO.as
new file mode 100644
index 0000000..f931a77
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableSetterVO.as
@@ -0,0 +1,38 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding.support.bindables
+{
+
+	public class BindableSetterVO
+	{
+		private var _fieldOfBindableSetterVO:String = "fieldOfBindableSetterVO_value";
+		
+		public function get fieldOfBindableSetterVO():String
+		{
+			return _fieldOfBindableSetterVO;
+		}
+		
+		[Bindable]
+		public function set fieldOfBindableSetterVO(value:String):void
+		{
+			_fieldOfBindableSetterVO = value;
+		}
+
+	}
+}
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableSubVO1.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableSubVO1.as
new file mode 100644
index 0000000..d289fd1
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableSubVO1.as
@@ -0,0 +1,33 @@
+0.////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding.support.bindables
+{
+
+	public class BindableSubVO1 extends BaseWithBindableVar
+	{
+			
+
+			
+			[Bindable]
+			public var fieldOfBindableSubVO1:String = "fieldOfBindableSubVO1_value";
+			
+
+
+	}
+}
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableSubVO2.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableSubVO2.as
new file mode 100644
index 0000000..4ba6685
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableSubVO2.as
@@ -0,0 +1,33 @@
+0.////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding.support.bindables
+{
+
+	public class BindableSubVO2 extends UnbindableBase
+	{
+			
+
+			
+			[Bindable]
+			public var fieldofBindableSubVO2:String = "fieldofBindableSubVO2_value";
+			
+
+
+	}
+}
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableSubVO3.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableSubVO3.as
new file mode 100644
index 0000000..13db540
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableSubVO3.as
@@ -0,0 +1,33 @@
+0.////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding.support.bindables
+{
+
+	public class BindableSubVO3 extends UnbindableIntermediateVO
+	{
+			
+
+			
+			[Bindable]
+			public var fieldofBindableSubVO3:String = "fieldofBindableSubVO3_value";
+
+			[Bindable]
+			public var rangeEnd:Object;
+	}
+}
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableWithConstructorInit.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableWithConstructorInit.as
new file mode 100644
index 0000000..2438b20
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/BindableWithConstructorInit.as
@@ -0,0 +1,46 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding.support.bindables
+{
+
+	
+	[Bindable]
+	public class BindableWithConstructorInit
+	{
+	
+		public static const STATIC_INIT:BindableWithConstructorInit 	= new BindableWithConstructorInit( "STATIC_INIT"	,-1 );
+		
+		public var ordinal:int;
+		public var value:String;
+		
+		public function BindableWithConstructorInit (value:String, ordinal:int )
+		{
+			this.value = value;
+			this.ordinal = ordinal;
+		}
+
+	
+		
+		public function equals( other:BindableWithConstructorInit ):Boolean
+		{
+			return ( this.ordinal == other.ordinal && this.value == other.value );
+		}
+	}
+
+}
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/UnbindableBase.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/UnbindableBase.as
new file mode 100644
index 0000000..be38204
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/UnbindableBase.as
@@ -0,0 +1,31 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding.support.bindables
+{
+
+	public class UnbindableBase
+	{
+			
+
+			
+			public var fieldOfUnbindableBaseVO:String = "fieldOfUnbindableBaseVO_value";
+			
+
+	}
+}
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/UnbindableIntermediateVO.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/UnbindableIntermediateVO.as
new file mode 100644
index 0000000..33e13e6
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindables/UnbindableIntermediateVO.as
@@ -0,0 +1,31 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding.support.bindables
+{
+
+	public class UnbindableIntermediateVO extends BaseWithBindableVar
+	{
+			
+
+			
+			public var fieldOfUnbindableIntermediateVO:String = "fieldOfUnbindableIntermediateVO_value";
+			
+
+	}
+}
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/DeepBindingsA.mxml b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/DeepBindingsA.mxml
new file mode 100644
index 0000000..408ab2d
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/DeepBindingsA.mxml
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+<js:HGroup  xmlns:fx="http://ns.adobe.com/mxml/2009"
+            implements="flexUnitTests.binding.support.IBindingTest"
+            xmlns:js="library://ns.apache.org/royale/basic"
+            xmlns:bindables="flexUnitTests.binding.support.bindings.bindables.*"
+            initComplete="initCompleteHandler()">
+
+
+    <fx:Declarations>
+        <bindables:TwoLayerBindable id="bindable2" >
+            <bindables:bindableOne>
+                <bindables:OneLayerBindable bindableString="deepBindable"/>
+            </bindables:bindableOne>
+        </bindables:TwoLayerBindable>
+        <fx:Object id="destinationObject"
+                   something="true"
+                   destString="{bindable2.bindableOne.bindableString}"
+                   destNumber="{bindable2.bindableOne.bindableNumber}"
+                   destBoolean="{bindable2.bindableOne.bindableBoolean}">
+            <fx:sub>
+                <fx:Object test="test" somelongname="test"  lowerLevelNumDest="{bindable2.bindableOne.bindableNumber}"/>
+            </fx:sub>
+        </fx:Object>
+
+
+    </fx:Declarations>
+    <fx:Script>
+        <![CDATA[
+
+
+        import org.apache.royale.reflection.getQualifiedClassName;
+        //IBindingTest methods
+        public function get testName():String {
+
+            return getQualifiedClassName(this);
+        }
+
+
+        public function get internalTestCount():uint {
+            return getTests().length;
+        }
+
+        public function setInboundValue(value:*, internalTestNum:uint = 0):void {
+            try{
+                getTests()[internalTestNum]['setVal'](value)
+            } catch(e:Error) {
+                e.message = "[fail in internal test "+internalTestNum +"]:" +e.message;
+                throw e;
+            }
+        }
+
+        public function getBindingResultValue(internalTestNum:uint = 0):* {
+            var result:*;
+            try{
+                result = getTests()[internalTestNum]['getVal']()
+            } catch(e:Error) {
+                e.message = "[fail in internal test "+internalTestNum +"]:" +e.message;
+                throw e;
+            }
+            return result;
+        }
+
+        private var _tests:Array;
+        //only one internal test
+        private function getTests():Array {
+            if (!_tests) {
+                _tests = [
+                    { //test 0 String
+                        'setVal': function (value:*):void {
+                            bindable2.bindableOne.bindableString = value
+                        },
+                        'getVal': function ():* {
+                            return testLabel1.text;
+                        }
+                    },
+                    { //test 1 String
+                        'setVal': function (value:*):void {
+                            bindable2.bindableOne.bindableString = value
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.destString;
+                        }
+                    }
+                    ,
+                    { //test 2  Binding test
+                        'setVal': function (value:*):void {
+                            bindable2.bindableOne.bindableNumber = value
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.destNumber;
+                        }
+                    },
+                    { //test 3 Binding test
+                        'setVal': function (value:*):void {
+                            bindable2.bindableOne.bindableNumber = value
+                        },
+                        'getVal': function ():* {
+                            return testLabel2.text;
+                        }
+                    }
+                    ,
+                    { //test 4 Binding test
+                        'setVal': function (value:*):void {
+                            bindable2.bindableOne.bindableNumber = value
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.destNumber;
+                        }
+                    },
+                    { //test 5 Binding test
+                        'setVal': function (value:*):void {
+                            bindable2.bindableOne.bindableNumber = value
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.sub.lowerLevelNumDest;
+                        }
+                    }
+                ]
+            }
+            return _tests;
+        }
+
+
+        private function initCompleteHandler():void {
+           // trace('initCompleteHandler', this);
+        }
+
+        [Bindable]
+        public var labelText:String;
+        ]]>
+    </fx:Script>
+
+    <js:beads>
+        <js:ContainerDataBinding/>
+    </js:beads>
+
+    <js:Label localId="testLabel1" text="{bindable2.bindableOne.bindableString}" />
+    <js:Label localId="testLabel2" text="{bindable2.bindableOne.bindableNumber}" />
+    <js:Label localId="testLabel3" text="{bindable2.bindableOne.bindableBoolean}" />
+
+</js:HGroup>
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/FunctionBindingsA.mxml b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/FunctionBindingsA.mxml
new file mode 100644
index 0000000..ddf3652
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/FunctionBindingsA.mxml
@@ -0,0 +1,284 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+<js:HGroup  xmlns:fx="http://ns.adobe.com/mxml/2009"
+            implements="flexUnitTests.binding.support.IBindingTest"
+            xmlns:js="library://ns.apache.org/royale/basic"
+            xmlns:bindables="flexUnitTests.binding.support.bindings.bindables.*"
+            initComplete="initCompleteHandler()">
+
+
+    <fx:Declarations>
+        <bindables:OneLayerBindable id="bindable1" />
+        <bindables:TwoLayerBindable id="bindable2" >
+            <bindables:bindableOne>
+                <bindables:OneLayerBindable bindableString="deepBindable"/>
+            </bindables:bindableOne>
+        </bindables:TwoLayerBindable>
+        <fx:Object id="destinationObject"
+                   something="true"
+                   destString="{bindable1.getSomething()}"
+                   altString="{bindable1.getSomethingBasedOn(bindable2.toggle)}"
+                   >
+            <fx:sub>
+                <fx:Object  deepLowerLevelString0="{bindable1.getSomething()}"
+                            deepLowerLevelString1="{bindable2.bindableOne.getSomething()}"
+                            deepLowerLevelString2="{bindable2.bindableOne.getSomethingBasedOn(bindable2.toggle)}"
+                />
+            </fx:sub>
+        </fx:Object>
+
+
+    </fx:Declarations>
+    <fx:Script>
+        <![CDATA[
+
+
+
+
+
+        import org.apache.royale.reflection.getQualifiedClassName;
+        //IBindingTest methods
+        public function get testName():String {
+
+            return getQualifiedClassName(this);
+        }
+
+        public function get internalTestCount():uint {
+            return getTests().length;
+        }
+
+        public function setInboundValue(value:*, internalTestNum:uint = 0):void {
+            try{
+                getTests()[internalTestNum]['setVal'](value)
+            } catch(e:Error) {
+                e.message = "[fail in internal test "+internalTestNum +"]:" +e.message;
+                throw e;
+            }
+        }
+
+        public function getBindingResultValue(internalTestNum:uint = 0):* {
+            var result:*;
+            try{
+                result = getTests()[internalTestNum]['getVal']()
+            } catch(e:Error) {
+                e.message = "[fail in internal test "+internalTestNum +"]:" +e.message;
+                throw e;
+            }
+            return result;
+        }
+
+        public function getValue(something:*):*{
+            return 'cat'
+        }
+
+        public static function SOMETHING():String{
+            return 'something';
+        }
+
+        public function getFunctParams():Function{
+            return function(test:Boolean=false):Array{
+                return [bindable2.toggle, getValue('blueberry'), SOMETHING(), bindable1.getSomething()];
+            }
+        }
+
+        private var _tests:Array;
+        //only one internal test
+        private function getTests():Array {
+            if (!_tests) {
+                _tests = [
+                        //check start values
+                    { //test 0 String
+                        'setVal': function (value:*):void {
+                            //do nothing
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.destString;
+                        }
+                    },
+                    { //test 1 String
+                        'setVal': function (value:*):void {
+                            //do nothing
+                        },
+                        'getVal': function ():* {
+                            return testLabel1.text;
+                        }
+                    },
+                    { //test 2 String
+                        'setVal': function (value:*):void {
+                            //do nothing
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.altString;
+                        }
+                    },
+                    { //test 3 String
+                        'setVal': function (value:*):void {
+                            //do nothing
+                        },
+                        'getVal': function ():* {
+                            return testLabel2.text;
+                        }
+                    }
+                    ,
+                    { //test 4 String
+                        'setVal': function (value:*):void {
+                            //do nothing
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.sub.deepLowerLevelString0;
+                        }
+                    },
+                    { //test 5 String
+                        'setVal': function (value:*):void {
+                            //do nothing
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.sub.deepLowerLevelString1
+                        }
+                    }
+                    ,
+                    { //test 6String
+                        'setVal': function (value:*):void {
+                            //do nothing
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.sub.deepLowerLevelString2
+                        }
+                    },
+                    { //test 7 String
+                        'setVal': function (value:*):void {
+                            bindable1.bindableBoolean = value;
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.sub.deepLowerLevelString2
+                        }
+                    },
+//now actually do some change based testing
+                    { //test 8 String
+                        'setVal': function (value:*):void {
+                           bindable1.bindableBoolean = value;
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.destString;
+                        }
+                    },
+                    { //test 9 String
+                        'setVal': function (value:*):void {
+                            bindable1.bindableBoolean = value;
+                        },
+                        'getVal': function ():* {
+                            return testLabel1.text;
+                        }
+                    },
+                    { //test 10 String
+                        'setVal': function (value:*):void {
+                            bindable2.toggle = value;
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.altString;
+                        }
+                    },
+                    { //test 11 String
+                        'setVal': function (value:*):void {
+                            bindable2.toggle = value;
+                        },
+                        'getVal': function ():* {
+                            return testLabel2.text;
+                        }
+                    },
+                    { //test 12 String deeper destination
+                        'setVal': function (value:*):void {
+                            bindable1.bindableBoolean = value;
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.sub.deepLowerLevelString0;
+                        }
+                    },
+                    //now some of the deeper source bindings, and deeper desintations (in some cases)
+                    { //test 13 String
+                        'setVal': function (value:*):void {
+                            bindable2.bindableOne.bindableBoolean = value;
+                        },
+                        'getVal': function ():* {
+                            return testLabel3.text;
+                        }
+                    }
+                    ,
+                    { //test 14 String
+                        'setVal': function (value:*):void {
+                            bindable2.bindableOne.bindableBoolean = value;
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.sub.deepLowerLevelString1;
+                        }
+                    },
+                    { //test 15 String
+                        'setVal': function (value:*):void {
+                            bindable2.bindableOne.bindableBoolean = value;
+                        },
+                        'getVal': function ():* {
+                            return testLabel3.text;
+                        }
+                    }
+                    ,
+                    { //test 16 String
+                        'setVal': function (value:*):void {
+                            bindable2.bindableOne.bindableBoolean = value;
+                            bindable2.toggle = value;
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.sub.deepLowerLevelString2
+                        }
+                    },
+                    { //test 17 String
+                        'setVal': function (value:*):void {
+                            bindable2.bindableOne.bindableBoolean = value;
+                            bindable2.toggle = value;
+                        },
+                        'getVal': function ():* {
+                            return testLabel4.text;
+                        }
+                    }
+
+
+                ]
+            }
+            return _tests;
+        }
+
+
+        private function initCompleteHandler():void {
+           // trace('initCompleteHandler', this);
+        }
+
+        [Bindable]
+        public var labelText:String;
+        ]]>
+    </fx:Script>
+
+    <js:beads>
+        <js:ContainerDataBinding/>
+    </js:beads>
+
+    <js:Label localId="testLabel1" text="{bindable1.getSomething()}" />
+    <js:Label localId="testLabel2" text="{bindable1.getSomethingBasedOn(bindable2.toggle)}" />
+    <js:Label localId="testLabel3" text="{bindable2.bindableOne.getSomething()}" />
+    <js:Label localId="testLabel4" text="{bindable2.bindableOne.getSomethingBasedOn(bindable2.toggle)}" />
+</js:HGroup>
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/RendereBindingTestA.mxml b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/RendereBindingTestA.mxml
new file mode 100644
index 0000000..1527480
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/RendereBindingTestA.mxml
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+<js:HGroup  xmlns:fx="http://ns.adobe.com/mxml/2009"
+            implements="flexUnitTests.binding.support.IBindingTest"
+            xmlns:js="library://ns.apache.org/royale/basic"
+            xmlns:bindings="flexUnitTests.binding.support.bindings.*"
+            xmlns:bindables="flexUnitTests.binding.support.bindings.bindables.*"
+            initComplete="initCompleteHandler()">
+
+
+    <fx:Script>
+        <![CDATA[
+        import org.apache.royale.reflection.getQualifiedClassName;
+
+        //IBindingTest methods
+        public function get testName():String {
+            return getQualifiedClassName(this);
+        }
+
+
+        public function get internalTestCount():uint {
+            return getTests().length;
+        }
+
+        public function setInboundValue(value:*, internalTestNum:uint = 0):void {
+            try{
+                getTests()[internalTestNum]['setVal'](value)
+            } catch(e:Error) {
+                e.message = "[fail in internal test "+internalTestNum +"]:" +e.message;
+                throw e;
+            }
+        }
+
+        public function getBindingResultValue(internalTestNum:uint = 0):* {
+            var result:*;
+            try{
+                result = getTests()[internalTestNum]['getVal']()
+            } catch(e:Error) {
+                e.message = "[fail in internal test "+internalTestNum +"]:" +e.message;
+                throw e;
+            }
+            return result;
+        }
+
+        private var _tests:Array;
+        //only one internal test
+        private function getTests():Array {
+            if (!_tests) {
+                _tests = [
+                    /*{ //test 0 String
+                        'setVal': function (value:*):void {
+                            bindable2.bindableOne.bindableString = value
+                        },
+                        'getVal': function ():* {
+                            return testLabel1.text;
+                        }
+                    },
+                    { //test 1 String
+                        'setVal': function (value:*):void {
+                            bindable2.bindableOne.bindableString = value
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.destString;
+                        }
+                    }
+                    ,
+                    { //test 2  Binding test
+                        'setVal': function (value:*):void {
+                            bindable2.bindableOne.bindableNumber = value
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.destNumber;
+                        }
+                    },
+                    { //test 3 Binding test
+                        'setVal': function (value:*):void {
+                            bindable2.bindableOne.bindableNumber = value
+                        },
+                        'getVal': function ():* {
+                            return testLabel2.text;
+                        }
+                    }
+                    ,
+                    { //test 4 Binding test
+                        'setVal': function (value:*):void {
+                            bindable2.bindableOne.bindableNumber = value
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.destNumber;
+                        }
+                    },
+                    { //test 5 Binding test
+                        'setVal': function (value:*):void {
+                            bindable2.bindableOne.bindableNumber = value
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.sub.lowerLevelNumDest;
+                        }
+                    }*/
+                ]
+            }
+            return _tests;
+        }
+
+
+        private function initCompleteHandler():void {
+           // trace('initCompleteHandler', this);
+        }
+
+        ]]>
+    </fx:Script>
+
+    <js:beads>
+        <js:ContainerDataBinding/>
+    </js:beads>
+
+    <bindings:PartiionRequestTaskItemRenderer locald="'testRenderer" />
+</js:HGroup>
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/SimpleBindingsA.mxml b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/SimpleBindingsA.mxml
new file mode 100644
index 0000000..7b0b3a9
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/SimpleBindingsA.mxml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+<js:HGroup xmlns:fx="http://ns.adobe.com/mxml/2009"
+           implements="flexUnitTests.binding.support.IBindingTest"
+          xmlns:js="library://ns.apache.org/royale/basic"
+          initComplete="initCompleteHandler()">
+
+    <fx:Script>
+        <![CDATA[
+
+        import org.apache.royale.reflection.getQualifiedClassName;
+        //IBindingTest methods
+        public function get testName():String {
+
+            return getQualifiedClassName(this);
+        }
+
+
+        public function get internalTestCount():uint {
+            return getTests().length;
+        }
+
+        public function setInboundValue(value:*, internalTestNum:uint = 0):void {
+            getTests()[internalTestNum]['setVal'](value)
+        }
+
+        public function getBindingResultValue(internalTestNum:uint = 0):* {
+            return getTests()[internalTestNum]['getVal']()
+        }
+
+        private var _tests:Array;
+        //only one internal test
+        private function getTests():Array {
+            if (!_tests) {
+                _tests = [
+                    { //test 0
+                        'setVal': function (value:*):void {
+                            labelText = value
+                        },
+                        'getVal': function ():* {
+                            return testLabel.text;
+                        }
+                    }
+                ]
+            }
+            return _tests;
+        }
+
+
+        private function initCompleteHandler():void {
+           // trace('initCompleteHandler', this);
+        }
+
+        [Bindable]
+        public var labelText:String;
+        ]]>
+    </fx:Script>
+
+    <js:beads>
+        <js:ContainerDataBinding/>
+    </js:beads>
+
+    <js:Label localId="testLabel" text="{labelText}" />
+
+</js:HGroup>
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/SimpleBindingsB.mxml b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/SimpleBindingsB.mxml
new file mode 100644
index 0000000..021d9d6
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/SimpleBindingsB.mxml
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+<js:HGroup  xmlns:fx="http://ns.adobe.com/mxml/2009"
+            implements="flexUnitTests.binding.support.IBindingTest"
+            xmlns:js="library://ns.apache.org/royale/basic"
+            xmlns:bindables="flexUnitTests.binding.support.bindings.bindables.*"
+            initComplete="initCompleteHandler()">
+
+
+    <fx:Declarations>
+        <bindables:OneLayerBindable id="bindable1" />
+        <fx:Object id="destinationObject"
+                   something="true"
+                   destString="{bindable1.bindableString}"
+                   destNumber="{bindable1.bindableNumber}"
+                   destBoolean="{bindable1.bindableBoolean}">
+            <fx:sub>
+                <fx:Object test="test" somelongname="test"  lowerLevelNumDest="{bindable1.bindableNumber}"/>
+            </fx:sub>
+            <fx:other>
+                <bindables:OneLayerBindable bindableString="test"/>
+            </fx:other>
+        </fx:Object>
+
+
+    </fx:Declarations>
+    <fx:Script>
+        <![CDATA[
+
+        import org.apache.royale.reflection.getQualifiedClassName;
+        //IBindingTest methods
+        public function get testName():String {
+
+            return getQualifiedClassName(this);
+        }
+
+
+        public function get internalTestCount():uint {
+            return getTests().length;
+        }
+
+        public function setInboundValue(value:*, internalTestNum:uint = 0):void {
+            try{
+                getTests()[internalTestNum]['setVal'](value)
+            } catch(e:Error) {
+                e.message = "[fail in internal test "+internalTestNum +"]:" +e.message;
+                throw e;
+            }
+        }
+
+        public function getBindingResultValue(internalTestNum:uint = 0):* {
+            var result:*;
+            try{
+                result = getTests()[internalTestNum]['getVal']()
+            } catch(e:Error) {
+                e.message = "[fail in internal test "+internalTestNum +"]:" +e.message;
+                throw e;
+            }
+            return result;
+        }
+
+        private var _tests:Array;
+        //only one internal test
+        private function getTests():Array {
+            if (!_tests) {
+                _tests = [
+                    { //test 0 String
+                        'setVal': function (value:*):void {
+                            bindable1.bindableString = value
+                        },
+                        'getVal': function ():* {
+                            return testLabel1.text;
+                        }
+                    },
+                    { //test 1 String
+                        'setVal': function (value:*):void {
+                            bindable1.bindableString = value
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.destString;
+                        }
+                    }
+                    ,
+                    { //test 2 Codegen test only. Testing a compiler-jx fix for fx:Object output for the above definition (also release mode fixes)
+                        'setVal': function (value:*):void {
+                            destinationObject.sub.somelongname = value
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.sub.somelongname;
+                        }
+                    },
+                    { //test 3 Codegen test only. Testing a compiler-jx fix for fx:Object output for the above definition (release mode)
+                        'setVal': function (value:*):void {
+                            destinationObject.other.bindableString = value
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.other.bindableString;
+                        }
+                    },
+                    { //test 4 Binding test
+                        'setVal': function (value:*):void {
+                            bindable1.bindableNumber = value
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.destNumber;
+                        }
+                    },
+                    { //test 5 Binding test
+                        'setVal': function (value:*):void {
+                            bindable1.bindableNumber = value
+                        },
+                        'getVal': function ():* {
+                            return testLabel2.text;
+                        }
+                    }
+                    ,
+                    { //test 6 Binding test
+                        'setVal': function (value:*):void {
+                            bindable1.bindableNumber = value
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.destNumber;
+                        }
+                    },
+                    { //test 7 Binding test
+                        'setVal': function (value:*):void {
+                            bindable1.bindableNumber = value
+                        },
+                        'getVal': function ():* {
+                            return destinationObject.sub.lowerLevelNumDest;
+                        }
+                    }
+                ]
+            }
+            return _tests;
+        }
+
+
+        private function initCompleteHandler():void {
+           // trace('initCompleteHandler', this);
+        }
+
+        [Bindable]
+        public var labelText:String;
+        ]]>
+    </fx:Script>
+
+    <js:beads>
+        <js:ContainerDataBinding/>
+    </js:beads>
+
+    <js:Label localId="testLabel1" text="{bindable1.bindableString}" />
+    <js:Label localId="testLabel2" text="{bindable1.bindableNumber}" />
+    <js:Label localId="testLabel3" text="{bindable1.bindableBoolean}" />
+
+</js:HGroup>
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/bindables/OneLayerBindable.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/bindables/OneLayerBindable.as
new file mode 100644
index 0000000..2812fb4
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/bindables/OneLayerBindable.as
@@ -0,0 +1,40 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding.support.bindings.bindables
+{
+
+[Bindable]
+public class OneLayerBindable
+{
+    public var bindableString:String;
+
+    public var bindableNumber:Number;
+
+    public var bindableBoolean:Boolean;
+
+    public function getSomething():String{
+        return bindableBoolean ? 'Internally true' : 'Internally false';
+    }
+
+    public function getSomethingBasedOn(something:Boolean):String{
+        return bindableBoolean && something ? "Both are true" : (bindableBoolean ? "Local only" : "Inbound only");
+    }
+
+}
+}
\ No newline at end of file
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/bindables/TwoLayerBindable.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/bindables/TwoLayerBindable.as
new file mode 100644
index 0000000..ab7ee35
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/support/bindings/bindables/TwoLayerBindable.as
@@ -0,0 +1,29 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding.support.bindings.bindables
+{
+
+[Bindable]
+public class TwoLayerBindable
+{
+    public var bindableOne:OneLayerBindable;
+
+    public var toggle:Boolean;
+}
+}
\ No newline at end of file
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/utils/BindableTestUtil.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/utils/BindableTestUtil.as
new file mode 100644
index 0000000..d222414
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/utils/BindableTestUtil.as
@@ -0,0 +1,138 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding.utils {
+import org.apache.royale.events.Event;
+import org.apache.royale.events.IEventDispatcher;
+import org.apache.royale.events.ValueChangeEvent;
+import org.apache.royale.reflection.getQualifiedClassName;
+
+public class BindableTestUtil {
+    
+    public static var deactivated:Boolean;
+
+    private static var _unlocked:Boolean;
+    private static var _instance:BindableTestUtil;
+    public static function get instance():BindableTestUtil{
+        if (!_instance) {
+            _unlocked = true;
+            _instance = new BindableTestUtil();
+            _unlocked = false;
+        }
+        return _instance;
+    }
+
+    private var _history:Array= [];
+
+
+    public function BindableTestUtil() {
+        if (!_unlocked) throw new Error("Singleton only, access view BindableTestUtil.instance");
+    }
+
+
+    public function reset():void{
+        _history= [];
+        for (var eventType:String in listening) {
+            var arr:Array = listening[eventType];
+            for (var i:int=0; i<arr.length; i++) {
+                var dispatcher:IEventDispatcher = arr[i];
+                dispatcher.removeEventListener(eventType, addEventItem);
+            }
+        }
+        listening = {};
+    }
+
+    public function getContents():Array{
+        return _history.slice();
+    }
+
+    public function getSequenceString():String{
+        var temp:Array = _history.slice();
+        temp = temp.map(function(val:*, index:int, arr:Array):*{
+            return index + ":" + val;
+        });
+        return temp.join("\n");
+    }
+
+    public function addHistoryItem(...rest):void{
+        if (deactivated) return;
+        var contents:Array = rest;
+        contents = contents.map(
+                function(value:*, index:int, arr:Array):*{
+                    if (value === null) return 'null';
+                    if (value === undefined) return 'undefined';
+                    return (value.toString());
+                }
+        );
+        _history.push("history:" + contents.join(' , '));
+    }
+
+    public function addStacktrace():void{
+        if (deactivated) return;
+        var stack:String;
+        COMPILE::SWF{
+            stack = new Error().getStackTrace();
+
+        }
+        COMPILE::JS{
+            stack = new Error().stack;
+        }
+        //remove the first line
+        var contents:Array = stack.split('\n').slice(1);
+        contents[0] = "Execution stack: [";
+        contents.push("]");
+        _history.push(contents.join('\n'));
+    }
+
+    public function addEventItem(event:Event):void{
+        if (deactivated) return;
+        if (event is ValueChangeEvent) {
+            var vce:ValueChangeEvent = ValueChangeEvent(event);
+            _history.push('ValueChangeEvent::property('+ vce.propertyName+'), oldVal:('+ vce.oldValue+ "), newValue:("+ vce.newValue+")");
+        } else {
+
+            _history.push(getQualifiedClassName(event)+'(type="'+event.type+'", bubbles='+event.bubbles+', cancelable='+event.cancelable+')');
+        }
+    }
+    
+    private var listening:Object  = {};
+    public function listenTo(object:Object, eventType:String):void{
+        if (object is IEventDispatcher) {
+            IEventDispatcher(object).addEventListener(eventType,addEventItem);
+            var listeners:Array = listening[eventType] || (listening[eventType] = []);
+            listeners.push(object);
+        } else {
+            throw new Error("Cannot listen to a non-IEventDispatcher");
+        }
+    }
+
+    public function unListenTo(object:Object, eventType:String):void{
+        if (object is IEventDispatcher) {
+            IEventDispatcher(object).removeEventListener(eventType,addEventItem);
+            var listeners:Array = listening[eventType] || (listening[eventType] = []);
+            var idx:int = listeners.indexOf(object);
+            if (idx != -1) {
+                listeners.splice(idx,1);
+            }
+        } else {
+            throw new Error("Cannot unListen to a non-IEventDispatcher");
+        }
+    }
+    
+}
+}
diff --git a/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/utils/BindingTestUtil.as b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/utils/BindingTestUtil.as
new file mode 100644
index 0000000..ccf7702
--- /dev/null
+++ b/frameworks/projects/Binding/src/test/royale/flexUnitTests/binding/utils/BindingTestUtil.as
@@ -0,0 +1,78 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package flexUnitTests.binding.utils
+{
+    import org.apache.royale.core.UIBase;
+    
+    /**
+     * @royalesuppresspublicvarwarning
+     */
+    public class BindingTestUtil
+    {
+        private static var _testParent:UIBase;
+        private static var _testClasses:Array = [];
+        private static var _testInstances:Array = [];
+        
+        public static function setTestParent(testParent:UIBase):void{
+            _testParent = testParent;
+        }
+        
+        public static function createAndAddInstance(instanceClass:Class):UIBase{
+            var inst:UIBase;
+            if (!_testParent) throw new Error('setTestParent must set a parent before calling createAndAddInstance')
+            if (instanceClass) {
+                if (_testClasses.indexOf(instanceClass) == -1) {
+                    _testClasses.push(instanceClass);
+                }
+                inst = new instanceClass() as UIBase;
+                if (!inst) {
+                    throw new Error('bad mxml instance class');
+                }
+                _testInstances.push(inst);
+                _testParent.addElement(inst);
+                /*} else {
+                    throw new Error('duplicate test class');
+                }*/
+            } else {
+                throw new Error('instanceClass must not be null');
+            }
+            
+            return inst;
+        }
+        
+        public static function removeInstance(instance:Object):void{
+            if (instance is UIBase){
+                if (UIBase(instance).parent) {
+                    UIBase(instance.parent).removeElement(instance as UIBase);
+                }
+            }
+            if (_testInstances.indexOf(instance) != -1) {
+                _testInstances.splice(_testInstances.indexOf(instance), 1);
+            }
+        }
+
+        public static function reset():void{
+            _testClasses = [];
+            while (_testInstances.length) {
+                removeInstance(_testInstances.pop())
+            }
+        }
+        
+    }
+}
diff --git a/frameworks/projects/Reflection/src/main/royale/org/apache/royale/reflection/getAliasByClass.as b/frameworks/projects/Reflection/src/main/royale/org/apache/royale/reflection/getAliasByClass.as
index d89efa7..79091d6 100644
--- a/frameworks/projects/Reflection/src/main/royale/org/apache/royale/reflection/getAliasByClass.as
+++ b/frameworks/projects/Reflection/src/main/royale/org/apache/royale/reflection/getAliasByClass.as
@@ -27,7 +27,7 @@ COMPILE::SWF {
      * registerClassAlias, or possibly using [RemoteClass(alias='someAlias')] metadata
      *
      * @param classObject the class to retrieve the alias for
-     * @return the most recently mapped alias, if found otherwise "" (empty string)
+     * @return the most recently mapped alias, if found otherwise null
      */
     public function getAliasByClass(classObject:Class):String {
         var ret:String;