You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2012/12/07 19:48:27 UTC

svn commit: r1418430 - in /incubator/flex/sdk/branches/develop: ./ frameworks/projects/framework/src/mx/core/ frameworks/projects/framework/src/mx/states/ frameworks/projects/mx/src/mx/containers/ frameworks/projects/mx/src/mx/core/ frameworks/projects...

Author: aharui
Date: Fri Dec  7 18:48:26 2012
New Revision: 1418430

URL: http://svn.apache.org/viewvc?rev=1418430&view=rev
Log:
merge 1418421 to develop branch

Modified:
    incubator/flex/sdk/branches/develop/   (props changed)
    incubator/flex/sdk/branches/develop/build.properties
    incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/core/FlexSprite.as
    incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/core/UIComponent.as
    incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/states/AddItems.as
    incubator/flex/sdk/branches/develop/frameworks/projects/mx/src/mx/containers/ViewStack.as
    incubator/flex/sdk/branches/develop/frameworks/projects/mx/src/mx/core/Container.as
    incubator/flex/sdk/branches/develop/frameworks/projects/spark/build.xml
    incubator/flex/sdk/branches/develop/frameworks/projects/spark/compile-config.xml
    incubator/flex/sdk/branches/develop/frameworks/projects/spark/src/spark/components/Group.as
    incubator/flex/sdk/branches/develop/frameworks/projects/spark/src/spark/components/SkinnableContainer.as
    incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/BasicTests-config.xml
    incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/basicLoader.as
    incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/halo/scripts/SWFLoaderTestScript.mxml
    incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/AIR/CompareBitmap.as
    incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/CompareBitmap.as
    incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/ResetComponent.as
    incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/UnitTester.as
    incubator/flex/sdk/branches/develop/mustella/java/src/mustella/Runner.java
    incubator/flex/sdk/branches/develop/mustella/tests/components/VideoDisplay/Methods/VideoMethodTester.mxml
    incubator/flex/sdk/branches/develop/mustella/tests/components/VideoDisplay/Properties/VideoPropertyTester.mxml
    incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_gif_runtime.mxml
    incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_jpg_runtime.mxml
    incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_png_runtime.mxml
    incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_swf_runtime.mxml

Propchange: incubator/flex/sdk/branches/develop/
------------------------------------------------------------------------------
    svn:mergeinfo = /incubator/flex/sdk/branches/release4.9:1418412

Modified: incubator/flex/sdk/branches/develop/build.properties
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/build.properties?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/build.properties (original)
+++ incubator/flex/sdk/branches/develop/build.properties Fri Dec  7 18:48:26 2012
@@ -56,5 +56,7 @@ mxmlc.jvm.args = ${jvm.args}
 manifest.sealed=false
 manifest.Implementation-Title=Apache Flex SDK
 manifest.Implementation-Version=${release.version}
-manifest.Implementation-Vendor=The Apache Software Foundation
+manifest.Implementation-Vendor=Apache Software Foundation
 manifest.Implementation-Vendor-Id=org.apache
+
+localized.jars = true

Modified: incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/core/FlexSprite.as
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/core/FlexSprite.as?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/core/FlexSprite.as (original)
+++ incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/core/FlexSprite.as Fri Dec  7 18:48:26 2012
@@ -70,7 +70,7 @@ public class FlexSprite extends Sprite
 
 		try
 		{
-			name = NameUtil.createUniqueName(this);
+//			name = NameUtil.createUniqueName(this);
 		}
 		catch(e:Error)
 		{

Modified: incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/core/UIComponent.as
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/core/UIComponent.as?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/core/UIComponent.as (original)
+++ incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/core/UIComponent.as Fri Dec  7 18:48:26 2012
@@ -1723,6 +1723,10 @@ public class UIComponent extends FlexSpr
 
         _width = super.width;
         _height = super.height;
+		
+		var attributes:Array =  this.MXMLProperties;
+		if (attributes)
+			generateMXMLAttributes(attributes);
     }
 
     //--------------------------------------------------------------------------
@@ -4426,7 +4430,45 @@ public class UIComponent extends FlexSpr
         return document == this;
     }
 
-    //----------------------------------
+	//----------------------------------
+	//  MXML Descriptor
+	//----------------------------------
+	
+	/**
+	 *  The descriptor of MXML children.
+	 */
+	private var _MXMLDescriptor:Array;
+	
+	public function get MXMLDescriptor():Array
+	{
+		return _MXMLDescriptor;
+	}
+	
+	public function setMXMLDescriptor(value:Array):void
+	{
+		_MXMLDescriptor = value;    
+	}
+	
+	//----------------------------------
+	//  MXML Properties
+	//----------------------------------
+	
+	/**
+	 *  The attributes of MXML top tag.
+	 */
+	private var _MXMLProperties:Array;
+	
+	public function get MXMLProperties():Array
+	{
+		return _MXMLProperties;
+	}
+	
+	public function setMXMLProperties(value:Array):void
+	{
+		_MXMLProperties = value;    
+	}
+
+	//----------------------------------
     //  parentApplication
     //----------------------------------
 
@@ -7763,7 +7805,219 @@ public class UIComponent extends FlexSpr
      */
     protected function createChildren():void
     {
-    }
+		var children:Array =  this.MXMLDescriptor;
+		if (children)
+			generateMXMLInstances(document, children);
+	}
+	
+	protected function addMXMLChildren(comps:Array):void
+	{
+		for each (var i:DisplayObject in comps)
+		{
+			addChild(i);
+		}
+	}
+	
+	protected function generateMXMLObject(document:Object, data:Array):Object
+	{
+		var i:int = 0;
+		var cls:Class = data[i++];
+		var comp:Object = new cls();
+		
+		var m:int;
+		var j:int;
+		var name:String;
+		var simple:*;
+		var value:Object;
+		var id:String;
+		
+		m = data[i++]; // num props
+		for (j = 0; j < m; j++)
+		{
+			name = data[i++];
+			simple = data[i++];
+			value = data[i++];
+			if (simple == null)
+				value = generateMXMLArray(document, value as Array);
+			else if (simple == false)
+				value = generateMXMLObject(document, value as Array);
+			if (name == "id")
+			{
+				document[value] = comp;
+				id = value as String;
+			}
+			else if (name == "_id")
+			{
+				document[value] = comp;
+				id = value as String;
+				continue; // skip assignment to comp
+			}
+			comp[name] = value;
+		}
+		if (comp is IMXMLObject)
+			comp.initialized(document, id);
+		return comp;
+	}
+	
+	public function generateMXMLArray(document:Object, data:Array, recursive:Boolean = true):Array
+	{
+		var comps:Array = [];
+		
+		var n:int = data.length;
+		var i:int = 0;
+		while (i < n)
+		{
+			var cls:Class = data[i++];
+			var comp:Object = new cls();
+			
+			var m:int;
+			var j:int;
+			var name:String;
+			var simple:*;
+			var value:Object;
+			var id:String = null;
+			
+			m = data[i++]; // num props
+			for (j = 0; j < m; j++)
+			{
+				name = data[i++];
+				simple = data[i++];
+				value = data[i++];
+				if (simple == null)
+					value = generateMXMLArray(document, value as Array, recursive);
+				else if (simple == false)
+					value = generateMXMLObject(document, value as Array);
+				if (name == "id")
+					id = value as String;
+				if (name == "document" && !comp.document)
+					comp.document = document;
+				else if (name == "_id")
+					id = value as String; // and don't assign to comp
+				else
+					comp[name] = value;
+			}
+			m = data[i++]; // num styles
+			for (j = 0; j < m; j++)
+			{
+				name = data[i++];
+				simple = data[i++];
+				value = data[i++];
+				if (simple == null)
+					value = generateMXMLArray(document, value as Array, recursive);
+				else if (simple == false)
+					value = generateMXMLObject(document, value as Array);
+				comp.setStyle(name, value);
+			}
+			
+			m = data[i++]; // num effects
+			for (j = 0; j < m; j++)
+			{
+				name = data[i++];
+				simple = data[i++];
+				value = data[i++];
+				if (simple == null)
+					value = generateMXMLArray(document, value as Array, recursive);
+				else if (simple == false)
+					value = generateMXMLObject(document, value as Array);
+				comp.setStyle(name, value);
+			}
+			
+			m = data[i++]; // num events
+			for (j = 0; j < m; j++)
+			{
+				name = data[i++];
+				value = data[i++];
+				comp.addEventListener(name, value);
+			}
+			
+			var children:Array = data[i++];
+			if (children)
+			{
+				if (recursive)
+					comp.generateMXMLInstances(document, children, recursive);
+				else
+					comp.setMXMLDescriptor(children);
+			}
+			
+			if (id)
+			{
+				document[id] = comp;
+				mx.binding.BindingManager.executeBindings(document, id, comp); 
+			}
+			if (comp is IMXMLObject)
+				comp.initialized(document, id);
+			comps.push(comp);
+		}
+		return comps;
+	}
+	
+	protected function generateMXMLInstances(document:Object, data:Array, recursive:Boolean = true):void
+	{
+		var comps:Array = generateMXMLArray(document, data, recursive);
+		addMXMLChildren(comps);
+	}
+	
+	protected function generateMXMLAttributes(data:Array):void
+	{
+		var i:int = 0;
+		var m:int;
+		var j:int;
+		var name:String;
+		var simple:*;
+		var value:Object;
+		var id:String = null;
+		
+		m = data[i++]; // num props
+		for (j = 0; j < m; j++)
+		{
+			name = data[i++];
+			simple = data[i++];
+			value = data[i++];
+			if (simple == null)
+				value = generateMXMLArray(this, value as Array, false);
+			else if (simple == false)
+				value = generateMXMLObject(this, value as Array);
+			if (name == "id")
+				id = value as String;
+			if (name == "_id")
+				id = value as String; // and don't assign
+			else
+				this[name] = value;
+		}
+		m = data[i++]; // num styles
+		for (j = 0; j < m; j++)
+		{
+			name = data[i++];
+			simple = data[i++];
+			value = data[i++];
+			if (simple == null)
+				value = generateMXMLArray(this, value as Array, false);
+			else if (simple == false)
+				value = generateMXMLObject(this, value as Array);
+			this.setStyle(name, value);
+		}
+		
+		m = data[i++]; // num effects
+		for (j = 0; j < m; j++)
+		{
+			name = data[i++];
+			simple = data[i++];
+			value = data[i++];
+			if (simple == null)
+				value = generateMXMLArray(this, value as Array, false);
+			else if (simple == false)
+				value = generateMXMLObject(this, value as Array);
+			this.setStyle(name, value);
+		}
+		
+		m = data[i++]; // num events
+		for (j = 0; j < m; j++)
+		{
+			name = data[i++];
+			value = data[i++];
+			this.addEventListener(name, value as Function);
+		}
+	}
 
     /**
      *  Performs any final processing after child objects are created.

Modified: incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/states/AddItems.as
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/states/AddItems.as?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/states/AddItems.as (original)
+++ incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/states/AddItems.as Fri Dec  7 18:48:26 2012
@@ -26,10 +26,12 @@ import mx.collections.IList;
 import mx.core.ContainerCreationPolicy;
 import mx.core.IChildList;
 import mx.core.IDeferredContentOwner;
+import mx.core.IMXMLObject;
 import mx.core.ITransientDeferredInstance;
 import mx.core.IVisualElement;
 import mx.core.IVisualElementContainer;
 import mx.core.UIComponent;
+import mx.binding.BindingManager;
 
 [DefaultProperty("itemsFactory")]
 
@@ -41,7 +43,7 @@ import mx.core.UIComponent;
  *  @playerversion AIR 1.5
  *  @productversion Flex 4
  */
-public class AddItems extends OverrideBase 
+public class AddItems extends OverrideBase implements IMXMLObject
 {
     include "../core/Version.as";
 
@@ -116,6 +118,8 @@ public class AddItems extends OverrideBa
     //
     //--------------------------------------------------------------------------
 
+	private var document:Object;	
+
     /**
      *  @private
      */
@@ -309,6 +313,52 @@ public class AddItems extends OverrideBa
         _items = value;
     }
 
+	//------------------------------------
+	//  itemsDescriptor
+	//------------------------------------
+	
+	/**
+	 *  @private
+	 *  Storage for the itemsDescriptor property.
+	 */
+	private var _itemsDescriptor:Array;
+	
+	[Inspectable(category="General")]
+	
+	/**
+	 *
+	 * The descriptor that describes the items. 
+	 *
+	 *  <p>If you set this property, the items are instantiated at the time
+	 *  determined by the <code>creationPolicy</code> property.</p>
+	 *  
+	 *  <p>Do not set this property if you set the <code>items</code>
+	 *  property.
+	 *  This propety is the <code>AddItems</code> class default property.
+	 *  Setting this property with a <code>creationPolicy</code> of "all"
+	 *  is equivalent to setting a <code>items</code> property.</p>
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10
+	 *  @playerversion AIR 1.5
+	 *  @productversion Flex 4
+	 */
+	public function get itemsDescriptor():Array
+	{
+		return _itemsDescriptor;
+	}
+	
+	/**
+	 *  @private
+	 */
+	public function set itemsDescriptor(value:Array):void
+	{
+		_itemsDescriptor = value;
+		
+		if (creationPolicy == ContainerCreationPolicy.ALL)
+			createInstance();
+	}
+	
     //------------------------------------
     //  itemsFactory
     //------------------------------------
@@ -489,12 +539,133 @@ public class AddItems extends OverrideBa
      */
     public function createInstance():void
     {
-        if (!instanceCreated && !_items && itemsFactory)
+        if (!instanceCreated && !_items && itemsFactory && !_itemsDescriptor)
         {
             instanceCreated = true;
             items = itemsFactory.getInstance();
         }
-    }
+		else if (!instanceCreated && !_items && !itemsFactory && _itemsDescriptor)
+		{
+			instanceCreated = true;
+			items = generateMXMLArray(itemsDescriptor, false);
+		}
+	}
+	
+	protected function generateMXMLObject(data:Array):Object
+	{
+		var i:int = 0;
+		var cls:Class = data[i++];
+		var comp:Object = new cls();
+		
+		var m:int;
+		var j:int;
+		var name:String;
+		var simple:*;
+		var value:Object;
+		var id:String;
+		
+		m = data[i++]; // num props
+		for (j = 0; j < m; j++)
+		{
+			name = data[i++];
+			simple = data[i++];
+			value = data[i++];
+			if (simple == null)
+				value = generateMXMLArray(value as Array);
+			else if (simple == false)
+				value = generateMXMLObject(value as Array);
+			comp[name] = value;
+		}
+		return comp;
+	}
+	
+	// varies slightly from version in UIComponent in how it handles documents
+	public function generateMXMLArray(data:Array, recursive:Boolean = true):Array
+	{
+		var comps:Array = [];
+		
+		var n:int = data.length;
+		var i:int = 0;
+		while (i < n)
+		{
+			var cls:Class = data[i++];
+			var comp:Object = new cls();
+			
+			var m:int;
+			var j:int;
+			var name:String;
+			var simple:*;
+			var value:Object;
+			var id:String = null;
+			
+			m = data[i++]; // num props
+			for (j = 0; j < m; j++)
+			{
+				name = data[i++];
+				simple = data[i++];
+				value = data[i++];
+				if (simple == null)
+					value = generateMXMLArray(value as Array, recursive);
+				else if (simple == false)
+					value = generateMXMLObject(value as Array);
+				if (name == "id")
+					id = value as String;
+				if (name == "_id")
+					id = value as String; // and don't assign to comp
+				else
+					comp[name] = value;
+			}
+			m = data[i++]; // num styles
+			for (j = 0; j < m; j++)
+			{
+				name = data[i++];
+				simple = data[i++];
+				value = data[i++];
+				if (simple == null)
+					value = generateMXMLArray(value as Array, recursive);
+				else if (simple == false)
+					value = generateMXMLObject(value as Array);
+				comp.setStyle(name, value);
+			}
+			
+			m = data[i++]; // num effects
+			for (j = 0; j < m; j++)
+			{
+				name = data[i++];
+				simple = data[i++];
+				value = data[i++];
+				if (simple == null)
+					value = generateMXMLArray(value as Array, recursive);
+				else if (simple == false)
+					value = generateMXMLObject(value as Array);
+				comp.setStyle(name, value);
+			}
+			
+			m = data[i++]; // num events
+			for (j = 0; j < m; j++)
+			{
+				name = data[i++];
+				value = data[i++];
+				comp.addEventListener(name, value);
+			}
+			
+			var children:Array = data[i++];
+			if (children)
+			{
+				if (recursive)
+					comp.generateMXMLInstances(children, recursive);
+				else
+					comp.setMXMLDescriptor(children);
+			}
+			if (id)
+			{
+				document[id] = comp;
+				mx.binding.BindingManager.executeBindings(document, id, comp); 
+			}
+			comps.push(comp);
+		}
+		return comps;
+	}
  
     /**
      *  @inheritDoc
@@ -907,6 +1078,15 @@ public class AddItems extends OverrideBa
             _waitingForDeferredContent = false;
         }   
     }
+	
+	/**
+	 *  IMXMLObject support
+	 */
+	public function initialized(document:Object, id:String):void
+	{
+		this.document = document;
+	}
+	
 }
 
 }

Modified: incubator/flex/sdk/branches/develop/frameworks/projects/mx/src/mx/containers/ViewStack.as
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/projects/mx/src/mx/containers/ViewStack.as?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/frameworks/projects/mx/src/mx/containers/ViewStack.as (original)
+++ incubator/flex/sdk/branches/develop/frameworks/projects/mx/src/mx/containers/ViewStack.as Fri Dec  7 18:48:26 2012
@@ -736,6 +736,15 @@ public class ViewStack extends Container
     //
     //--------------------------------------------------------------------------
 
+	/**
+	 *  @private
+	 */	
+	override protected function generateMXMLInstances(document:Object, data:Array, recursive:Boolean = true):void
+	{
+		// in theory, creationpolicy gets applied later
+		super.generateMXMLInstances(document, data, false);
+	}
+	
     /**
      *  @private
      */

