blob: 3ba79e7441385a9944457fc89b108d3f624acd6f [file] [log] [blame]
/*
*
* 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.flex.compiler.internal.codegen.js.vf2js;
import org.apache.flex.compiler.driver.IBackend;
import org.apache.flex.compiler.internal.codegen.js.goog.TestGoogExpressions;
import org.apache.flex.compiler.internal.driver.js.vf2js.VF2JSBackend;
import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
import org.apache.flex.compiler.tree.as.IFunctionCallNode;
import org.apache.flex.compiler.tree.as.IFunctionNode;
import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
import org.apache.flex.compiler.tree.as.IVariableNode;
import org.junit.Ignore;
import org.junit.Test;
/**
* @author Erik de Bruin
*/
public class TestVF2JSExpressions extends TestGoogExpressions
{
@Ignore
@Override
@Test
public void testVisitLanguageIdentifierNode_SuperMember()
{
// (erikdebruin) this test doesn't make sense in VF2JS context
IMemberAccessExpressionNode node = (IMemberAccessExpressionNode) getNode(
"if (a) super.foo;", IMemberAccessExpressionNode.class);
asBlockWalker.visitMemberAccessExpression(node);
assertOut("super.foo");
}
@Override
@Test
public void testVisitLanguageIdentifierNode_SuperMethod_1()
{
IFunctionNode node = getMethod("function foo(){if (a) super.foo();}");
asBlockWalker.visitFunction(node);
assertOut("FalconTest_A.prototype.foo = function() {\n if (a)\n FalconTest_A.base(this, 'foo');\n}");
}
@Override
@Test
public void testVisitLanguageIdentifierNode_SuperMethod_2()
{
IFunctionNode node = getMethod("function foo(){if (a) super.foo(a, b, c);}");
asBlockWalker.visitFunction(node);
assertOut("FalconTest_A.prototype.foo = function() {\n if (a)\n FalconTest_A.base(this, 'foo', a, b, c);\n}");
}
@Override
@Test
public void testAnonymousFunctionWithParamsReturn()
{
IVariableNode node = (IVariableNode) getNode(
"var a:Object = function(foo:int, bar:String = 'goo'):int{return -1;};",
IVariableNode.class);
asBlockWalker.visitVariable(node);
assertOut("var /** @type {Object} */ a = function(foo, bar) {\n bar = typeof bar !== 'undefined' ? bar : 'goo';\n return -1;\n}");
}
@Override
@Test
public void testAnonymousFunctionAsArgument()
{
IFunctionCallNode node = (IFunctionCallNode) getNode(
"addListener('foo', function(event:Object):void{doit();})",
IFunctionCallNode.class);
asBlockWalker.visitFunctionCall(node);
assertOut("addListener('foo', function(event) {\n doit();\n})");
}
@Override
@Test
public void testVisitAs()
{
IBinaryOperatorNode node = getBinaryNode("a as b");
asBlockWalker.visitBinaryOperator(node);
assertOut("org.apache.flex.utils.Language.as(a, b)");
}
@Test
public void testVisitAs2()
{
IFunctionNode node = (IFunctionNode) getNode(
"public class B {public function b(o:Object):int { var a:B; a = o as B; }}",
IFunctionNode.class, WRAP_LEVEL_PACKAGE, true);
asBlockWalker.visitFunction(node);
assertOut("/**\n * @export\n * @param {Object} o\n * @return {number}\n */\nfoo.bar.B.prototype.b = function(o) {\n var /** @type {foo.bar.B} */ a;\n a = org.apache.flex.utils.Language.as(o, foo.bar.B);\n}");
}
@Override
@Test
public void testVisitBinaryOperator_Is()
{
IBinaryOperatorNode node = getBinaryNode("a is b");
asBlockWalker.visitBinaryOperator(node);
assertOut("org.apache.flex.utils.Language.is(a, b)");
}
protected IBackend createBackend()
{
return new VF2JSBackend();
}
}