Skip to content

Commit

Permalink
Add test for special and static invocation.
Browse files Browse the repository at this point in the history
  • Loading branch information
raphw committed Feb 8, 2023
1 parent 9630ce0 commit ee0c8a0
Showing 1 changed file with 30 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -761,7 +761,7 @@ public void testSubstitutionChainFieldWriteStaticOriginal() throws Exception {
}

@Test
public void testSubstitutionChainMethodInvocationOriginal() throws Exception {
public void testSubstitutionChainVirtualMethodInvocationOriginal() throws Exception {
Class<?> type = new ByteBuddy()
.redefine(MethodInvokeSample.class)
.visit(MemberSubstitution.strict().field(named(FOO)).replaceWithChain(MemberSubstitution.Substitution.Chain.Step.OfOriginalExpression.INSTANCE).on(named(RUN)))
Expand All @@ -776,6 +776,35 @@ public void testSubstitutionChainMethodInvocationOriginal() throws Exception {
assertThat(type.getDeclaredField(BAR).get(instance), is((Object) FOO));
}

@Test
public void testSubstitutionChainStaticMethodInvocationOriginal() throws Exception {
Class<?> type = new ByteBuddy()
.redefine(StaticMethodInvokeSample.class)
.visit(MemberSubstitution.strict().field(named(FOO)).replaceWithChain(MemberSubstitution.Substitution.Chain.Step.OfOriginalExpression.INSTANCE).on(named(RUN)))
.make()
.load(ClassLoadingStrategy.BOOTSTRAP_LOADER, ClassLoadingStrategy.Default.WRAPPER)
.getLoaded();
Object instance = type.getDeclaredConstructor().newInstance();
assertThat(type.getDeclaredField(FOO).get(null), is((Object) FOO));
assertThat(type.getDeclaredField(BAR).get(null), is((Object) BAR));
assertThat(type.getDeclaredMethod(RUN).invoke(instance), nullValue(Object.class));
assertThat(type.getDeclaredField(FOO).get(null), is((Object) FOO));
assertThat(type.getDeclaredField(BAR).get(null), is((Object) FOO));
}

@Test
public void testSubstitutionChainSpecialMethodInvocationOriginal() throws Exception {
Class<?> type = new ByteBuddy()
.redefine(VirtualMethodCallSubstitutionSample.Extension.class)
.visit(MemberSubstitution.strict().field(named(FOO)).replaceWithChain(MemberSubstitution.Substitution.Chain.Step.OfOriginalExpression.INSTANCE).on(named(RUN)))
.make()
.load(new ByteArrayClassLoader(ClassLoadingStrategy.BOOTSTRAP_LOADER, ClassFileLocator.ForClassLoader.readToNames(VirtualMethodCallSubstitutionSample.class)),
ClassLoadingStrategy.Default.WRAPPER)
.getLoaded();
Object instance = type.getDeclaredConstructor().newInstance();
assertThat(type.getDeclaredMethod(RUN).invoke(instance), is((Object) 3));
}

@Test
public void testSubstitutionChainConstructionOriginal() throws Exception {
Class<?> type = new ByteBuddy()
Expand Down

0 comments on commit ee0c8a0

Please sign in to comment.