blob: f025b5c925564ca688778c45767f6922a00b35e3 [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.royale.compiler.internal.codegen.js.amd;
import org.apache.royale.compiler.internal.test.AMDTestBase;
import org.apache.royale.compiler.tree.as.IFunctionNode;
import org.apache.royale.compiler.tree.as.IGetterNode;
import org.apache.royale.compiler.tree.as.ISetterNode;
import org.apache.royale.compiler.tree.as.IVariableNode;
import org.junit.Ignore;
import org.junit.Test;
/**
* This class tests the production of AMD JavaScript for the test project, class
* A.
*
* @author Michael Schmalle
*/
@Ignore
public class TestAMDClassA extends AMDTestBase
{
// !!! the errors have to do with how I change 'this' on member expressions
//--------------------------------------------------------------------------
// Class A
//--------------------------------------------------------------------------
@Test
public void test_field_msg()
{
IVariableNode vnode = findField("_msg", classNode);
asBlockWalker.visitVariable(vnode);
assertOut("_msg$1: {\n\tvalue:0,\n\twritable:true\n}");
}
@Test
public void test_constructor()
{
IFunctionNode vnode = findFunction("A", classNode);
asBlockWalker.visitFunction(vnode);
assertOut("function A(msg) {\n\tthis.msg = msg;\n}");
}
@Test
public void test_get_msg()
{
IGetterNode node = findGetter("msg", classNode);
asBlockWalker.visitGetter(node);
assertOut("msg: {\n\tget: function msg$get() {\n\t\treturn String(this._msg$1);\n\t},"
+ "\n\tset: function msg$set(value) {\n\t\tthis._msg$1 = parseInt(value, 10);\n\t}\n}");
}
@Test
public void test_set_msg()
{
ISetterNode node = findSetter("msg", classNode);
asBlockWalker.visitSetter(node);
assertOut("msg: {\n\tget: function msg$get() {\n\t\treturn String(this._msg$1);\n\t},"
+ "\n\tset: function msg$set(value) {\n\t\tthis._msg$1 = parseInt(value, 10);\n\t}\n}");
}
@Test
public void test_secret()
{
IFunctionNode vnode = findFunction("secret", classNode);
asBlockWalker.visitFunction(vnode);
assertOut("secret$1: function secret(n) {\n\treturn this.msg + n;\n}");
}
@Test
public void test_foo()
{
IFunctionNode vnode = findFunction("foo", classNode);
asBlockWalker.visitFunction(vnode);
assertOut("foo: function foo(x) {\n\treturn this.secret$1(A.bar(x));\n}");
}
@Test
public void test_baz()
{
IFunctionNode vnode = findFunction("baz", classNode);
asBlockWalker.visitFunction(vnode);
assertOut("baz: function baz() {\n\tvar tmp = AS3.bind(this, "
+ "\"secret$1\");\n\treturn tmp(\"-bound\");\n}");
}
@Test
public void test_bar()
{
IFunctionNode vnode = findFunction("bar", classNode);
asBlockWalker.visitFunction(vnode);
assertOut("bar: function bar(x) {\n\treturn x + 1;\n}");
}
@Test
public void test_file()
{
// not going to put this test production in until everything is concrete and agreed upon
asBlockWalker.visitFile(fileNode);
//assertOut("");
}
@Override
protected String getTypeUnderTest()
{
return "com.acme.A";
}
}
/*
--------------------------------------------------------------------------------
02-07-2013
Current Production of visitFile()
--------------------------------------------------------------------------------
define(["exports", "runtime/AS3", "classes/I", "classes/String", "classes/parseInt", "classes/trace"], function($exports, AS3, I, String, parseInt, trace) {
"use strict";
AS3.compilationUnit($exports, function($primaryDeclaration){
function A(msg) {
this.msg = msg;
}
$primaryDeclaration(AS3.class_({
package_: "com.acme",
class_: "A",
implements_: [
I
],
members: {
constructor: A,
_msg$1: {
value:0,
writable:true
},
msg: {
get: function msg$get() {
return String(this._msg$1);
},
set: function msg$set(value) {
this._msg$1 = parseInt(value, 10);
}
},
secret$1: function secret(n) {
return this.msg + n;
},
foo: function foo(x) {
return this.secret$1(A.bar(x));
},
baz: function baz() {
var tmp = AS3.bind(this, "secret$1");
return tmp("-bound");
}
},
staticMembers: {
bar: function bar(x) {
return x + 1;
}
}
}));
trace("Class A is initialized!");
});
});
*/