package net.bytebuddy.implementation.bytecode.constant; import net.bytebuddy.implementation.Implementation; import net.bytebuddy.implementation.bytecode.StackManipulation; import net.bytebuddy.test.utility.MockitoRule; import net.bytebuddy.test.utility.ObjectPropertyAssertion; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestRule; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.mockito.Mock; import org.objectweb.asm.MethodVisitor; import java.util.Arrays; import java.util.Collection; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.*; @RunWith(Parameterized.class) public class DoubleConstantTest { private final double value; @Rule public TestRule mockitoRule = new MockitoRule(this); @Mock private MethodVisitor methodVisitor; @Mock private Implementation.Context implementationContext; public DoubleConstantTest(double value) { this.value = value; } @Parameterized.Parameters public static Collection<Object[]> data() { return Arrays.asList(new Object[][]{ {Double.MIN_VALUE}, {Float.MIN_VALUE}, {-100d}, {-2d}, {0.5d}, {6d}, {7d}, {100d}, {Float.MAX_VALUE}, {Double.MAX_VALUE}, }); } @Test public void testBiPush() throws Exception { StackManipulation doubleConstant = DoubleConstant.forValue(value); assertThat(doubleConstant.isValid(), is(true)); StackManipulation.Size size = doubleConstant.apply(methodVisitor, implementationContext); assertThat(size.getSizeImpact(), is(2)); assertThat(size.getMaximalSize(), is(2)); verify(methodVisitor).visitLdcInsn(value); verifyNoMoreInteractions(methodVisitor); verifyZeroInteractions(implementationContext); } @Test public void testObjectProperties() throws Exception { ObjectPropertyAssertion.of(DoubleConstant.ConstantPool.class).apply(); } }