Modified: incubator/flex/sdk/branches/develop/frameworks/projects/mx/src/mx/core/Container.as
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/projects/mx/src/mx/core/Container.as?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/frameworks/projects/mx/src/mx/core/Container.as (original)
+++ incubator/flex/sdk/branches/develop/frameworks/projects/mx/src/mx/core/Container.as Fri Dec  7 18:48:26 2012
@@ -4219,7 +4219,11 @@ public class Container extends UICompone
      */
     public function createDeferredContent():void
     {
-        createComponentsFromDescriptors(true);
+		var children:Array =  this.MXMLDescriptor;
+		if (children)
+			generateMXMLInstances(document, children);
+		else
+			createComponentsFromDescriptors(true);
     }
 
    /**

Modified: incubator/flex/sdk/branches/develop/frameworks/projects/spark/build.xml
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/projects/spark/build.xml?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/frameworks/projects/spark/build.xml (original)
+++ incubator/flex/sdk/branches/develop/frameworks/projects/spark/build.xml Fri Dec  7 18:48:26 2012
@@ -229,7 +229,6 @@
                output="${FLEX_HOME}/frameworks/libs/spark.swc">
             <jvmarg line="${compc.jvm.args}"/>
             <load-config filename="compile-config.xml" />
-            <include-file name="version.properties" path="${FLEX_HOME}/frameworks/version.properties"/>
             <arg value="+playerglobal.version=${playerglobal.version}" />
             <arg value="+env.PLAYERGLOBAL_HOME=${env.PLAYERGLOBAL_HOME}" />
         </compc>

Modified: incubator/flex/sdk/branches/develop/frameworks/projects/spark/compile-config.xml
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/projects/spark/compile-config.xml?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/frameworks/projects/spark/compile-config.xml (original)
+++ incubator/flex/sdk/branches/develop/frameworks/projects/spark/compile-config.xml Fri Dec  7 18:48:26 2012
@@ -60,6 +60,11 @@
     </include-classes>
     
     <include-file>
+        <name>version.properties</name>
+        <path>../../version.properties</path>
+    </include-file>
+    
+    <include-file>
         <name>defaults.css</name>
         <path>defaults.css</path>
     </include-file>

Modified: incubator/flex/sdk/branches/develop/frameworks/projects/spark/src/spark/components/Group.as
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/projects/spark/src/spark/components/Group.as?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/frameworks/projects/spark/src/spark/components/Group.as (original)
+++ incubator/flex/sdk/branches/develop/frameworks/projects/spark/src/spark/components/Group.as Fri Dec  7 18:48:26 2012
@@ -547,6 +547,14 @@ public class Group extends GroupBase imp
         }
     }
 
+	/**
+	 *  override setting of children
+	 */
+	override protected function addMXMLChildren(comps:Array):void
+	{
+		mxmlContent = comps;
+	}
+	
     //----------------------------------
     //  mxmlContent
     //----------------------------------

Modified: incubator/flex/sdk/branches/develop/frameworks/projects/spark/src/spark/components/SkinnableContainer.as
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/projects/spark/src/spark/components/SkinnableContainer.as?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/frameworks/projects/spark/src/spark/components/SkinnableContainer.as (original)
+++ incubator/flex/sdk/branches/develop/frameworks/projects/spark/src/spark/components/SkinnableContainer.as Fri Dec  7 18:48:26 2012
@@ -672,6 +672,14 @@ public class SkinnableContainer extends 
             _contentModified = true;
     }
     
+	/**
+	 *  override setting of children
+	 */
+	override protected function addMXMLChildren(comps:Array):void
+	{
+		mxmlContent = comps;
+	}
+	
     //----------------------------------
     //  mxmlContentFactory
     //----------------------------------
@@ -873,7 +881,18 @@ public class SkinnableContainer extends 
     //
     //--------------------------------------------------------------------------
     
-    /**
+	private var creatingChildren:Boolean;
+	
+	override protected function generateMXMLInstances(document:Object, data:Array, recursive:Boolean = true):void
+	{
+		// don't generate children during super.createChildren
+		if (creatingChildren)
+			return;
+		
+		super.generateMXMLInstances(document, data, recursive);
+	}
+	
+	    /**
      *  Create content children, if the <code>creationPolicy</code> property 
      *  is not equal to <code>none</code>.
      *  
@@ -884,7 +903,9 @@ public class SkinnableContainer extends 
      */
     override protected function createChildren():void
     {
-        super.createChildren();
+		creatingChildren = true;
+		super.createChildren();
+		creatingChildren = false;
         
         // TODO (rfrishbe): When navigator support is added, this is where we would 
         // determine if content should be created now, or wait until
@@ -1048,7 +1069,17 @@ public class SkinnableContainer extends 
      */
     public function createDeferredContent():void
     {
-        if (!mxmlContentCreated)
+		var children:Array =  this.MXMLDescriptor;
+		if (children)
+		{
+			generateMXMLInstances(document, children);
+			mxmlContentCreated = true; // keep the code from recursing back into here.
+			_deferredContentCreated = true; 
+			dispatchEvent(new FlexEvent(FlexEvent.CONTENT_CREATION_COMPLETE));
+			return;
+		}
+
+		if (!mxmlContentCreated)
         {
             mxmlContentCreated = true;
             

Modified: incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/BasicTests-config.xml
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/BasicTests-config.xml?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/BasicTests-config.xml (original)
+++ incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/BasicTests-config.xml Fri Dec  7 18:48:26 2012
@@ -96,6 +96,7 @@
         From mustella.swc
     -->
         <symbol>ExitWhenDone</symbol>
+        <symbol>SetShowRTE</symbol>
         <symbol>SendFormattedResultsToLog</symbol>
     </includes>
 </flex-config>

Modified: incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/basicLoader.as
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/basicLoader.as?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/basicLoader.as (original)
+++ incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/basicLoader.as Fri Dec  7 18:48:26 2012
@@ -33,8 +33,8 @@ public class basicLoader extends MovieCl
 		super();
 		
 		text = new TextField();
-		text.width = stage.stageWidth;
-		text.height = stage.stageHeight;
+		text.width = 176;
+		text.height = 81;
 		
 		var tf:TextFormat;
 		tf = new TextFormat;

Modified: incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/halo/scripts/SWFLoaderTestScript.mxml
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/halo/scripts/SWFLoaderTestScript.mxml?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/halo/scripts/SWFLoaderTestScript.mxml (original)
+++ incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/halo/scripts/SWFLoaderTestScript.mxml Fri Dec  7 18:48:26 2012
@@ -51,7 +51,7 @@
 		</TestCase>
 		<TestCase testID="SWFLoaderTest1">
 			<body>
-				<AssertPixelValue target="haloSWFLoaderTests.testLoader" x="10" y="10" value="0x0066CC" />
+				<AssertPixelValue target="haloSWFLoaderTests.testLoader" x="10" y="10" value="0xFF9933" />
 			</body>
 		</TestCase>
 	</testCases>

Modified: incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/AIR/CompareBitmap.as
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/AIR/CompareBitmap.as?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/AIR/CompareBitmap.as (original)
+++ incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/AIR/CompareBitmap.as Fri Dec  7 18:48:26 2012
@@ -23,9 +23,13 @@ import flash.events.*;
 import flash.filesystem.*;
 import flash.net.*;
 import flash.text.*;
+import flash.text.engine.*;
+import flash.geom.ColorTransform;
 import flash.utils.*;
 import flash.filesystem.*;
 import flash.geom.*;
+import mx.core.IChildList;
+import mx.core.IRawChildrenContainer;
 import mx.core.mx_internal;
 use namespace mx_internal;
 
@@ -55,6 +59,11 @@ use namespace mx_internal;
 public class CompareBitmap extends Assert
 { 
 	public static var useRemoteDiffer:Boolean = false;
+
+	private static var useDisplayListCompare:Boolean = true;
+		
+	private static var identityMatrix:String = new Matrix().toString();
+	private static var identityColorTransform:String = new ColorTransform().toString();
 	
 	public static var DEFAULT_MAX_COLOR_VARIANCE:int = 0;
 	public static var DEFAULT_NUM_COLOR_VARIANCES:int = 0;
@@ -135,6 +144,7 @@ public class CompareBitmap extends Asser
 	public static var fileSuffix:String = "";
 
 	private var reader:Loader;
+	private var xmlreader:URLLoader;
 	private var writer:URLLoader;
 
 	private static var connection:LocalConnection;
@@ -268,7 +278,7 @@ public class CompareBitmap extends Asser
 				}
 			}
 
-			writePNG(actualTarget);
+			writeBaselines(actualTarget);
 			return false;
 		}
 		else
@@ -360,6 +370,9 @@ public class CompareBitmap extends Asser
 	private var MAX_LC:int = 12000;
 	private var screenBits:BitmapData;
 	private var baselineBits:BitmapData;
+	
+	private var compareVal:Object;
+
 	public function comparePNG(target:DisplayObject):Boolean 
 	{ 
 		if (UnitTester.checkEmbeddedFonts)
@@ -371,6 +384,21 @@ public class CompareBitmap extends Asser
 			}
 		}
 
+		if (useDisplayListCompare)
+		{
+			var s:String = getDisplayListXML(target).toXMLString();
+			if (s !== xmlreader.data)
+			{
+				testResult.doFail ("compare returned" + compareVal, absolutePathResult(url) + ".bad.xml");
+				
+				if (fileSuffix != "") 
+				{ 
+					writePNG (target);
+				}
+			}
+			return true;	
+		}
+
 		if (!reader.content)
 		{
 			testResult.doFail ("baseline image not available");
@@ -384,7 +412,7 @@ public class CompareBitmap extends Asser
 			baselineBits = new BitmapData(reader.content.width, reader.content.height);
 			baselineBits.draw(reader.content, new Matrix());
 
-			var compareVal:Object = baselineBits.compare (screenBits);
+			compareVal = baselineBits.compare (screenBits);
 
 			if (compareVal is BitmapData && numColorVariances) {
 				compareVal = compareWithVariances(compareVal as BitmapData)
@@ -392,18 +420,19 @@ public class CompareBitmap extends Asser
 
 			if (compareVal != 0)
 			{
-				testResult.doFail ("compare returned" + compareVal, absolutePathResult(url) + ".bad.png");
-
-	
-				if (useRemoteDiffer)
-				{
-					sendImagesToDiffer();
-					return false;
-				} else if (fileSuffix != "") { 
-					writePNG (target);
-				}
+				var req:URLRequest = new URLRequest();
+				
+				trace ("compare returned" + compareVal);
+				
+				req.url += ".xml";
+				xmlreader = new URLLoader();
+				xmlreader.addEventListener(Event.COMPLETE, readXMLCompleteHandler);
+				xmlreader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, readErrorHandler);
+				xmlreader.addEventListener(IOErrorEvent.IO_ERROR, readXMLIOErrorHandler);
+				xmlreader.load (req);	
+				return false;
 			}
-		} 
+		}
 		catch (e:Error) 
 		{ 
 			testResult.doFail (e.getStackTrace());	
@@ -411,6 +440,40 @@ public class CompareBitmap extends Asser
 		return true;
 	}
 	
+	private function readXMLCompleteHandler(event:Event):void
+	{
+		var actualTarget:DisplayObject = DisplayObject(context.stringToObject(target));
+		var s:String = getDisplayListXML(actualTarget).toXMLString();
+		if (s !== xmlreader.data)
+		{
+			testResult.doFail ("compare returned" + compareVal, absolutePathResult(url) + ".bad.png");
+
+			if (useRemoteDiffer)
+			{
+				sendImagesToDiffer();
+			}
+			else if (fileSuffix != "") 
+			{ 
+				writeBaselines (actualTarget);
+			}
+		else
+			stepComplete();
+	}
+
+	private function readXMLIOErrorHandler(event:Event):void
+	{
+		if (useRemoteDiffer)
+		{
+			sendImagesToDiffer();
+		} 
+		else if (fileSuffix != "") 
+		{ 
+			testResult.doFail ("compare returned" + compareVal, absolutePathResult(url) + ".bad.png");
+			var actualTarget:DisplayObject = DisplayObject(context.stringToObject(target));
+			writePNG (actualTarget);
+		}	
+	}
+		
 	private function mergeSandboxBitmap(target:DisplayObject, pt:Point, bm:BitmapData, obj:Object):void
 	{
 		var targetSize:Point = getTargetSize(target);
@@ -532,22 +595,17 @@ public class CompareBitmap extends Asser
 
 	public function readPNG():void
 	{
-		reader = new Loader();
-		reader.contentLoaderInfo.addEventListener(Event.COMPLETE, readCompleteHandler);
-		reader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, readErrorHandler);
-		reader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, readErrorHandler);
-		
 		var req:URLRequest = new URLRequest();
 		var ba:ByteArray = null;
 		var file:File;
-
+		
 		// If iOS and AIR, let's try using file I/O instead of loader stuff. AIR on devices can be a pain with the url stuff.
 		if( UnitTester.isApollo && (UnitTester.cv.os.toLowerCase() == DeviceNames.IOS.toLowerCase()) ){
 			// Trim the leading ../ if we have it.
 			if ( url.indexOf ("../") == 0 ){
 				url = url.substring (3);
 			}
-		
+			
 			file = File.documentsDirectory.resolvePath( url );
 			
 			if( !file.exists ){
@@ -574,12 +632,18 @@ public class CompareBitmap extends Asser
 				}
 				req.url = encodeURI2(base + "/" + req.url);
 			}
-			//	req.url = encodeURI2(url);
-			// }
+		}
+		
+		reader = new Loader();
+		reader.contentLoaderInfo.addEventListener(Event.COMPLETE, readCompleteHandler);
+		reader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, readErrorHandler);
+		reader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, readErrorHandler);
+		//	req.url = encodeURI2(url);
+		// }
+		
+		trace ("readPNG:requesting url: " + req.url);			
+		reader.load (req);	
 		
-			trace ("readPNG:requesting url: " + req.url);			
-			reader.load (req);	
-		}		
 	}
 
 
@@ -624,10 +688,60 @@ public class CompareBitmap extends Asser
 	}
 
 
-	public function writePNG(target:DisplayObject):void 
+	public function writeBaselines(target:DisplayObject, writeDisplayList:Boolean = true):void 
 	{
-		var ba:ByteArray = getPngByteArray(target, screenBits);
-
+		var req:URLRequest = new URLRequest();
+		writer = new URLLoader();
+		req.method = "POST";
+		
+		/**
+		 * either we got called here to write new baselines
+		 * or to save a .bad.png for investigation
+		 * in addition, with failures, we upload baseline and failure to a server
+		 */
+		if (UnitTester.createBitmapReferences) 
+		{	
+			fileSuffix = "";
+		} 
+		
+		
+		if (writeDisplayList)
+		{
+			var s:String = getDisplayListXML(target).toXMLString();
+			// request data goes on the URL Request
+			req.data = s;
+			
+			req.contentType = "text/xml";
+			if (UnitTester.isApollo) 
+			{ 
+				req.url = encodeURI2(UnitTester.bitmapServerPrefix + adjustWriteURI(adjustPath(url))) + fileSuffix + ".xml";
+			} else 
+			{
+				req.url = encodeURI2(UnitTester.bitmapServerPrefix + absolutePath(url)) + fileSuffix + ".xml";
+			}
+			trace ("writing url: " + req.url);
+			writer.addEventListener(Event.COMPLETE, writeXMLCompleteHandler);
+			writer.addEventListener(SecurityErrorEvent.SECURITY_ERROR, writeErrorHandler);
+			writer.addEventListener(IOErrorEvent.IO_ERROR, writeErrorHandler);
+			
+			writer.load (req);	
+		}
+	}
+	
+	private function writeXMLCompleteHandler(event:Event):void
+	{
+		var actualTarget:DisplayObject = DisplayObject(context.stringToObject(target));
+		writePNG(actualTarget);
+	}
+	
+	private function writePNG(target:DisplayObject):void
+	{
+		var req:URLRequest = new URLRequest();
+		writer = new URLLoader();
+		req.method = "POST";
+		
+		var ba:ByteArray = getPngByteArray(target, screenBits);			
+		trace ("image size: " + ba.length);
 
 		if( UnitTester.createBitmapReferences ){
 			fileSuffix = "";
@@ -733,8 +847,7 @@ public class CompareBitmap extends Asser
 	private function writeCompleteHandler(event:Event):void
 	{
 		trace("baseline write successful " + event);
-		if (UnitTester.createBitmapReferences)
-			stepComplete();
+		stepComplete();
 	}
 
 	private function uploadCompleteHandler(event:Event):void
@@ -991,6 +1104,157 @@ public class CompareBitmap extends Asser
 
 
 	}
+	
+	/****** DisplayList Comparision ******/
+	protected function getDisplayListProperties(d:DisplayObject, noMask:Boolean = false):XML
+	{
+		var xml:XML;
+		var n:int;
+		var i:int;
+		var childXML:XML;
+		var s:String = getQualifiedClassName(d);
+		s = s.replace("::", ".");
+		xml = new XML("<" + s + "/>");
+		s = d.transform.concatenatedColorTransform.toString();
+		if (s != identityColorTransform)
+			xml.@concatenatedColorTransform = s;
+		if (d.transform.matrix)
+		{
+			s = d.transform.matrix.toString();
+			if (s != identityMatrix)
+			{
+				if (s.indexOf("(a=1, b=0, c=0, d=1, ") == -1)
+					xml.@matrix = s;
+			}
+		}
+		else
+		{
+			s = d.transform.matrix3D.rawData.toString();
+			xml.@matrix3D = s;
+		}
+		if (d.x != 0)
+			xml.@x = d.x;
+		if (d.y != 0)
+			xml.@y = d.y;
+		xml.@width = d.width;
+		xml.@height = d.height;
+		if (xml.visible == false)
+			xml.@visible = "false";
+		if (d.mask && !noMask)
+		{
+			xml.mask = <mask/>;
+			childXML = getDisplayListProperties(d.mask, true);
+			xml.mask.appendChild = childXML;
+		}
+		if (d.scrollRect)
+		{
+			s = d.scrollRect.toString();
+			xml.@scrollRect = s;
+		}
+		if (d.blendMode && d.blendMode != "normal")
+			xml.@blendMode = d.blendMode;
+		if (d.cacheAsBitmap)
+			xml.@cacheAsBitmap = "true";
+		if (d.filters && d.filters.length > 0)
+		{
+			s = d.filters.toString();
+			xml.@filters = s;
+		}
+		if (d.opaqueBackground)
+			xml.@opaqueBackground = "true";
+		if (d.scale9Grid)
+		{
+			s = d.scale9Grid.toString();
+			xml.@scale9Grid = s;
+		}
+		if (d is TextField)
+		{
+			xml.htmlText = TextField(d).htmlText;
+		}
+		if (d is Loader && Loader(d).contentLoaderInfo.contentType.indexOf("image") != -1)
+		{
+			s = Loader(d).contentLoaderInfo.url;
+			s = s.substring(s.lastIndexOf("/") + 1);
+			xml.@loaderbitmap = s;
+		}
+		if (d is TextLine)
+		{
+			var tl:TextLine = TextLine(d);
+			xml.@ascent = tl.ascent;
+			xml.@descent = tl.descent;
+			xml.@atomCount = tl.atomCount;
+			xml.@hasGraphicElement = tl.hasGraphicElement;
+			if (tl.textBlock)
+			{
+				var tb:TextBlock = TextLine(d).textBlock;
+				var ce:ContentElement = tb.content;
+				s = ce.rawText.substr(tl.textBlockBeginIndex, tl.rawTextLength);
+				xml.@text = s;
+			}
+		}
+		
+		if (d is IRawChildrenContainer)
+		{
+			var rawChildren:IChildList = IRawChildrenContainer(d).rawChildren;
+			n = rawChildren.numChildren;
+			for (i = 0; i < n; i++)
+			{
+				childXML = getDisplayListProperties(rawChildren.getChildAt(i));
+				xml.appendChild(childXML);				
+			}
+		}
+		else if (d is DisplayObjectContainer)
+		{
+			var doc:DisplayObjectContainer = d as DisplayObjectContainer;
+			n = doc.numChildren;
+			for (i = 0; i < n; i++)
+			{
+				childXML = getDisplayListProperties(doc.getChildAt(i));
+				xml.appendChild(childXML);				
+			}
+		}
+		return xml;
+	}
+	
+	// scan entire display list, but only dump objects intersecting target
+	protected function getDisplayListXML(target:DisplayObject):XML
+	{
+		var n:int;
+		var i:int;
+		var child:DisplayObject;
+		var childXML:XML;
+		
+		var doc:DisplayObjectContainer = DisplayObjectContainer(target.root);
+		var xml:XML = <DisplayList />;
+		if (doc is IRawChildrenContainer)
+		{
+			var rawChildren:IChildList = IRawChildrenContainer(doc).rawChildren;
+			n = rawChildren.numChildren;
+			for (i = 0; i < n; i++)
+			{
+				child = rawChildren.getChildAt(i);
+				if (target.hitTestObject(child))
+				{
+					childXML = getDisplayListProperties(child);
+					xml.appendChild(childXML);	
+				}
+			}
+		}
+		else 
+		{
+			n = doc.numChildren;
+			for (i = 0; i < n; i++)
+			{
+				child = doc.getChildAt(i);
+				if (target.hitTestObject(child))
+				{
+					childXML = getDisplayListProperties(child);
+					xml.appendChild(childXML);									
+				}
+			}
+		}
+		return xml;
+	}
 }
 
 }

