/*
* Copyright 2010 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
package visagejdi;
import junit.framework.Assert;
import org.junit.Test;
/**
* M(mixin) B
* \ / |
* \__________/ |
* | |
* | |
* C A
* There is method called foo() defined in M , B, A. When you invoke foo() in M, B
* from another method in C say bar() its OK, but you cannot invoke foo() in A from
* bar() in C.
* @author srikalyanchandrashekar
*/
public class MixinTest extends JdbBase {
// @BeginTest Mixin.visage
//var mFooCalled = "false";
//var bFooCalled = "false";
//mixin class M {
// public function foo() : Void {
// mFooCalled = "true";
// println("M foo");
// }
//}
//
//class B {
// public function foo() : Void {
// bFooCalled = "true";
// println("B foo");
// }
//}
//
//class A extends B {
// override public function foo() : Void {
// println("A foo");
// }
//}
//
//class C extends B, M {
// public function bar() : Void {
// B.foo(); // LEGAL
// M.foo(); // LEGAL
// //A.foo(); // ILLEGAL: Not direct superclass or parent
// }
//}
// function run() {
// var tmp:C = C {};
// tmp.bar();
// println("Test ends here..");
// }
// @EndTest
public static String B_FOO = "Mixin.$bFooCalled";
public static String M_FOO = "Mixin.$mFooCalled";
@Test(timeout=5000)
public void testMixin() {
try {
//resetOutputs();//Uncomment this if you want to see the output on console
compile("Mixin.visage");
stop("in Mixin.visage$run$");
stop("in Mixin:32");
stop("in Mixin$C:25");
stop("in Mixin$C:26");
stop("in Mixin$C:28");
visagerun();
resumeToBreakpoint();
list();
resumeToBreakpoint();
list();
resumeToBreakpoint();
list();
resumeToBreakpoint();
list();
print(B_FOO);//This will print the value of Visage variable
//System.out.println(verifyValue(B_FOO, "true"));
Assert.assertTrue(contains(B_FOO + " = \"true\""));
resumeToBreakpoint();
list();
print(M_FOO);//This will print the value of Visage variable
//System.out.println(verifyValue(M_FOO, "true"));
Assert.assertTrue(contains(M_FOO + " = \"true\""));
resumeToVMDeath();
quit();
} catch (Exception exp) {
exp.printStackTrace();
Assert.fail(exp.getMessage());
}
}
}