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

45 lines
1.2 KiB
Java

import org.aspectj.testing.Tester;
import java.util.*;
/**
* Inspired by aspect sandbox and submitted by Chris Dutchyn
*/
public class CflowBelowTest {
static final String[] expectedSteps = new String[] {
"Num.fact(4) within Num.fact(5) within another Num.fact(6)",
"Num.fact(3) within Num.fact(4) within another Num.fact(5)",
"Num.fact(2) within Num.fact(3) within another Num.fact(4)",
"Num.fact(1) within Num.fact(2) within another Num.fact(3)",
};
static List steps = new ArrayList();
static public void main( String[] args ) {
Tester.checkEqual(new Num().fact(6), 720);
Tester.checkEqual(steps.toArray(), expectedSteps, "steps");
}
}
class Num {
int fact(int x) {
if (x == 1)
return 1;
return x * fact(x - 1);
}
}
// check that cflows of nested calls obtain correct parameters
aspect CflowBelow01 {
before (int x1, int x2, int x3) :
call(int Num.fact(int)) && args(x1)
&& cflowbelow(call(int Num.fact(int)) && args(x2)
&& cflowbelow(call(int Num.fact(int)) && args(x3))) {
CflowBelowTest.steps.add("Num.fact(" + x1 +
") within Num.fact(" + x2 +
") within another Num.fact(" + x3 + ")");
}
}