package net.bytebuddy; import net.bytebuddy.test.utility.ObjectPropertyAssertion; import org.junit.Test; import org.objectweb.asm.Opcodes; import java.lang.reflect.Method; import java.util.Arrays; import java.util.Iterator; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; public class ClassFileVersionTest { @Test public void testExplicitConstructionOfUnknownVersion() throws Exception { assertThat(ClassFileVersion.ofMinorMajor(Opcodes.V1_8 + 1).getMinorMajorVersion(), is(Opcodes.V1_8 + 1)); } @Test(expected = IllegalArgumentException.class) public void testIllegalVersion() throws Exception { ClassFileVersion.ofMinorMajor(ClassFileVersion.BASE_VERSION); } @Test public void testComparison() throws Exception { assertThat(new ClassFileVersion(Opcodes.V1_1).compareTo(new ClassFileVersion(Opcodes.V1_1)), is(0)); assertThat(new ClassFileVersion(Opcodes.V1_1).compareTo(new ClassFileVersion(Opcodes.V1_2)), is(-1)); assertThat(new ClassFileVersion(Opcodes.V1_2).compareTo(new ClassFileVersion(Opcodes.V1_1)), is(1)); assertThat(new ClassFileVersion(Opcodes.V1_2).compareTo(new ClassFileVersion(Opcodes.V1_2)), is(0)); assertThat(new ClassFileVersion(Opcodes.V1_3).compareTo(new ClassFileVersion(Opcodes.V1_2)), is(1)); assertThat(new ClassFileVersion(Opcodes.V1_2).compareTo(new ClassFileVersion(Opcodes.V1_3)), is(-1)); } @Test public void testVersionPropertyAction() throws Exception { assertThat(ClassFileVersion.VersionLocator.ForLegacyVm.INSTANCE.run(), is(System.getProperty("java.version"))); } @Test public void testVersionOfClass() throws Exception { assertThat(ClassFileVersion.of(Foo.class).compareTo(ClassFileVersion.ofThisVm()) < 1, is(true)); } @Test public void testObjectProperties() throws Exception { ObjectPropertyAssertion.of(ClassFileVersion.class).apply(); ObjectPropertyAssertion.of(ClassFileVersion.VersionLocator.CreationAction.class).apply(); ObjectPropertyAssertion.of(ClassFileVersion.VersionLocator.ForLegacyVm.class).apply(); final Iterator<Method> methods = Arrays.asList(Object.class.getDeclaredMethods()).iterator(); ObjectPropertyAssertion.of(ClassFileVersion.VersionLocator.ForJava9CapableVm.class).create(new ObjectPropertyAssertion.Creator<Method>() { @Override public Method create() { return methods.next(); } }).apply(); } private static class Foo { /* empty */ } }