package net.bytebuddy.implementation;
import net.bytebuddy.test.utility.ObjectPropertyAssertion;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
public class LoadedTypeInitializerForStaticFieldTest {
private static final String FOO = "foo";
@Test
public void testAccessibleField() throws Exception {
Object object = new Object();
LoadedTypeInitializer loadedTypeInitializer = new LoadedTypeInitializer.ForStaticField(FOO, object);
assertThat(loadedTypeInitializer.isAlive(), is(true));
loadedTypeInitializer.onLoad(Foo.class);
assertThat(Foo.foo, is(object));
}
@Test
public void testNonAccessibleField() throws Exception {
Object object = new Object();
LoadedTypeInitializer loadedTypeInitializer = new LoadedTypeInitializer.ForStaticField(FOO, object);
assertThat(loadedTypeInitializer.isAlive(), is(true));
loadedTypeInitializer.onLoad(Bar.class);
assertThat(Bar.foo, is(object));
}
@Test
public void testNonAccessibleType() throws Exception {
Object object = new Object();
LoadedTypeInitializer loadedTypeInitializer = new LoadedTypeInitializer.ForStaticField(FOO, object);
assertThat(loadedTypeInitializer.isAlive(), is(true));
loadedTypeInitializer.onLoad(Qux.class);
assertThat(Qux.foo, is(object));
}
@Test(expected = IllegalArgumentException.class)
public void testNonAssignableField() throws Exception {
new LoadedTypeInitializer.ForStaticField(FOO, new Object()).onLoad(FooBar.class);
}
@Test
public void testObjectProperties() throws Exception {
ObjectPropertyAssertion.of(LoadedTypeInitializer.ForStaticField.class).apply();
}
@SuppressWarnings("unused")
public static class Foo {
public static Object foo;
}
@SuppressWarnings("unused")
public static class Bar {
private static Object foo;
}
@SuppressWarnings("unused")
private static class Qux {
public static Object foo;
}
@SuppressWarnings("unused")
private static class Baz {
String foo, bar;
}
@SuppressWarnings("unused")
public static class FooBar {
public static String foo;
}
}