/* * * 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); } */ }