| /* |
| * |
| * 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 as; |
| |
| import org.junit.Test; |
| |
| /** |
| * Feature tests for AS Namespaces. |
| */ |
| public class ASVariableTests extends ASFeatureTestsBase |
| { |
| @Test |
| public void ASVariableTests_stringInitializeEmptyString() |
| { |
| // all tests can assume that flash.display.Sprite |
| // flash.system.System and flash.events.Event have been imported |
| String[] imports = new String[] |
| { |
| }; |
| String[] declarations = new String[] |
| { |
| "public static const foo:String = ''", |
| }; |
| String[] testCode = new String[] |
| { |
| "assertEqual('empty string', foo, '');", |
| }; |
| String source = getAS(imports, declarations, testCode, new String[0]); |
| compileAndRun(source); |
| } |
| |
| @Test |
| public void ASVariableTests_stringInitializeNull() |
| { |
| // all tests can assume that flash.display.Sprite |
| // flash.system.System and flash.events.Event have been imported |
| String[] imports = new String[] |
| { |
| }; |
| String[] declarations = new String[] |
| { |
| "public static const foo:String = null", |
| }; |
| String[] testCode = new String[] |
| { |
| "assertEqual('null', foo, null);", |
| }; |
| String source = getAS(imports, declarations, testCode, new String[0]); |
| compileAndRun(source); |
| } |
| |
| @Test |
| public void ASVariableTests_stringInitializeUndefined() |
| { |
| // all tests can assume that flash.display.Sprite |
| // flash.system.System and flash.events.Event have been imported |
| String[] imports = new String[] |
| { |
| }; |
| String[] declarations = new String[] |
| { |
| "public static const foo:String = undefined", |
| }; |
| String[] testCode = new String[] |
| { |
| "assertEqual('null', foo, null);", |
| }; |
| String source = getAS(imports, declarations, testCode, new String[0]); |
| compileAndRun(source); |
| } |
| |
| @Test |
| public void ASVariableTests_AnyInitializeUndefined() |
| { |
| // all tests can assume that flash.display.Sprite |
| // flash.system.System and flash.events.Event have been imported |
| String[] imports = new String[] |
| { |
| }; |
| String[] declarations = new String[] |
| { |
| "public static const foo:* = undefined", |
| }; |
| String[] testCode = new String[] |
| { |
| "assertEqual('null', foo, undefined);", |
| }; |
| String source = getAS(imports, declarations, testCode, new String[0]); |
| compileAndRun(source); |
| } |
| |
| @Test |
| public void ASVariableTests_localVarSameNameAsPrivateMethodError() |
| { |
| // all tests can assume that flash.display.Sprite |
| // flash.system.System and flash.events.Event have been imported |
| String[] imports = new String[] |
| { |
| }; |
| String[] declarations = new String[] |
| { |
| "private function isVertical():Boolean { return false; }", |
| }; |
| String[] testCode = new String[] |
| { |
| // this threw an exception when the generated code |
| // tried to call the value of the local var. |
| // mxmlc will generate a call to the method |
| // without require a this.isVertical to reference |
| // the instance method. |
| "var isVertical:Boolean = isVertical();", |
| "assertEqual('null', isVertical, false);", |
| }; |
| String source = getAS(imports, declarations, testCode, new String[0]); |
| compileAndExpectErrors(source, false, false, false, new String[0], |
| "Call to isVertical is not a function.\n"); |
| } |
| |
| @Test |
| public void ASVariableTests_constIsClassCastFunction() |
| { |
| // all tests can assume that flash.display.Sprite |
| // flash.system.System and flash.events.Event have been imported |
| String[] imports = new String[] |
| { |
| }; |
| String[] declarations = new String[] |
| { |
| "private const innerClass:InnerClass = null;", |
| }; |
| String[] testCode = new String[] |
| { |
| "if (false) { var test:Object = innerClass('foo')};", |
| }; |
| String[] extraCode = new String[] |
| { |
| "class InnerClass", |
| "{", |
| " public function InnerClass(obj:Object)", |
| " {", |
| " }", |
| "}" |
| }; |
| String source = getAS(imports, declarations, testCode, extraCode); |
| compileAndRun(source); |
| } |
| |
| @Test |
| public void ASVariableTests_localVarSameNameAsPrivateMethod() |
| { |
| // all tests can assume that flash.display.Sprite |
| // flash.system.System and flash.events.Event have been imported |
| String[] imports = new String[] |
| { |
| }; |
| String[] declarations = new String[] |
| { |
| "private function isVertical():Boolean { return false; }", |
| }; |
| String[] testCode = new String[] |
| { |
| // this threw an exception when the generated code |
| // tried to call the value of the local var. |
| // mxmlc will generate a call to the method |
| // without require a this.isVertical to reference |
| // the instance method. |
| "var isVertical:Boolean = isVertical();", |
| "assertEqual('null', isVertical, false);", |
| }; |
| String source = getAS(imports, declarations, testCode, new String[0]); |
| compileAndRun(source, false, false, false, new String[]{ "-compiler.mxml.compatibility-version=4.6.0" } ); |
| } |
| |
| @Test |
| public void ASVariableTests_setter() |
| { |
| // all tests can assume that flash.display.Sprite |
| // flash.system.System and flash.events.Event have been imported |
| String[] imports = new String[] |
| { |
| }; |
| String[] declarations = new String[] |
| { |
| "private var _hello:String;", |
| "public function get hello():String {", |
| " return _hello; }", |
| "public function set hello(value:String):void {", |
| " _hello = value; }", |
| "public function test():void {", |
| " this.hello = 'bye'; }", |
| }; |
| String[] testCode = new String[] |
| { |
| "test();", |
| "assertEqual('hello', hello, 'bye');", |
| }; |
| String source = getAS(imports, declarations, testCode, new String[0]); |
| compileAndRun(source); |
| } |
| |
| @Test |
| public void ASVariableTests_setterBothPrivate() |
| { |
| // all tests can assume that flash.display.Sprite |
| // flash.system.System and flash.events.Event have been imported |
| String[] imports = new String[] |
| { |
| }; |
| String[] declarations = new String[] |
| { |
| "private var _hello:String;", |
| "private function get hello():String {", |
| " return _hello; }", |
| "private function set hello(value:String):void {", |
| " _hello = value; }", |
| "public function test():void {", |
| " this.hello = 'bye'; }", |
| }; |
| String[] testCode = new String[] |
| { |
| "test();", |
| "assertEqual('hello', hello, 'bye');", |
| }; |
| String source = getAS(imports, declarations, testCode, new String[0]); |
| compileAndRun(source); |
| } |
| |
| @Test |
| public void ASVariableTests_setterBothCustomNamespace() |
| { |
| // all tests can assume that flash.display.Sprite |
| // flash.system.System and flash.events.Event have been imported |
| String[] imports = new String[] |
| { |
| "import flash.utils.flash_proxy;", |
| "use namespace flash_proxy;" |
| }; |
| String[] declarations = new String[] |
| { |
| "private var _hello:String;", |
| "flash_proxy function get hello():String {", |
| " return _hello; }", |
| "flash_proxy function set hello(value:String):void {", |
| " _hello = value; }", |
| "public function test():void {", |
| " this.hello = 'bye'; }", |
| }; |
| String[] testCode = new String[] |
| { |
| "test();", |
| "assertEqual('hello', hello, 'bye');", |
| }; |
| String source = getAS(imports, declarations, testCode, new String[0]); |
| compileAndRun(source); |
| } |
| |
| @Test |
| public void ASVariableTests_setterPrivateGetterPublic() |
| { |
| // all tests can assume that flash.display.Sprite |
| // flash.system.System and flash.events.Event have been imported |
| String[] imports = new String[] |
| { |
| }; |
| String[] declarations = new String[] |
| { |
| "private var _hello:String;", |
| "public function get hello():String {", |
| " return _hello; }", |
| "private function set hello(value:String):void {", |
| " _hello = value; }", |
| "public function test():void {", |
| " this.hello = 'bye'; }", |
| }; |
| String[] testCode = new String[] |
| { |
| "test();", |
| "assertEqual('hello', hello, 'bye');", |
| }; |
| String source = getAS(imports, declarations, testCode, new String[0]); |
| compileAndExpectErrors(source, false, false, false, new String[0], "Property hello is read-only.\n"); |
| } |
| |
| @Test |
| public void ASVariableTests_setterPrivateGetterPublicWithNamespace() |
| { |
| // all tests can assume that flash.display.Sprite |
| // flash.system.System and flash.events.Event have been imported |
| String[] imports = new String[] |
| { |
| }; |
| String[] declarations = new String[] |
| { |
| "private var _hello:String;", |
| "public function get hello():String {", |
| " return _hello; }", |
| "private function set hello(value:String):void {", |
| " _hello = value; }", |
| "public function test():void {", |
| " this.private::hello = 'bye'; }", |
| }; |
| String[] testCode = new String[] |
| { |
| "test();", |
| "assertEqual('hello', hello, 'bye');", |
| }; |
| String source = getAS(imports, declarations, testCode, new String[0]); |
| compileAndRun(source); |
| } |
| |
| /* |
| public void ASVariableTests_VectorInitializer() |
| { |
| // all tests can assume that flash.display.Sprite |
| // flash.system.System and flash.events.Event have been imported |
| String[] imports = new String[] |
| { |
| }; |
| String[] declarations = new String[] |
| { |
| "public static var arr:Array = Array('foo', 'bar', 'baz');", |
| "public static var foo:Vector.<String> = new Vector.<String>('foo', 'bar', 'baz');", |
| "public static var bar:Vector.<String> = Vector.<String>('foo', 'bar', 'baz');", |
| }; |
| String[] testCode = new String[] |
| { |
| "assertEqual('length', foo.length, 3, 4);", |
| }; |
| String source = getAS(imports, declarations, testCode, new String[0]); |
| compileAndRun(source); |
| } |
| */ |
| } |