Modified: incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/CompareBitmap.as
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/CompareBitmap.as?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/CompareBitmap.as (original)
+++ incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/CompareBitmap.as Fri Dec  7 18:48:26 2012
@@ -24,9 +24,13 @@ import flash.net.*;
 import flash.events.*;
 import flash.display.*;
 import flash.text.*;
+import flash.text.engine.*;
+import flash.geom.ColorTransform;
 import flash.geom.Matrix;
 import flash.geom.Point;
 import flash.geom.Rectangle;
+import mx.core.IChildList;
+import mx.core.IRawChildrenContainer;
 import mx.core.mx_internal;
 use namespace mx_internal;
 
@@ -57,7 +61,10 @@ use namespace mx_internal;
 public class CompareBitmap extends Assert
 { 
 	public static var useRemoteDiffer:Boolean = false;
-
+	
+	private static var identityMatrix:String = new Matrix().toString();
+	private static var identityColorTransform:String = new ColorTransform().toString();
+	
 	public static var DEFAULT_MAX_COLOR_VARIANCE:int = 0;
 	public static var DEFAULT_NUM_COLOR_VARIANCES:int = 0;
 
@@ -136,6 +143,7 @@ public class CompareBitmap extends Asser
 	public static var fileSuffix:String = "";
 
 	private var reader:Loader;
+	private var xmlreader:URLLoader;
 	private var writer:URLLoader;
 
 	private static var connection:LocalConnection;
@@ -275,7 +283,7 @@ public class CompareBitmap extends Asser
 				}
 			}
 
-			writePNG(actualTarget);
+			writeBaselines(actualTarget);
 			return false;
 		}
 		else
@@ -352,6 +360,8 @@ public class CompareBitmap extends Asser
 	private var MAX_LC:int = 12000;
 	private var screenBits:BitmapData;
 	private var baselineBits:BitmapData;
+
+	private var compareVal:Object;
 	
 	public function comparePNG(target:DisplayObject):Boolean 
 	{ 
@@ -374,7 +384,7 @@ public class CompareBitmap extends Asser
 			testResult.doFail ("CompareBitmap BIG FAIL! Content reader is null!");
 			return true;
 		}
-
+		
 		getScreenBits(target);
 
 		try
@@ -382,30 +392,67 @@ public class CompareBitmap extends Asser
 			baselineBits = new BitmapData(reader.content.width, reader.content.height);
 			baselineBits.draw(reader.content, new Matrix());
 
-			var compareVal:Object = baselineBits.compare (screenBits);
+			compareVal = baselineBits.compare (screenBits);
 		
 			if (compareVal is BitmapData && numColorVariances)
 				compareVal = compareWithVariances(compareVal as BitmapData)
 
 			if (compareVal != 0)
 			{
-				testResult.doFail ("compare returned" + compareVal, absolutePathResult(url) + ".bad.png");
-					
-				if (useRemoteDiffer)
-				{
-					sendImagesToDiffer();
-					return false;
-				} else if (fileSuffix != "") { 
-					writePNG (target);
-				}
+				var req:URLRequest = new URLRequest();
+				
+				trace ("compare returned" + compareVal);
+				
+				req.url += ".xml";
+				xmlreader = new URLLoader();
+				xmlreader.addEventListener(Event.COMPLETE, readXMLCompleteHandler);
+				xmlreader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, readErrorHandler);
+				xmlreader.addEventListener(IOErrorEvent.IO_ERROR, readXMLIOErrorHandler);
+				xmlreader.load (req);	
+				return false;
 			}
-		} 
+		}
 		catch (e:Error) 
 		{ 
 			testResult.doFail (e.getStackTrace());	
 		}
 		return true;
 	}
+		
+	private function readXMLCompleteHandler(event:Event):void
+	{
+		var actualTarget:DisplayObject = DisplayObject(context.stringToObject(target));
+		var s:String = getDisplayListXML(actualTarget).toXMLString();
+		if (s !== xmlreader.data)
+		{
+			testResult.doFail ("compare returned" + compareVal, absolutePathResult(url) + ".bad.png");
+			
+			if (useRemoteDiffer)
+			{
+				sendImagesToDiffer();
+			} 
+			else if (fileSuffix != "") 
+			{ 
+				writeBaselines (actualTarget);
+			}
+		}
+		else
+			stepComplete();
+	}
+	
+	private function readXMLIOErrorHandler(event:Event):void
+	{
+		if (useRemoteDiffer)
+		{
+			sendImagesToDiffer();
+		} 
+		else if (fileSuffix != "") 
+		{ 
+			testResult.doFail ("compare returned" + compareVal, absolutePathResult(url) + ".bad.png");
+			var actualTarget:DisplayObject = DisplayObject(context.stringToObject(target));
+			writePNG (actualTarget);
+		}	
+	}
 	
 	private function mergeSandboxBitmap(target:DisplayObject, pt:Point, bm:BitmapData, obj:Object):void
 	{
@@ -501,31 +548,33 @@ public class CompareBitmap extends Asser
 
 	public function readPNG():void
 	{
-		reader = new Loader();
 		var req:URLRequest = new URLRequest();
 		if (UnitTester.isApollo) 
 		{
 			req.url = encodeURI2(CompareBitmap.adjustPath (url));
-		} else
-                {
-                        req.url = url;
-                        var base:String = normalizeURL(context.application.url);
-                        base = base.substring(0, base.lastIndexOf("/"));
-                        while (req.url.indexOf("../") == 0)
-                        {
-                                base = base.substring(0, base.lastIndexOf("/"));
-                                req.url = req.url.substring(3);
-                        }
+		} 
+		else
+        {
+            req.url = url;
+            var base:String = normalizeURL(context.application.url);
+            base = base.substring(0, base.lastIndexOf("/"));
+            while (req.url.indexOf("../") == 0)
+            {
+                    base = base.substring(0, base.lastIndexOf("/"));
+                    req.url = req.url.substring(3);
+            }
 
-                        req.url = encodeURI2(base + "/" + req.url);
-                }
+            req.url = encodeURI2(base + "/" + req.url);
+        }
 		//	req.url = encodeURI2(url);
 		// }
 	
+		reader = new Loader();
+
 		trace ("readPNG:requesting url: " + req.url);
-        	reader.contentLoaderInfo.addEventListener(Event.COMPLETE, readCompleteHandler);
-        	reader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, readErrorHandler);
-        	reader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, readErrorHandler);
+    	reader.contentLoaderInfo.addEventListener(Event.COMPLETE, readCompleteHandler);
+    	reader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, readErrorHandler);
+    	reader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, readErrorHandler);
 
 		reader.load (req);	
 	}
@@ -556,27 +605,66 @@ public class CompareBitmap extends Asser
 		return ba;
 	}
 
-	public function writePNG(target:DisplayObject):void 
+	public function writeBaselines(target:DisplayObject, writeDisplayList:Boolean = true):void 
 	{
-
-		var ba:ByteArray = getPngByteArray(target, screenBits);
-		trace ("image size: " + ba.length);
-
-
+		var req:URLRequest = new URLRequest();
+		writer = new URLLoader();
+		req.method = "POST";
+		
 		/**
 		 * either we got called here to write new baselines
-	 	 * or to save a .bad.png for investigation
+		 * or to save a .bad.png for investigation
 		 * in addition, with failures, we upload baseline and failure to a server
-	 	 */
+		 */
 		if (UnitTester.createBitmapReferences) 
 		{	
 			fileSuffix = "";
 		} 
+		
 
-
-		writer = new URLLoader();
+		if (writeDisplayList)
+		{
+			var s:String = getDisplayListXML(target).toXMLString();
+			// request data goes on the URL Request
+			req.data = s;
+			
+			req.contentType = "text/xml";
+			if (UnitTester.isApollo) 
+			{ 
+				req.url = encodeURI2(UnitTester.bitmapServerPrefix + adjustWriteURI(adjustPath(url))) + fileSuffix + ".xml";
+			} else 
+			{
+				req.url = encodeURI2(UnitTester.bitmapServerPrefix + absolutePath(url)) + fileSuffix + ".xml";
+			}
+			trace ("writing url: " + req.url);
+			writer.addEventListener(Event.COMPLETE, writeXMLCompleteHandler);
+			writer.addEventListener(SecurityErrorEvent.SECURITY_ERROR, writeErrorHandler);
+			writer.addEventListener(IOErrorEvent.IO_ERROR, writeErrorHandler);
+			
+			writer.load (req);	
+		}
+	}
+		
+	private function writeXMLCompleteHandler(event:Event):void
+	{
+		var actualTarget:DisplayObject = DisplayObject(context.stringToObject(target));
+		writePNG(actualTarget);
+	}
+	
+	private function writePNG(target:DisplayObject):void
+	{
 		var req:URLRequest = new URLRequest();
+		writer = new URLLoader();
 		req.method = "POST";
+		
+		var ba:ByteArray = getPngByteArray(target, screenBits);			
+		trace ("image size: " + ba.length);
+		// request data goes on the URL Request
+		req.data = ba;
+		// can't send this, don't need to anyway var rhArray:Array = new Array(new URLRequestHeader("Content-Length", new String(ba.length) ));
+		
+		req.contentType = "image/png";
+		
 		if (UnitTester.isApollo) 
 		{ 
 			req.url = encodeURI2(UnitTester.bitmapServerPrefix + adjustWriteURI(adjustPath(url))) + fileSuffix;
@@ -585,16 +673,12 @@ public class CompareBitmap extends Asser
 			req.url = encodeURI2(UnitTester.bitmapServerPrefix + absolutePath(url)) + fileSuffix;
 		}
 		trace ("writing url: " + req.url);
-        	writer.addEventListener(Event.COMPLETE, writeCompleteHandler);
-        	writer.addEventListener(SecurityErrorEvent.SECURITY_ERROR, writeErrorHandler);
-        	writer.addEventListener(IOErrorEvent.IO_ERROR, writeErrorHandler);
-
-		// request data goes on the URL Request
-		req.data = ba;
-		// can't send this, don't need to anyway var rhArray:Array = new Array(new URLRequestHeader("Content-Length", new String(ba.length) ));
-		
-		req.contentType = "image/png";
+		writer.addEventListener(Event.COMPLETE, writeCompleteHandler);
+		writer.addEventListener(SecurityErrorEvent.SECURITY_ERROR, writeErrorHandler);
+		writer.addEventListener(IOErrorEvent.IO_ERROR, writeErrorHandler);
+			
 		writer.load (req);	
+			
 
 		/// If this is about creating bitmaps, skip the upload, we're done
 		if (UnitTester.createBitmapReferences || UnitTester.run_id == "-1" || baselineMissing)
@@ -672,11 +756,8 @@ public class CompareBitmap extends Asser
 		if( baselineMissing ){
 			baselineMissing = false;
 			testResult.doFail( baselineMissingMessage );
-			stepComplete();
-		}else{		
-			if (UnitTester.createBitmapReferences)
-				stepComplete();
 		}
+		stepComplete();
 	}
 
 	private function uploadCompleteHandler(event:Event):void
@@ -965,6 +1046,157 @@ public class CompareBitmap extends Asser
 
 
 	}*/
+
+	/****** DisplayList Comparision ******/
+	protected function getDisplayListProperties(d:DisplayObject, noMask:Boolean = false):XML
+	{
+		var xml:XML;
+		var n:int;
+		var i:int;
+		var childXML:XML;
+		var s:String = getQualifiedClassName(d);
+		s = s.replace("::", ".");
+		xml = new XML("<" + s + "/>");
+		s = d.transform.concatenatedColorTransform.toString();
+		if (s != identityColorTransform)
+			xml.@concatenatedColorTransform = s;
+		if (d.transform.matrix)
+		{
+			s = d.transform.matrix.toString();
+			if (s != identityMatrix)
+			{
+				if (s.indexOf("(a=1, b=0, c=0, d=1, ") == -1)
+					xml.@matrix = s;
+			}
+		}
+		else
+		{
+			s = d.transform.matrix3D.rawData.toString();
+			xml.@matrix3D = s;
+		}
+		if (d.x != 0)
+			xml.@x = d.x;
+		if (d.y != 0)
+			xml.@y = d.y;
+		xml.@width = d.width;
+		xml.@height = d.height;
+		if (xml.visible == false)
+			xml.@visible = "false";
+		if (d.mask && !noMask)
+		{
+			xml.mask = <mask/>;
+			childXML = getDisplayListProperties(d.mask, true);
+			xml.mask.appendChild = childXML;
+		}
+		if (d.scrollRect)
+		{
+			s = d.scrollRect.toString();
+			xml.@scrollRect = s;
+		}
+		if (d.blendMode && d.blendMode != "normal")
+			xml.@blendMode = d.blendMode;
+		if (d.cacheAsBitmap)
+			xml.@cacheAsBitmap = "true";
+		if (d.filters && d.filters.length > 0)
+		{
+			s = d.filters.toString();
+			xml.@filters = s;
+		}
+		if (d.opaqueBackground)
+			xml.@opaqueBackground = "true";
+		if (d.scale9Grid)
+		{
+			s = d.scale9Grid.toString();
+			xml.@scale9Grid = s;
+		}
+		if (d is TextField)
+		{
+			xml.htmlText = TextField(d).htmlText;
+		}
+		if (d is Loader && Loader(d).contentLoaderInfo.contentType.indexOf("image") != -1)
+		{
+			s = Loader(d).contentLoaderInfo.url;
+			s = s.substring(s.lastIndexOf("/") + 1);
+			xml.@loaderbitmap = s;
+		}
+		if (d is TextLine)
+		{
+			var tl:TextLine = TextLine(d);
+			xml.@ascent = tl.ascent;
+			xml.@descent = tl.descent;
+			xml.@atomCount = tl.atomCount;
+			xml.@hasGraphicElement = tl.hasGraphicElement;
+			if (tl.textBlock)
+			{
+				var tb:TextBlock = TextLine(d).textBlock;
+				var ce:ContentElement = tb.content;
+				s = ce.rawText.substr(tl.textBlockBeginIndex, tl.rawTextLength);
+				xml.@text = s;
+			}
+		}
+		
+		if (d is IRawChildrenContainer)
+		{
+			var rawChildren:IChildList = IRawChildrenContainer(d).rawChildren;
+			n = rawChildren.numChildren;
+			for (i = 0; i < n; i++)
+			{
+				childXML = getDisplayListProperties(rawChildren.getChildAt(i));
+				xml.appendChild(childXML);				
+			}
+		}
+		else if (d is DisplayObjectContainer)
+		{
+			var doc:DisplayObjectContainer = d as DisplayObjectContainer;
+			n = doc.numChildren;
+			for (i = 0; i < n; i++)
+			{
+				childXML = getDisplayListProperties(doc.getChildAt(i));
+				xml.appendChild(childXML);				
+			}
+		}
+		return xml;
+	}
+	
+	// scan entire display list, but only dump objects intersecting target
+	protected function getDisplayListXML(target:DisplayObject):XML
+	{
+		var n:int;
+		var i:int;
+		var child:DisplayObject;
+		var childXML:XML;
+		
+		var doc:DisplayObjectContainer = DisplayObjectContainer(target.root);
+		var xml:XML = <DisplayList />;
+		if (doc is IRawChildrenContainer)
+		{
+			var rawChildren:IChildList = IRawChildrenContainer(doc).rawChildren;
+			n = rawChildren.numChildren;
+			for (i = 0; i < n; i++)
+			{
+				child = rawChildren.getChildAt(i);
+				if (target.hitTestObject(child))
+				{
+					childXML = getDisplayListProperties(child);
+					xml.appendChild(childXML);	
+				}
+			}
+		}
+		else 
+		{
+			n = doc.numChildren;
+			for (i = 0; i < n; i++)
+			{
+				child = doc.getChildAt(i);
+				if (target.hitTestObject(child))
+				{
+					childXML = getDisplayListProperties(child);
+					xml.appendChild(childXML);									
+				}
+			}
+		}
+		return xml;
+	}
 }
 
 }

Modified: incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/ResetComponent.as
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/ResetComponent.as?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/ResetComponent.as (original)
+++ incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/ResetComponent.as Fri Dec  7 18:48:26 2012
@@ -48,11 +48,12 @@ public class ResetComponent extends Test
     private static var effectsInEffect:QName = new QName(mx_internal, "effectsInEffect");
     private static var activeTweens:QName = new QName(mx_internal, "activeTweens");
     private static var tooltipReset:QName = new QName(mx_internal, "reset");
+	private static var resetFocusOnCleanup:Boolean = true;
 
     private var actualWaitEvent:String;
 
     private var waited:Boolean = false;
