Pārlūkot izejas kodu

more test cases covering generics in pointcut expressions

tags/PRE_ANDY
acolyer pirms 19 gadiem
vecāks
revīzija
ceb8d52735

+ 17
- 0
tests/java5/generics/pointcuts/GenericSignatureMatching.aj Parādīt failu

@@ -0,0 +1,17 @@
public aspect GenericSignatureMatching {
// tests that references to a generic or parameterized type are
// always matched by a type pattern refering to the raw type form
void someCode() {
ConcreteImplementingClass cic = new ConcreteImplementingClass();
cic.asInt(5.0d);
GenericImplementingClass<Long> gic = new GenericImplementingClass<Long>();
gic.asInt(55L);
}
declare warning :
execution<T>(* GenericInterface<T extends Number>.asInt(T)) :
"execution<T>(* GenericInterface<T extends Number>.asInt(T))";
}

+ 13
- 0
tests/java5/generics/pointcuts/HandlerPointcutTests.aj Parādīt failu

@@ -0,0 +1,13 @@
public aspect HandlerPointcutTests {

// CE line 4 - no type variables allowed in handler
pointcut exceptionHandler() : handler<T>(GenericInterface<T>);
// CE line 8 - no parameterized types
// CW line 8 - unresolved absolute type name T
pointcut unboundTypeInHandler() : handler(GenericInterface<T>);
// CE line 11 - no parameterized types
pointcut parameterizedHandler() : handler(GenericInterface<Double>);

}

+ 14
- 0
tests/java5/generics/pointcuts/ParameterizedTypesInAnnotationPatterns.aj Parādīt failu

@@ -0,0 +1,14 @@
import java.util.List;

public aspect ParameterizedTypesInAnnotationPatterns {
// CE - not an annotation type
pointcut simple() : staticinitialization(@List<String> String);
// CE - not an annotation type
pointcut generic() : staticinitialization<T>(@List<T> Class<T>);
// no CE, good enough for now? may improve error reporting for this later
pointcut combined() : staticinitialization(@(Foo || List<String>) String);
}

@interface Foo {}

+ 15
- 0
tests/java5/generics/pointcuts/ParameterizedTypesInAtPCDs.aj Parādīt failu

@@ -0,0 +1,15 @@
public aspect ParameterizedTypesInAtPCDs {
public pointcut atthis() : @this(List<String>);
public pointcut attarget() : @target(List<String>);
public pointcut atargs() : @args(List<String>);
public pointcut atannotation() : @annotation(List<String>);
public pointcut atwithin() : @within(List<String>);
public pointcut atwithincode() : @withincode(List<String>);
}

+ 28
- 0
tests/java5/generics/pointcuts/PointcutsThatDontAllowTypeVars.aj Parādīt failu

@@ -0,0 +1,28 @@
public aspect PointcutsThatDontAllowTypeVars {
public pointcut handlerWithVars() : handler<T>(*);
public pointcut cflowWithVars() : cflow<T>(ifWithVars());
public pointcut cflowbelowWithVars() : cflowbelow<S>(ifWithVars());
public pointcut thisWithVars() : this<T>(String);
public pointcut targetWithVars() : target<T>(String);
public pointcut argsWithVars() : args<T>(String);
public pointcut atthisWithVars() : @this<T>(*);
public pointcut attargetWithVars() : @target<T>(*);
public pointcut atargsWithVars() : @args<T>(*);
public pointcut atwithinWithVars() : @within<T>(*);
public pointcut atwithincodeWithVars() : @withincode<T>(*);
public pointcut atannotationWithVars() : @annotation<T>(*);

public pointcut ifWithVars() : if<T>(true); // message for this one should be improved...
}

+ 90
- 0
tests/src/org/aspectj/systemtest/ajc150/GenericsTests.java Parādīt failu

@@ -13,6 +13,75 @@ import org.aspectj.testing.XMLBasedAjcTestCase;

