package net.bytebuddy.implementation.bytecode.collection;

import net.bytebuddy.implementation.Implementation;
import net.bytebuddy.implementation.bytecode.StackManipulation;
import net.bytebuddy.test.utility.MockitoRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestRule;
import org.mockito.Mock;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;

import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Mockito.*;

public class ArrayLengthTest {
	
	@Rule
	public TestRule mockitoRule = new MockitoRule(this);
	
	@Mock
	private MethodVisitor methodVisitor;
	
	@Mock
	private Implementation.Context implementationContext;
	
	@Test
	public void testLength() throws Exception {
		assertThat(ArrayLength.INSTANCE.isValid(), is(true));
		StackManipulation.Size size = ArrayLength.INSTANCE.apply(methodVisitor, implementationContext);
		assertThat(size.getSizeImpact(), is(0));
		assertThat(size.getMaximalSize(), is(0));
		verify(methodVisitor).visitInsn(Opcodes.ARRAYLENGTH);
		verifyNoMoreInteractions(methodVisitor);
		verifyZeroInteractions(implementationContext);
	}
}