-
+	
     /**
      *  Called by the TestCase when it is time to start this step
      *  fake waitEvent because we don't want to listen to the old one
@@ -328,11 +329,14 @@ public class ResetComponent extends Test
         r = root;
         r = root["topLevelSystemManager"];
 
-        UnitTester.blockFocusEvents = false;
-        r.stage.focus = null;
-        UnitTester.blockFocusEvents = true;
-
-        n = r.numChildren;
+		if (resetFocusOnCleanup)
+		{
+	        UnitTester.blockFocusEvents = false;
+	        r.stage.focus = null;
+	        UnitTester.blockFocusEvents = true;
+		}
+		
+		n = r.numChildren;
         for (i = 0; i < n; i++)
         {
             if (context.knownDisplayObjects[r.getChildAt(i)] == null)
@@ -349,7 +353,7 @@ public class ResetComponent extends Test
                 n--;
             }
         }
-
+		
         r = root;
         r = root["topLevelSystemManager"];
         r = r.popUpChildren;

Modified: incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/UnitTester.as
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/UnitTester.as?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/UnitTester.as (original)
+++ incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/UnitTester.as Fri Dec  7 18:48:26 2012
@@ -1873,6 +1873,8 @@ public class UnitTester extends EventDis
 				var tr:TestResult = currentTest.testResult;
 				if (!tr.hasStatus())
 					tr.result = TestResult.PASS;
+				if (hasRTE)
+					tr.result = TestResult.FAIL;
 				tr.endTime = new Date().time;
 				TestOutput.logResult (tr.toString());
 				if (hasRTE)

Modified: incubator/flex/sdk/branches/develop/mustella/java/src/mustella/Runner.java
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/java/src/mustella/Runner.java?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/mustella/java/src/mustella/Runner.java (original)
+++ incubator/flex/sdk/branches/develop/mustella/java/src/mustella/Runner.java Fri Dec  7 18:48:26 2012
@@ -338,6 +338,7 @@ public class Runner {
 		}
 
 		try {
+			System.out.println ("Step Timeout: " + System.getProperty ("step_timeout"));
 			step_timeout = Long.parseLong (System.getProperty ("step_timeout"));
 			if (step_timeout < 1000)
 				step_timeout = step_timeout*1000;
@@ -623,7 +624,7 @@ public class Runner {
 					break;
 			}
 
-			// System.out.println ("RUNNER HAS THIS TO DO: " + args[0]);
+			System.out.println ("RUNNER HAS THIS TO DO: " + args[i]);
 
 
 			seenEnd = false;
@@ -1093,6 +1094,7 @@ public class Runner {
 
 
     	public static String normalizeDirOS(String dir, boolean apollo_adjust) {
+			System.out.println ("normalizeDirOS: " + dir);
        		if (dir==null) dir=".";
        	 	try {
             		dir=new File(dir).getCanonicalPath();
@@ -1665,6 +1667,8 @@ public class Runner {
 				String [] whatever = {""};
 				lastTestCaseStart = "";
 				seenEnd = false;
+				
+				try { Thread.sleep (1000); } catch (Exception e) { }
 
 				if(!getResultsFromLog)
 					manageMetaTimer("process start");

Modified: incubator/flex/sdk/branches/develop/mustella/tests/components/VideoDisplay/Methods/VideoMethodTester.mxml
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/tests/components/VideoDisplay/Methods/VideoMethodTester.mxml?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/mustella/tests/components/VideoDisplay/Methods/VideoMethodTester.mxml (original)
+++ incubator/flex/sdk/branches/develop/mustella/tests/components/VideoDisplay/Methods/VideoMethodTester.mxml Fri Dec  7 18:48:26 2012
@@ -73,7 +73,7 @@
                 <SetProperty target="vd" propertyName="source" value="assets/video.flv" waitEvent="ready" waitTarget="vd" />
             </setup>
             <body>
-            	<AssertPropertyValue target="vd" propertyName="state" value="buffering" />
+            	<AssertPropertyValue target="vd" propertyName="state" value="playing" />
 				<AssertEvent target="vd" eventName="stateChange" eventClass="mx.events::VideoEvent" numExpectedEvents="-1" />
 				<AssertPropertyValue target="vd" propertyName="state" value="playing" />
                 <RunCode code="application.vd.pause();" waitEvent="stateChange" waitTarget="vd" />

Modified: incubator/flex/sdk/branches/develop/mustella/tests/components/VideoDisplay/Properties/VideoPropertyTester.mxml
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/tests/components/VideoDisplay/Properties/VideoPropertyTester.mxml?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/mustella/tests/components/VideoDisplay/Properties/VideoPropertyTester.mxml (original)
+++ incubator/flex/sdk/branches/develop/mustella/tests/components/VideoDisplay/Properties/VideoPropertyTester.mxml Fri Dec  7 18:48:26 2012
@@ -75,7 +75,7 @@
                 <AssertPropertyValue target="vd" propertyName="state" value="buffering" />
                 -->
                 <AssertEvent target="vd" eventName="stateChange" eventClass="mx.events::VideoEvent" numExpectedEvents="1" />
-                <AssertPropertyValue target="vd" propertyName="state" value="playing" />
+                <AssertPropertyValue target="vd" propertyName="state" value="loading" />
             </body>
         </TestCase>
 
@@ -217,7 +217,7 @@
             	<AssertPropertyValue target="vd" propertyName="state" value="buffering" />
             	-->
 				<AssertEvent target="vd" eventName="stateChange" eventClass="mx.events::VideoEvent" numExpectedEvents="-1" />
-                <AssertPropertyValue target="vd" propertyName="state" value="playing" />
+                <AssertPropertyValue target="vd" propertyName="state" value="loading" />
                 <RunCode code="application.vd.pause();" waitEvent="stateChange" waitTarget="vd" />
                 <AssertPropertyValue target="vd" propertyName="state" value="paused" />
                 <RunCode code="application.vd.play()" waitEvent="stateChange" waitTarget="vd" />

Modified: incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_gif_runtime.mxml
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_gif_runtime.mxml?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_gif_runtime.mxml (original)
+++ incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_gif_runtime.mxml Fri Dec  7 18:48:26 2012
@@ -18,6 +18,28 @@
 
 -->
 <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">	
+	<mx:Script>
+		<![CDATA[
+			private function airify(s:String):String
+			{
+				if (ApplicationDomain.currentDomain.hasDefinition("flash.filesystem.File"))
+				{
+					var c:Class = Class(ApplicationDomain.currentDomain.getDefinition("flash.filesystem.File"));
+					var f:Object = c.applicationDirectory;
+					var p:String = f.nativePath;
+					while (s.indexOf("../") == 0)
+					{
+						var dot:int = p.lastIndexOf("/");
+						p = p.substr(0, dot);
+						s = s.substr(3);
+					}
+					f.nativePath = p + "/" + s;
+					return f.url;
+				}
+				return s;				
+			}
+		]]>
+	</mx:Script>
 	<mx:states>
 		<mx:State name="notBase">
 			<mx:RemoveChild target="{baseButton}"/>
@@ -25,40 +47,40 @@
 		<mx:State name="up" />
 		<mx:State name="over" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonOver.gif" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonOver.gif')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="down" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonDown.gif" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonDown.gif')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="disabled" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonDisabled.gif" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonDisabled.gif')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="selectedUp" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonSelectedUp.gif" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedUp.gif')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="selectedOver" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonSelectedOver.gif" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedOver.gif')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="selectedDown" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonSelectedDown.gif" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedDown.gif')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="selectedDisabled" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonSelectedDown.gif" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedDown.gif')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 	</mx:states>
 		
-	<mx:Image id="baseButton" source="../../../../Assets/Images/ButtonImages/buttonUp.gif" maintainAspectRatio="false"  width="100%" height="100%"/>
+	<mx:Image id="baseButton" source="{airify('../../../../Assets/Images/ButtonImages/buttonUp.gif')}" maintainAspectRatio="false"  width="100%" height="100%"/>
 </mx:Canvas>
\ No newline at end of file

Modified: incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_jpg_runtime.mxml
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_jpg_runtime.mxml?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_jpg_runtime.mxml (original)
+++ incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_jpg_runtime.mxml Fri Dec  7 18:48:26 2012
@@ -18,6 +18,28 @@
 
 -->
 <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">
+	<mx:Script>
+		<![CDATA[
+			private function airify(s:String):String
+			{
+				if (ApplicationDomain.currentDomain.hasDefinition("flash.filesystem.File"))
+				{
+					var c:Class = Class(ApplicationDomain.currentDomain.getDefinition("flash.filesystem.File"));
+					var f:Object = c.applicationDirectory;
+					var p:String = f.nativePath;
+					while (s.indexOf("../") == 0)
+					{
+						var dot:int = p.lastIndexOf("/");
+						p = p.substr(0, dot);
+						s = s.substr(3);
+					}
+					f.nativePath = p + "/" + s;
+					return f.url;
+				}
+				return s;				
+			}
+		]]>
+	</mx:Script>
 	<mx:states>
 		<mx:State name="notBase">
 			<mx:RemoveChild target="{baseButton}"/>
@@ -25,39 +47,39 @@
 		<mx:State name="up" />
 		<mx:State name="over" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonOver.jpg" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonOver.jpg')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="down" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonDown.jpg" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonDown.jpg')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="disabled" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonDisabled.jpg" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonDisabled.jpg')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="selectedUp" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonSelectedUp.jpg" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedUp.jpg')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="selectedOver" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonSelectedOver.jpg" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedOver.jpg')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="selectedDown" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonSelectedDown.jpg" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedDown.jpg')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="selectedDisabled" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonSelectedDown.jpg" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedDown.jpg')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 	</mx:states>	
-	<mx:Image id="baseButton" source="../../../../Assets/Images/ButtonImages/buttonUp.jpg" maintainAspectRatio="false"  width="100%" height="100%"/>
+	<mx:Image id="baseButton" source="{airify('../../../../Assets/Images/ButtonImages/buttonUp.jpg')}" maintainAspectRatio="false"  width="100%" height="100%"/>
 </mx:Canvas>
\ No newline at end of file

Modified: incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_png_runtime.mxml
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_png_runtime.mxml?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_png_runtime.mxml (original)
+++ incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_png_runtime.mxml Fri Dec  7 18:48:26 2012
@@ -18,6 +18,28 @@
 
 -->
 <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">
+	<mx:Script>
+		<![CDATA[
+			private function airify(s:String):String
+			{
+				if (ApplicationDomain.currentDomain.hasDefinition("flash.filesystem.File"))
+				{
+					var c:Class = Class(ApplicationDomain.currentDomain.getDefinition("flash.filesystem.File"));
+					var f:Object = c.applicationDirectory;
+					var p:String = f.nativePath;
+					while (s.indexOf("../") == 0)
+					{
+						var dot:int = p.lastIndexOf("/");
+						p = p.substr(0, dot);
+						s = s.substr(3);
+					}
+					f.nativePath = p + "/" + s;
+					return f.url;
+				}
+				return s;				
+			}
+		]]>
+	</mx:Script>
 	<mx:states>
 		<mx:State name="notBase">
 			<mx:RemoveChild target="{baseButton}"/>
@@ -25,39 +47,39 @@
 		<mx:State name="up" />
 		<mx:State name="over" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonOver.png" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonOver.png')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="down" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonDown.png" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonDown.png')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="disabled" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonDisabled.png" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonDisabled.png')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="selectedUp" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonSelectedUp.png" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedUp.png')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="selectedOver" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonSelectedOver.png" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedOver.png')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="selectedDown" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonSelectedDown.png" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedDown.png')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="selectedDisabled" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image source="../../../../Assets/Images/ButtonImages/buttonSelectedDown.png" maintainAspectRatio="false" width="100%" height="100%"/> 
+				<mx:Image source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedDown.png')}" maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 	</mx:states>	
-	<mx:Image id="baseButton" source="../../../../Assets/Images/ButtonImages/buttonUp.png" maintainAspectRatio="false"  width="100%" height="100%"/>
+	<mx:Image id="baseButton" source="{airify('../../../../Assets/Images/ButtonImages/buttonUp.png')}" maintainAspectRatio="false"  width="100%" height="100%"/>
 </mx:Canvas>
\ No newline at end of file

Modified: incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_swf_runtime.mxml
URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_swf_runtime.mxml?rev=1418430&r1=1418429&r2=1418430&view=diff
==============================================================================
--- incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_swf_runtime.mxml (original)
+++ incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/SWFs/comps/button_swf_runtime.mxml Fri Dec  7 18:48:26 2012
@@ -18,6 +18,28 @@
 
 -->
 <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">	
+	<mx:Script>
+		<![CDATA[
+			private function airify(s:String):String
+			{
+				if (ApplicationDomain.currentDomain.hasDefinition("flash.filesystem.File"))
+				{
+					var c:Class = Class(ApplicationDomain.currentDomain.getDefinition("flash.filesystem.File"));
+					var f:Object = c.applicationDirectory;
+					var p:String = f.nativePath;
+					while (s.indexOf("../") == 0)
+					{
+						var dot:int = p.lastIndexOf("/");
+						p = p.substr(0, dot);
+						s = s.substr(3);
+					}
+					f.nativePath = p + "/" + s;
+					return f.url;
+				}
+				return s;				
+			}
+		]]>
+	</mx:Script>
  	<mx:states>
 		<mx:State name="notBase">
 			<mx:RemoveChild target="{baseButton}"/>
@@ -25,48 +47,48 @@
 		<mx:State name="up" />
 		<mx:State name="over" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image id="overImage" source="../../../../Assets/Images/ButtonImages/buttonOver.swf" 
+				<mx:Image id="overImage" source="{airify('../../../../Assets/Images/ButtonImages/buttonOver.swf')}" 
                           maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="down" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image id="downImage" source="../../../../Assets/Images/ButtonImages/buttonDown.swf" 
+				<mx:Image id="downImage" source="{airify('../../../../Assets/Images/ButtonImages/buttonDown.swf')}" 
                           maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="disabled" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image id="disabledImage" source="../../../../Assets/Images/ButtonImages/buttonDisabled.swf" 
+				<mx:Image id="disabledImage" source="{airify('../../../../Assets/Images/ButtonImages/buttonDisabled.swf')}" 
                           maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="selectedUp" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image id="selectedUpImage" source="../../../../Assets/Images/ButtonImages/buttonSelectedUp.swf" 
+				<mx:Image id="selectedUpImage" source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedUp.swf')}" 
                           maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="selectedOver" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image id="selectedOverImage" source="../../../../Assets/Images/ButtonImages/buttonSelectedOver.swf" 
+				<mx:Image id="selectedOverImage" source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedOver.swf')}" 
                           maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="selectedDown" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image id="selectedDownImage" source="../../../../Assets/Images/ButtonImages/buttonSelectedDown.swf" 
+				<mx:Image id="selectedDownImage" source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedDown.swf')}" 
                           maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 		<mx:State name="selectedDisabled" basedOn="notBase">
 			<mx:AddChild creationPolicy="all">
-				<mx:Image id="selectedDisabledImage" source="../../../../Assets/Images/ButtonImages/buttonSelectedDown.swf" 
+				<mx:Image id="selectedDisabledImage" source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedDown.swf')}" 
                           maintainAspectRatio="false" width="100%" height="100%"/> 
 			</mx:AddChild>
 		</mx:State>
 	</mx:states>
 		
-	<mx:Image id="baseButton" source="../../../../Assets/Images/ButtonImages/buttonUp.swf" 
+	<mx:Image id="baseButton" source="{airify('../../../../Assets/Images/ButtonImages/buttonUp.swf')}" 
               maintainAspectRatio="false" width="100%" height="100%"/>
 </mx:Canvas>
\ No newline at end of file



FW: svn commit: r1418430 - in /incubator/flex/sdk/branches/develop: ./ frameworks/projects/framework/src/mx/core/ frameworks/projects/framework/src/mx/states/ frameworks/projects/mx/src/mx/containers/ frameworks/projects/mx/src/mx/core/ frameworks/proj...

Posted by Alex Harui <ah...@adobe.com>.
Sorry, bad commit again.  SVN command line is not working as expected.
Reverting again.

--
Alex Harui
Flex SDK Team
Adobe Systems, Inc.
http://blogs.adobe.com/aharui

------ Forwarded Message
From: "aharui@apache.org" <ah...@apache.org>
Reply-To: "flex-dev@incubator.apache.org" <fl...@incubator.apache.org>
Date: Fri, 7 Dec 2012 10:48:27 -0800
To: "flex-commits@incubator.apache.org" flex-commits@incubator.apache.org>
Subject: svn commit: r1418430 - in /incubator/flex/sdk/branches/develop: ./
frameworks/projects/framework/src/mx/core/
frameworks/projects/framework/src/mx/states/
frameworks/projects/mx/src/mx/containers/
frameworks/projects/m/src/mx/core/ frameworks/projects...

Author: aharui
Date: Fri Dec  7 18:48:26 2012
New Revision: 1418430

URL: http://svn.apache.org/viewvc?rev=1418430&view=rev
Log:
merge 1418421 to devlop branch

Modified:
    incubator/flex/sdk/branches/develop/   (props changed)
    incubator/flex/sdk/branches/develop/build.properties

incubator/flex/dk/branches/develop/frameworks/projects/framework/src/mx/cor
e/FlexSprite.as

incubator/flex/sk/branches/develop/frameworks/projects/framework/src/mx/cor
e/UIComponent.as

icubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/sta
tes/AddItems.as

incubator/flex/sdk/branches/develop/frameworks/projects/mx/src/mx/containers
/ViewStack.as
incubator/flex/sdk/branches/develop/frameworks/projects/mx/src/mx/core/Conta
iner.as
    incubator/flex/sdk/branches/develop/frameworks/projects/spark/build.xml

incubatorflex/sdk/branches/develop/frameworks/projects/spark/compile-config
.xml

incubator/flex/sdk/brnches/develop/frameworks/projects/spark/src/spark/comp
onents/Group.as

incubatr/flex/sdk/branches/develop/frameworks/projects/spark/src/spark/comp
onents/SkinnableContainer.as

incubator/flex/sdk/branches/dvelop/frameworks/tests/basicTests/BasicTests-c
onfig.xml

incubator/flex/sdk/brances/develop/frameworks/tests/basicTests/basicLoader.
as

incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/halo/scripts
/SWFLoaderTestScript.mxml

incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/AIR/CompareBit
map.as

incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/CompareBitmap.
as

incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/ResetComponent
.as

incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/UnitTester.as

incubator/flex/sdk/branches/develop/mustella/java/src/mustella/Runner.java

incubator/flex/sdk/branches/develop/mustella/tests/components/VideoDisplay/M
ethods/VideoMethodTester.mxml

incubator/flex/sdk/branches/develop/mustell/tests/components/VideoDisplay/P
roperties/VideoPropertyTester.mxml

incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/S
WFs/comps/button_gif_runtime.mxml

incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/S
WFs/comps/button_jpg_runtime.mxml

incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/S
WFs/comps/button_png_runtime.mxml

incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/S
WFs/comps/button_swf_runtime.mxml

Propchange: incubator/flex/sdk/branches/develop/
----------------------------------------------------------------------------
--
    svn:mergeinfo = /incubator/flex/sdk/branches/release4.9:1418412

Modified: incubatr/flex/sdk/branches/develop/build.properties
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/build.prope
rties?rev=1418430&r1=1418429&r2=1418430&view=diff
============================================================================
==
--- incubator/flex/sdk/branches/develop/build.properties (original)
+++ incubator/flex/sdk/branches/develop/build.properties Fri Dec  7 18:48:26
2012
@@ -56,5 +56,7 @@ mxmlc.jvm.args = ${jvm.args}
 manifest.sealed=false
 manifest.Implementation-Title=Apache Flex SDK
 manifest.Implementation-Version=${release.version}
-manifest.Implementation-Vendor=The Apache Software Foundation
+manifest.Implementation-Vendor=Apache Software Foundation
 manifest.Implementation-Vendor-Id=org.apache
+
+localized.jars = true

Modified:
incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/cor
e/FlexSprite.as
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/
projects/framework/src/mx/core/FlexSprite.as?rev=1418430&r1=1418429&r2=14184
30&view=diff
============================================================================
==
---
incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/cor
e/FlexSprite.as (original)
+++
incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/cor
e/FlexSprite.as Fri Dec  7 18:48:26 2012
@@ -70,7 +70,7 @@ public class FlexSprite extends Sprite

                try
                {
-                       name = NameUtil.createUniqueName(this);
+//                     name = NameUtil.createUniqueName(this);
                }
                catch(e:Error)
                {

Modified:
incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/cor
e/UIComponent.as
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branchs/develop/frameworks/
projects/framework/src/mx/core/UIComponent.as?rev=1418430&r1=1418429&r2=1418
430&view=diff
============================================================================
==
---
incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/cor
e/UIComponent.as (original)
+++
incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/cor
e/UIComponent.as Fri Dec  7 18:48:26 2012
@@ -1723,6 +1723,10 @@ public class UIComponent extends FlexSpr

         _width = super.width;
         _height = super.height;
+
+               var attributes:Array =  this.MXMLProperties;
+               if (attributes)
+                       generateMXMLAttributes(attributes);
     }


//--------------------------------------------------------------------------
@@ -4426,7 +4430,45 @@ public class UIComponent extnds FlexSpr
         return document == this;
     }

-    //----------------------------------
+       //----------------------------------
+       //  MXML Descriptor
+       //----------------------------------
+
+       /**
+        *  The descriptor of MXML children.
        */
