org.aspectj/tests/new/RestrictingVisibilityCP.java
2002-12-16 18:51:06 +00:00

212 lines
8.4 KiB
Java

import org.aspectj.testing.Tester;
/** @testcase PR#536 overriding subclass method may be protected when superclass method has default access */
public class RestrictingVisibilityCP {
public static void main(String[] args) {
Tester.expectEventsInString(Const.EXPECTED);
Parent[] tests = new Parent[]
{ new Parent()
, new ValidChild()
, new ValidChild2()
, new ValidChild3()
, new ValidChildTest()
, new ValidChildTest2()
, new ValidChildTest3()
};
Parent child;
for (int i = 0; i< tests.length;i++) {
child = tests[i];
Tester.event(child.getClass().getName());
//System.err.println(", \"" + child.getClass().getName() + "\"");
child.publicAccess();
child.defaultAccess();
child.protectedAccess();
child.drivePrivateAccess();
}
Tester.checkAllEvents();
}
}
/** aspect used to log progess - test case otherwise purejava */
aspect LogAll {
before() : within(Parent+) && execution(* *(..)) {
String name = thisJoinPointStaticPart.toString();
Tester.event(name);
// System.err.println(", \"" + name + "\"");
}
}
class Parent {
public int publicAccess = 1;
protected int protectedAccess = 1;
int defaultAccess = 1;
private int privateAccess = 1;
public void publicAccess() {}
protected void protectedAccess() {}
void defaultAccess() {}
private void privateAccess() {}
void drivePrivateAccess() {
privateAccess();
}
}
class ValidChild extends Parent {
/** @testcase subclass public implementation of public method */
public void publicAccess() { super.publicAccess(); }
/** @testcase subclass protected implementation of protected method */
protected void protectedAccess() { super.protectedAccess(); }
/** @testcase subclass default implementation of default method */
void defaultAccess() { super.defaultAccess(); }
/** @testcase subclass implementation of private method - not overriding */
private void privateAccess() { }
void drivePrivateAccess() {
privateAccess();
super.drivePrivateAccess();
}
int publicAccessSub = publicAccess;
int protectedAccessSub = protectedAccess;
int defaultAccessSub = defaultAccess;
}
class ValidChild2 extends Parent {
/** @testcase subclass public implementation of protected method */
public void protectedAccess() { super.protectedAccess(); }
/** @testcase subclass public implementation of default method */
public void defaultAccess() { super.defaultAccess(); }
}
class ValidChild3 extends Parent {
/** @testcase subclass protected implementation of default method */
// todo: restore to restore ce
protected void defaultAccess() { super.defaultAccess(); }
}
class ValidChildTest extends ValidChild {
/** @testcase subsubclass public implementation of public method */
public void publicAccess() { super.publicAccess(); }
/** @testcase subsubclass protected implementation of protected method */
protected void protectedAccess() { super.protectedAccess(); }
/** @testcase subsubclass default implementation of default method */
void defaultAccess() { super.defaultAccess(); }
/** @testcase subsubclass implementation of private method - not overriding */
private void privateAccess() { }
void drivePrivateAccess() {
privateAccess();
super.drivePrivateAccess();
}
}
class ValidChildTest2 extends ValidChild {
/** @testcase subsubclass public implementation of protected method */
public void protectedAccess() { super.protectedAccess(); }
/** @testcase subsubclass public implementation of default method */
public void defaultAccess() { super.defaultAccess(); }
}
class ValidChildTest3 extends ValidChild {
/** @testcase PR#536 subsubclass protected implementation of default method */
// todo protected void defaultAccess() { super.defaultAccess(); }
}
class ValidChild5 extends Parent {
int one = publicAccess;
int two = protectedAccess;
int three = defaultAccess;
}
class ValidClass {
static int[] ra;
static {
ra = new int[]
{ (new Parent()).publicAccess
, (new ValidChild()).publicAccess
, (new ValidChildTest()).publicAccess
, (new Parent()).defaultAccess
, (new ValidChild()).defaultAccess
, (new ValidChildTest()).defaultAccess
, (new Parent()).protectedAccess
, (new ValidChild()).protectedAccess
, (new ValidChildTest()).protectedAccess
};
for (int i = 0; i < ra.length; i++) {
Tester.check(1 == ra[i],
"expected 1 at " + i + " got i" + ra[i]);
}
}
}
class Const {
public static final String[] EXPECTED = new String[]
{ "Parent"
, "execution(void Parent.publicAccess())"
, "execution(void Parent.defaultAccess())"
, "execution(void Parent.protectedAccess())"
, "execution(void Parent.drivePrivateAccess())"
, "execution(void Parent.privateAccess())"
, "ValidChild"
, "execution(void ValidChild.publicAccess())"
, "execution(void Parent.publicAccess())"
, "execution(void ValidChild.defaultAccess())"
, "execution(void Parent.defaultAccess())"
, "execution(void ValidChild.protectedAccess())"
, "execution(void Parent.protectedAccess())"
, "execution(void ValidChild.drivePrivateAccess())"
, "execution(void ValidChild.privateAccess())"
, "execution(void Parent.drivePrivateAccess())"
, "execution(void Parent.privateAccess())"
, "ValidChild2"
, "execution(void Parent.publicAccess())"
, "execution(void ValidChild2.defaultAccess())"
, "execution(void Parent.defaultAccess())"
, "execution(void ValidChild2.protectedAccess())"
, "execution(void Parent.protectedAccess())"
, "execution(void Parent.drivePrivateAccess())"
, "execution(void Parent.privateAccess())"
, "ValidChild3"
, "execution(void Parent.publicAccess())"
, "execution(void ValidChild3.defaultAccess())"
, "execution(void Parent.defaultAccess())"
, "execution(void Parent.protectedAccess())"
, "execution(void Parent.drivePrivateAccess())"
, "execution(void Parent.privateAccess())"
, "execution(void ValidChildTest.publicAccess())"
, "execution(void ValidChild.publicAccess())"
, "execution(void Parent.publicAccess())"
, "ValidChildTest"
, "execution(void ValidChildTest.defaultAccess())"
, "execution(void ValidChild.defaultAccess())"
, "execution(void Parent.defaultAccess())"
, "execution(void ValidChildTest.protectedAccess())"
, "execution(void ValidChild.protectedAccess())"
, "execution(void Parent.protectedAccess())"
, "execution(void ValidChildTest.drivePrivateAccess())"
, "execution(void ValidChildTest.privateAccess())"
, "execution(void ValidChild.drivePrivateAccess())"
, "execution(void ValidChild.privateAccess())"
, "execution(void Parent.drivePrivateAccess())"
, "execution(void Parent.privateAccess())"
, "ValidChildTest2"
, "execution(void ValidChild.publicAccess())"
, "execution(void Parent.publicAccess())"
, "execution(void ValidChildTest2.defaultAccess())"
, "execution(void ValidChild.defaultAccess())"
, "execution(void Parent.defaultAccess())"
, "execution(void ValidChildTest2.protectedAccess())"
, "execution(void ValidChild.protectedAccess())"
, "execution(void Parent.protectedAccess())"
, "execution(void ValidChild.drivePrivateAccess())"
, "execution(void ValidChild.privateAccess())"
, "execution(void Parent.drivePrivateAccess())"
, "execution(void Parent.privateAccess())"
, "ValidChildTest3"
, "execution(void ValidChild.publicAccess())"
, "execution(void Parent.publicAccess())"
, "execution(void ValidChild.defaultAccess())"
, "execution(void Parent.defaultAccess())"
, "execution(void ValidChild.protectedAccess())"
, "execution(void Parent.protectedAccess())"
, "execution(void ValidChild.drivePrivateAccess())"
, "execution(void ValidChild.privateAccess())"
, "execution(void Parent.drivePrivateAccess())"
, "execution(void Parent.privateAccess())"
};
}