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

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


The following commit(s) were added to refs/heads/develop by this push:
     new 63bad6b  Another fun function
63bad6b is described below

commit 63bad6b4ab5e4af2953fedc34fa01a301c50052e
Author: Harbs <[email protected]>
AuthorDate: Thu Jan 6 01:28:22 2022 +0200

    Another fun function
---
 .../projects/Core/src/main/royale/CoreClasses.as   |  1 +
 .../royale/utils/functional/delayFunction.as       | 69 ++++++++++++++++++++++
 .../test/royale/flexUnitTests/FunctionalTests.as   | 34 +++++++++++
 3 files changed, 104 insertions(+)

diff --git a/frameworks/projects/Core/src/main/royale/CoreClasses.as 
b/frameworks/projects/Core/src/main/royale/CoreClasses.as
index 48189b5..e3da6a1 100644
--- a/frameworks/projects/Core/src/main/royale/CoreClasses.as
+++ b/frameworks/projects/Core/src/main/royale/CoreClasses.as
@@ -383,6 +383,7 @@ internal class CoreClasses
        import org.apache.royale.utils.functional.debounceShort; debounceShort;
        import org.apache.royale.utils.functional.throttle; throttle;
        import org.apache.royale.utils.functional.animateFunction; 
animateFunction;
+       import org.apache.royale.utils.functional.delayFunction; delayFunction;
 
        import org.apache.royale.core.TextLineMetrics; TextLineMetrics;
        import org.apache.royale.utils.ClassSelectorList; ClassSelectorList;
diff --git 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/functional/delayFunction.as
 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/functional/delayFunction.as
new file mode 100644
index 0000000..44367f1
--- /dev/null
+++ 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/functional/delayFunction.as
@@ -0,0 +1,69 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.royale.utils.functional
+{
+       COMPILE::SWF{
+               import flash.utils.setTimeout;          
+               import flash.utils.clearTimeout;                
+       }
+       /**
+        * Returns a function which when run will invoke the wrapped function 
after a delay.
+        * Defaults to 0 which will execute at the next opportune time.
+        * In JS this uses requestAnimationFrame
+        * 
+   * @royalesuppressexport
+        * @langversion 3.0
+        * @productversion Royale 0.9.9
+        * 
+        */
+       public function delayFunction(method:Function, delay:Number=0):Function
+       {
+               return function(...args):void
+               {
+
+                       function callback():void
+                       {
+                               method.apply(null,args);
+                       }
+
+                       COMPILE::SWF
+                       {
+                               setTimeout(function():void{
+                                       callback();
+                               },delay);
+                       }
+
+                       COMPILE::JS
+                       {
+                               if(delay)
+                               {
+                                       setTimeout(function():void{
+                                               requestAnimationFrame(callback);
+                                       },delay);
+                               }
+                               else
+                               {
+                                       requestAnimationFrame(callback);
+                               }
+
+                       }
+
+               }
+       }
+}
\ No newline at end of file
diff --git 
a/frameworks/projects/Core/src/test/royale/flexUnitTests/FunctionalTests.as 
b/frameworks/projects/Core/src/test/royale/flexUnitTests/FunctionalTests.as
index 75f320c..f17c1a7 100644
--- a/frameworks/projects/Core/src/test/royale/flexUnitTests/FunctionalTests.as
+++ b/frameworks/projects/Core/src/test/royale/flexUnitTests/FunctionalTests.as
@@ -27,6 +27,7 @@ package flexUnitTests
     import org.apache.royale.utils.functional.*;
     import org.apache.royale.utils.functional.animateFunction;
     import org.apache.royale.test.asserts.assertTrue;
+    import org.apache.royale.test.asserts.assertEquals;
     
     public class FunctionalTests
     {          
@@ -226,6 +227,39 @@ package flexUnitTests
                 assertTrue(savedValue<3,"value should be 2");
             }, 300);
         }
+        public function testDelay():void
+        {
+            var foo:Foo = new Foo();
+            var delayedThis:Function = delayFunction(foo.increment,20);
+
+            delayedThis(1);
+
+            var firstThisValue:Number = foo.value;
+
+            var savedThisValue:Number;
+            setTimeout(function():void{
+                savedThisValue = foo.value;
+            },75);
+
+            var value:Number = 0;
+            function increment(val:Number):void{
+                value+=val;
+            }
+            var delayed:Function = delayFunction(increment,20);
+            delayed(1);
+            var firstValue:Number = value;
+            var savedValue:Number;
+            setTimeout(function():void{
+                savedValue = value;
+            },75);
+            Async.delayCall(this, function():void
+            {
+                assertEquals(firstThisValue,0,"foo value should be 0")
+                assertEquals(savedThisValue,1,"foo value should be 1")
+                assertEquals(firstValue,0,"value should be 0")
+                assertEquals(savedValue,1,"value should be 1")
+            }, 200);
+        }
 
 
     }

Reply via email to