+       private var _MXMLDescriptor:Array;
+
+       public function get MXMLDescriptor():Array
+       {
+               return _MXMLDescriptor;
+       }
+
+       public function setMXMLDescriptr(value:Array):void
+       {
+               _MXMLDescriptor = value;
+       }
+
+       //----------------------------------
+       //  MXML Properties
+       //----------------------------------
+
+       /**
+        *  The attributes of MXML top tag.
+        */
+       private var_MXMLProperties:Array;
+
+       public function get MXMLProperties():Array
+       {
+               return _MXMLProperties;
+       }
+
+       public function setMXMLProperties(value:rray):void
+       {
+               _MXMLProperties = value;
+       }
+
+       //----------------------------------
     //  parentApplication
     //----------------------------------

@@ -7763,7 +7805,219 @@ public class UIComponent extends FlexSpr
      /
     protected function createChildren():void
     {
-    }
+               var children:Array =  this.MXMLDescriptor;
+               if (children)
+                       generateMXMLInstances(document, children);
+       }
+
+       protected function addMXMLChilren(comps:Array):void
+       {
+               for each (var i:DisplayObject in comps)
+               {
+                       addChild(i);
+               }
+       }
+
+       protected function generteMXMLObject(document:Object,
data:Array):Object
+       {
+               var i:int = 0;
+               var cls:Class = data[i++];
+               var comp:Object = new cls();
+
+               var m:int;
+               var j:int;
+               var name:String;
+               var simple:*;
+               var value:Object;
+               var id:String;
+
+               m = ata[i++]; // num props
+               for (j = 0; j < m; j++)
+               {
+                       name = data[i++];
+                       simple = data[i++];
+                       value = data[i++];
+                       if (simple == null)
+                               value = generateMXMLArray(document, value as
Array);
+                       else if (simple == false)
+                               value = generateMXMLObject(document, value
as Array);
+                       if (name == "id")
+                       {
+                              document[value] = comp;
+                               id = value as String;
+                       }
+                       else if (name == "_id")
+                       {
+                               document[value] = comp;
+                               id = value as String;
+                               continue; // skip assignment to comp
+                       }
+                       comp[name] = value;
+               }
+               if (comp is IMXMLObject)
+                       comp.initialized(document, id);
+               return comp;
+       }
+
+       public function generateMXMLArray(document:Object, data:Array,
recursive:Boolean = true):Array
+       {
+               var comps:Array = [];
+
+               var n:int = data.length;
+               var i:int = 0;
+               while (i < n)
+               {
+                      var cls:Class = data[i++];
+                       var comp:Object = new cls);
+
+                       var m:int;
+                       var j:int;
+                      var name:String;
+                       var simple:*;
+                       var value:Object;
+                       var id:String = null;
+
+                       m = data[i++]; // num props
+                       for (j = 0; j < m; j++)
+                       {
+                               name = data[i++];
+                               simple = data[i++];
+                               value = data[i++];
+                               if (simple == null)
+                                       value = generateMXMLArray(document,
value as Array, recursive);
+                               else if (simple == false)
+                                       value = generateMXMLObject(document,
value as Array);
+                               if (name == "id")
+                                       id = value as String;
+                               if (name == "document" && !comp.document)
+                                       comp.document = document;
+                               else if (name == "_id")
+                                       id = value as String; // and don't
assign to comp
+                               else
+                                       comp[name] = value;
+                       }
+                       m = data[i++]; // num styles
+                       for (j = 0; j < m; j++)
+                       {
+                               name = data[i++];
+                               simple = data[i++];
+                               value = data[i++];
+                              if (simple == null)
+                                       value = generateMXMLArraydocument,
value as Array, recursive);
+                               else if (simple == false)
+                                       value = generateMXMLObject(document,
value as Array);
+                               comp.setStyle(name, value);
+                       }
+
+                       m = data[i++]; // num effects
+                       for (j = 0; j < m; j++)
+                       {
+                               name = data[i++];
+                               simple = data[i++];
+                               value = data[i++];
+                               if (simple == null)
+                                       value = generateMXMLArray(document,
value as Array, recursive);
+                               else if (simple == false)
+                                       value = generateMXMLObject(document,
value as Array);
+                               comp.setStyle(name, value);
+                       }
+
+                      m = data[i++]; // num events
+                       for (j = 0; j < m; j++)
+                      {
+                               name = data[i++];
+                               value = data[i++];
+                               comp.addEventListener(name value);
+                       }
+
+                       var children:Array = data[i++];
+                      if (children)
+                       {
+                               if (recursive)
+                                       comp.generateMXMLInstances(document,
children, recursive);
+                               else
+                                       comp.setMXMLDescriptor(children);
+
+
+                       if (id)
+                       {
+                              document[id] = comp;
+
mx.binding.BindingManager.executeBindings(document, id, comp);
+                       }
+                      if (comp is IMXMLObject)
+                               comp.initialized(document, id);
+                       comps.push(comp);
+               }
+               return comps;
+       }
+
+       protected function generateMXMLInstances(document:Object,
data:Array, recursive:Boolean = true):void
+       {
+               var comps:Array = generateMXMLArray(document, data,
recursive);
+               addMXMLChildren(comps);
+       }
+
+       protected function generateMXMLAttributes(data:Array):vid
+       {
+               var i:int = 0;
+               var m:int;
+               var j:int;
+               var name:String;
+               var simple:*;
+               var value:Object;
+               var id:String = null;
+
+               m = data[i++]; // num props
+               for (j = 0; j < m; j++)
+               {
+                       name = data[i++];
+                       simple = data[i++];
+                       value = data[i++];
+                       if (simple == null)
+                               value = generateMXMLArray(this, value as
Array, false);
+                       else if (simple == false)
+                               value = generateMXMLObject(this, value as
Array);
+                       if (name == "id")
+                               id = value as String;
+                       if (name == "_id")
+                              id = value as String; // and don't assign
+                       else
+                               this[name] = value;
+               }
+              m = data[i++]; // num styles
+               for (j = 0; j < m; j++)
+
+                       name = data[i++];
+                       simple = ata[i++];
+                       value = data[i++];
+                      if (simple == null)
+                               value = generateMXMLAray(this, value as
Array, false);
+                       else if (simple == false)
+                              value = generateMXMLObject(this, value as
Array);
+                       this.setStyle(name, value);
+               }
+
+               m = data[i++]; // num effects
+               for (j = 0; j < m; j++)
+               {
+                       name = data[i++];
+                       simple = data[i++];
+                       value = data[i++];
+                       if (simple == null)
+                               value = generateMXMLArray(this, value as
Array, false);
+                       else if (simple == false)
+                               value = generateMXMLObject(this, value as
Array);
+                       this.setStyle(name, value);
+               }
+
+               m = data[i++]; // num events
+               for (j = 0; j < m; j++)
+              {
+                       name = data[i++];
+                       value = data[i++];
+                      this.addEventListener(name, value as Function);
+               }
+       }

     /**
      *  Performs any final procesing after child objects are created.

Modified:
incubator/flex/sdk/branches/develop/framworks/projects/framework/src/mx/sta
tes/AddItems.as
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/
projects/framewor/src/mx/states/AddItems.as?rev=1418430&r1=1418429&r2=14184
30&view=diff
===========================================================================
==
---
icubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/sta
tes/AddItems.as (origial)
+++
incubator/flex/sdk/branches/develop/frameworks/projects/framework/src/mx/sta
tes/ddItems.as Fri Dec  7 18:48:26 2012
@@ -26,10 +26,12 @@ import mx.collection.IList;
 import mx.core.ContainerCreationPolicy;
 import mx.core.IChildList;
 import mx.core.IDeferredContentOwner
+import mx.core.IMXMLObject;
 import mx.core.ITransientDeferredInstance; import mx.core.IVisualElement;
 import mx.core.IVisualElementContainer;
 import mx.core.UIComponent;
+import mx.binding.BindingManager;

 [DefaultProperty("itemsFactory")]

@@ -41,7 +43,7 @@ import mx.core.UIComponent;
  *  @playerversion AIR 1.5
  *  @productversion Flex 4
  */
-public class AddItems extends OverrideBase
+public class AddItems extends OverrideBase implements IMXMLObject
 {
     include "../core/Version.as";

@@ -116,6 +118,8 @@ public class AddItems extends OverrideBa
     //

//--------------------------------------------------------------------------

+       private var document:Object;
+
     /**
      *  @private
      */
@@ -309,6 +313,52 @@ public class AddItems extends OverrideBa
         _items = value;
     }

+       //------------------------------------
+       //  itemsDescriptor
+       //------------------------------------
+
+       /**
+        *  @private
+        *  Storage for the itemsDescriptor prperty.
+        */
+       private var _itemsDescriptor:Array;
+
+       [Inspectable(category="General")]
+
+       /**
+        *
+        * The descriptor tha describes the items.
+        *
+        *  <p>If you set this property, the items are instantiated at the
time
+        *  determinedby the <code>creationPolicy</code> property.</p>
+        *
+        *  <p>Do not set this property if you set the <code>items</code>
+        *  property.
+        *  This propety is the <code>AddItems</code> class default
property.
+        *  Setting this propertywith a <code>creationPolicy</code> of
"all"
+        *  is equivalent to setting a <code>items</code> property.</p>
+        *
+        *  @langversion 3.0
+        *  @playerversion Flash 10
+        *  @playerversion AIR 1.5
+        *  @productversion Flex 4
+        */
+       public function get itemsDescriptor():Array
+       {
+               return _itemsDescriptor;
+       }
+
+       /**
+        *  @private
+        */
+       public function set itemsDescriptor(value:Array):void
+       {
+               _itemsDescriptor = value;
+
+               if (creationPolicy == ContainerCreationPolicy.ALL)
+                       createInstance();
+       }
+
     //------------------------------------
     //  itemsFactory
     //------------------------------------
@@ -489,12 +539,133 @@ pblic class AddItems extends OverrideBa
      */
     public funtion createInstance():void
     {
-        if (!instanceCreated && !_items && itemsFactory)
+       if (!instanceCreated && !_items && itemsFactory &&
!_itemsDescriptor)
        {
             instanceCreated = true;
             items = itemsFactory.getInstance();
         }
-    }
+               else if (!instanceCreated && !_items && !itemsFactory &&
_itemsDescriptor)
+               {
+                       instanceCreated = true;
+                      items = generateMXMLArray(itemsDescriptor, false);
+              }
+       }
+
+       protected function generateMXMLObject(data:Array):Object
+       {+               var i:int = 0;
+               var cls:Class = data[i++];
+              var comp:Object = new cls();
+
+               var m:int;
+               var j:int;
+               var name:String;
+               var simple:*;
+               var value:Object;
+               var id:String;
+
+               m = data[i++]; // num props
+              for (j = 0; j < m; j++)
+               {
+                      name = data[i++];
+                       simple = data[i++];
+                       value = data[++];
+                       if (simple == null)
+                               value = generateMXMLArray(value as Array);
+                       else if (simple == false)
+                               value = generateMXMLObject(value as Array);
+                       comp[name] = value;
+               }
+               return comp;
+       }
+
+       // varis slightly from version in UIComponent in how it handles
documents
+      public function generateMXMLArray(data:Array, recursive:Boolean =
true):Array
+       {
+              var comps:Array = [];
+
+               var n:int = data.length;
+               var i:int = 0;
+               while (i < n)
+               {
+                       var cls:Class = data[i++];
+                       var comp:Object = new cls();
+
+                       var m:int;
+                       var j:int;
+                       var name:String;
+                      var simple:*;
+                       var value:Obect;
+                       var id:String = null;
+
+                       m = data[i++]; // num rops
+                       for (j = 0; j < m; j++)
+                       {
+                               name = data[i++];
+                               simple = data[i++];
+                               value = data[i++];
+                               if (simple == null)
+                                       value = generateMXMLArray(value as
Array, recursiv);
+                               else if (simple == false)
+                                      value = generateMXMLObject(value as
Array);
+                              if (name == "id")
+                                       id = value as String;
+                               if (name == "_id")
+                                       id = value as String; // and don't
assign to comp
+                               else
+                                       comp[name] = value;
+                       }
+                       m = dta[i++]; // num styles
+                       for (j = 0; j < m; j++)
                       {
+                               name = data[i++];
+                              simple = data[i++];
+                               value = data[i++];
+                               if (simple == null)
+                                       value = generateMXMLArray(value as
Array, recursive);
+                               else if simple == false)
+                                       valu = generateMXMLObject(value as
Array);
+                               comp.setStyle(name, vlue);
+                       }
+
+                       m = data[i++]; / num effects
+                       for (j = 0; j < m; j++)
+                       {
+                               name = data[i++];
+                               simple = data[i++];
+                               value = data[i++];
+                               if (simple == null)
+                                       value = generateMXMLArray(value as
Array, recursive);
+                               else if (simple == false)
+                                       value = generateMXMLObject(value as
Array);
+                               comp.setStyle(name, value);
+                       }
+
+                       m = data[i++]; // num events
+                       for (j = 0; j < m; j++)
+                       {
+                               name = data[i++];
+                               value = data[i++];
+                               comp.addEventListener(name, value);
+                       }
+
+                       var children:Array = data[i++];
+                      if (children)
+                       {
+                               if (recursive)
+                                       comp.generateMXMLInstances(cildren,
recursive);
+                               else
+                                       comp.setMXMLDescriptor(children);
+                      }
+                       if (id)
+                       {
+                               document[id] = comp;
+
mx.binding.BindingManager.executeBindings(document, id, comp);
+                       }
+                       cops.push(comp);
+               }
+               return comps;
+       }

     /**
      *  @inheritDoc
@@ -907,6 +1078,15 @@ public class AddItems extends OverrideBa
             _waitingForDeferredContent = false;
         }
     }
+
+       /**
+        *  IMXMLObject support
+        */
+       public function initialized(document:Object, id:String):void
+       {
+               this.document = document;
+       }
+
 }

 }

Modified:
incubator/flex/sdk/branches/develop/frameworks/projects/mx/src/mx/containers
/ViewStack.as
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/
projects/mx/src/mx/containers/ViewStack.as?rev=1418430&r1=1418429&r2=1418430
&view=diff
============================================================================
==
---
incubator/flexsdk/branches/develop/frameworks/projects/mx/src/mx/containers
/iewStack.as (original)
+++
incubator/flex/sdk/branches/develop/frameworks/projects/mx/src/mx/contaners
/ViewStack.as Fri Dec  7 18:48:26 2012
@@ -736,6 +736,15 @@ public clas ViewStack extends Container
     //

//--------------------------------------------------------------------------

+       /**
+        *  @private
+        */
+       override protected function generateMXMLInstances(document:Object,
data:Array, recursive:Boolean = true):vod
+       {
+               // in theory, creationpolicy gets aplied later
+               super.generateMXMLInstances(document, data, false);
+       }
+
     /*
      *  @private
      */

