fix compilation error introduced by #447

--- src/org/mangui/hls/controller/LevelController.as
+++ src/org/mangui/hls/controller/LevelController.as
@@ -2,6 +2,7 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 package org.mangui.hls.controller {
+    import flash.display.Stage;
     import org.mangui.hls.constant.HLSLoaderTypes;
     import org.mangui.hls.constant.HLSMaxLevelCappingMode;
     import org.mangui.hls.event.HLSEvent;
@@ -190,13 +191,25 @@
                 var maxLevelsCount : int = _maxUniqueLevels.length;

                 if (_hls.stage && maxLevelsCount) {
-                    var maxLevel : Level = this._maxUniqueLevels[0],
-                    maxLevelIdx : int = maxLevel.index,
-                    sWidth : Number = this._hls.stage.contentsScaleFactor ? this._hls.stage.stageWidth * this._hls.stage.contentsScaleFactor : this._hls.stage.stageWidth,
-                    sHeight : Number = this._hls.stage.contentsScaleFactor ? this._hls.stage.stageHeight * this._hls.stage.contentsScaleFactor : this._hls.stage.stageHeight,
-                    lWidth : int,
-                    lHeight : int,
+                    var maxLevel : Level = this._maxUniqueLevels[0],
+                    maxLevelIdx : int = maxLevel.index,
+                    stage : Stage = _hls.stage,
+                    sWidth : Number = stage.stageWidth,
+                    sHeight : Number = stage.stageHeight,
+                    lWidth : int,
+                    lHeight : int,
                     i : int;
+
+                   // retina display support
+                   // contentsScaleFactor was added in FP11.5, but this allows us to include the option in all builds
+                    try {
+                        var contentsScaleFactor : int =  stage['contentsScaleFactor'];
+                        sWidth*=contentsScaleFactor;
+                        sHeight*=contentsScaleFactor;
+                    } catch(e : Error) {
+                       // Ignore errors, we're running in FP < 11.5
+                    }
+

                     switch (HLSSettings.maxLevelCappingMode) {
                         case HLSMaxLevelCappingMode.UPSCALE:


takes tab focus into account when counting viewable intervals

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/tpeace/set_openvv.git/'


add reference test

add reference test

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/noikiy/amfphp-2.0.git/'


An adapter for a ClientObserver.

An adapter for a ClientObserver.

git-svn-id: a1a4b28b82a3276cc491891159dd9963a0a72fae@4293 542714f4-19e9-0310-aa3c-eee0fc999fb1

error: pathspec 'src/as/com/threerings/presents/client/ClientAdapter.as' did not match any file(s) known to git

--- src/as/com/threerings/presents/client/ClientAdapter.as
+++ src/as/com/threerings/presents/client/ClientAdapter.as
@@ -0,0 +1,88 @@
+package com.threerings.presents.client {
+
+public class ClientAdapter
+    implements ClientObserver
+{
+    public function ClientAdapter (
+            clientDidLogon :Function = null,
+            clientObjectDidChange :Function = null,
+            clientDidLogoff :Function = null,
+            clientFailedToLogon :Function = null,
+            clientConnectionFailed :Function = null,
+            clientWillLogoff :Function = null,
+            clientDidClear :Function = null)
+    {
+        _clientDidLogon = clientDidLogon;
+        _clientObjectDidChange = clientObjectDidChange;
+        _clientDidLogoff = clientDidLogoff;
+        _clientFailedToLogon = clientFailedToLogon;
+        _clientConnectionFailed = clientConnectionFailed;
+        _clientWillLogoff = clientWillLogoff;
+        _clientDidClear = clientDidClear;
+    }
+
+    // from ClientObserver
+    public function clientDidLogon (event :ClientEvent) :void
+    {
+        if (_clientDidLogon != null) {
+            _clientDidLogon(event);
+        }
+    }
+
+    // from ClientObserver
+    public function clientObjectDidChange (event :ClientEvent) :void
+    {
+        if (_clientObjectDidChange != null) {
+            _clientObjectDidChange(event);
+        }
+    }
+
+    // from ClientObserver
+    public function clientDidLogoff (event :ClientEvent) :void
+    {
+        if (_clientDidLogoff != null) {
+            _clientDidLogoff(event);
+        }
+    }
+
+    // from ClientObserver
+    public function clientFailedToLogon (event :ClientEvent) :void
+    {
+        if (_clientFailedToLogon != null) {
+            _clientFailedToLogon(event);
+        }
+    }
+
+    // from ClientObserver
+    public function clientConnectionFailed (event :ClientEvent) :void
+    {
+        if (_clientConnectionFailed != null) {
+            _clientConnectionFailed(event);
+        }
+    }
+
+    // from ClientObserver
+    public function clientWillLogoff (event :ClientEvent) :void
+    {
+        if (_clientWillLogoff != null) {
+            _clientWillLogoff(event);
+        }
+    }
+
+    // from ClientObserver
+    public function clientDidClear (event :ClientEvent) :void
+    {
+        if (_clientDidClear != null) {
+            _clientDidClear(event);
+        }
+    }
+
+    protected var _clientDidLogon :Function;
+    protected var _clientObjectDidChange :Function;
+    protected var _clientDidLogoff :Function;
+    protected var _clientFailedToLogon :Function;
+    protected var _clientConnectionFailed :Function;
+    protected var _clientWillLogoff :Function;
+    protected var _clientDidClear :Function;
+}
+}


removing useless method call

removing useless method call

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/rafaelcordoba/cocktail-demo.git/'


removing speedbutton class

removing speedbutton class

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/jkanchelov/VideoPoker.git/'


Transferred from the Adobe Open Source Subversion Repository

Revision: 10633
Author:   dloverin@adobe.com
Date:     2009-09-28T13:24:30.559033Z

Log Message:
-----------
Use styleManager instance instead of StyleManager singleton (framework and compiler generated code)

Modified compiler generated style code for the FlexInit class. The style related changes are only available with the -keep option. AST generation is coming later.

Only the framework project is changed here. The other projects are will be changed soon.

QE notes: None.
Doc notes: None.
Bugs:
Reviewer: Alex and Paul
Tests run: checkintests, all Mustella tests(no new failures)
Is noteworthy for integration: no.

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/ButtonBarButtonSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/HaloBorder.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/accordionClasses/AccordionHeader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/utilityClasses/CanvasLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/ButtonBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/DateChooser.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/dragClasses/DragProxy.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/ScrollArrowSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/Container.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/ButtonSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/configuration_en.properties</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/common/CompilerConfiguration.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/ProgressIndeterminateSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/DateChooserMonthArrowSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/mxml/lang/StandardDefs.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/SliderThumbSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/DateField.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/DividedBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/DragManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/Application.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/ScrollThumbSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/dataGridClasses/DataGridColumn.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/StyleManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/IStyleModule.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/listClasses/ListBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/Form.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/IStyleManager2.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/ComboBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/tools/PreLink.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/StyleManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Label.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/DataGrid.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/mxml/gen/ClassDefLib.vm</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/ProgressTrackSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/TitleBackground.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/NumericStepperDownSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/PopUpButtonSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/ProgrammaticSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/TabSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/textClasses/TextRange.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/LayoutContainer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/AccordionHeaderSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/CheckBoxIcon.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/NumericStepperUpSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/RadioButtonIcon.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UITextField.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/states/SetStyle.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/ComboBoxArrowSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/dataGridClasses/DataGridHeaderBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/FormItem.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UIComponent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/dataGridClasses/DataGridHeader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/MenuBarBackgroundSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/ProgressBarSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/SWFLoader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/BusyCursor.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/events/Request.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/MenuBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Tree.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/CSSStyleDeclaration.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/Accordion.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/SliderTrackSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/StyleProtoChain.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/List.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/css/StyleModule.vm</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/ScrollTrackSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/listClasses/TileBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/dataGridClasses/DataGridItemRenderer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/DataGridHeaderBackgroundSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/CursorManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/modules/ModuleManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/effectClasses/SetStyleActionInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/css/StyleDef.vm</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1262415 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/framework/src/mx/states/SetStyle.as
+++ frameworks/projects/framework/src/mx/states/SetStyle.as
@@ -17,6 +17,8 @@
 import mx.core.UIComponent;
 import mx.styles.IStyleClient;
 import mx.styles.StyleManager;
+import mx.core.IFlexModule;
+import mx.styles.IStyleManager2;

 /**
  *  The SetStyle class specifies a style that is in effect only during the parent view state.
@@ -304,7 +306,13 @@
 	            // backgroundColor.
                 if (name.toLowerCase().indexOf("color") != -1)
                 {
-	                obj.setStyle(name, StyleManager.getColorName(value));
+                    var styleManager:IStyleManager2;
+                    if (obj is UIComponent)
+                        styleManager = UIComponent(obj).styleManager;
+                    else
+                        styleManager = parent.styleManager;
+
+	                obj.setStyle(name, styleManager.getColorName(value));
                 }
                 else if (value is String &&
                          String(value).lastIndexOf("%") ==


objectHasMethod() no longer uses describeType().

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/eric-stanley/robotlegs-framework.git/'


Support rgb colors using % format.

Support rgb colors using % format.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/leymannx/svgweb.git/'


adding Binds classe in the pre-processor, upgrading the bind-plugging flow.


add example to show how to slow down the server and what happen when client block

git-svn-id: 44dac414ef660a76a1e627c7b7c0e36d248d62e4@27 c2cce57b-6cbb-4450-ba62-5fdab5196ef5

error: pathspec 'src/corsaair/server/spitfire/SimpleSocketServerSelect3.as' did not match any file(s) known to git

--- src/corsaair/server/spitfire/SimpleSocketServerSelect3.as
+++ src/corsaair/server/spitfire/SimpleSocketServerSelect3.as
@@ -0,0 +1,461 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package corsaair.server.spitfire
+{
+
+    import C.errno.*;
+    import C.arpa.inet.*;
+    import C.netdb.*;
+    import C.netinet.*;
+    import C.sys.socket.*;
+    import C.sys.select.*;
+    import C.stdlib.*;
+    import C.unistd.*;
+
+    import flash.utils.ByteArray;
+    import flash.utils.Dictionary;
+
+
+    /**
+     * A simple socket server upgrade 3.
+     *
+     * Let's see special cases:
+     *
+     * - how to slow down your server loop ?
+     *
+     * - what happen when a client block
+     *   your server loop ?
+     */
+    public class SimpleSocketServerSelect3
+    {
+
+        // the port users will be connecting to
+        public const PORT:String = "3490";
+
+        // how many pending connections queue will hold
+        public const BACKLOG:uint = 10;
+
+        private var _address:Array;   // list of addresses
+        private var _info:addrinfo;   // server selected address
+
+        private var _run:Boolean;     // run the server loop
+
+
+        public var serverfd:int;      // server socket descriptor
+        public var selected:int;      // selected socket descriptor
+        public var connections:Array; // list of socket descriptor
+
+        /* Note:
+           bascially a map of clients using thesocket descriptor as the key
+           clients[ socket desc ] = { nickname: "test" }
+        */
+        public var clients:Dictionary; // list of clients informations
+
+        /* Note:
+           allow to slow down the pace of the server loop
+
+           time is expressed in milliseconds
+              0 - do not sleep
+           1000 - sleep 1 sec
+        */
+        public var sleepTime:uint;
+
+        public function SimpleSocketServerSelect3()
+        {
+            super();
+
+            _address    = [];
+            _info       = null;
+            _run        = true;
+            serverfd    = -1;
+            selected    = -1;
+            connections = [];
+            clients     = new Dictionary();
+            sleepTime   = 0; // 0 means "do not sleep"
+        }
+
+        private function _getBindingSocket():int
+        {
+
+            var hints:addrinfo = new addrinfo();
+                hints.ai_family   = AF_UNSPEC;
+                hints.ai_socktype = SOCK_STREAM;
+                hints.ai_flags    = AI_PASSIVE; // indicates we want to bind
+
+            var info:addrinfo;
+
+            var eaierr:CEAIrror = new CEAIrror();
+            var addrlist:Array  = getaddrinfo( null, PORT, hints, eaierr );
+
+            if( !addrlist )
+            {
+                throw eaierr;
+            }
+
+            var sockfd:int;
+            var option:int;
+            var bound:int;
+
+            var i:uint;
+            var len:uint = addrlist.length;
+            for( i = 0; i < len; i++ )
+            {
+                info = addrlist[i];
+
+                sockfd = socket( info.ai_family, info.ai_socktype, info.ai_protocol );
+                if( sockfd == -1 )
+                {
+                    trace( "selectserver: socket" )
+                    trace( new CError( "", errno ) );
+                    continue;
+                }
+
+                option = setsockopt( sockfd, SOL_SOCKET, SO_REUSEADDR, 1 );
+                if( option == -1 )
+                {
+                    trace( "setsockopt" );
+                    trace( new CError( "", errno ) );
+                    exit( 1 );
+                }
+
+                bound = bind( sockfd, info.ai_addr );
+                if( bound == -1 )
+                {
+                    close( sockfd );
+                    trace( "selectserver: bind" );
+                    trace( new CError( "", errno ) );
+                    continue;
+                }
+
+                // we save the selected addrinfo
+                _info = info;
+                break;
+            }
+
+            // we merge the addresses found into our list of address
+            _address = _address.concat( addrlist );
+
+            // we return the socket descriptor
+            return sockfd;
+        }
+
+        private function _loopConnections():void
+        {
+            var i:uint;
+            var len:uint = connections.length;
+
+            for( i = 0; i < len; i++ )
+            {
+                selected = connections[i];
+
+                if( isReadable( selected ) )
+                {
+
+                    if( selected == serverfd )
+                    {
+                        _handleNewConnections();
+                    }
+                    else
+                    {
+                        _handleClientData();
+                    }
+
+                }
+
+            }
+
+        }
+
+        private function _handleNewConnections():void
+        {
+            // handle new connections
+
+            var new_fd:int;  // newly accept()ed socket descriptor
+            var client_addr:sockaddr_in = new sockaddr_in();
+
+            new_fd = accept( serverfd, client_addr );
+
+            if( new_fd == -1 )
+            {
+                trace( "accept" );
+                trace( new CError( "", errno ) );
+            }
+            else
+            {
+                _addClient( new_fd );
+
+                var s:String = inet_ntop( client_addr.sin_family, client_addr );
+                trace( "selectserver: new connection from " + s  + ", socket " + new_fd );
+
+                var msg_out:String = "Hello, world!\n";
+                var bytes_out:ByteArray = new ByteArray();
+                    bytes_out.writeUTFBytes( msg_out );
+                    bytes_out.position = 0;
+
+                var sent:int = send( new_fd, bytes_out );
+                if( sent == -1 )
+                {
+                    trace( "send" );
+                    trace( new CError( "", errno ) );
+                }
+                else
+                {
+                    trace( "sent " + sent + " bytes to the client " + new_fd );
+                }
+
+
+                registerNewArrival( new_fd );
+            }
+        }
+
+        private function _handleClientData():void
+        {
+            // handle data from a client
+
+            var msg_in:String;
+            var bytes_in:ByteArray = new ByteArray();
+
+            var received:int = recv( selected, bytes_in );
+            if( received <= 0 )
+            {
+                // got error or connection closed by client
+                if( received == 0 )
+                {
+                    // connection closed
+                    trace( "selectserver: socket " + selected + " hung up" );
+                }
+                else
+                {
+                    trace( "recv" );
+                    trace( new CError( "", errno ) );
+                }
+
+                close( selected ); // bye!
+
+                // remove from master set
+                _removeClient( selected );
+            }
+            else
+            {
+                // we got some data from a client
+                trace( "received " + received + " bytes from client " + selected );
+                bytes_in.position = 0;
+                msg_in = bytes_in.readUTFBytes( bytes_in.length );
+                msg_in = msg_in.split( "\n" ).join( "" );
+
+                /* Note:
+                   If the nickname is not empty that means the client registered
+                   and so we use this nickname instead of the socket id
+                */
+                if( clients[selected].nickname != "" )
+                {
+                    trace( clients[selected].nickname + " : " + msg_in );
+                }
+                else
+                {
+                    trace( selected + " : " + msg_in );
+                }
+
+
+                if( msg_in == "shutdown" )
+                {
+                    trace( "selectserver: received 'shutdown' command" );
+                    _run = false;
+                }
+            }
+        }
+
+        private function _addClient( sd:int, name:String = "" ):void
+        {
+            connections.push( sd );
+            clients[ sd ] = { nickname: name };
+        }
+
+        private function _removeClient( sd:int ):void
+        {
+            /* Note:
+               protection from removing the server socket descriptor
+               which would disconnect/crash all other clients
+            */
+            if( sd == serverfd )
+            {
+                return;
+            }
+
+            var i:uint;
+            var len:uint = connections.length;
+            var desc:int;
+            for( i = 0; i < len; i++ )
+            {
+                desc = connections[i];
+                if( desc == sd )
+                {
+                    connections.splice( i, 1 );
+                    delete clients[ sd ];
+                }
+            }
+        }
+
+        private function _closeAndRemoveAllClients( removeServer:Boolean = false ):void
+        {
+            var i:uint;
+            var desc:int;
+            for( i = 0; i < connections.length; i++ )
+            {
+                desc = connections[i];
+
+                if( !removeServer && (desc == serverfd) )
+                {
+                    continue;
+                }
+
+                if( clients[desc].nickname != "" )
+                {
+                    trace( "selectserver: terminate " + clients[desc].nickname + " (" + desc + ")" );
+                }
+                else
+                {
+                    trace( "selectserver: terminate " + desc );
+                }
+
+                close( desc );              // close the socket
+                connections.splice( i, 1 ); // remove the socket from the connections list
+                delete clients[desc];       // delete the socket key for the clients data
+                i = 0; //rewind
+            }
+        }
+
+        /**
+         * Register a new connected client.
+         */
+        public function registerNewArrival( clientfd:int ):void
+        {
+            /* Note:
+               For some reason we decided that each new socket clients
+               had to register with a nickname
+
+               - send a question
+               - wait for the answer
+
+               IMPORTANT:
+               yes our server does support multiplexing
+               meaning we can deal with multiple clients connections
+               but here we want to illustrate a particular flaw
+               each connection is blocking
+
+               so even if we iterate trough each clients
+               that means we need to wait for a client to be processed
+               before being able to process the next client
+
+               here, as long as the client does not register
+               it will block ALL the other clients
+               to either connect and register, send messages or commands, etc.
+            */
+
+            var msg_welcome:String = "What is your nickname?\n";
+            var bytes_welcome:ByteArray = new ByteArray();
+                bytes_welcome.writeUTFBytes( msg_welcome );
+                bytes_welcome.position = 0;
+            var welcome:int = send( clientfd, bytes_welcome );
+            if( welcome == -1 )
+            {
+                trace( "selectserver: welcome sent" );
+                trace( new CError( "", errno ) );
+                close( clientfd );
+                _removeClient( clientfd );
+                return;
+            }
+
+            trace( "selectserver: wait for nickname ..." );
+            var bytes_answer:ByteArray = new ByteArray();
+            var nickname:String;
+            var n:int;
+            while( true )
+            {
+                n = recv( clientfd, bytes_answer );
+                if( n <= 0 )
+                {
+                    // got error or connection closed by client
+                    if( n == 0 )
+                    {
+                        // connection closed
+                        trace( "selectserver: socket " + clientfd + " hung up" );
+                    }
+                    else
+                    {
+                        trace( "recv" );
+                        trace( new CError( "", errno ) );
+                    }
+
+                    close( clientfd );
+                    _removeClient( clientfd );
+                    break;
+                }
+                else
+                {
+                    bytes_answer.position = 0;
+                    nickname = bytes_answer.readUTFBytes( n );
+                    nickname = nickname.split( "\n" ).join( "" );
+                    clients[ clientfd ].nickname = nickname;
+
+                    trace( "selectserver: socket " + clientfd + " registered as " + nickname );
+                    break;
+                }
+            }
+        }
+
+        public function main():void
+        {
+            serverfd = _getBindingSocket();
+
+            if( _info == null )
+            {
+                trace( "selectserver: failed to bind" );
+                exit( 1 );
+            }
+
+            var listening:int = listen( serverfd, BACKLOG );
+            if( listening == -1 )
+            {
+                trace( "listen" );
+                trace( new CError( "", errno ) );
+                exit( 1 );
+            }
+
+            trace( "selectserver: waiting for connections..." );
+
+            // the server is always the first client to be added to the connections
+            _addClient( serverfd, "server" );
+            trace( "selectserver: server on socket " + serverfd );
+
+            var frame:uint = 0;
+
+            // main server loop
+            while( _run )
+            {
+                //trace( "selectserver: main loop" );
+                trace( "selectserver: main loop " + frame++ );
+
+                _loopConnections();
+
+                if( sleepTime > 0 )
+                {
+                    sleep( sleepTime );
+                }
+            }
+
+            trace( "selectserver: connections left [" + connections + "]" );
+            _closeAndRemoveAllClients();
+
+            trace( "shutting down server" );
+            shutdown( serverfd, SHUT_RDWR );
+            close( serverfd );
+
+            exit( 0 );
+
+        }
+
+    }
+}


Transferred from the Adobe Open Source Subversion Repository

Revision: 12850
Author:   jimurphy@adobe.com
Date:     2009-12-11T14:57:14.623098Z

Log Message:
-----------
add 6 new DMV projects to the SDK:
automation
automation_air
automation_dmv
automation_flashflexkit
automation_spark
datavisualization

These projects are setup to build in an ant main call.  There are currently several warnings in the datavisualization project that will be cleaned up.  No checkintests exist for these projects as of yet.

I also modified the exisitng projects build files for easier management of the localization targets, bundle and fat-swc. If the projects that I updated:airframework,airspark,framework,playerglobal,rpc,and spark.  All the new projects have been implemented this same way.

QE notes: DMV folks should run through their tests
Doc notes: probably
Bugs: nope
Reviewer:
Tests run: ran the following targets: compile,checkintests,other.locales and doc
Is noteworthy for integration: no

Modified Paths:
--------------
1404 paths were modified

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1251593 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/automation/src/mx/automation/events/MarshalledAutomationEvent.as
+++ frameworks/projects/automation/src/mx/automation/events/MarshalledAutomationEvent.as
@@ -0,0 +1,152 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2009 Adobe Systems Incorporated
+//  All Rights Reserved.
+//
+//  NOTICE: Adobe permits you to use, modify, and distribute this file
+//  in accordance with the terms of the license agreement accompanying it.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.automation.events
+{
+	import flash.events.Event;
+
+	/**
+	 *  The MarshalledAutomationEvents class represents event objects that are dispatched
+	 *  by the AutomationManager.This represents the marshalling related events.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 4
+	 */
+	public class MarshalledAutomationEvent extends Event
+	{
+		include "../../core/Version.as";
+
+
+		//--------------------------------------------------------------------------
+		//
+		//  Class constants
+		//
+		//--------------------------------------------------------------------------
+
+		public static const BEGIN_RECORDING:String = "BeginRecording";
+		public static const END_RECORDING:String = "EndRecording";
+
+		public static const UNIQUE_APPID_REQUEST:String = "GetUniqueAppID";
+		public static const UNIQUE_APPID_REPLY:String = "GetUniqueAppIDReply";
+
+		public static const POPUP_HANDLER_REQUEST:String = "HandlePopUp";
+		public static const DRAG_DROP_PROXY_RETRIEVE_REQUEST:String = "GiveProxy";
+		public static const DRAG_DROP_PROXY_RETRIEVE_REPLY:String = "GiveProxyReply";
+
+		public static const UPDATE_SYCHRONIZATION:String = "UpdateSynchronization";
+		public static const INITIAL_DETAILS_REQUEST:String = "InitialDetailsRequest";
+		public static const INITIAL_DETAILS_REPLY:String = "InitialDetailsReply";
+
+		public static const START_POINT_REQUEST:String = "startPointRequest";
+		public static const START_POINT_REPLY:String = "startPointReply";
+
+		public static const DRAG_DROP_COMPLETE_REQUEST:String = "completeDragDrop";
+		public static const DRAG_DROP_PERFORM_REQUEST_TO_ROOT_APP:String = "performDragDropRequestToRootApp";
+		public static const DRAG_DROP_PERFORM_REQUEST_TO_SUB_APP:String = "performDragDropRequestToSubApp";
+
+		public static function marshal(event:Event):MarshalledAutomationEvent
+		{
+			var eventObj:Object = event;
+			return new MarshalledAutomationEvent(eventObj.type,
+				eventObj.bubbles,
+				eventObj.cancelable,
+				eventObj.applicationName,
+				eventObj.interAppDataToSubApp ,
+				eventObj.interAppDataToMainApp);
+
+		}
+
+		//--------------------------------------------------------------------------
+		//
+		//  Constructor
+		//
+		//--------------------------------------------------------------------------
+
+		public function MarshalledAutomationEvent(type:String,
+												  bubbles:Boolean = true,
+												  cancelable:Boolean = true,
+												  applicationName:String = null ,
+												  interAppDataToSubApp :Array =null,
+												  interAppDataToMainApp:Array = null)
+		{
+			super(type, bubbles, cancelable);
+			this.applicationName = applicationName;
+			this.interAppDataToSubApp = interAppDataToSubApp;
+			this.interAppDataToMainApp = interAppDataToMainApp;
+		}
+
+		//--------------------------------------------------------------------------
+		//
+		//  Properties
+		//
+		//--------------------------------------------------------------------------
+
+
+		/**
+		 *  Contains string which represents the application Name  for the application.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Flex 4
+		 */
+		public var applicationName:String;
+
+
+		/**
+		 *  Contains string which represents the descriptionXML details for findObjectIDs.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Flex 4
+		 */
+		public var interAppDataToSubApp:Array;
+
+		/**
+		 *  Contains Object which represents the result details for findObjectIDs.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Flex 4
+		 */
+		public var interAppDataToMainApp:Array;
+
+
+
+
+
+		//--------------------------------------------------------------------------
+		//
+		//  Overridden methods: Event
+		//
+		//--------------------------------------------------------------------------
+
+		/**
+		 *  @private
+		 */
+		override public function clone():Event
+		{
+			return new MarshalledAutomationEvent(type, bubbles, cancelable,/*
+				automationObject,
+				replayableEvent,
+				args,
+				name,
+				cacheable,*/
+				applicationName, interAppDataToSubApp,interAppDataToMainApp);
+		}
+
+
+	}
+}


add missing ShaderCompilerError class

add missing ShaderCompilerError class

error: pathspec 'src/aerys/minko/render/shader/compiler/ShaderCompilerError.as' did not match any file(s) known to git

--- src/aerys/minko/render/shader/compiler/ShaderCompilerError.as
+++ src/aerys/minko/render/shader/compiler/ShaderCompilerError.as
@@ -0,0 +1,31 @@
+package aerys.minko.render.shader.compiler
+{
+    public final class ShaderCompilerError extends Error
+    {
+        public static const TOO_MANY_VERTEX_OPERATIONS            : uint  = 1 << 0;
+        public static const TOO_MANY_VERTEX_CONSTANTS             : uint  = 1 << 1;
+        public static const TOO_MANY_VERTEX_TEMPORARIES           : uint  = 1 << 2;
+        public static const TOO_MANY_VERTEX_ATTRIBUTES            : uint  = 1 << 3;
+
+        public static const TOO_MANY_VARYINGS                     : uint  = 1 << 4;
+
+        public static const TOO_MANY_FRAGMENT_OPERATIONS          : uint  = 1 << 5;
+        public static const TOO_MANY_FRAGMENT_CONSTANTS           : uint  = 1 << 6;
+        public static const TOO_MANY_FRAGMENT_TEMPORARIES         : uint  = 1 << 7;
+
+        public static const TOO_MANY_FRAGMENT_SAMPLERS    : uint  = 1 << 8;
+
+        public static const OUT_OF_REGISTERS                      : uint  =
+              TOO_MANY_VERTEX_CONSTANTS
+            | TOO_MANY_VERTEX_TEMPORARIES
+            | TOO_MANY_VERTEX_ATTRIBUTES
+            | TOO_MANY_FRAGMENT_CONSTANTS
+            | TOO_MANY_FRAGMENT_TEMPORARIES
+            | TOO_MANY_FRAGMENT_SAMPLERS;
+
+        public function ShaderCompilerError(id : uint = 0)
+        {
+            super(message, id);
+        }
+    }
+}


Add switch test for compiler

Add switch test for compiler

error: pathspec 'src/avm2/tests/pilot/switch1.as' did not match any file(s) known to git

--- src/avm2/tests/pilot/switch1.as
+++ src/avm2/tests/pilot/switch1.as
@@ -0,0 +1,10 @@
+var f = function() {
+  switch (0) {
+  case 0:
+	  trace('PASS');
+	  break;
+  }
+};
+
+f();
+trace('OK');


rename MeshVisibilityController into VisibilityController

error: pathspec 'src/aerys/minko/scene/controller/mesh/VisibilityController.as' did not match any file(s) known to git

--- src/aerys/minko/scene/controller/mesh/VisibilityController.as
+++ src/aerys/minko/scene/controller/mesh/VisibilityController.as
@@ -0,0 +1,166 @@
+package aerys.minko.scene.controller.mesh
+{
+	import aerys.minko.scene.controller.AbstractController;
+	import aerys.minko.scene.data.MeshVisibilityDataProvider;
+	import aerys.minko.scene.node.Camera;
+	import aerys.minko.scene.node.Mesh;
+	import aerys.minko.scene.node.Scene;
+	import aerys.minko.type.binding.DataBindings;
+	import aerys.minko.type.bounding.FrustumCulling;
+	import aerys.minko.type.math.Frustum;
+	import aerys.minko.type.math.Matrix4x4;
+
+
+	/**
+	 * The MeshVisibilityController watches the Mesh and the active Camera of a Scene
+	 * to determine whether the object is actually inside the view frustum or not.
+	 *
+	 * @author Jean-Marc Le Roux
+	 *
+	 */
+	public final class VisibilityController extends AbstractController
+	{
+		private static const STATE_UNDEFINED	: uint	= 0;
+		private static const STATE_INSIDE		: uint	= 1;
+		private static const STATE_OUTSIDE		: uint	= 2;
+
+		private var _mesh			: Mesh							= null;
+		private var _state			: uint							= 0;
+
+		private var _visibilityData	: MeshVisibilityDataProvider	= new MeshVisibilityDataProvider();
+
+		public function get visible() : Boolean
+		{
+			return _visibilityData.visible;
+		}
+		public function set visible(value : Boolean) : void
+		{
+			_visibilityData.visible = value;
+		}
+
+		public function get frustumCulling() : uint
+		{
+			return _visibilityData.frustumCulling;
+		}
+		public function set frustumCulling(value : uint) : void
+		{
+			_visibilityData.frustumCulling = value;
+		}
+
+		public function get insideFrustum() : Boolean
+		{
+			return _visibilityData.inFrustum;
+		}
+
+		public function VisibilityController()
+		{
+			super(Mesh);
+
+			initialize();
+		}
+
+		private function initialize() : void
+		{
+			targetAdded.add(targetAddedHandler);
+			targetRemoved.add(targetRemovedHandler);
+		}
+
+		private function targetAddedHandler(ctrl	: VisibilityController,
+											target	: Mesh) : void
+		{
+			if (_mesh != null)
+				throw new Error();
+
+			_mesh = target;
+
+			target.addedToScene.add(meshAddedToSceneHandler);
+			target.removedFromScene.add(meshRemovedFromSceneHandler);
+			target.bindings.addProvider(_visibilityData);
+
+			if (target.root is Scene)
+				meshAddedToSceneHandler(target, target.root as Scene);
+		}
+
+		private function targetRemovedHandler(ctrl		: VisibilityController,
+											  target	: Mesh) : void
+		{
+			_mesh = null;
+
+			target.addedToScene.remove(meshAddedToSceneHandler);
+			target.removedFromScene.remove(meshRemovedFromSceneHandler);
+			target.bindings.removeProvider(_visibilityData);
+
+			if (target.root is Scene)
+				meshRemovedFromSceneHandler(target, target.root as Scene);
+		}
+
+		private function meshAddedToSceneHandler(mesh	: Mesh,
+												 scene	: Scene) : void
+		{
+			scene.bindings.addCallback('worldToView', worldToViewChangedHandler);
+			mesh.localToWorld.changed.add(meshLocalToWorldChangedHandler);
+		}
+
+		private function meshRemovedFromSceneHandler(mesh	: Mesh,
+													 scene	: Scene) : void
+		{
+			scene.bindings.removeCallback('worldToView', worldToViewChangedHandler);
+			mesh.localToWorld.changed.remove(meshLocalToWorldChangedHandler);
+		}
+
+		private function worldToViewChangedHandler(bindings		: DataBindings,
+												   propertyName	: String,
+												   oldValue		: Matrix4x4,
+												   newValue		: Matrix4x4) : void
+		{
+			testCulling();
+		}
+
+		private function meshLocalToWorldChangedHandler(transform	: Matrix4x4) : void
+		{
+			testCulling();
+		}
+
+		private function testCulling() : void
+		{
+			var culling	: uint	= _visibilityData.frustumCulling;
+
+			/*if (culling != FrustumCulling.DISABLED && _mesh.geometry.boundingBox)
+			{
+				var camera : Camera = (_mesh.root as Scene).activeCamera;
+
+				if (!camera)
+					return ;
+
+				culling = camera.cameraData.frustum.testBoundingVolume(
+					_mesh.geometry,
+					_mesh.localToWorld,
+					culling
+				);
+
+				var inside : Boolean = culling != Frustum.OUTSIDE;
+
+				if (inside && _state != STATE_INSIDE)
+				{
+					_visibilityData.inFrustum = true;
+					_state = STATE_INSIDE;
+				}
+				else if (!inside && _state != STATE_OUTSIDE)
+				{
+					_visibilityData.inFrustum = false;
+					_state = STATE_OUTSIDE;
+				}
+			}*/
+		}
+
+		override public function clone() : AbstractController
+		{
+			var clone : VisibilityController = new VisibilityController();
+
+			clone._visibilityData = _visibilityData.clone() as MeshVisibilityDataProvider;
+
+			return clone;
+		}
+
+	}
+}


Added Gauge2D class.

Added Gauge2D class.

error: pathspec 'src/engine/tetragon/view/render2d/extensions/gauge/Gauge2D.as' did not match any file(s) known to git

--- src/engine/tetragon/view/render2d/extensions/gauge/Gauge2D.as
+++ src/engine/tetragon/view/render2d/extensions/gauge/Gauge2D.as
@@ -0,0 +1,90 @@
+/*
+ *      _________  __      __
+ *    _/        / / /____ / /________ ____ ____  ___
+ *   _/        / / __/ -_) __/ __/ _ `/ _ `/ _ \/ _ \
+ *  _/________/  \__/\__/\__/_/  \_,_/\_, /\___/_//_/
+ *                                   /___/
+ *
+ * Tetragon : Game Engine for multi-platform ActionScript projects.
+ * http://www.tetragonengine.com/
+ * Copyright (c) The respective Copyright Holder (see LICENSE).
+ *
+ * Permission is hereby granted, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software") under the rules defined in
+ * the license found at http://www.tetragonengine.com/license/ or the LICENSE
+ * file included within this distribution.
+ *
+ * The above copyright notice and this permission notice must be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. THE COPYRIGHT
+ * HOLDER AND ITS LICENSORS DISCLAIM ALL WARRANTIES AND CONDITIONS, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES AND CONDITIONS OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT, AND ANY
+ * WARRANTIES AND CONDITIONS ARISING OUT OF COURSE OF DEALING OR USAGE OF TRADE.
+ * NO ADVICE OR INFORMATION, WHETHER ORAL OR WRITTEN, OBTAINED FROM THE COPYRIGHT
+ * HOLDER OR ELSEWHERE WILL CREATE ANY WARRANTY OR CONDITION NOT EXPRESSLY STATED
+ * IN THIS AGREEMENT.
+ */
+package tetragon.view.render2d.extensions.gauge
+{
+	import tetragon.view.render2d.display.Image2D;
+	import tetragon.view.render2d.display.Sprite2D;
+	import tetragon.view.render2d.textures.Texture2D;
+
+	import flash.geom.Point;
+
+
+	/**
+	 * A simple Gauge/Progress Bar.
+	 */
+	public class Gauge2D extends Sprite2D
+	{
+		//-----------------------------------------------------------------------------------------
+		// Properties
+		//-----------------------------------------------------------------------------------------
+
+		private var _image:Image2D;
+		private var _ratio:Number;
+
+
+		//-----------------------------------------------------------------------------------------
+		// Constructor
+		//-----------------------------------------------------------------------------------------
+
+		/**
+		 * Creates a new gauge.
+		 *
+		 * @param texture
+		 * @param initialRatio
+		 */
+		public function Gauge2D(texture:Texture2D, initialRatio:Number = 1.0)
+		{
+			_ratio = 1.0;
+			_image = new Image2D(texture);
+			ratio = initialRatio;
+			addChild(_image);
+		}
+
+
+		//-----------------------------------------------------------------------------------------
+		// Accessors
+		//-----------------------------------------------------------------------------------------
+
+		/**
+		 * A value between 0.0 and 1.0.
+		 */
+		public function get ratio():Number
+		{
+			return _ratio;
+		}
+		public function set ratio(v:Number):void
+		{
+			if (v == _ratio) return;
+			_ratio = Math.max(0.0, Math.min(1.0, v));
+			_image.scaleX = _ratio;
+			_image.setTexCoords(1, new Point(_ratio, 0.0));
+			_image.setTexCoords(3, new Point(_ratio, 1.0));
+		}
+	}
+}


A SinglePassRenderingEffect class that extends SinglePassEffect and implements IRenderingEffect

error: pathspec 'src/aerys/minko/render/effect/SinglePassRenderingEffect.as' did not match any file(s) known to git

--- src/aerys/minko/render/effect/SinglePassRenderingEffect.as
+++ src/aerys/minko/render/effect/SinglePassRenderingEffect.as
@@ -0,0 +1,13 @@
+package aerys.minko.render.effect
+{
+	import aerys.minko.render.RenderTarget;
+	import aerys.minko.render.shader.IShader;
+
+	public class SinglePassRenderingEffect extends SinglePassEffect implements IRenderingEffect
+	{
+		public function SinglePassRenderingEffect(shader:IShader, priority:Number=0., renderTarget:RenderTarget=null)
+		{
+			super(shader, priority, renderTarget);
+		}
+	}
+}


arduinoモジュールを追加

arduinoモジュールを追加

git-svn-id: 667ccd08e5f160307f6512a0947301cac150914e@789 ceb3ebad-0e53-d446-8596-a45b2b8d79cd

error: pathspec 'package/win32/common/arduino.as' did not match any file(s) known to git

--- package/win32/common/arduino.as
+++ package/win32/common/arduino.as
@@ -0,0 +1,301 @@
+;
+;	arduino.as - VAڑꂽarduino𐧌䂷邽߂̃W[
+;	             hspext.dll̃VAʐM@\gfirmatavgR
+;	             M܂(arduinofirmataAbv[hĂ܂)
+;	             ڂ́AhLghsp_arduino.txtQƂĂ
+;	             2016/6/28 onitama
+;
+#ifndef __arduino__
+#define __arduino__
+
+#module
+#include "hspext.as"
+
+#define global MODE_INPUT    (0x00)
+#define global MODE_OUTPUT   (0x01)
+#define global MODE_ANALOG   (0x02)
+#define global MODE_PWM      (0x03)
+#define global MODE_SERVO    (0x04)
+#define global MODE_SHIFT    (0x05)
+#define global MODE_I2C      (0x06)
+#define global MODE_ONEWIRE  (0x07)
+#define global MODE_STEPPER  (0x08)
+#define global MODE_ENCODER  (0x09)
+#define global MODE_SERIAL   (0x0A)
+#define global MODE_PULLUP   (0x0B)
+#define global MODE_IGNORE   (0x7F)
+
+#define START_SYSEX             0xF0 // start a Sysex message
+#define END_SYSEX               0xF7 // end a Sysex message
+#define PIN_MODE_QUERY          0x72 // ask for current and supported pin modes
+#define PIN_MODE_RESPONSE       0x73 // reply with current and supported pin modes
+#define PIN_STATE_QUERY         0x6D
+#define PIN_STATE_RESPONSE      0x6E
+#define CAPABILITY_QUERY        0x6B
+#define CAPABILITY_RESPONSE     0x6C
+#define ANALOG_MAPPING_QUERY    0x69
+#define ANALOG_MAPPING_RESPONSE 0x6A
+#define REPORT_FIRMWARE         0x79 // report name and version of the firmware
+
+#deffunc arduino_init int port, int baud
+
+	sdim arduino_error@,256
+	arduino_stat@=0
+	arduino_ready@=0
+
+	comopen port,"baud="+baud+" parity=N data=8 stop=1"
+	if stat {
+		arduino_error@="COM|[g̏Ɏs܂"
+		arduino_stat@=-1
+	}
+
+	data=0
+	sdim buf,256
+	sdim wbuf,256
+	sdim pin_digital,128
+	dim pin_analog,128
+	sdim en_digital,128
+	sdim en_analog,128
+	dim comdata,16
+
+	poke wbuf,0,START_SYSEX
+	poke wbuf,1,REPORT_FIRMWARE
+	poke wbuf,2,END_SYSEX
+	computb wbuf,3
+
+	;	fW^|[g̒ʒmONɂ
+	digitalReport 0,1
+	digitalReport 1,1
+	return
+
+
+#deffunc arduino_bye
+
+	if arduino_ready@=0 : return
+	comclose
+	arduino_ready@=0
+	return
+
+
+#deffunc arduino_query
+
+	if arduino_ready@=0 {
+		arduino_error@="NG擾ł܂"
+		arduino_stat@=-3
+		return
+	}
+
+	poke wbuf,0,START_SYSEX
+	poke wbuf,1,ANALOG_MAPPING_QUERY
+	poke wbuf,2,END_SYSEX
+	poke wbuf,3,START_SYSEX
+	poke wbuf,4,CAPABILITY_QUERY
+	poke wbuf,5,END_SYSEX
+	computb wbuf,6
+	return
+
+
+#deffunc pinmode int pin, int outmode
+
+	if arduino_ready@=0 : return
+
+	poke wbuf,0,0xf4
+	poke wbuf,1,pin
+	poke wbuf,2,outmode
+	computb wbuf,3
+	return
+
+#deffunc digitalWrite int pin, int value
+
+	if arduino_ready@=0 : return
+
+	poke wbuf,0,0xf5
+	poke wbuf,1,pin
+	poke wbuf,2,value&1
+	computb wbuf,3
+	return
+
+#deffunc analogWrite int pin, int value
+
+	if arduino_ready@=0 : return
+
+	poke wbuf,0,0xe0+pin
+	poke wbuf,1,value&0x7f
+	poke wbuf,2,value>>7
+	computb wbuf,3
+	return
+
+#defcfunc digitalRead int pin
+
+	return (pin_digital(pin>>3)>>(pin&7))&1
+
+#defcfunc analogRead int analogpin
+
+	return pin_analog(analogpin)
+
+#deffunc analogReport int pin, int sw
+
+	if arduino_ready@=0 : return
+
+	poke wbuf,0,0xc0+pin
+	poke wbuf,1,sw
+	computb wbuf,2
+	return
+
+#deffunc digitalReport int port, int sw
+
+	if arduino_ready@=0 : return
+
+	poke wbuf,0,0xd0+port
+	poke wbuf,1,sw
+	computb wbuf,2
+	return
+
+#deffunc analogInterval int pin, int ms
+
+	if arduino_ready@=0 : return
+
+	poke wbuf,0,0xf0
+	poke wbuf,1,0x7a
+	poke wbuf,2,ms & 0x7f
+	poke wbuf,3,ms>>7
+	poke wbuf,4,0xf7
+	computb wbuf,5
+	return
+
+
+
+#deffunc arduino_exec
+
+	if arduino_stat@ : return
+
+*execmain
+	arduino_rx@=0
+	gosub *rcv
+	if arduino_rx : goto *execmain
+	return arduino_stat@
+
+*rcv
+	comstat comdata
+	if comdata!=0 {
+		arduino_error@="ʐM̃G[ł"
+		arduino_stat@=comdata
+		return
+	}
+
+	comgetc data
+	if stat=0 : return
+
+	;mes strf("rx : %x %d",data, comdata(2))
+
+	cmdsize=0
+	bufsize=0
+	msn = data & 0xf0;
+	if (msn == 0x90 ) : goto *msg_digital
+	if (msn == 0xE0 ) : goto *msg_analog
+	if (msn == 0xC0 ) : goto *rep_analog
+	if (msn == 0xD0 ) : goto *rep_digital
+
+	if (data == START_SYSEX) {
+		comgetc cmdreq
+		if stat=0 : return
+		goto *getsysex
+	}
+	if ( data=0xf9 ) {
+		cmdreq = data
+		cmdsize = 2 : goto *getprm
+	}
+	return
+
+*msg_analog
+	;	analog I/O message
+	arduino_rx@=data
+	id=data&15
+	comgetc data : if stat=0 : return
+	comgetc data2 : if stat=0 : return
+	data|=data2<<7
+	pin_analog(id) = data
+	;mes strf("analog : %d : %d",id,data)
+	return
+
+*msg_digital
+	;	digital I/O message
+	arduino_rx@=data
+	id=data&15
+	comgetc data : if stat=0 : return
+	comgetc data2 : if stat=0 : return
+	data|=data2<<7
+	poke pin_digital, id, data
+	;mes strf("digital : %d : %d",id,data)
+	return
+
+*rep_analog
+	;	report analog pin
+	arduino_rx@=data
+	id=data&15
+	comgetc data : if stat=0 : return
+	poke en_analog, id, data
+	return
+
+*rep_digital
+	;	report digital port
+	arduino_rx@=data
+	id=data&15
+	comgetc data : if stat=0 : return
+	poke en_digital, id, data
+	return
+
+
+*getprm
+	;	arduino̒ʐMp[X
+	poke buf, bufsize, data
+	;mes strf("[%02x]",data)
+	bufsize++
+	if cmdsize>0 {
+		cmdsize--
+		comgetc data
+		if stat=0 {
+			arduino_error@="Mf[^sł"
+			arduino_stat@=-2
+			return
+		}
+		goto *getprm
+	}
+	;mes strf("data : %x : %d",cmdreq,bufsize)
+	arduino_rx@=cmdreq
+	return
+
+*getsysex
+	;	arduinosysexʐMp[X
+	comgetc data
+	if stat=0 {
+		await 0 : goto *getsysex
+		;arduino_error@="Mf[^sł"
+		;arduino_stat@=-3
+		;return
+	}
+	;mes strf("[%02x]",data)
+	if data=0xf7 {
+		;mes strf("sysex : %x : %d",cmdreq,bufsize)
+		arduino_rx@=cmdreq
+		goto *parsesysex
+	}
+	poke buf, bufsize, data
+	bufsize++
+	goto *getsysex
+
+*parsesysex
+	if cmdreq=0x79 {		; firm,version
+		arduino_firm_ver@="Version "+peek( buf, 0 )+"."+peek( buf, 1 )
+		;mes arduino_firm_ver@
+		arduino_ready@=1
+		return
+	}
+
+
+	return
+
+#global
+
+#endif
+


Commit.

Commit.

error: pathspec 'src/ui/MList.as' did not match any file(s) known to git

--- src/ui/MList.as
+++ src/ui/MList.as
@@ -0,0 +1,9 @@
+package ui
+{
+	public class MList
+	{
+		public function MList()
+		{
+		}
+	}
+}


changed private _queue to public queue

changed private _queue to public queue


git-svn-id: http://svn.rails2u.com/as3rails2u/trunk@27 96db6a20-122f-0410-8d9f-89437bbe4005

error: pathspec 'src/com/rails2u/mx/mxTweener.as' did not match any file(s) known to git

--- src/com/rails2u/mx/mxTweener.as
+++ src/com/rails2u/mx/mxTweener.as
@@ -0,0 +1,108 @@
+package com.rails2u.mx {
+    import mx.effects.Effect;
+    import mx.effects.AnimateProperty;
+    import mx.effects.easing.*;
+    import flash.utils.getDefinitionByName;
+    import flash.utils.getQualifiedClassName;
+    import mx.events.TweenEvent;
+    import mx.effects.Blur;
+    import mx.effects.Rotate;
+    import mx.utils.DescribeTypeCache;
+    import mx.utils.DescribeTypeCacheRecord;
+    import mx.effects.Parallel;
+
+    public class mxTweener {
+        private static const EASYING_CLASSES:Array = [
+            Back, Circular, Elastic, Quartic, Sine,
+            Bounce, Cubic, Exponential, Quadratic, Quintic
+        ];
+
+        public static const EASYING_FUNCTIONS:Object = createEasyingFunctions();
+
+        private static function createEasyingFunctions():Object {
+            var o:Object = {};
+            o['linear'] = Linear.easeNone;
+            for each(var klass:Object in EASYING_CLASSES) {
+                var name:String = getQualifiedClassName(klass).replace(/^.*::/,'').toLocaleLowerCase();
+                o['easein' + name] = klass['easeIn'];
+                o['easeout' + name] = klass['easeOut'];
+                o['easeinout' + name] = klass['easeInOut'];
+            }
+            return o;
+        }
+
+        public static function addTween(options:Object):Effect {
+            var pa:Parallel = new Parallel();
+
+            var ef:AnimateProperty = new AnimateProperty();
+            var desc:XML = DescribeTypeCache.describeType(ef).typeDescription;
+            var effectOptions:Object = {};
+
+            for (var key:String in options) {
+                if(
+                    desc.variable.(@name == key).@name.toString() ||
+                    desc.accessor.(@name == key && @access == 'readwrite').@name.toString()
+                ) {
+                    effectOptions[key] = options[key];
+                    delete options[key];
+                }
+            }
+
+
+            if (options.easing is Function) {
+                effectOptions.easingFunction = options.easing;
+                delete options.easing;
+            } else if (options.easing is String){
+                effectOptions.easingFunction = EASYING_FUNCTIONS[options.easing.toLocaleLowerCase()];
+                delete options.easing;
+            }
+
+            var repeatReverseFlag:Boolean = false;
+            if (options.repeatReverse) {
+                repeatReverseFlag = true;
+                delete options.repeatReverse;
+            }
+
+            if (options.properties) {
+                var props:Object = options.properties;
+                delete options.properties;
+                for (var key:String in props) {
+                    options[key] = props[key];
+                }
+            };
+
+            for (var key:String in options) {
+                var effect:AnimateProperty = createAnimateProperty(effectOptions);
+                effect.property = key;
+                if (options[key] is Array) {
+                    effect.fromValue = options[key][0];
+                    effect.toValue = options[key][1];
+                } else {
+                    effect.toValue = options[key];
+                }
+                pa.addChild(effect);
+            }
+
+            if(repeatReverseFlag) {
+                for each(var eff:Effect in pa.children) {
+                    // eff.repeatCount = 0;
+                    eff.addEventListener(TweenEvent.TWEEN_END, tweenReverseHandler);
+                }
+            }
+
+            return Effect(pa);
+        }
+
+        private static function createAnimateProperty(effectOptions:Object):AnimateProperty {
+            var ef:AnimateProperty = new AnimateProperty();
+            for (var key:String in effectOptions) {
+                ef[key] = effectOptions[key];
+            }
+            return ef;
+        }
+
+        private static function tweenReverseHandler(e:TweenEvent):void {
+            e.target.reverse();
+        }
+    }
+}


Added some stuff that got removed by someone.. Please make sure you do an SVN update each time you make changes guys!

--- AS3/int/app/core/element/Knob.as
+++ AS3/int/app/core/element/Knob.as
@@ -129,17 +129,29 @@
 			gfxActiveIndicator.visible = true;
 		}

-		function setMinValue(v:Number)
-		{
-			// FIXME: add sanity checking
+		public function setMinValue(v:Number = 0)
+		{
+			if(v < 0)
+				return;
+
 			minValue = v;
 		}

-		function setMaxValue(v:Number)
-		{
+		public function setMaxValue(v:Number = 1.0)
+		{
+			if(maxValue > 1.0)
+				return;
 			maxValue = v;
 		}

+		public function hideLabel()
+		{
+			indicatorText.visible = false;
+		}
+		public function showLabel()
+		{
+			indicatorText.visible = true;
+		}

 		function knobStopDrag()
 		{
@@ -154,10 +166,10 @@

 		public function setValue(f:Number)
 		{
-			if(f < 0)
-				f = 0.0;
-			if(f > 1.0)
-				f = 1.0;
+			if(f < minValue)
+				f = minValue;
+			if(f > maxValue)
+				f = maxValue;
 			knobValue = f;

 			updateGraphics();


spelling properties name

spelling properties name


Create a dummy textbox class for the sole purpose of writing the XML loader

error: pathspec 'Classes/Textbox.as' did not match any file(s) known to git

--- Classes/Textbox.as
+++ Classes/Textbox.as
@@ -0,0 +1,20 @@
+package Classes
+{
+	public class Textbox
+	{
+		public var contents:String;
+
+		public function Textbox()
+		{
+			contents="";
+		}
+		public function Textbox(text)
+		{
+			contents=text;
+		}
+		public setContents(text)
+		{
+			contents=text;
+		}
+	}
+}


Only enable setter when ROR is enabled.

Only enable setter when ROR is enabled.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/pubnub/flash.git/'


Create new data class for testing: CopyableSubclass.

error: pathspec 'dolly-framework/src/test/resources/dolly/data/CopyableSubclass.as' did not match any file(s) known to git

--- dolly-framework/src/test/resources/dolly/data/CopyableSubclass.as
+++ dolly-framework/src/test/resources/dolly/data/CopyableSubclass.as
@@ -0,0 +1,28 @@
+package dolly.data {
+
+[Copyable]
+public class CopyableSubclass extends CopyableClass {
+
+	public static var staticProperty2:String = "Value of second-level static property.";
+
+	private var _writableField2:String = "Value of second-level writable field.";
+
+	public var property2:String = "Value of second-level public property.";
+
+	public function CopyableSubclass() {
+		super();
+	}
+
+	public function get writableField2():String {
+		return _writableField2;
+	}
+
+	public function set writableField2(value:String):void {
+		_writableField2 = value;
+	}
+
+	public function get readOnlyField2():String {
+		return "Value of second-level read-only field.";
+	}
+}
+}


FLEX-34543 Added a unit test which reproduces the bug and thus prevents it from recurring.

error: pathspec 'frameworks/tests/unitTests/spark/components/gridClasses/DataGridEditor_FLEX_34543_Test.as' did not match any file(s) known to git

--- frameworks/tests/unitTests/spark/components/gridClasses/DataGridEditor_FLEX_34543_Test.as
+++ frameworks/tests/unitTests/spark/components/gridClasses/DataGridEditor_FLEX_34543_Test.as
@@ -0,0 +1,85 @@
+package spark.components.gridClasses {
+    import mx.collections.ArrayCollection;
+    import mx.collections.ArrayList;
+    import mx.core.ClassFactory;
+    import mx.core.mx_internal;
+    import mx.managers.FocusManager;
+
+    import org.flexunit.asserts.assertEquals;
+    import org.flexunit.asserts.assertNotNull;
+    import org.fluint.uiImpersonation.UIImpersonator;
+
+    import spark.components.DataGrid;
+    import spark.events.GridItemEditorEvent;
+
+    public class DataGridEditor_FLEX_34543_Test
+    {
+        private var _dp:ArrayCollection;
+        private var _dg:DataGrid;
+        private var _sut:DataGridEditor;
+        private var _saveEvent:GridItemEditorEvent;
+
+        [Before]
+        public function setUp():void
+        {
+            _dp = new ArrayCollection([new FLEX_34543_DataNode("First"), new FLEX_34543_DataNode("Second")]);
+
+            _dg = new DataGrid();
+            _dg.editable = true;
+            _dg.dataProvider = _dp;
+
+            var nameColumn:GridColumn = new GridColumn();
+            nameColumn.dataField = "name";
+            nameColumn.itemEditor = new ClassFactory(DefaultGridItemEditor);
+            nameColumn.editable = true;
+            _dg.columns = new ArrayList([nameColumn]);
+
+            UIImpersonator.addChild(_dg);
+            _dg.focusManager = new FocusManager(_dg, false);
+
+            _sut = _dg.mx_internal::editor;
+        }
+
+        [After]
+        public function tearDown():void
+        {
+            _dg.removeEventListener(GridItemEditorEvent.GRID_ITEM_EDITOR_SESSION_SAVE, onGridEditorSave);
+            UIImpersonator.removeAllChildren();
+            _dg = null;
+            _dp = null;
+            _saveEvent = null;
+            _sut = null;
+        }
+
+        [Test]
+        public function testEndItemEditorSessionEventContainsCorrectIndex():void
+        {
+            //given
+            _dg.addEventListener(GridItemEditorEvent.GRID_ITEM_EDITOR_SESSION_SAVE, onGridEditorSave);
+            _dg.startItemEditorSession(1,0);
+
+            //when
+            _dp.removeItemAt(0);
+            _dg.endItemEditorSession();
+
+            //then
+            assertNotNull(_saveEvent);
+            assertEquals(0, _saveEvent.rowIndex);
+        }
+
+        private function onGridEditorSave(event:GridItemEditorEvent):void
+        {
+            _saveEvent = event;
+        }
+    }
+}
+
+class FLEX_34543_DataNode
+{
+    public var name:String;
+
+    public function FLEX_34543_DataNode(name:String)
+    {
+        this.name = name;
+    }
+}


Issue 50; Change the line style to invisible when moving to a new location to avoid flash behavior which draws a line automatically in this circumstance.


Fiks til ticket:39. 12 timer inn i neste døgn kvalifiserer også til kompensasjonstillegget

--- app/src/no/makingwaves/cust/dss/code/TravelExpenceCalculator.as
+++ app/src/no/makingwaves/cust/dss/code/TravelExpenceCalculator.as
@@ -112,6 +112,9 @@
 				if (travelDateInfo.total_hours > 12) {
 					if (travelDateInfo.total_hours > 24) {
 						days = travelDateInfo.days;
+						if (travelDateInfo.hours >= 12) {
+							days++;
+						}
 					} else if (travelDateInfo.total_24hours == 0) {
 						days = 1;
 					}


New attribute presenter

New attribute presenter

error: pathspec 'collect-flex/collect-flex-client/src/main/flex/org/openforis/collect/presenter/AttributePresenter.as' did not match any file(s) known to git

--- collect-flex/collect-flex-client/src/main/flex/org/openforis/collect/presenter/AttributePresenter.as
+++ collect-flex/collect-flex-client/src/main/flex/org/openforis/collect/presenter/AttributePresenter.as
@@ -0,0 +1,85 @@
+package org.openforis.collect.presenter {
+	import flash.display.DisplayObject;
+	import flash.events.Event;
+	import flash.events.MouseEvent;
+
+	import mx.binding.utils.ChangeWatcher;
+	import mx.core.IToolTip;
+	import mx.core.UIComponent;
+
+	import org.openforis.collect.model.proxy.AttributeProxy;
+	import org.openforis.collect.model.proxy.ValidationResultsProxy;
+	import org.openforis.collect.ui.component.detail.AttributeItemRenderer;
+	import org.openforis.collect.ui.component.input.InputField;
+	import org.openforis.collect.util.ToolTipUtil;
+
+	/**
+	 *
+	 * @author S. Ricci
+	 * */
+	public class AttributePresenter extends AbstractPresenter {
+
+		protected var _view:AttributeItemRenderer;
+		private var _validationListener:UIComponent;
+		private var _validationToolTip:IToolTip;
+
+		public function AttributePresenter(view:AttributeItemRenderer) {
+			_view = view;
+
+			var inputField:InputField = _view.getElementAt(0) as InputField;
+			_validationListener = inputField != null ? inputField.validationListener: view;
+
+			super();
+		}
+
+		override internal function initEventListeners():void {
+			super.initEventListeners();
+
+			initValidationResultHandler();
+
+			ChangeWatcher.watch(_view, "attribute", attributeChangeHandler);
+		}
+
+		protected function attributeChangeHandler(event:Event):void {
+			initValidationResultHandler();
+		}
+
+		protected function initValidationResultHandler():void {
+			_validationListener.removeEventListener(MouseEvent.ROLL_OVER, mouseRollOverHandler);
+			_validationListener.removeEventListener(MouseEvent.ROLL_OUT, mouseRollOutHandler);
+			_validationListener.styleName = "noError";
+			var a:AttributeProxy = _view.attribute;
+			if(a != null && a.state != null) {
+				var validationResults:ValidationResultsProxy = a.state.validationResults;
+				var invalidAttribute:Boolean = a.state.hasErrors() || a.state.hasWarnings();
+
+				if(invalidAttribute) {
+					if(! _validationListener.hasEventListener(MouseEvent.ROLL_OVER)) {
+						_validationListener.addEventListener(MouseEvent.ROLL_OVER, mouseRollOverHandler);
+						_validationListener.addEventListener(MouseEvent.ROLL_OUT, mouseRollOutHandler);
+					}
+				}
+				_validationListener.styleName = "error";
+			}
+		}
+
+		protected function mouseRollOverHandler(event:MouseEvent = null):void {
+			if(_validationToolTip != null){
+				ToolTipUtil.destroy(_validationToolTip);
+			}
+			var a:AttributeProxy = _view.attribute;
+			if(a != null && a.state != null) {
+				var styleName:String = "error";
+				var message:String = a.state.validationMessage;
+				_validationToolTip = ToolTipUtil.create(_validationListener, message, styleName);
+			}
+		}
+
+		public function mouseRollOutHandler(event:MouseEvent=null):void {
+			ToolTipUtil.destroy(_validationToolTip);
+			_validationToolTip = null;
+		}
+
+
+	}
+}


Revert "Slave load method requires string"

This reverts commit 68e4287adda3543faeb76a7a8bfc36e304801999.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/rafaelcordoba/cocktail-demo.git/'


Issue 34; Move transform handling to when image is loaded. Includes code from r157 from James.


adding as directory and shell CLI

adding as directory and shell CLI

error: pathspec 'as/org/osflash/asjs/CLI.as' did not match any file(s) known to git

--- as/org/osflash/asjs/CLI.as
+++ as/org/osflash/asjs/CLI.as
@@ -0,0 +1,13 @@
+package org.osflash.asjs {
+
+    public class CLI {
+
+        public function CLI() {
+
+            trace("AS.JS");
+
+        }
+
+    }
+
+}


Adds left-out test file

Adds left-out test file

error: pathspec 'test/org/swiftsuspenders/support/injectees/OrderedPreDestroyInjectee.as' did not match any file(s) known to git

--- test/org/swiftsuspenders/support/injectees/OrderedPreDestroyInjectee.as
+++ test/org/swiftsuspenders/support/injectees/OrderedPreDestroyInjectee.as
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2009 - 2011 the original author or authors
+ *
+ * Permission is hereby granted to use, modify, and distribute this file
+ * in accordance with the terms of the license agreement accompanying it.
+ */
+
+package org.swiftsuspenders.support.injectees
+{
+	public class OrderedPreDestroyInjectee
+	{
+		public const loadOrder : Array = [];
+
+		[PreDestroy(order=2)]
+		public function methodTwo():void
+		{
+			loadOrder.push(2);
+		}
+
+		[PreDestroy]
+		public function methodFour():void
+		{
+			loadOrder.push(4);
+		}
+
+		[PreDestroy(order=3)]
+		public function methodThree():void
+		{
+			loadOrder.push(3);
+		}
+
+		[PreDestroy(order=1)]
+		public function methodOne():void
+		{
+			loadOrder.push(1);
+		}
+	}
+}


FLEX-34837 Added unit test which reproduces the bug from the DataGrid side. NOTE: this unit test works in IntelliJ - i.e. fails as expected -, but fails in the SDK with the message "UIImpersonator doesn't work correctly!" because FlexUnit is not compiled for Flex projects (so UIImpersonator doesn't act as it does locally). When we release a new version of FlexUnit we can correct this.

error: pathspec 'frameworks/projects/spark/tests/spark/components/DataGrid_FLEX_34837_Tests.as' did not match any file(s) known to git

--- frameworks/projects/spark/tests/spark/components/DataGrid_FLEX_34837_Tests.as
+++ frameworks/projects/spark/tests/spark/components/DataGrid_FLEX_34837_Tests.as
@@ -0,0 +1,201 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package spark.components {
+    import mx.collections.ArrayCollection;
+    import mx.collections.ArrayList;
+    import mx.collections.IList;
+    import mx.collections.ListCollectionView;
+
+    import org.flexunit.asserts.assertEquals;
+    import org.flexunit.asserts.assertNotNull;
+    import org.fluint.uiImpersonation.UIImpersonator;
+
+    import spark.components.gridClasses.GridColumn;
+    import spark.formatters.DateTimeFormatter;
+
+    public class DataGrid_FLEX_34837_Tests {
+        private var _sut:DataGrid;
+
+        [Before]
+        public function setUp():void
+        {
+            _sut = new DataGrid();
+        }
+
+        [After]
+        public function tearDown():void
+        {
+            _sut = null;
+        }
+
+        [Test]
+        public function test_removing_selected_item_on_complex_field_sorted_grid_after_renaming_it():void
+        {
+            //given
+            var streetColumn:GridColumn = new GridColumn("address.street");
+            _sut.columns = new ArrayCollection([streetColumn]);
+
+            const tenObjects:IList = generateVOs(10);
+            const firstObject:FLEX_34837_VO = tenObjects.getItemAt(0) as FLEX_34837_VO;
+            const dataProvider:ListCollectionView = new ListCollectionView(tenObjects);
+
+            //when
+            UIImpersonator.addChild(_sut);
+            assertNotNull("UIImpersonator doesn't work correctly!", _sut.grid);
+            _sut.dataProvider = dataProvider;
+            _sut.sortByColumns(new <int>[0]); //sort by address.street
+            firstObject.address.street = "zzz"; //should move it at the end of the list
+
+            //then
+            assertEquals("The object should have moved to the end of the list!", dataProvider.length - 1, dataProvider.getItemIndex(firstObject));
+            dataProvider.removeItemAt(dataProvider.getItemIndex(firstObject)); //make sure there's no RTE
+            assertEquals("The item wasn't removed!", 9, dataProvider.length);
+        }
+
+        [Test]
+        public function test_removing_selected_item_on_complex_field_sorted_grid_with_formatter_after_renaming_it():void
+        {
+            //given
+            var dateColumn:GridColumn = new GridColumn("address.dateMovedIn");
+            var dateTimeFormatter:DateTimeFormatter = new DateTimeFormatter();
+            dateTimeFormatter.dateTimePattern = "MMMM"; //Full month name
+            dateColumn.formatter = dateTimeFormatter;
+
+            _sut.columns = new ArrayCollection([dateColumn]);
+
+            const tenObjects:IList = generateVOs(10);
+            const dataProvider:ListCollectionView = new ListCollectionView(tenObjects);
+
+            //when
+            UIImpersonator.addChild(_sut);
+            assertNotNull("UIImpersonator doesn't work correctly!", _sut.grid);
+            _sut.dataProvider = dataProvider;
+            _sut.sortByColumns(new <int>[0]); //sort by address.dateMovedIn, in effect by month name
+
+            //then
+            const aprilObject:FLEX_34837_VO = tenObjects.getItemAt(3) as FLEX_34837_VO;
+            assertEquals(0, dataProvider.getItemIndex(aprilObject));
+
+            //when
+            const septemberObject:FLEX_34837_VO = tenObjects.getItemAt(8) as FLEX_34837_VO;
+            septemberObject.address.dateMovedIn = new Date(2000, 3, 2); //"April"; should move it at the start of the list
+
+            const firstObject:FLEX_34837_VO = tenObjects.getItemAt(0) as FLEX_34837_VO;
+            firstObject.address.dateMovedIn = new Date(2000, 8, 2); //"September"; should move it at the end of the list
+
+            //then
+            assertEquals("The object should have moved to the end of the list!", dataProvider.length - 1, dataProvider.getItemIndex(firstObject));
+            dataProvider.removeItemAt(dataProvider.getItemIndex(firstObject)); //make sure there's no RTE
+            assertEquals("The item wasn't removed!", 9, dataProvider.length);
+        }
+
+        [Test]
+        public function test_removing_selected_item_on_multiple_field_sorted_grid_with_formatter_changed_after_first_sort_and_after_renaming():void
+        {
+            //given
+            var dateColumn:GridColumn = new GridColumn("address.dateMovedIn");
+            _sut.columns = new ArrayCollection([dateColumn]);
+
+            const tenObjects:IList = generateVOs(10);
+            const dataProvider:ListCollectionView = new ListCollectionView(tenObjects);
+
+            //when
+            UIImpersonator.addChild(_sut);
+            assertNotNull("UIImpersonator doesn't work correctly!", _sut.grid);
+            _sut.dataProvider = dataProvider;
+
+            var dateTimeFormatter:DateTimeFormatter = new DateTimeFormatter();
+            dateTimeFormatter.dateTimePattern = "MMMM"; //Full month name
+            dateColumn.formatter = dateTimeFormatter; //this should re-sort the items in the grid according to the month
+
+            _sut.sortByColumns(new <int>[0]); //sort by address.dateMovedIn
+
+            //then
+            const aprilObject:FLEX_34837_VO = tenObjects.getItemAt(3) as FLEX_34837_VO;
+            assertEquals(0, dataProvider.getItemIndex(aprilObject));
+
+            //when
+            const septemberObject:FLEX_34837_VO = tenObjects.getItemAt(8) as FLEX_34837_VO;
+            septemberObject.address.dateMovedIn = new Date(2000, 3, 2); //"April"; should move it at the start of the list
+
+            const firstObject:FLEX_34837_VO = tenObjects.getItemAt(0) as FLEX_34837_VO;
+            firstObject.address.dateMovedIn = new Date(2000, 8, 2); //"September"; should move it at the end of the list
+
+            //then
+            assertEquals("The object should have moved to the end of the list!", dataProvider.length - 1, dataProvider.getItemIndex(firstObject));
+            dataProvider.removeItemAt(dataProvider.getItemIndex(firstObject)); //make sure there's no RTE
+            assertEquals("The item wasn't removed!", 9, dataProvider.length);
+        }
+
+        private static function generateVOs(no:int, reverse:Boolean = false):IList
+        {
+            return generateObjects(no, reverse, generateOneObject);
+        }
+
+        private static function generateObjects(no:int, reverse:Boolean, generator:Function):IList
+        {
+            var result:Array = [];
+            for(var i:int = 0; i < no; i++)
+            {
+                result.push(generator(i));
+            }
+
+            if(reverse)
+                result.reverse();
+
+            return new ArrayList(result);
+        }
+
+        private static function generateOneObject(i:Number):FLEX_34837_VO
+        {
+            return new FLEX_34837_VO(i, "Object", "Street");
+        }
+    }
+}
+
+[Bindable]
+class FLEX_34837_VO
+{
+    public var name:String;
+    public var address:FLEX_34837_AddressVO;
+    public var index:Number;
+
+    public function FLEX_34837_VO(index:Number, namePrefix:String, streetPrefix:String)
+    {
+        this.index = index;
+        this.name = namePrefix + index;
+        this.address = new FLEX_34837_AddressVO(streetPrefix + index, Math.floor(index), new Date(2000 + Math.floor(index), Math.floor(index), 1, 0, 0, 0, 1));
+    }
+}
+
+[Bindable]
+class FLEX_34837_AddressVO
+{
+    public var street:String;
+    public var houseNumber:int;
+    public var dateMovedIn:Date;
+
+    public function FLEX_34837_AddressVO(street:String, houseNumber:int, dateMovedIn:Date)
+    {
+        this.street = street;
+        this.houseNumber = houseNumber;
+        this.dateMovedIn = dateMovedIn;
+    }
+}


adding org.igorcosta.hacks.SWF

adding org.igorcosta.hacks.SWF

--- org/igorcosta/hacks/SWF.as
+++ org/igorcosta/hacks/SWF.as
@@ -0,0 +1,130 @@
+package org.igorcosta.hacks
+{
+    import flash.display.LoaderInfo;
+    import flash.utils.ByteArray;
+    import flash.utils.Endian;
+
+   /**
+  * Direct reading of SWF file
+  * Distributed under the new BSD License
+  * @author Paul Sivtsov - ad@ad.by
+  */
+
+	public class SWF
+	{
+		public function SWF()
+		{
+		}
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Returns compilation date of current module
+    public static function readCompilationDate(serialNumber: ByteArray = null): Date
+    {
+      const compilationDate: Date = new Date;
+      const DATETIME_OFFSET: uint = 18;
+
+      if (serialNumber == null)
+        serialNumber = readSerialNumber();
+
+      /* example of filled SWF_SERIALNUMBER structure
+      struct SWF_SERIALNUMBER
+      {
+        UI32 Id;         // "3"
+        UI32 Edition;    // "6"
+                         // "flex_sdk_4.0.0.3342"
+        UI8 Major;       // "4."
+        UI8 Minor;       // "0."
+        UI32 BuildL;     // "0."
+        UI32 BuildH;     // "3342"
+        UI32 TimestampL;
+        UI32 TimestampH;
+      };
+      */
+
+      // the SWF_SERIALNUMBER structure exists in FLEX swfs only, not FLASH
+      if (serialNumber == null)
+        return null;
+
+      // date stored as uint64
+      serialNumber.position = DATETIME_OFFSET;
+      serialNumber.endian = Endian.LITTLE_ENDIAN;
+      compilationDate.time = serialNumber.readUnsignedInt() + serialNumber.readUnsignedInt() * (uint.MAX_VALUE + 1);
+
+      return compilationDate;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Returns contents of Adobe SerialNumber SWF tag
+    public static function readSerialNumber(): ByteArray
+    {
+      const TAG_SERIAL_NUMBER: uint = 0x29;
+      return findAndReadTagBody(TAG_SERIAL_NUMBER);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Returns the tag body if it is possible
+    public static function findAndReadTagBody(theTagCode: uint): ByteArray
+    {
+      // getting direst access to unpacked SWF file
+      const src: ByteArray = LoaderInfo.getLoaderInfoByDefinition(SWF).bytes;
+
+      /*
+      SWF File Header
+      Field      Type  Offset   Comment
+      -----      ----  ------   -------
+      Signature  UI8   0        Signature byte: “F” indicates uncompressed, “C” indicates compressed (SWF 6 and later only)
+      Signature  UI8   1        Signature byte always “W”
+      Signature  UI8   2        Signature byte always “S”
+      Version    UI8   3        Single byte file version (for example, 0x06 for SWF 6)
+      FileLength UI32  4        Length of entire file in bytes
+      FrameSize  RECT  8        Frame size in twips
+      FrameRate  UI16  8+RECT   Frame delay in 8.8 fixed number of frames per second
+      FrameCount UI16  10+RECT  Total number of frames in file
+      */
+
+      // skip AVM2 SWF header
+      // skip Signature, Version & FileLength
+      src.position = 8;
+      // skip FrameSize
+      const RECT_UB_LENGTH: uint = 5;
+      const RECT_SB_LENGTH: uint = src.readUnsignedByte() >> (8 - RECT_UB_LENGTH);
+      const RECT_LENGTH: uint = Math.ceil((RECT_UB_LENGTH + RECT_SB_LENGTH * 4) / 8);
+      src.position += (RECT_LENGTH - 1);
+      // skip FrameRate & FrameCount
+      src.position += 4;
+
+      while (src.bytesAvailable > 0)
+        with (readTag(src, theTagCode))
+      {
+        if (tagCode == theTagCode)
+          return tagBody;
+      }
+
+      return null;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Returns tag from current read position
+    private static function readTag(src: ByteArray, theTagCode: uint): Object
+    {
+      src.endian = Endian.LITTLE_ENDIAN;
+
+      const tagCodeAndLength: uint = src.readUnsignedShort();
+      const tagCode: uint = tagCodeAndLength >> 6;
+      const tagLength: uint = function(): uint {
+        const MAX_SHORT_TAG_LENGTH: uint = 0x3F;
+        const shortLength: uint = tagCodeAndLength & MAX_SHORT_TAG_LENGTH;
+        return (shortLength == MAX_SHORT_TAG_LENGTH) ? src.readUnsignedInt() : shortLength;
+      }();
+
+      const tagBody: ByteArray = new ByteArray;
+      if (tagLength > 0)
+        src.readBytes(tagBody, 0, tagLength);
+
+      return {
+        tagCode: tagCode,
+        tagBody: tagBody
+      };
+    }
+  }
+}


Fikset gjenåpnet ticket:39. Kompensasjon ved utenlandsreise komme nå også riktig frem i kommentarfeltet ved utskrift.

--- app/src/no/makingwaves/cust/dss/commands/getTravelInfoBaseCommand.as
+++ app/src/no/makingwaves/cust/dss/commands/getTravelInfoBaseCommand.as
@@ -117,8 +117,18 @@
 				var travelDateInfo:DateRanger = ModelLocator.getInstance().travelLength;
 				var intTravel:Boolean = (ModelLocator.getInstance().activeTravel.travel_type == ModelLocator.getInstance().activeTravel.ABROAD);
 				if (travelDateInfo.total_hours > 12 && intTravel) {
+					var days:int = 1;
+					if (travelDateInfo.total_hours > 24) {
+						days = travelDateInfo.days;
+						if (travelDateInfo.hours >= 12) {
+							days++;
+						}
+					} else if (travelDateInfo.total_24hours == 0) {
+						days = 1;
+					}
+
 					var commentStr:String = ResourceManager.getInstance().getString(model.resources.bundleName, 'info_international_compensation');
-					commentStr = Util.searchAndReplace(commentStr, "%1", travelDateInfo.days.toString());
+					commentStr = Util.searchAndReplace(commentStr, "%1", days.toString());
 					commentStr = Util.searchAndReplace(commentStr, "%2", modelAllowance.allowance_other.getItemAt(0).rate);

 					var modelComment:no.makingwaves.cust.dss.vo.TravelCommentVO = new no.makingwaves.cust.dss.vo.TravelCommentVO();


Issue 60; Resolve problem with smooth/shorthand curves by updating current position in all cases.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/leymannx/svgweb.git/'


Refactored old naming.

Refactored old naming.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/c0d3m0nk3y/Kuroneko.git/'


Started to modularize the app

Started to modularize the app

git-svn-id: 27326a786375daad9d33dc990c6f272e4c8f567c@755 fda5f131-174c-0410-8613-e0905860106b

error: pathspec 'org.openwms/trunk/source/org.openwms.client.flex.lib/src/main/flex/org/openwms/web/flex/client/control/MainController.as' did not match any file(s) known to git

--- org.openwms/trunk/source/org.openwms.client.flex.lib/src/main/flex/org/openwms/web/flex/client/control/MainController.as
+++ org.openwms/trunk/source/org.openwms.client.flex.lib/src/main/flex/org/openwms/web/flex/client/control/MainController.as
@@ -0,0 +1,83 @@
+/*
+ * openwms.org, the Open Warehouse Management System.
+ *
+ * This file is part of openwms.org.
+ *
+ * openwms.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * openwms.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software. If not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.openwms.web.flex.client.control
+{
+    import com.adobe.cairngorm.control.FrontController;
+
+    import org.openwms.web.flex.client.command.*;
+    import org.openwms.web.flex.client.event.*;
+
+    /**
+     * A MainController.
+     *
+     * @author Heiko Scherrer
+     * @version $Revision$
+     */
+    public class MainController extends FrontController
+    {
+        public function MainController():void
+        {
+            super();
+            setupEventHandler();
+        }
+
+        private function setupEventHandler():void
+        {
+            this.addCommand(UserEvent.LOAD_ALL_USERS, LoadUsersCommand);
+            this.addCommand(UserEvent.ADD_USER, AddUserCommand);
+            this.addCommand(UserEvent.SAVE_USER, SaveUserCommand);
+            this.addCommand(UserEvent.DELETE_USER, DeleteUserCommand);
+
+            this.addCommand(SwitchScreenEvent.SHOW_STARTSCREEN, ShowStartscreenCommand);
+            this.addCommand(SwitchScreenEvent.SHOW_MODULE_MGMT_VIEW, ShowModuleManagementViewCommand);
+            this.addCommand(SwitchScreenEvent.SHOW_LOCATION_VIEW, ShowLocationViewCommand);
+            this.addCommand(SwitchScreenEvent.SHOW_LOCATIONGROUP_VIEW, ShowLocationGroupCommand);
+            this.addCommand(SwitchScreenEvent.SHOW_USER_MGMT_VIEW, ShowUserManagementViewCommand);
+            this.addCommand(SwitchScreenEvent.SHOW_TRANSPORTUNIT_VIEW, ShowTransportUnitCommand);
+
+            this.addCommand(LoadLocationGroupsEvent.LOAD_ALL_LOCATION_GROUPS, LoadLocationGroupsCommand);
+            this.addCommand(LocationEvent.LOAD_ALL_LOCATIONS, LoadLocationsCommand);
+
+            this.addCommand(ApplicationEvent.LOAD_ALL_MODULES, LoadModulesCommand);
+            this.addCommand(ApplicationEvent.SAVE_MODULE, SaveModuleCommand);
+            this.addCommand(ApplicationEvent.DELETE_MODULE, DeleteModuleCommand);
+        }
+
+        /**
+         * Register a new command as handler for incoming events. If the event occurrs,
+         * the command is executed.
+         */
+        public function registerHander(event:String, command:Class):void
+        {
+            this.addCommand(event, command);
+        }
+
+        /**
+         * Unregister a command. This is useful when an application module is unloaded. In
+         * that case, all commands belonging to that module and that are registered previously
+         * must be unregistered again.
+         */
+        public function unregisterHandler(event:String):void
+        {
+            this.removeCommand(event)
+        }
+    }
+}


Adds convenience printing functions for stas tests

currently, printEquals and printTruthy are available, more might be added.

error: pathspec 'test/printers.as' did not match any file(s) known to git

--- test/printers.as
+++ test/printers.as
@@ -0,0 +1,21 @@
+package shunit {
+    public var printSuccess = true;
+    public function printEquals(actual: *, expected: *,
+                                description: String) : void {
+      if (actual != expected) {
+        trace('FAIL:', description +
+                       '. expected: "' + expected + '", actual: "' + actual + '"');
+      } else if (printSuccess) {
+        trace('PASS:', description);
+      }
+    }
+
+    public function printTruthy(value: *, description: String) : void {
+      if (!value) {
+        trace('FAIL:', description,
+              '. expected: true(thy), actual: "' + value + '"');
+      } else if (printSuccess) {
+        trace('PASS:', description);
+      }
+    }
+}


Reverting default background color for now.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/OnCircle/vpaid-wrapper.git/'


Update Gallery.as

Update Gallery.as

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/jerome-desmedt/daelysid.git/'


Add Enum class MetadataName.

Add Enum class MetadataName.

error: pathspec 'dolly-framework/src/main/actionscript/dolly/core/metadata/MetadataName.as' did not match any file(s) known to git

--- dolly-framework/src/main/actionscript/dolly/core/metadata/MetadataName.as
+++ dolly-framework/src/main/actionscript/dolly/core/metadata/MetadataName.as
@@ -0,0 +1,7 @@
+package dolly.core.metadata {
+public class MetadataName {
+
+	public static const CLONEABLE:String = "cloneable";
+	public static const COPYABLE:String = "copyable";
+}
+}


Create new test class: CopyingOfPropertyLevelCopyableCloneableClassTest.

error: pathspec 'dolly-framework/src/test/actionscript/dolly/CopyingOfPropertyLevelCopyableCloneableClassTest.as' did not match any file(s) known to git

--- dolly-framework/src/test/actionscript/dolly/CopyingOfPropertyLevelCopyableCloneableClassTest.as
+++ dolly-framework/src/test/actionscript/dolly/CopyingOfPropertyLevelCopyableCloneableClassTest.as
@@ -0,0 +1,67 @@
+package dolly {
+import dolly.core.dolly_internal;
+import dolly.data.PropertyLevelCopyableCloneableClass;
+
+import org.as3commons.reflect.Field;
+import org.as3commons.reflect.Type;
+import org.flexunit.asserts.assertEquals;
+import org.flexunit.asserts.assertFalse;
+import org.flexunit.asserts.assertNotNull;
+
+use namespace dolly_internal;
+
+public class CopyingOfPropertyLevelCopyableCloneableClassTest {
+
+	private var propertyLevelCopyableCloneableClass:PropertyLevelCopyableCloneableClass;
+	private var propertyLevelCopyableCloneableClassType:Type;
+
+	[Before]
+	public function before():void {
+		propertyLevelCopyableCloneableClass = new PropertyLevelCopyableCloneableClass();
+		propertyLevelCopyableCloneableClass.property1 = "property1 value";
+		propertyLevelCopyableCloneableClass.property2 = "property2 value";
+		propertyLevelCopyableCloneableClass.writableField1 = "writableField1 value";
+
+		propertyLevelCopyableCloneableClassType = Type.forInstance(propertyLevelCopyableCloneableClass);
+	}
+
+	[After]
+	public function after():void {
+		propertyLevelCopyableCloneableClass = null;
+		propertyLevelCopyableCloneableClassType = null;
+	}
+
+	[Test]
+	public function findingAllCopyableFieldsForType():void {
+		const copyableFields:Vector.<Field> = Copier.findCopyableFieldsForType(propertyLevelCopyableCloneableClassType);
+		assertNotNull(copyableFields);
+		assertEquals(2, copyableFields.length);
+		assertNotNull(copyableFields[0]);
+		assertNotNull(copyableFields[1]);
+	}
+
+	[Test]
+	public function copyingByCopier():void {
+		const copyInstance:PropertyLevelCopyableCloneableClass = Copier.copy(propertyLevelCopyableCloneableClass);
+		assertNotNull(copyInstance);
+		assertNotNull(copyInstance.property1);
+		assertEquals(copyInstance.property1, propertyLevelCopyableCloneableClass.property1);
+		assertNotNull(copyInstance.property2);
+		assertFalse(copyInstance.property2 == propertyLevelCopyableCloneableClass.property2);
+		assertNotNull(copyInstance.writableField1);
+		assertEquals(copyInstance.writableField1, propertyLevelCopyableCloneableClass.writableField1);
+	}
+
+	[Test]
+	public function copyingByCopyFunction():void {
+		const copyInstance:PropertyLevelCopyableCloneableClass = copy(propertyLevelCopyableCloneableClass);
+		assertNotNull(copyInstance);
+		assertNotNull(copyInstance.property1);
+		assertEquals(copyInstance.property1, propertyLevelCopyableCloneableClass.property1);
+		assertNotNull(copyInstance.property2);
+		assertFalse(copyInstance.property2 == propertyLevelCopyableCloneableClass.property2);
+		assertNotNull(copyInstance.writableField1);
+		assertEquals(copyInstance.writableField1, propertyLevelCopyableCloneableClass.writableField1);
+	}
+}
+}