Skip to content

Commit

Permalink
Refined tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
raphw committed Mar 4, 2016
1 parent 5bba797 commit 3451c31
Showing 1 changed file with 33 additions and 16 deletions.
Expand Up @@ -13,6 +13,8 @@ public class AdviceTest {


private static final String FOO = "foo", BAR = "bar", QUX = "qux"; private static final String FOO = "foo", BAR = "bar", QUX = "qux";


private static final String ENTER = "enter", EXIT = "exit";

@Test @Test
public void testTrivialAdvice() throws Exception { public void testTrivialAdvice() throws Exception {
Class<?> type = new ByteBuddy() Class<?> type = new ByteBuddy()
Expand All @@ -22,6 +24,8 @@ public void testTrivialAdvice() throws Exception {
.load(null, ClassLoadingStrategy.Default.WRAPPER) .load(null, ClassLoadingStrategy.Default.WRAPPER)
.getLoaded(); .getLoaded();
assertThat(type.getDeclaredMethod(FOO).invoke(type.newInstance()), is((Object) FOO)); assertThat(type.getDeclaredMethod(FOO).invoke(type.newInstance()), is((Object) FOO));
assertThat(type.getDeclaredField(ENTER).get(null), is((Object) 1));
assertThat(type.getDeclaredField(EXIT).get(null), is((Object) 1));
} }


@Test @Test
Expand All @@ -33,6 +37,8 @@ public void testAdviceWithImplicitArgument() throws Exception {
.load(null, ClassLoadingStrategy.Default.WRAPPER) .load(null, ClassLoadingStrategy.Default.WRAPPER)
.getLoaded(); .getLoaded();
assertThat(type.getDeclaredMethod(BAR, String.class).invoke(type.newInstance(), BAR), is((Object) BAR)); assertThat(type.getDeclaredMethod(BAR, String.class).invoke(type.newInstance(), BAR), is((Object) BAR));
assertThat(type.getDeclaredField(ENTER).get(null), is((Object) 1));
assertThat(type.getDeclaredField(EXIT).get(null), is((Object) 1));
} }


@Test @Test
Expand All @@ -44,34 +50,35 @@ public void testAdviceWithExplicitArgument() throws Exception {
.load(null, ClassLoadingStrategy.Default.WRAPPER) .load(null, ClassLoadingStrategy.Default.WRAPPER)
.getLoaded(); .getLoaded();
assertThat(type.getDeclaredMethod(QUX, String.class, String.class).invoke(type.newInstance(), FOO, BAR), is((Object) (FOO + BAR))); assertThat(type.getDeclaredMethod(QUX, String.class, String.class).invoke(type.newInstance(), FOO, BAR), is((Object) (FOO + BAR)));
assertThat(type.getDeclaredField(ENTER).get(null), is((Object) 1));
assertThat(type.getDeclaredField(EXIT).get(null), is((Object) 1));
} }


@Test(expected = IllegalArgumentException.class) @Test(expected = IllegalArgumentException.class)
public void testAdviceWithoutAnnotations() throws Exception { public void testAdviceWithoutAnnotations() throws Exception {
new ByteBuddy() Advice.to(Object.class);
.redefine(Sample.class)
.visit(new AsmVisitorWrapper.ForDeclaredMethods().method(named(QUX), Advice.to(Object.class)))
.make();
} }


@Test(expected = IllegalStateException.class) @Test(expected = IllegalStateException.class)
public void testAdviceWithNonAssignableArgument() throws Exception { public void testAdviceWithNonExistentArgument() throws Exception {
new ByteBuddy() new ByteBuddy()
.redefine(Sample.class) .redefine(Sample.class)
.visit(new AsmVisitorWrapper.ForDeclaredMethods().method(named(QUX), Advice.to(IllegalAdvice.class))) .visit(new AsmVisitorWrapper.ForDeclaredMethods().method(named(FOO), Advice.to(IllegalAdvice.class)))
.make(); .make();
} }


@Test(expected = IllegalStateException.class) @Test(expected = IllegalStateException.class)
public void testAdviceWithNonExistantArgument() throws Exception { public void testAdviceWithNonAssignableArgument() throws Exception {
new ByteBuddy() new ByteBuddy()
.redefine(Sample.class) .redefine(Sample.class)
.visit(new AsmVisitorWrapper.ForDeclaredMethods().method(named(FOO), Advice.to(IllegalAdvice.class))) .visit(new AsmVisitorWrapper.ForDeclaredMethods().method(named(BAR), Advice.to(IllegalAdvice.class)))
.make(); .make();
} }


public static class Sample { public static class Sample {


public static int enter, exit;

public String foo() { public String foo() {
return FOO; return FOO;
} }
Expand All @@ -90,26 +97,28 @@ public static class TrivialAdvice {


@Advice.OnMethodEnter @Advice.OnMethodEnter
private static void enter() { private static void enter() {
System.out.println("foo"); Sample.enter++;
} }


@Advice.OnMethodExit @Advice.OnMethodExit
private static void exit() { private static void exit() {
System.out.println("bar"); Sample.exit++;
} }
} }


@SuppressWarnings("unused") @SuppressWarnings("unused")
public static class ArgumentAdvice { public static class ArgumentAdvice {


public static int enter, exit;

@Advice.OnMethodEnter @Advice.OnMethodEnter
private static void enter(String argument) { private static void enter(String argument) {
System.out.println(argument); Sample.enter++;
} }


@Advice.OnMethodExit @Advice.OnMethodExit
private static void exit(String argument) { private static void exit(String argument) {
System.out.println(argument); Sample.exit++;
} }
} }


Expand All @@ -118,21 +127,29 @@ public static class ArgumentAdviceExplicit {


@Advice.OnMethodEnter @Advice.OnMethodEnter
private static void enter(@Advice.Argument(1) String argument) { private static void enter(@Advice.Argument(1) String argument) {
System.out.println(argument); Sample.enter++;
} }


@Advice.OnMethodExit @Advice.OnMethodExit
private static void exit(@Advice.Argument(1) String argument) { private static void exit(@Advice.Argument(1) String argument) {
System.out.println(argument); Sample.exit++;
} }
} }


@SuppressWarnings("unused") @SuppressWarnings("unused")
public static class IllegalAdvice { public static class IllegalAdvice {


@Advice.OnMethodEnter @Advice.OnMethodEnter
private static void enter(@Advice.Argument(1) Integer argument) { private static void enter(Integer argument) {
System.out.println(argument); throw new AssertionError();
} }
} }

/*
TODO:
0. Eager consistency check for argument mapping.
1. Check if rewrite of local variables works out.
2. Rewrite stack map frames being emitted.
3. Test use of stack map frames (add advice and methods with branches)
*/
} }

0 comments on commit 3451c31

Please sign in to comment.