Modified:
incubator/flex/sdk/branches/developframeworks/projects/mx/src/mx/core/Conta
iner.as
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/
projects/mx/src/mx/core/Container.as?rev=1418430&r1=1418429&r2=1418430&view=
diff
===========================================================================
==
---
incubator/flex/sdk/branches/develop/frameworks/projectsmx/src/mx/core/Conta
iner.as (original)
+++
incubator/flex/sdk/branches/develop/frameworks/project/mx/src/mx/core/Conta
iner.as Fri Dec  7 18:48:26 2012
@@ -4219,7 +4219,11 @@ public class Container extends UICompone
      */
     public function createDeferredContent():void
     {
-        createComponentsFromDescriptors(true);
+               var children:Array =  this.MXMLDescriptor;
+               if (children)
+                       generateMXMLInstances(ocument, children);
+               else
+                       creaeComponentsFromDescriptors(true);
     }

    /**

Modified:
incubator/flex/sdk/branches/develop/fameworks/projects/spark/build.xml
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/
projects/spark/build.xml?rev=1418430&r1=1418429&r2=1418430&view=diff
============================================================================
==
--- incubator/flex/sdk/branches/develop/frameworks/projects/spark/build.xml
(original)
+++ incubator/flex/dk/branches/develop/frameworks/projects/spark/build.xml
Fri Dec  7 18:4:26 2012
@@ -229,7 +229,6 @@
                output="${FLEX_HOME}/frameworks/libs/spark.swc">
            <jvmarg line="${compc.jvm.args}"/>
             <load-config filename="compile-config.xml" />
-            <include-file name="version.properties"
path="${FLEX_HOME}/frameworks/version.properties"/>
             <arg value="+playerglobal.version=${playerglobal.version}" />
             <arg value="+env.PLAYERGLOBAL_HOME=${env.PLAYERGLOBAL_HOME}" />
         </compc

Modified:
incubator/flex/sdk/branches/develop/frameworks/projects/sprk/compile-config
.xml
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameorks/
projects/spark/compile-config.xml?rev=1418430&r1=1418429&r2=1418430&view=dif
f
============================================================================
==
---
incubator/flex/sdk/branches/develop/frameworks/projects/spark/compile-config
.xml (original)
+++
incubator/flex/sdk/branches/develop/frameworks/projects/spark/compile-config
.xml Fri Dec  7 18:48:26 2012
@@ 60,6 +60,11 @@
     </include-classes>

     <include-file>
+        <nme>version.properties</name>
+        <path>../../version.properties</path>
+    </include-file>
+
    <include-file>
         <name>defaults.css</name>
         <path>defaults.css</path>
     </include-file>

Modified:
incubator/flex/sdk/branches/develop/frameworks/projects/spark/src/spark/comp
onents/Group.as
URL:
http://svn.apache.org/viewvc/incubator/fle/sdk/branches/develop/frameworks/
projects/spark/src/spark/coponents/Group.as?rev=1418430&r1=1418429&r2=14184
30&view=diff
===========================================================================
==
---
incubator/flex/sdk/ranches/develop/frameworks/projects/spark/src/spark/comp
onents/Group.as (original)
+++
incubator/flex/sdk/branches/develop/frameworks/projects/spark/src/spark/comp
onents/Group.as Fri Dec  7 18:48:26 2012
@@ -547,6 +547,14 @@ public class Group extends GroupBase imp
         }
     }

+       /**
+        *  override setting of children
+        */
+       override protected function addMXMLChildren(comps:Array):void
+       {
+               mxmlContent = comps;
+       }
+
     //----------------------------------
     //  mxmlContent
     //----------------------------------

Modified:
incubator/flex/sdk/branches/develop/frameworks/projects/spark/src/spark/comp
onents/SkinnableContainer.as
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/
projects/spark/src/spark/components/SkinnableContainer.as?rev=1418430&r1=141
8429&r2=1418430&view=diff
============================================================================
==
---
incubator/flex/sdk/branches/develop/frmeworks/projects/spark/src/spark/comp
onents/SkinnableContainer.as (original)
+++
incubator/flex/sdk/branches/develop/frameworks/projects/spark/src/spark/comp
oents/SkinnableContainer.as Fri Dec  7 18:48:26 2012
@@ -672,6 +672,14 @@ public class SkinnableContainer extends
             _contentMdified = true;
     }

+       /**
+        *  override setting of children
+        */
+       override protected function addMXMLChildren(comps:Array):void
+       {
+               mxmlContent = comps;
+       }
+
     //----------------------------------
     // mxmlContentFactory
     //----------------------------------
@@ -873,7 +881,18 @@ public class SkinnableContainer extends
     //

//--------------------------------------------------------------------------

-    /**
+       private var creatingChildren:Boolean;
+
+       override protected function generateMXMLInstances(document:Object,
data:Array, recursive:Boolean = true):void
+       {
+               // don't generate children during super.createChildren
+               if (creatingChildren)
+                       return;
+
+               super.generateMXMLInstances(document, data, recursive);
+       }
+
+           /**
      *  Create content children, if the <code>creationPolicy</code>
property
      *  is not equal to <code>none</code>.
      *
@@ -884,7 +903,9 @@ public class kinnableContainer extends
      */
     override protected funcion createChildren():void
     {
-        super.createChildren();
+               creatingChildren  true;
+               super.createChildren();
+               creatingChilren = false;

         // TODO (rfrishbe): When navigator support is added, this is where
we would
         // determine if content should be created now, or wait until
@@ -1048,7 +1069,17 @@ public class SkinnableContainer extends
      */
     public function createDeferredConten():void
     {
-        if (!mxmlContentCreated)
+              var children:Array =  this.MXMLDescriptor;
+               if (children)
+               {
+                      generateMXMLInstances(document, children);
+                       mxmlContentCreated = true; // keep the code from
recursing back into here.
+                       _deferredContentCreated = true;
+                       dispatchEvent(new
FlexEvent(FlexEvent.CONTENT_CREATION_COMPLETE));
+                       return;
+               }
+
+               if (!mxmlContentCreated)
         {
             mxmlContentCreated = true;


Modified:
incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/BasicTests-c
onfig.xml
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/
tests/basicTests/BasicTests-config.xml?rev=1418430&r1=1418429&r2=1418430&vie
w=diff
============================================================================
==
---
incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/BasicTests-c
onfig.xml (original)
+++
incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/BasicTests-c
onfig.xml Fri Dec  7 18:48:26 2012
@@ -96,6 +96,7 @@
         From mustella.swc
     -->
         <symbol>ExitWhenDone</symbol>
+        <symbol>SetShowRTE</symbol>
         <symbol>SendFormattedResultsToLog</symbol>
     </includes>
 </flex-config>

Modified:
incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/basicLoader.
as
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/
tests/basicTests/basicLoader.as?rev=1418430&r1=1418429&r2=1418430&view=diff
============================================================================
==
---
incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/basicLoader.
as (original)
+++
incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/basicLoader.
as Fri Dec  7 18:48:26 2012
@@ -33,8 +33,8 @@ public class basicLoader extends MovieCl
                super();

                text = new TextField();
-               text.width = stage.stageWidth;
-               text.height = stage.stageHeight;
+               text.width = 176;
+               text.height = 81;

                var tf:TextFormat;
                tf = new TextFormat;

Modified:
incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/halo/scripts
/SWFLoaderTestScript.mxml
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/frameworks/
tests/basicTests/halo/scripts/SWFLoaderTestScript.mxml?rev=1418430&r1=141842
9&r2=1418430&view=diff
============================================================================
==
---
incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/halo/scripts
/SWFLoaderTestScript.mxml (original)
+++
incubator/flex/sdk/branches/develop/frameworks/tests/basicTests/halo/scripts
/SWFLoaderTestScript.mxml Fri Dec  7 18:48:26 2012
@@ -51,7 +51,7 @@
                </TestCase>
                <TestCase testID="SWFLoaderTest1">
                        <body>
-                               <AssertPixelValue
target="haloSWFLoaderTests.testLoader" x="10" y="10" value="0x0066CC" />
+                               <AssertPixelValue
target="haloSWFLoaderTests.testLoader" x="10" y="10" value="0xFF9933" />
                        </body>
                </TestCase>
        </testCases>

Modified:
incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/AIR/CompareBit
map.as
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/as
3/src/mustella/AIR/CompareBitmap.as?rev=1418430&r1=1418429&r2=1418430&view=d
iff
============================================================================
==
---
incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/AIR/CompareBit
map.as (original)
+++
incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/AIR/CompareBit
map.as Fri Dec  7 18:48:26 2012
@@ -23,9 +23,13 @@ import flash.events.*;
 import flash.filesystem.*;
 import flash.net.*;
 import flash.text.*;
+import flash.text.engine.*;
+import flash.geom.ColorTransform;
 import flash.utils.*;
 import flash.filesystem.*;
 import flash.geom.*;
+import mx.core.IChildList;
+import mx.core.IRawChildrenContainer;
 import mx.core.mx_internal;
 use namespace mx_internal;

@@ -55,6 +59,11 @@ use namespace mx_internal;
 public class CompareBitmap extends Assert
 {
        public static var useRemoteDiffer:Boolean = false;
+
+       private static var useDisplayListCompare:Boolean = true;
+
+       private static var identityMatrix:String = new Matrix().toString();
+       private static var identityColorTransform:String = new
ColorTransform().toString();

        public static var DEFAULT_MAX_COLOR_VARIANCE:int = 0;
        public static var DEFAULT_NUM_COLOR_VARIANCES:int = 0;
@@ -135,6 +144,7 @@ public class CompareBitmap extends Asser
        public static var fileSuffix:String = "";

        private var reader:Loader;
+       private var xmlreader:URLLoader;
        private var writer:URLLoader;

        private static var connection:LocalConnection;
@@ -268,7 +278,7 @@ public class CompareBitmap extends Asser
                                }
                        }

-                       writePNG(actualTarget);
+                       writeBaselines(actualTarget);
                        return false;
                }
                else
@@ -360,6 +370,9 @@ public class CompareBitmap extends Asser
        private var MAX_LC:int = 12000;
        private var screenBits:BitmapData;
        private var baselineBits:BitmapData;
+
+       private var compareVal:Object;
+
        public function comparePNG(target:DisplayObject):Boolean
        {
                if (UnitTester.checkEmbeddedFonts)
@@ -371,6 +384,21 @@ public class CompareBitmap extends Asser
                        }
                }

+               if (useDisplayListCompare)
+               {
+                       var s:String =
getDisplayListXML(target).toXMLString();
+                       if (s !== xmlreader.data)
+                       {
+                               testResult.doFail ("compare returned" +
compareVal, absolutePathResult(url) + ".bad.xml");
+
+                               if (fileSuffix != "")
+                               {
+                                       writePNG (target);
+                               }
+                       }
+                       return true;
+               }
+
                if (!reader.content)
                {
                        testResult.doFail ("baseline image not available");
@@ -384,7 +412,7 @@ public class CompareBitmap extends Asser
                        baselineBits = new BitmapData(reader.content.width,
reader.content.height);
                        baselineBits.draw(reader.content, new Matrix());

-                       var compareVal:Object = baselineBits.compare
(screenBits);
+                       compareVal = baselineBits.compare (screenBits);

                        if (compareVal is BitmapData && numColorVariances) {
                                compareVal = compareWithVariances(compareVal
as BitmapData)
@@ -392,18 +420,19 @@ public class CompareBitmap extends Asser

                        if (compareVal != 0)
                        {
-                               testResult.doFail ("compare returned" +
compareVal, absolutePathResult(url) + ".bad.png");
-
-
-                               if (useRemoteDiffer)
-                               {
-                                       sendImagesToDiffer();
-                                       return false;
-                               } else if (fileSuffix != "") {
-                                       writePNG (target);
-                               }
+                               var req:URLRequest = new URLRequest();
+
+                               trace ("compare returned" + compareVal);
+
+                               req.url += ".xml";
+                               xmlreader = new URLLoader();
+                               xmlreader.addEventListener(Event.COMPLETE,
readXMLCompleteHandler);
+
xmlreader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
readErrorHandler);
+
xmlreader.addEventListener(IOErrorEvent.IO_ERROR, readXMLIOErrorHandler);
+                               xmlreader.load (req);
+                               return false;
                        }
-               }
+               }
                catch (e:Error)
                {
                        testResult.doFail (e.getStackTrace());
@@ -411,6 +440,40 @@ public class CompareBitmap extends Asser
                return true;
        }

+       private function readXMLCompleteHandler(event:Event):void
+       {
+               var actualTarget:DisplayObject =
DisplayObject(context.stringToObject(target));
+               var s:String =
getDisplayListXML(actualTarget).toXMLString();
+               if (s !== xmlreader.data)
+               {
+                       testResult.doFail ("compare returned" + compareVal,
absolutePathResult(url) + ".bad.png");
+
+                       if (useRemoteDiffer)
+                       {
+                               sendImagesToDiffer();
+                       }
+                       else if (fileSuffix != "")
+                       {
+                               writeBaselines (actualTarget);
+                       }
+               else
+                       stepComplete();
+       }
+
+       private function readXMLIOErrorHandler(event:Event):void
+       {
+               if (useRemoteDiffer)
+               {
+                       sendImagesToDiffer();
+               }
+               else if (fileSuffix != "")
+               {
+                       testResult.doFail ("compare returned" + compareVal,
absolutePathResult(url) + ".bad.png");
+                       var actualTarget:DisplayObject =
DisplayObject(context.stringToObject(target));
+                       writePNG (actualTarget);
+               }
+       }
+
        private function mergeSandboxBitmap(target:DisplayObject, pt:Point,
bm:BitmapData, obj:Object):void
        {
                var targetSize:Point = getTargetSize(target);
@@ -532,22 +595,17 @@ public class CompareBitmap extends Asser

        public function readPNG():void
        {
-               reader = new Loader();
-               reader.contentLoaderInfo.addEventListener(Event.COMPLETE,
readCompleteHandler);
-
reader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
readErrorHandler);
-
reader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,
readErrorHandler);
-
                var req:URLRequest = new URLRequest();
                var ba:ByteArray = null;
                var file:File;
-
+
                // If iOS and AIR, let's try using file I/O instead of
loader stuff. AIR on devices can be a pain with the url stuff.
                if( UnitTester.isApollo && (UnitTester.cv.os.toLowerCase()
== DeviceNames.IOS.toLowerCase()) ){
                        // Trim the leading ../ if we have it.
                        if ( url.indexOf ("../") == 0 ){
                                url = url.substring (3);
                        }
-
+
                        file = File.documentsDirectory.resolvePath( url );

                        if( !file.exists ){
@@ -574,12 +632,18 @@ public class CompareBitmap extends Asser
                                }
                                req.url = encodeURI2(base + "/" + req.url);
                        }
-                       //      req.url = encodeURI2(url);
-                       // }
+               }
+
+               reader = new Loader();
+               reader.contentLoaderInfo.addEventListener(Event.COMPLETE,
readCompleteHandler);
+
reader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
readErrorHandler);
+
reader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,
readErrorHandler);
+               //      req.url = encodeURI2(url);
+               // }
+
+               trace ("readPNG:requesting url: " + req.url);
+               reader.load (req);

-                       trace ("readPNG:requesting url: " + req.url);
-                       reader.load (req);
-               }
        }


@@ -624,10 +688,60 @@ public class CompareBitmap extends Asser
        }


-       public function writePNG(target:DisplayObject):void
+       public function writeBaselines(target:DisplayObject,
writeDisplayList:Boolean = true):void
        {
-               var ba:ByteArray = getPngByteArray(target, screenBits);
-
+               var req:URLRequest = new URLRequest();
+               writer = new URLLoader();
+               req.method = "POST";
+
+               /**
+                * either we got called here to write new baselines
+                * or to save a .bad.png for investigation
+                * in addition, with failures, we upload baseline and
failure to a server
+                */
+               if (UnitTester.createBitmapReferences)
+               {
+                       fileSuffix = "";
+               }
+
+
+               if (writeDisplayList)
+               {
+                       var s:String =
getDisplayListXML(target).toXMLString();
+                       // request data goes on the URL Request
+                       req.data = s;
+
+                       req.contentType = "text/xml";
+                       if (UnitTester.isApollo)
+                       {
+                               req.url =
encodeURI2(UnitTester.bitmapServerPrefix + adjustWriteURI(adjustPath(url)))
+ fileSuffix + ".xml";
+                       } else
+                       {
+                               req.url =
encodeURI2(UnitTester.bitmapServerPrefix + absolutePath(url)) + fileSuffix +
".xml";
+                       }
+                       trace ("writing url: " + req.url);
+                       writer.addEventListener(Event.COMPLETE,
writeXMLCompleteHandler);
+
writer.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
writeErrorHandler);
+                       writer.addEventListener(IOErrorEvent.IO_ERROR,
writeErrorHandler);
+
+                       writer.load (req);
+               }
+       }
+
+       private function writeXMLCompleteHandler(event:Event):void
+       {
+               var actualTarget:DisplayObject =
DisplayObject(context.stringToObject(target));
+               writePNG(actualTarget);
+       }
+
+       private function writePNG(target:DisplayObject):void
+       {
+               var req:URLRequest = new URLRequest();
+               writer = new URLLoader();
+               req.method = "POST";
+
+               var ba:ByteArray = getPngByteArray(target, screenBits);
+               trace ("image size: " + ba.length);

                if( UnitTester.createBitmapReferences ){
                        fileSuffix = "";
@@ -733,8 +847,7 @@ public class CompareBitmap extends Asser
        private function writeCompleteHandler(event:Event):void
        {
                trace("baseline write successful " + event);
-               if (UnitTester.createBitmapReferences)
-                       stepComplete();
+               stepComplete();
        }

        private function uploadCompleteHandler(event:Event):void
@@ -991,6 +1104,157 @@ public class CompareBitmap extends Asser


        }
+
+       /****** DisplayList Comparision ******/
+       protected function getDisplayListProperties(d:DisplayObject,
noMask:Boolean = false):XML
+       {
+               var xml:XML;
+               var n:int;
+               var i:int;
+               var childXML:XML;
+               var s:String = getQualifiedClassName(d);
+               s = s.replace("::", ".");
+               xml = new XML("<" + s + "/>");
+               s = d.transform.concatenatedColorTransform.toString();
+               if (s != identityColorTransform)
+                       xml.@concatenatedColorTransform = s;
+               if (d.transform.matrix)
+               {
+                       s = d.transform.matrix.toString();
+                       if (s != identityMatrix)
+                       {
+                               if (s.indexOf("(a=1, b=0, c=0, d=1, ") ==
-1)
+                                       xml.@matrix = s;
+                       }
+               }
+               else
+               {
+                       s = d.transform.matrix3D.rawData.toString();
+                       xml.@matrix3D = s;
+               }
+               if (d.x != 0)
+                       xml.@x = d.x;
+               if (d.y != 0)
+                       xml.@y = d.y;
+               xml.@width = d.width;
+               xml.@height = d.height;
+               if (xml.visible == false)
+                       xml.@visible = "false";
+               if (d.mask && !noMask)
+               {
+                       xml.mask = <mask/>;
+                       childXML = getDisplayListProperties(d.mask, true);
+                       xml.mask.appendChild = childXML;
+               }
+               if (d.scrollRect)
+               {
+                       s = d.scrollRect.toString();
+                       xml.@scrollRect = s;
+               }
+               if (d.blendMode && d.blendMode != "normal")
+                       xml.@blendMode = d.blendMode;
+               if (d.cacheAsBitmap)
+                       xml.@cacheAsBitmap = "true";
+               if (d.filters && d.filters.length > 0)
+               {
+                       s = d.filters.toString();
+                       xml.@filters = s;
+               }
+               if (d.opaqueBackground)
+                       xml.@opaqueBackground = "true";
+               if (d.scale9Grid)
+               {
+                       s = d.scale9Grid.toString();
+                       xml.@scale9Grid = s;
+               }
+               if (d is TextField)
+               {
+                       xml.htmlText = TextField(d).htmlText;
+               }
+               if (d is Loader &&
Loader(d).contentLoaderInfo.contentType.indexOf("image") != -1)
+               {
+                       s = Loader(d).contentLoaderInfo.url;
+                       s = s.substring(s.lastIndexOf("/") + 1);
+                       xml.@loaderbitmap = s;
+               }
+               if (d is TextLine)
+               {
+                       var tl:TextLine = TextLine(d);
+                       xml.@ascent = tl.ascent;
+                       xml.@descent = tl.descent;
+                       xml.@atomCount = tl.atomCount;
+                       xml.@hasGraphicElement = tl.hasGraphicElement;
+                       if (tl.textBlock)
+                       {
+                               var tb:TextBlock = TextLine(d).textBlock;
+                               var ce:ContentElement = tb.content;
+                               s =
ce.rawText.substr(tl.textBlockBeginIndex, tl.rawTextLength);
+                               xml.@text = s;
+                       }
+               }
+
+               if (d is IRawChildrenContainer)
+               {
+                       var rawChildren:IChildList =
IRawChildrenContainer(d).rawChildren;
+                       n = rawChildren.numChildren;
+                       for (i = 0; i < n; i++)
+                       {
+                               childXML =
getDisplayListProperties(rawChildren.getChildAt(i));
+                               xml.appendChild(childXML);
+                       }
+               }
+               else if (d is DisplayObjectContainer)
+               {
+                       var doc:DisplayObjectContainer = d as
DisplayObjectContainer;
+                       n = doc.numChildren;
+                       for (i = 0; i < n; i++)
+                       {
+                               childXML =
getDisplayListProperties(doc.getChildAt(i));
+                               xml.appendChild(childXML);
+                       }
+               }
+               return xml;
+       }
+
+       // scan entire display list, but only dump objects intersecting
target
+       protected function getDisplayListXML(target:DisplayObject):XML
+       {
+               var n:int;
+               var i:int;
+               var child:DisplayObject;
+               var childXML:XML;
+
+               var doc:DisplayObjectContainer =
DisplayObjectContainer(target.root);
+               var xml:XML = <DisplayList />;
+               if (doc is IRawChildrenContainer)
+               {
+                       var rawChildren:IChildList =
IRawChildrenContainer(doc).rawChildren;
+                       n = rawChildren.numChildren;
+                       for (i = 0; i < n; i++)
+                       {
+                               child = rawChildren.getChildAt(i);
+                               if (target.hitTestObject(child))
+                               {
+                                       childXML =
getDisplayListProperties(child);
+                                       xml.appendChild(childXML);
+                               }
+                       }
+               }
+               else
+               {
+                       n = doc.numChildren;
+                       for (i = 0; i < n; i++)
+                       {
+                               child = doc.getChildAt(i);
+                               if (target.hitTestObject(child))
+                               {
+                                       childXML =
getDisplayListProperties(child);
+                                       xml.appendChild(childXML);
+                               }
+                       }
+               }
+               return xml;
+       }
 }

 }

