/* * Copyright 2007 Google Inc. * * Licensed 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 com.google.gwt.dev.jjs.test; import com.google.gwt.junit.client.GWTTestCase; /** * TODO: document me. */ public class InnerOuterSuperTest extends GWTTestCase { /** * TODO: document me. */ public static class Outer { /** * TODO: document me. */ public class OuterIsNotSuper { public int getValue() { return value; } } /** * TODO: document me. */ public class OuterIsSuper extends Outer { public OuterIsSuper(int i) { super(i); } public int checkDispatch() { return 2; } public int checkDispatchFromSub1() { return super.checkDispatch(); } public int checkDispatchFromSub2() { return new Outer(1) { public int go() { return OuterIsSuper.super.checkDispatch(); } }.go(); } public OuterIsNotSuper unqualifiedAlloc() { return new OuterIsNotSuper(); } } /** * TODO: document me. */ public static class TestQualifiedSuperCall extends OuterIsNotSuper { public TestQualifiedSuperCall() { new Outer(1).new OuterIsSuper(2).super(); } } /** * TODO: document me. */ public class TestUnqualifiedSuperCall extends OuterIsNotSuper { public TestUnqualifiedSuperCall() { super(); } } protected final int value; public Outer(int i) { value = i; } public int checkDispatch() { return 1; } } private final Outer outer = new Outer(1); private final Outer.OuterIsSuper outerIsSuper = outer.new OuterIsSuper(2); public String getModuleName() { return "com.google.gwt.dev.jjs.CompilerSuite"; } public void testOuterIsNotSuper() { Outer.OuterIsNotSuper x = outerIsSuper.new OuterIsNotSuper(); assertEquals(2, x.getValue()); } public void testOuterIsNotSuperAnon() { Outer.OuterIsNotSuper x = outerIsSuper.new OuterIsNotSuper() { }; assertEquals(2, x.getValue()); } public void testQualifiedSuperCall() { Outer.TestQualifiedSuperCall x = new Outer.TestQualifiedSuperCall(); assertEquals(2, x.getValue()); } public void testQualifiedSuperCallAnon() { Outer.TestQualifiedSuperCall x = new Outer.TestQualifiedSuperCall() { }; assertEquals(2, x.getValue()); } public void testSuperDispatch() { assertEquals(1, outerIsSuper.checkDispatchFromSub1()); assertEquals(1, outerIsSuper.checkDispatchFromSub2()); } public void testUnqualifiedAlloc() { Outer.OuterIsNotSuper x = outerIsSuper.unqualifiedAlloc(); assertEquals(2, x.getValue()); } public void testUnqualifiedSuperCall() { Outer.TestUnqualifiedSuperCall x = outerIsSuper.new TestUnqualifiedSuperCall(); assertEquals(2, x.getValue()); } public void testUnqualifiedSuperCallAnon() { Outer.TestUnqualifiedSuperCall x = outerIsSuper.new TestUnqualifiedSuperCall() { }; assertEquals(2, x.getValue()); } }