package japicmp.util;
import org.junit.Before;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.hasItem;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
public class SignatureParserTest {
private SignatureParser subject;
@Before
public void before() throws Exception {
subject = new SignatureParser();
}
@Test
public void testNoParamsReturnsVoid() {
subject.parse("()V");
assertThat(subject.getReturnType(), is("void"));
assertThat(subject.getParameters().size(), is(0));
}
@Test
public void testTwoReferenceParamsReturnsReference() {
subject.parse("(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)Lorg/apache/http/conn/ManagedClientConnection;");
assertThat(subject.getReturnType(), is("org.apache.http.conn.ManagedClientConnection"));
assertThat(subject.getParameters().size(), is(2));
assertThat(subject.getParameters(), hasItem("org.apache.http.conn.routing.HttpRoute"));
assertThat(subject.getParameters(), hasItem("java.lang.Object"));
}
@Test
public void testOneReferenceOnePrimParamsReturnsVoid() {
subject.parse("(JLjava/util/concurrent/TimeUnit;)V");
assertThat(subject.getReturnType(), is("void"));
assertThat(subject.getParameters().size(), is(2));
assertThat(subject.getParameters(), hasItem("long"));
assertThat(subject.getParameters(), hasItem("java.util.concurrent.TimeUnit"));
}
@Test
public void testArrayTwoPrimParamsReturnsVoid() {
subject.parse("([BII)V");
assertThat(subject.getReturnType(), is("void"));
assertThat(subject.getParameters().size(), is(3));
assertThat(subject.getParameters(), hasItem("byte[]"));
assertThat(subject.getParameters(), hasItem("int"));
}
@Test
public void testArrayPrimParamReturnsVoid() {
subject.parse("([B)V");
assertThat(subject.getReturnType(), is("void"));
assertThat(subject.getParameters().size(), is(1));
assertThat(subject.getParameters(), hasItem("byte[]"));
}
@Test
public void testArrayRefParamReturnsVoid() {
subject.parse("([Lorg/apache/http/cookie/Cookie;)V");
assertThat(subject.getReturnType(), is("void"));
assertThat(subject.getParameters().size(), is(1));
assertThat(subject.getParameters(), hasItem("org.apache.http.cookie.Cookie[]"));
}
@Test
public void testOneReferenceParamsReturnsVoid() {
subject.parse("(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V");
assertThat(subject.getReturnType(), is("void"));
assertThat(subject.getParameters().size(), is(1));
assertThat(subject.getParameters(), hasItem("org.apache.http.impl.conn.tsccm.BasicPoolEntry"));
}
@Test
public void testOneReferenceParamsReturnsOneReference() {
subject.parse("(Ljava/util/List;)Ljava/util/List;");
assertThat(subject.getReturnType(), is("java.util.List"));
assertThat(subject.getParameters().size(), is(1));
assertThat(subject.getParameters(), hasItem("java.util.List"));
}
@Test
public void testNoParamsReturnsReference() {
subject.parse("()Lorg/apache/http/conn/scheme/SchemeRegistry;");
assertThat(subject.getReturnType(), is("org.apache.http.conn.scheme.SchemeRegistry"));
assertThat(subject.getParameters().size(), is(0));
}
@Test
public void testNoParamsReturnsI() {
subject.parse("()I");
assertThat(subject.getReturnType(), is("int"));
assertThat(subject.getParameters().size(), is(0));
}
}