Modified:
incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/CompareBitmap.
as
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/as
3/src/mustella/CompareBitmap.as?rev=1418430&r1=1418429&r2=1418430&view=diff
============================================================================
==
---
incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/CompareBitmap.
as (original)
+++
incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/CompareBitmap.
as Fri Dec  7 18:48:26 2012
@@ -24,9 +24,13 @@ import flash.net.*;
 import flash.events.*;
 import flash.display.*;
 import flash.text.*;
+import flash.text.engine.*;
+import flash.geom.ColorTransform;
 import flash.geom.Matrix;
 import flash.geom.Point;
 import flash.geom.Rectangle;
+import mx.core.IChildList;
+import mx.core.IRawChildrenContainer;
 import mx.core.mx_internal;
 use namespace mx_internal;

@@ -57,7 +61,10 @@ use namespace mx_internal;
 public class CompareBitmap extends Assert
 {
        public static var useRemoteDiffer:Boolean = false;
-
+
+       private static var identityMatrix:String = new Matrix().toString();
+       private static var identityColorTransform:String = new
ColorTransform().toString();
+
        public static var DEFAULT_MAX_COLOR_VARIANCE:int = 0;
        public static var DEFAULT_NUM_COLOR_VARIANCES:int = 0;

@@ -136,6 +143,7 @@ public class CompareBitmap extends Asser
        public static var fileSuffix:String = "";

        private var reader:Loader;
+       private var xmlreader:URLLoader;
        private var writer:URLLoader;

        private static var connection:LocalConnection;
@@ -275,7 +283,7 @@ public class CompareBitmap extends Asser
                                }
                        }

-                       writePNG(actualTarget);
+                       writeBaselines(actualTarget);
                        return false;
                }
                else
@@ -352,6 +360,8 @@ public class CompareBitmap extends Asser
        private var MAX_LC:int = 12000;
        private var screenBits:BitmapData;
        private var baselineBits:BitmapData;
+
+       private var compareVal:Object;

        public function comparePNG(target:DisplayObject):Boolean
        {
@@ -374,7 +384,7 @@ public class CompareBitmap extends Asser
                        testResult.doFail ("CompareBitmap BIG FAIL! Content
reader is null!");
                        return true;
                }
-
+
                getScreenBits(target);

                try
@@ -382,30 +392,67 @@ public class CompareBitmap extends Asser
                        baselineBits = new BitmapData(reader.content.width,
reader.content.height);
                        baselineBits.draw(reader.content, new Matrix());

-                       var compareVal:Object = baselineBits.compare
(screenBits);
+                       compareVal = baselineBits.compare (screenBits);

                        if (compareVal is BitmapData && numColorVariances)
                                compareVal = compareWithVariances(compareVal
as BitmapData)

                        if (compareVal != 0)
                        {
-                               testResult.doFail ("compare returned" +
compareVal, absolutePathResult(url) + ".bad.png");
-
-                               if (useRemoteDiffer)
-                               {
-                                       sendImagesToDiffer();
-                                       return false;
-                               } else if (fileSuffix != "") {
-                                       writePNG (target);
-                               }
+                               var req:URLRequest = new URLRequest();
+
+                               trace ("compare returned" + compareVal);
+
+                               req.url += ".xml";
+                               xmlreader = new URLLoader();
+                               xmlreader.addEventListener(Event.COMPLETE,
readXMLCompleteHandler);
+
xmlreader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
readErrorHandler);
+
xmlreader.addEventListener(IOErrorEvent.IO_ERROR, readXMLIOErrorHandler);
+                               xmlreader.load (req);
+                               return false;
                        }
-               }
+               }
                catch (e:Error)
                {
                        testResult.doFail (e.getStackTrace());
                }
                return true;
        }
+
+       private function readXMLCompleteHandler(event:Event):void
+       {
+               var actualTarget:DisplayObject =
DisplayObject(context.stringToObject(target));
+               var s:String =
getDisplayListXML(actualTarget).toXMLString();
+               if (s !== xmlreader.data)
+               {
+                       testResult.doFail ("compare returned" + compareVal,
absolutePathResult(url) + ".bad.png");
+
+                       if (useRemoteDiffer)
+                       {
+                               sendImagesToDiffer();
+                       }
+                       else if (fileSuffix != "")
+                       {
+                               writeBaselines (actualTarget);
+                       }
+               }
+               else
+                       stepComplete();
+       }
+
+       private function readXMLIOErrorHandler(event:Event):void
+       {
+               if (useRemoteDiffer)
+               {
+                       sendImagesToDiffer();
+               }
+               else if (fileSuffix != "")
+               {
+                       testResult.doFail ("compare returned" + compareVal,
absolutePathResult(url) + ".bad.png");
+                       var actualTarget:DisplayObject =
DisplayObject(context.stringToObject(target));
+                       writePNG (actualTarget);
+               }
+       }

        private function mergeSandboxBitmap(target:DisplayObject, pt:Point,
bm:BitmapData, obj:Object):void
        {
@@ -501,31 +548,33 @@ public class CompareBitmap extends Asser

        public function readPNG():void
        {
-               reader = new Loader();
                var req:URLRequest = new URLRequest();
                if (UnitTester.isApollo)
                {
                        req.url = encodeURI2(CompareBitmap.adjustPath
(url));
-               } else
-                {
-                        req.url = url;
-                        var base:String =
normalizeURL(context.application.url);
-                        base = base.substring(0, base.lastIndexOf("/"));
-                        while (req.url.indexOf("../") == 0)
-                        {
-                                base = base.substring(0,
base.lastIndexOf("/"));
-                                req.url = req.url.substring(3);
-                        }
+               }
+               else
+        {
+            req.url = url;
+            var base:String = normalizeURL(context.application.url);
+            base = base.substring(0, base.lastIndexOf("/"));
+            while (req.url.indexOf("../") == 0)
+            {
+                    base = base.substring(0, base.lastIndexOf("/"));
+                    req.url = req.url.substring(3);
+            }

-                        req.url = encodeURI2(base + "/" + req.url);
-                }
+            req.url = encodeURI2(base + "/" + req.url);
+        }
                //      req.url = encodeURI2(url);
                // }

+               reader = new Loader();
+
                trace ("readPNG:requesting url: " + req.url);
-               reader.contentLoaderInfo.addEventListener(Event.COMPLETE,
readCompleteHandler);
-
reader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
readErrorHandler);
-
reader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,
readErrorHandler);
+       reader.contentLoaderInfo.addEventListener(Event.COMPLETE,
readCompleteHandler);
+
reader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
readErrorHandler);
+       reader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,
readErrorHandler);

                reader.load (req);
        }
@@ -556,27 +605,66 @@ public class CompareBitmap extends Asser
                return ba;
        }

-       public function writePNG(target:DisplayObject):void
+       public function writeBaselines(target:DisplayObject,
writeDisplayList:Boolean = true):void
        {
-
-               var ba:ByteArray = getPngByteArray(target, screenBits);
-               trace ("image size: " + ba.length);
-
-
+               var req:URLRequest = new URLRequest();
+               writer = new URLLoader();
+               req.method = "POST";
+
                /**
                 * either we got called here to write new baselines
-                * or to save a .bad.png for investigation
+                * or to save a .bad.png for investigation
                 * in addition, with failures, we upload baseline and
failure to a server
-                */
+                */
                if (UnitTester.createBitmapReferences)
                {
                        fileSuffix = "";
                }
+

-
-               writer = new URLLoader();
+               if (writeDisplayList)
+               {
+                       var s:String =
getDisplayListXML(target).toXMLString();
+                       // request data goes on the URL Request
+                       req.data = s;
+
+                       req.contentType = "text/xml";
+                       if (UnitTester.isApollo)
+                       {
+                               req.url =
encodeURI2(UnitTester.bitmapServerPrefix + adjustWriteURI(adjustPath(url)))
+ fileSuffix + ".xml";
+                       } else
+                       {
+                               req.url =
encodeURI2(UnitTester.bitmapServerPrefix + absolutePath(url)) + fileSuffix +
".xml";
+                       }
+                       trace ("writing url: " + req.url);
+                       writer.addEventListener(Event.COMPLETE,
writeXMLCompleteHandler);
+
writer.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
writeErrorHandler);
+                       writer.addEventListener(IOErrorEvent.IO_ERROR,
writeErrorHandler);
+
+                       writer.load (req);
+               }
+       }
+
+       private function writeXMLCompleteHandler(event:Event):void
+       {
+               var actualTarget:DisplayObject =
DisplayObject(context.stringToObject(target));
+               writePNG(actualTarget);
+       }
+
+       private function writePNG(target:DisplayObject):void
+       {
                var req:URLRequest = new URLRequest();
+               writer = new URLLoader();
                req.method = "POST";
+
+               var ba:ByteArray = getPngByteArray(target, screenBits);
+               trace ("image size: " + ba.length);
+               // request data goes on the URL Request
+               req.data = ba;
+               // can't send this, don't need to anyway var rhArray:Array =
new Array(new URLRequestHeader("Content-Length", new String(ba.length) ));
+
+               req.contentType = "image/png";
+
                if (UnitTester.isApollo)
                {
                        req.url = encodeURI2(UnitTester.bitmapServerPrefix +
adjustWriteURI(adjustPath(url))) + fileSuffix;
@@ -585,16 +673,12 @@ public class CompareBitmap extends Asser
                        req.url = encodeURI2(UnitTester.bitmapServerPrefix +
absolutePath(url)) + fileSuffix;
                }
                trace ("writing url: " + req.url);
-               writer.addEventListener(Event.COMPLETE,
writeCompleteHandler);
-               writer.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
writeErrorHandler);
-               writer.addEventListener(IOErrorEvent.IO_ERROR,
writeErrorHandler);
-
-               // request data goes on the URL Request
-               req.data = ba;
-               // can't send this, don't need to anyway var rhArray:Array =
new Array(new URLRequestHeader("Content-Length", new String(ba.length) ));
-
-               req.contentType = "image/png";
+               writer.addEventListener(Event.COMPLETE,
writeCompleteHandler);
+               writer.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
writeErrorHandler);
+               writer.addEventListener(IOErrorEvent.IO_ERROR,
writeErrorHandler);
+
                writer.load (req);
+

                /// If this is about creating bitmaps, skip the upload,
we're done
                if (UnitTester.createBitmapReferences || UnitTester.run_id
== "-1" || baselineMissing)
@@ -672,11 +756,8 @@ public class CompareBitmap extends Asser
                if( baselineMissing ){
                        baselineMissing = false;
                        testResult.doFail( baselineMissingMessage );
-                       stepComplete();
-               }else{
-                       if (UnitTester.createBitmapReferences)
-                               stepComplete();
                }
+               stepComplete();
        }

        private function uploadCompleteHandler(event:Event):void
@@ -965,6 +1046,157 @@ public class CompareBitmap extends Asser


        }*/
+
+       /****** DisplayList Comparision ******/
+       protected function getDisplayListProperties(d:DisplayObject,
noMask:Boolean = false):XML
+       {
+               var xml:XML;
+               var n:int;
+               var i:int;
+               var childXML:XML;
+               var s:String = getQualifiedClassName(d);
+               s = s.replace("::", ".");
+               xml = new XML("<" + s + "/>");
+               s = d.transform.concatenatedColorTransform.toString();
+               if (s != identityColorTransform)
+                       xml.@concatenatedColorTransform = s;
+               if (d.transform.matrix)
+               {
+                       s = d.transform.matrix.toString();
+                       if (s != identityMatrix)
+                       {
+                               if (s.indexOf("(a=1, b=0, c=0, d=1, ") ==
-1)
+                                       xml.@matrix = s;
+                       }
+               }
+               else
+               {
+                       s = d.transform.matrix3D.rawData.toString();
+                       xml.@matrix3D = s;
+               }
+               if (d.x != 0)
+                       xml.@x = d.x;
+               if (d.y != 0)
+                       xml.@y = d.y;
+               xml.@width = d.width;
+               xml.@height = d.height;
+               if (xml.visible == false)
+                       xml.@visible = "false";
+               if (d.mask && !noMask)
+               {
+                       xml.mask = <mask/>;
+                       childXML = getDisplayListProperties(d.mask, true);
+                       xml.mask.appendChild = childXML;
+               }
+               if (d.scrollRect)
+               {
+                       s = d.scrollRect.toString();
+                       xml.@scrollRect = s;
+               }
+               if (d.blendMode && d.blendMode != "normal")
+                       xml.@blendMode = d.blendMode;
+               if (d.cacheAsBitmap)
+                       xml.@cacheAsBitmap = "true";
+               if (d.filters && d.filters.length > 0)
+               {
+                       s = d.filters.toString();
+                       xml.@filters = s;
+               }
+               if (d.opaqueBackground)
+                       xml.@opaqueBackground = "true";
+               if (d.scale9Grid)
+               {
+                       s = d.scale9Grid.toString();
+                       xml.@scale9Grid = s;
+               }
+               if (d is TextField)
+               {
+                       xml.htmlText = TextField(d).htmlText;
+               }
+               if (d is Loader &&
Loader(d).contentLoaderInfo.contentType.indexOf("image") != -1)
+               {
+                       s = Loader(d).contentLoaderInfo.url;
+                       s = s.substring(s.lastIndexOf("/") + 1);
+                       xml.@loaderbitmap = s;
+               }
+               if (d is TextLine)
+               {
+                       var tl:TextLine = TextLine(d);
+                       xml.@ascent = tl.ascent;
+                       xml.@descent = tl.descent;
+                       xml.@atomCount = tl.atomCount;
+                       xml.@hasGraphicElement = tl.hasGraphicElement;
+                       if (tl.textBlock)
+                       {
+                               var tb:TextBlock = TextLine(d).textBlock;
+                               var ce:ContentElement = tb.content;
+                               s =
ce.rawText.substr(tl.textBlockBeginIndex, tl.rawTextLength);
+                               xml.@text = s;
+                       }
+               }
+
+               if (d is IRawChildrenContainer)
+               {
+                       var rawChildren:IChildList =
IRawChildrenContainer(d).rawChildren;
+                       n = rawChildren.numChildren;
+                       for (i = 0; i < n; i++)
+                       {
+                               childXML =
getDisplayListProperties(rawChildren.getChildAt(i));
+                               xml.appendChild(childXML);
+                       }
+               }
+               else if (d is DisplayObjectContainer)
+               {
+                       var doc:DisplayObjectContainer = d as
DisplayObjectContainer;
+                       n = doc.numChildren;
+                       for (i = 0; i < n; i++)
+                       {
+                               childXML =
getDisplayListProperties(doc.getChildAt(i));
+                               xml.appendChild(childXML);
+                       }
+               }
+               return xml;
+       }
+
+       // scan entire display list, but only dump objects intersecting
target
+       protected function getDisplayListXML(target:DisplayObject):XML
+       {
+               var n:int;
+               var i:int;
+               var child:DisplayObject;
+               var childXML:XML;
+
+               var doc:DisplayObjectContainer =
DisplayObjectContainer(target.root);
+               var xml:XML = <DisplayList />;
+               if (doc is IRawChildrenContainer)
+               {
+                       var rawChildren:IChildList =
IRawChildrenContainer(doc).rawChildren;
+                       n = rawChildren.numChildren;
+                       for (i = 0; i < n; i++)
+                       {
+                               child = rawChildren.getChildAt(i);
+                               if (target.hitTestObject(child))
+                               {
+                                       childXML =
getDisplayListProperties(child);
+                                       xml.appendChild(childXML);
+                               }
+                       }
+               }
+               else
+               {
+                       n = doc.numChildren;
+                       for (i = 0; i < n; i++)
+                       {
+                               child = doc.getChildAt(i);
+                               if (target.hitTestObject(child))
+                               {
+                                       childXML =
getDisplayListProperties(child);
+                                       xml.appendChild(childXML);
+                               }
+                       }
+               }
+               return xml;
+       }
 }

 }