public class GenericsTests extends XMLBasedAjcTestCase {

/*==========================================
* Generics test plan for pointcuts.
*
* handler PASS
* - does not permit type var spec
* - does not permit generic type (fail with type not found)
* - does not permit parameterized types
* if PASS
* - does not permit type vars
* cflow PASS
* - does not permit type vars
* cflowbelow PASS
* - does not permit type vars
* @this PASS
* - does not permit type vars PASS
* - does not permit parameterized type PASS
* @target PASS
* - does not permit type vars PASS
* - does not permit parameterized type PASS
* @args PASS
* - does not permit type vars PASS
* - does not permit parameterized type PASS
* @annotation PASS
* - does not permit type vars PASS
* - does not permit parameterized type PASS
* @within, @within code - as above PASS
* annotation type pattern with generic and parameterized types PASS
* - just make sure that annotation interfaces can never be generic first! VERIFIED
* - @Foo<T> should fail PASS
* - @Foo<String> should fail PASS
* - @(Foo || Bar<T>) should fail DEFERRED (not critical)
* staticinitialization
* - error on parameterized type
* - permit parameterized type +
* - wrong number of parameters in parameterized type
* - generic type with one type parameter
* - generic type with n type parameters
* - generic type with bounds [extends, extends + i/f's]
* - generic type with wrong number of type params
* - wildcards in bounds
* within
* - as above, but allows parameterized type
* - wildcards in type parameters
* this
* - no type vars
* - parameterized types
* - implements
* - instanceof
* target
* - as this
* args
* - as this/target, plus...
* - known static match
* - known static match fail
* - maybe match with unchecked warning
* get & set
* - parameterized type
* - generic type
* - return type is type variable
* - return type is parameterized
* initialization, preinitialization
* - type variables as type params
* - no join points for parameterized types
* execution, withincode
* - wait till we get there!
* call
* - wait till we get there!
*/
public static Test suite() {
return XMLBasedAjcTestCase.loadSuite(GenericsTests.class);
}
@@ -179,6 +248,22 @@ public class GenericsTests extends XMLBasedAjcTestCase {
// 2. ITDF

// -- Pointcut tests...

public void testHandlerWithGenerics() {
runTest("handler pcd and generics / type vars");
}
public void testPointcutsThatDontAllowTypeVars() {
runTest("pointcuts that dont allow type vars");
}
public void testParameterizedTypesInAtPCDs() {
runTest("annotation pcds with parameterized types");
}
public void testAnnotationPatternsWithParameterizedTypes() {
runTest("annotation patterns with parameterized types");
}
public void testExecutionWithRawType() {
runTest("execution pcd with raw type matching");
@@ -192,6 +277,11 @@ public class GenericsTests extends XMLBasedAjcTestCase {
runTest("execution pcd with generic declaring type and erased parameter types");
}
// not passing yet...
// public void testExecutionWithGenericSignature() {
// runTest("execution pcd with generic signature matching");
// }
// --- helpers
// Check the signature attribute on a class is correct

+ 52
- 0
tests/src/org/aspectj/systemtest/ajc150/ajc150.xml Parādīt failu

@@ -2464,6 +2464,52 @@
<!-- end of generic decps -->
<!-- generics and pointcuts -->

<ajc-test dir="java5/generics/pointcuts" title="handler pcd and generics / type vars">
<compile files="GenericInterface.java,HandlerPointcutTests.aj" options="-1.5">
<message kind="error" line="4" text="Syntax error on token"/>
<message kind="error" line="8" text="a parameterized type pattern may not be used in a handler pointcut expression"/>
<message kind="warning" line="8" text="no match for this type name: T"/>
<message kind="error" line="11" text="a parameterized type pattern may not be used in a handler pointcut expression"/>
</compile>
</ajc-test>

<ajc-test dir="java5/generics/pointcuts" title="pointcuts that dont allow type vars">
<compile files="PointcutsThatDontAllowTypeVars.aj" options="-1.5">
<message kind="error" line="3" text="Syntax error on token"/>
<message kind="error" line="5" text="Syntax error on token"/>
<message kind="error" line="7" text="Syntax error on token"/>
<message kind="error" line="9" text="Syntax error on token"/>
<message kind="error" line="11" text="Syntax error on token"/>
<message kind="error" line="13" text="Syntax error on token"/>
<message kind="error" line="15" text="Syntax error on token"/>
<message kind="error" line="17" text="Syntax error on token"/>
<message kind="error" line="19" text="Syntax error on token"/>
<message kind="error" line="21" text="Syntax error on token"/>
<message kind="error" line="23" text="Syntax error on token"/>
<message kind="error" line="25" text="Syntax error on token"/>
<message kind="error" line="27" text="Syntax error on token"/>
</compile>
</ajc-test>
<ajc-test dir="java5/generics/pointcuts" title="annotation pcds with parameterized types">
<compile files="ParameterizedTypesInAtPCDs.aj" options="-1.5">
<message kind="error" line="3" text="Syntax error on token"/>
<message kind="error" line="5" text="Syntax error on token"/>
<message kind="error" line="7" text="Syntax error on token"/>
<message kind="error" line="9" text="Syntax error on token"/>
<message kind="error" line="11" text="Syntax error on token"/>
<message kind="error" line="13" text="Syntax error on token"/>
</compile>
</ajc-test>
<ajc-test dir="java5/generics/pointcuts" title="annotation patterns with parameterized types">
<compile files="ParameterizedTypesInAnnotationPatterns.aj" options="-1.5">
<message kind="error" line="5" text="is not an annotation type"/>
<message kind="error" line="7" text="is not an annotation type"/>
</compile>
</ajc-test>
<ajc-test dir="java5/generics/pointcuts" title="execution pcd with raw type matching">
<compile files="GenericInterface.java,ConcreteImplementingClass.java,GenericImplementingClass.java,RawTypeMatching.aj" options="-1.5">
@@ -2484,6 +2530,12 @@
</compile>
</ajc-test>

<ajc-test dir="java5/generics/pointcuts" title="execution pcd with generic signature matching">
<compile files="GenericInterface.java,ConcreteImplementingClass.java,GenericImplementingClass.java,GenericSignatureMatching.aj" options="-1.5">
<message kind="warning" line="4" text="execution&lt;T&gt;(* GenericInterface&lt;T extends Number&gt;.asInt(T))"/>
<message kind="warning" line="5" text="execution&lt;T&gt;(* GenericInterface&lt;T extends Number&gt;.asInt(T))"/>
</compile>
</ajc-test>
<!-- end of generics and pointcuts tests -->
<!-- ============================================================== -->

Notiek ielāde…
Atcelt
Saglabāt