package net.bytebuddy.agent;
import net.bytebuddy.test.utility.ObjectPropertyAssertion;
import org.hamcrest.CoreMatchers;
import org.junit.Test;
import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Mockito.mock;
public class ByteBuddyAgentAttachmentProviderTest {
@Test
public void testSimpleAccessor() throws Exception {
File file = mock(File.class);
ByteBuddyAgent.AttachmentProvider.Accessor accessor =
new ByteBuddyAgent.AttachmentProvider.Accessor.Simple.WithExternalAttachment(Void.class, Collections.singletonList(file));
assertThat(accessor.isAvailable(), is(true));
assertThat(accessor.getVirtualMachineType(), CoreMatchers.<Class<?>>is(Void.class));
assertThat(accessor.getExternalAttachment().getVirtualMachineType(), is(Void.class.getName()));
assertThat(accessor.getExternalAttachment().getClassPath(), is(Collections.singletonList(file)));
}
@Test(expected = IllegalStateException.class)
public void testSimpleAccessorWithoutExternalAttachment() throws Exception {
new ByteBuddyAgent.AttachmentProvider.Accessor.Simple.WithoutExternalAttachment(Void.class).getExternalAttachment();
}
@Test
public void testUnavailableAccessor() throws Exception {
assertThat(ByteBuddyAgent.AttachmentProvider.Accessor.Unavailable.INSTANCE.isAvailable(), is(false));
}
@Test(expected = IllegalStateException.class)
public void testUnavailableAccessorThrowsExceptionForType() throws Exception {
ByteBuddyAgent.AttachmentProvider.Accessor.Unavailable.INSTANCE.getVirtualMachineType();
}
@Test(expected = IllegalStateException.class)
public void testUnavailableAccessorThrowsExceptionForExternalAttachment() throws Exception {
ByteBuddyAgent.AttachmentProvider.Accessor.Unavailable.INSTANCE.getExternalAttachment();
}
@Test
public void testObjectProperties() throws Exception {
ObjectPropertyAssertion.of(ByteBuddyAgent.AttachmentProvider.ForJigsawVm.class).apply();
ObjectPropertyAssertion.of(ByteBuddyAgent.AttachmentProvider.ForJ9Vm.class).apply();
ObjectPropertyAssertion.of(ByteBuddyAgent.AttachmentProvider.ForToolsJarVm.class).apply();
ObjectPropertyAssertion.of(ByteBuddyAgent.AttachmentProvider.ForUnixHotSpotVm.class).apply();
ObjectPropertyAssertion.of(ByteBuddyAgent.AttachmentProvider.Compound.class).create(new ObjectPropertyAssertion.Creator<List<?>>() {
@Override
public List<?> create() {
return Collections.singletonList(mock(ByteBuddyAgent.AttachmentProvider.class));
}
}).apply();
final Iterator<Class<?>> types = Arrays.<Class<?>>asList(Void.class, Object.class, String.class, Integer.class).iterator();
ObjectPropertyAssertion.of(ByteBuddyAgent.AttachmentProvider.Accessor.Simple.WithExternalAttachment.class)
.create(new ObjectPropertyAssertion.Creator<Class<?>>() {
@Override
public Class<?> create() {
return types.next();
}
}).apply();
ObjectPropertyAssertion.of(ByteBuddyAgent.AttachmentProvider.Accessor.Simple.WithoutExternalAttachment.class)
.create(new ObjectPropertyAssertion.Creator<Class<?>>() {
@Override
public Class<?> create() {
return types.next();
}
}).apply();
ObjectPropertyAssertion.of(ByteBuddyAgent.AttachmentProvider.Accessor.Unavailable.class).apply();
}
}