Modified:
incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/ResetComponent
.as
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/as
3/src/mustella/ResetComponent.as?rev=1418430&r1=1418429&r2=1418430&view=diff
============================================================================
==
---
incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/ResetComponent
.as (original)
+++
incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/ResetComponent
.as Fri Dec  7 18:48:26 2012
@@ -48,11 +48,12 @@ public class ResetComponent extends Test
     private static var effectsInEffect:QName = new QName(mx_internal,
"effectsInEffect");
     private static var activeTweens:QName = new QName(mx_internal,
"activeTweens");
     private static var tooltipReset:QName = new QName(mx_internal,
"reset");
+       private static var resetFocusOnCleanup:Boolean = true;

     private var actualWaitEvent:String;

     private var waited:Boolean = false;
-
+
     /**
      *  Called by the TestCase when it is time to start this step
      *  fake waitEvent because we don't want to listen to the old one
@@ -328,11 +329,14 @@ public class ResetComponent extends Test
         r = root;
         r = root["topLevelSystemManager"];

-        UnitTester.blockFocusEvents = false;
-        r.stage.focus = null;
-        UnitTester.blockFocusEvents = true;
-
-        n = r.numChildren;
+               if (resetFocusOnCleanup)
+               {
+               UnitTester.blockFocusEvents = false;
+               r.stage.focus = null;
+               UnitTester.blockFocusEvents = true;
+               }
+
+               n = r.numChildren;
         for (i = 0; i < n; i++)
         {
             if (context.knownDisplayObjects[r.getChildAt(i)] == null)
@@ -349,7 +353,7 @@ public class ResetComponent extends Test
                 n--;
             }
         }
-
+
         r = root;
         r = root["topLevelSystemManager"];
         r = r.popUpChildren;

Modified:
incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/UnitTester.as
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/as
3/src/mustella/UnitTester.as?rev=1418430&r1=1418429&r2=1418430&view=diff
============================================================================
==
---
incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/UnitTester.as
(original)
+++
incubator/flex/sdk/branches/develop/mustella/as3/src/mustella/UnitTester.as
Fri Dec  7 18:48:26 2012
@@ -1873,6 +1873,8 @@ public class UnitTester extends EventDis
                                var tr:TestResult = currentTest.testResult;
                                if (!tr.hasStatus())
                                        tr.result = TestResult.PASS;
+                               if (hasRTE)
+                                       tr.result = TestResult.FAIL;
                                tr.endTime = new Date().time;
                                TestOutput.logResult (tr.toString());
                                if (hasRTE)

Modified:
incubator/flex/sdk/branches/develop/mustella/java/src/mustella/Runner.java
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/ja
va/src/mustella/Runner.java?rev=1418430&r1=1418429&r2=1418430&view=diff
============================================================================
==
---
incubator/flex/sdk/branches/develop/mustella/java/src/mustella/Runner.java
(original)
+++
incubator/flex/sdk/branches/develop/mustella/java/src/mustella/Runner.java
Fri Dec  7 18:48:26 2012
@@ -338,6 +338,7 @@ public class Runner {
                }

                try {
+                       System.out.println ("Step Timeout: " +
System.getProperty ("step_timeout"));
                        step_timeout = Long.parseLong (System.getProperty
("step_timeout"));
                        if (step_timeout < 1000)
                                step_timeout = step_timeout*1000;
@@ -623,7 +624,7 @@ public class Runner {
                                        break;
                        }

-                       // System.out.println ("RUNNER HAS THIS TO DO: " +
args[0]);
+                       System.out.println ("RUNNER HAS THIS TO DO: " +
args[i]);


                        seenEnd = false;
@@ -1093,6 +1094,7 @@ public class Runner {


        public static String normalizeDirOS(String dir, boolean
apollo_adjust) {
+                       System.out.println ("normalizeDirOS: " + dir);
                        if (dir==null) dir=".";
                        try {
                        dir=new File(dir).getCanonicalPath();
@@ -1665,6 +1667,8 @@ public class Runner {
                                String [] whatever = {""};
                                lastTestCaseStart = "";
                                seenEnd = false;
+
+                               try { Thread.sleep (1000); } catch
(Exception e) { }

                                if(!getResultsFromLog)
                                        manageMetaTimer("process start");

Modified:
incubator/flex/sdk/branches/develop/mustella/tests/components/VideoDisplay/M
ethods/VideoMethodTester.mxml
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/te
sts/components/VideoDisplay/Methods/VideoMethodTester.mxml?rev=1418430&r1=14
18429&r2=1418430&view=diff
============================================================================
==
---
incubator/flex/sdk/branches/develop/mustella/tests/components/VideoDisplay/M
ethods/VideoMethodTester.mxml (original)
+++
incubator/flex/sdk/branches/develop/mustella/tests/components/VideoDisplay/M
ethods/VideoMethodTester.mxml Fri Dec  7 18:48:26 2012
@@ -73,7 +73,7 @@
                 <SetProperty target="vd" propertyName="source"
value="assets/video.flv" waitEvent="ready" waitTarget="vd" />
             </setup>
             <body>
-               <AssertPropertyValue target="vd" propertyName="state"
value="buffering" />
+               <AssertPropertyValue target="vd" propertyName="state"
value="playing" />
                                <AssertEvent target="vd"
eventName="stateChange" eventClass="mx.events::VideoEvent"
numExpectedEvents="-1" />
                                <AssertPropertyValue target="vd"
propertyName="state" value="playing" />
                 <RunCode code="application.vd.pause();"
waitEvent="stateChange" waitTarget="vd" />

Modified:
incubator/flex/sdk/branches/develop/mustella/tests/components/VideoDisplay/P
roperties/VideoPropertyTester.mxml
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/te
sts/components/VideoDisplay/Properties/VideoPropertyTester.mxml?rev=1418430&
r1=1418429&r2=1418430&view=diff
============================================================================
==
---
incubator/flex/sdk/branches/develop/mustella/tests/components/VideoDisplay/P
roperties/VideoPropertyTester.mxml (original)
+++
incubator/flex/sdk/branches/develop/mustella/tests/components/VideoDisplay/P
roperties/VideoPropertyTester.mxml Fri Dec  7 18:48:26 2012
@@ -75,7 +75,7 @@
                 <AssertPropertyValue target="vd" propertyName="state"
value="buffering" />
                 -->
                 <AssertEvent target="vd" eventName="stateChange"
eventClass="mx.events::VideoEvent" numExpectedEvents="1" />
-                <AssertPropertyValue target="vd" propertyName="state"
value="playing" />
+                <AssertPropertyValue target="vd" propertyName="state"
value="loading" />
             </body>
         </TestCase>

@@ -217,7 +217,7 @@
                <AssertPropertyValue target="vd" propertyName="state"
value="buffering" />
                -->
                                <AssertEvent target="vd"
eventName="stateChange" eventClass="mx.events::VideoEvent"
numExpectedEvents="-1" />
-                <AssertPropertyValue target="vd" propertyName="state"
value="playing" />
+                <AssertPropertyValue target="vd" propertyName="state"
value="loading" />
                 <RunCode code="application.vd.pause();"
waitEvent="stateChange" waitTarget="vd" />
                 <AssertPropertyValue target="vd" propertyName="state"
value="paused" />
                 <RunCode code="application.vd.play()"
waitEvent="stateChange" waitTarget="vd" />

Modified:
incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/S
WFs/comps/button_gif_runtime.mxml
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/te
sts/containers/tabnavigator/SWFs/comps/button_gif_runtime.mxml?rev=1418430&r
1=1418429&r2=1418430&view=diff
============================================================================
==
---
incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/S
WFs/comps/button_gif_runtime.mxml (original)
+++
incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/S
WFs/comps/button_gif_runtime.mxml Fri Dec  7 18:48:26 2012
@@ -18,6 +18,28 @@

 -->
 <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">
+       <mx:Script>
+               <![CDATA[
+                       private function airify(s:String):String
+                       {
+                               if
(ApplicationDomain.currentDomain.hasDefinition("flash.filesystem.File"))
+                               {
+                                       var c:Class =
Class(ApplicationDomain.currentDomain.getDefinition("flash.filesystem.File")
);
+                                       var f:Object =
c.applicationDirectory;
+                                       var p:String = f.nativePath;
+                                       while (s.indexOf("../") == 0)
+                                       {
+                                               var dot:int =
p.lastIndexOf("/");
+                                               p = p.substr(0, dot);
+                                               s = s.substr(3);
+                                       }
+                                       f.nativePath = p + "/" + s;
+                                       return f.url;
+                               }
+                               return s;
+                       }
+               ]]>
+       </mx:Script>
        <mx:states>
                <mx:State name="notBase">
                        <mx:RemoveChild target="{baseButton}"/>
@@ -25,40 +47,40 @@
                <mx:State name="up" />
                <mx:State name="over" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonOver.gif"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonOver.gif')}"
maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="down" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonDown.gif"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonDown.gif')}"
maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="disabled" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonDisabled.gif"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonDisabled.gif')
}" maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="selectedUp" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonSelectedUp.gif"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedUp.gif
')}" maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="selectedOver" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonSelectedOver.gif"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedOver.g
if')}" maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="selectedDown" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonSelectedDown.gif"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedDown.g
if')}" maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="selectedDisabled" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonSelectedDown.gif"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedDown.g
if')}" maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
        </mx:states>

-       <mx:Image id="baseButton"
source="../../../../Assets/Images/ButtonImages/buttonUp.gif"
maintainAspectRatio="false"  width="100%" height="100%"/>
+       <mx:Image id="baseButton"
source="{airify('../../../../Assets/Images/ButtonImages/buttonUp.gif')}"
maintainAspectRatio="false"  width="100%" height="100%"/>
 </mx:Canvas>
\ No newline at end of file

Modified:
incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/S
WFs/comps/button_jpg_runtime.mxml
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/te
sts/containers/tabnavigator/SWFs/comps/button_jpg_runtime.mxml?rev=1418430&r
1=1418429&r2=1418430&view=diff
============================================================================
==
---
incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/S
WFs/comps/button_jpg_runtime.mxml (original)
+++
incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/S
WFs/comps/button_jpg_runtime.mxml Fri Dec  7 18:48:26 2012
@@ -18,6 +18,28 @@

 -->
 <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">
+       <mx:Script>
+               <![CDATA[
+                       private function airify(s:String):String
+                       {
+                               if
(ApplicationDomain.currentDomain.hasDefinition("flash.filesystem.File"))
+                               {
+                                       var c:Class =
Class(ApplicationDomain.currentDomain.getDefinition("flash.filesystem.File")
);
+                                       var f:Object =
c.applicationDirectory;
+                                       var p:String = f.nativePath;
+                                       while (s.indexOf("../") == 0)
+                                       {
+                                               var dot:int =
p.lastIndexOf("/");
+                                               p = p.substr(0, dot);
+                                               s = s.substr(3);
+                                       }
+                                       f.nativePath = p + "/" + s;
+                                       return f.url;
+                               }
+                               return s;
+                       }
+               ]]>
+       </mx:Script>
        <mx:states>
                <mx:State name="notBase">
                        <mx:RemoveChild target="{baseButton}"/>
@@ -25,39 +47,39 @@
                <mx:State name="up" />
                <mx:State name="over" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonOver.jpg"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonOver.jpg')}"
maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="down" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonDown.jpg"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonDown.jpg')}"
maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="disabled" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonDisabled.jpg"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonDisabled.jpg')
}" maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="selectedUp" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonSelectedUp.jpg"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedUp.jpg
')}" maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="selectedOver" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonSelectedOver.jpg"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedOver.j
pg')}" maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="selectedDown" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonSelectedDown.jpg"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedDown.j
pg')}" maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="selectedDisabled" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonSelectedDown.jpg"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedDown.j
pg')}" maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
        </mx:states>
-       <mx:Image id="baseButton"
source="../../../../Assets/Images/ButtonImages/buttonUp.jpg"
maintainAspectRatio="false"  width="100%" height="100%"/>
+       <mx:Image id="baseButton"
source="{airify('../../../../Assets/Images/ButtonImages/buttonUp.jpg')}"
maintainAspectRatio="false"  width="100%" height="100%"/>
 </mx:Canvas>
\ No newline at end of file

Modified:
incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/S
WFs/comps/button_png_runtime.mxml
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/te
sts/containers/tabnavigator/SWFs/comps/button_png_runtime.mxml?rev=1418430&r
1=1418429&r2=1418430&view=diff
============================================================================
==
---
incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/S
WFs/comps/button_png_runtime.mxml (original)
+++
incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/S
WFs/comps/button_png_runtime.mxml Fri Dec  7 18:48:26 2012
@@ -18,6 +18,28 @@

 -->
 <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">
+       <mx:Script>
+               <![CDATA[
+                       private function airify(s:String):String
+                       {
+                               if
(ApplicationDomain.currentDomain.hasDefinition("flash.filesystem.File"))
+                               {
+                                       var c:Class =
Class(ApplicationDomain.currentDomain.getDefinition("flash.filesystem.File")
);
+                                       var f:Object =
c.applicationDirectory;
+                                       var p:String = f.nativePath;
+                                       while (s.indexOf("../") == 0)
+                                       {
+                                               var dot:int =
p.lastIndexOf("/");
+                                               p = p.substr(0, dot);
+                                               s = s.substr(3);
+                                       }
+                                       f.nativePath = p + "/" + s;
+                                       return f.url;
+                               }
+                               return s;
+                       }
+               ]]>
+       </mx:Script>
        <mx:states>
                <mx:State name="notBase">
                        <mx:RemoveChild target="{baseButton}"/>
@@ -25,39 +47,39 @@
                <mx:State name="up" />
                <mx:State name="over" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonOver.png"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonOver.png')}"
maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="down" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonDown.png"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonDown.png')}"
maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="disabled" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonDisabled.png"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonDisabled.png')
}" maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="selectedUp" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonSelectedUp.png"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedUp.png
')}" maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="selectedOver" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonSelectedOver.png"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedOver.p
ng')}" maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="selectedDown" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonSelectedDown.png"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedDown.p
ng')}" maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="selectedDisabled" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image
source="../../../../Assets/Images/ButtonImages/buttonSelectedDown.png"
maintainAspectRatio="false" width="100%" height="100%"/>
+                               <mx:Image
source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedDown.p
ng')}" maintainAspectRatio="false" width="100%" height="100%"/>
                        </mx:AddChild>
                </mx:State>
        </mx:states>
-       <mx:Image id="baseButton"
source="../../../../Assets/Images/ButtonImages/buttonUp.png"
maintainAspectRatio="false"  width="100%" height="100%"/>
+       <mx:Image id="baseButton"
source="{airify('../../../../Assets/Images/ButtonImages/buttonUp.png')}"
maintainAspectRatio="false"  width="100%" height="100%"/>
 </mx:Canvas>
\ No newline at end of file

Modified:
incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/S
WFs/comps/button_swf_runtime.mxml
URL:
http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/mustella/te
sts/containers/tabnavigator/SWFs/comps/button_swf_runtime.mxml?rev=1418430&r
1=1418429&r2=1418430&view=diff
============================================================================
==
---
incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/S
WFs/comps/button_swf_runtime.mxml (original)
+++
incubator/flex/sdk/branches/develop/mustella/tests/containers/tabnavigator/S
WFs/comps/button_swf_runtime.mxml Fri Dec  7 18:48:26 2012
@@ -18,6 +18,28 @@

 -->
 <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">
+       <mx:Script>
+               <![CDATA[
+                       private function airify(s:String):String
+                       {
+                               if
(ApplicationDomain.currentDomain.hasDefinition("flash.filesystem.File"))
+                               {
+                                       var c:Class =
Class(ApplicationDomain.currentDomain.getDefinition("flash.filesystem.File")
);
+                                       var f:Object =
c.applicationDirectory;
+                                       var p:String = f.nativePath;
+                                       while (s.indexOf("../") == 0)
+                                       {
+                                               var dot:int =
p.lastIndexOf("/");
+                                               p = p.substr(0, dot);
+                                               s = s.substr(3);
+                                       }
+                                       f.nativePath = p + "/" + s;
+                                       return f.url;
+                               }
+                               return s;
+                       }
+               ]]>
+       </mx:Script>
        <mx:states>
                <mx:State name="notBase">
                        <mx:RemoveChild target="{baseButton}"/>
@@ -25,48 +47,48 @@
                <mx:State name="up" />
                <mx:State name="over" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image id="overImage"
source="../../../../Assets/Images/ButtonImages/buttonOver.swf"
+                               <mx:Image id="overImage"
source="{airify('../../../../Assets/Images/ButtonImages/buttonOver.swf')}"
                           maintainAspectRatio="false" width="100%"
height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="down" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image id="downImage"
source="../../../../Assets/Images/ButtonImages/buttonDown.swf"
+                               <mx:Image id="downImage"
source="{airify('../../../../Assets/Images/ButtonImages/buttonDown.swf')}"
                           maintainAspectRatio="false" width="100%"
height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="disabled" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image id="disabledImage"
source="../../../../Assets/Images/ButtonImages/buttonDisabled.swf"
+                               <mx:Image id="disabledImage"
source="{airify('../../../../Assets/Images/ButtonImages/buttonDisabled.swf')
}"
                           maintainAspectRatio="false" width="100%"
height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="selectedUp" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image id="selectedUpImage"
source="../../../../Assets/Images/ButtonImages/buttonSelectedUp.swf"
+                               <mx:Image id="selectedUpImage"
source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedUp.swf
')}"
                           maintainAspectRatio="false" width="100%"
height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="selectedOver" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image id="selectedOverImage"
source="../../../../Assets/Images/ButtonImages/buttonSelectedOver.swf"
+                               <mx:Image id="selectedOverImage"
source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedOver.s
wf')}"
                           maintainAspectRatio="false" width="100%"
height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="selectedDown" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image id="selectedDownImage"
source="../../../../Assets/Images/ButtonImages/buttonSelectedDown.swf"
+                               <mx:Image id="selectedDownImage"
source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedDown.s
wf')}"
                           maintainAspectRatio="false" width="100%"
height="100%"/>
                        </mx:AddChild>
                </mx:State>
                <mx:State name="selectedDisabled" basedOn="notBase">
                        <mx:AddChild creationPolicy="all">
-                               <mx:Image id="selectedDisabledImage"
source="../../../../Assets/Images/ButtonImages/buttonSelectedDown.swf"
+                               <mx:Image id="selectedDisabledImage"
source="{airify('../../../../Assets/Images/ButtonImages/buttonSelectedDown.s
wf')}"
                           maintainAspectRatio="false" width="100%"
height="100%"/>
                        </mx:AddChild>
                </mx:State>
        </mx:states>

-       <mx:Image id="baseButton"
source="../../../../Assets/Images/ButtonImages/buttonUp.swf"
+       <mx:Image id="baseButton"
source="{airify('../../../../Assets/Images/ButtonImages/buttonUp.swf')}"
               maintainAspectRatio="false" width="100%" height="100%"/>
 </mx:Canvas>
\ No newline at end of file



------ End of Forwarded Message