package net.jhorstmann.i18n.tools.xgettext;
import org.junit.Assert;
import org.junit.Test;
public class JavaSignatureTest {
private static final String CLS = "net.jhorstmann.i18n.I18N";
private static final String FN = "tr";
private static final String NS = "net/jhorstmann/i18n/I18N";
@Test
public void testNoArgs() {
MessageFunction fn = MessageFunction.fromJava(CLS, "tr()");
Assert.assertEquals(NS, fn.getNamespace());
Assert.assertEquals(FN, fn.getName());
Assert.assertEquals("()V", fn.getDescription());
Assert.assertEquals(-1, fn.getContextIndex());
Assert.assertEquals(-1, fn.getMessageIndex());
Assert.assertEquals(-1, fn.getPluralIndex());
}
@Test
public void testNoArgsQualified() {
MessageFunction fn = MessageFunction.fromJava(CLS + ".tr()");
Assert.assertEquals(NS, fn.getNamespace());
Assert.assertEquals(FN, fn.getName());
Assert.assertEquals("()V", fn.getDescription());
Assert.assertEquals(-1, fn.getContextIndex());
Assert.assertEquals(-1, fn.getMessageIndex());
Assert.assertEquals(-1, fn.getPluralIndex());
}
@Test
public void testStringArg() {
MessageFunction fn = MessageFunction.fromJava(CLS, "tr(java.lang.String message)");
Assert.assertEquals(NS, fn.getNamespace());
Assert.assertEquals(FN, fn.getName());
Assert.assertEquals("(Ljava/lang/String;)V", fn.getDescription());
Assert.assertEquals(0, fn.getMessageIndex());
}
@Test
public void testStringArrayArg() {
MessageFunction fn = MessageFunction.fromJava(CLS, "tr(java.lang.String[][] test)");
Assert.assertEquals(NS, fn.getNamespace());
Assert.assertEquals(FN, fn.getName());
Assert.assertEquals("([[Ljava/lang/String;)V", fn.getDescription());
Assert.assertEquals(-1, fn.getMessageIndex());
}
@Test
public void testStringArgs() {
MessageFunction fn = MessageFunction.fromJava(CLS, "tr(java.lang.String context, java.lang.String message)");
Assert.assertEquals(NS, fn.getNamespace());
Assert.assertEquals(FN, fn.getName());
Assert.assertEquals("(Ljava/lang/String;Ljava/lang/String;)V", fn.getDescription());
Assert.assertEquals(0, fn.getContextIndex());
Assert.assertEquals(1, fn.getMessageIndex());
}
@Test
public void testVarArgs() {
MessageFunction fn = MessageFunction.fromJava(CLS, "tr(java.lang.String message, java.lang.String... params)");
Assert.assertEquals(NS, fn.getNamespace());
Assert.assertEquals(FN, fn.getName());
Assert.assertEquals("(Ljava/lang/String;[Ljava/lang/String;)V", fn.getDescription());
Assert.assertEquals(0, fn.getMessageIndex());
}
@Test
public void testVarArgsUnqualified() {
MessageFunction fn = MessageFunction.fromJava(CLS, "String tr(String message, Object...)");
Assert.assertEquals(NS, fn.getNamespace());
Assert.assertEquals(FN, fn.getName());
Assert.assertEquals("(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;", fn.getDescription());
Assert.assertEquals(0, fn.getMessageIndex());
}
@Test
public void testReturnTypeQualified() {
MessageFunction fn = MessageFunction.fromJava(CLS, "java.lang.String tr(java.lang.String message, java.lang.String... params)");
Assert.assertEquals(NS, fn.getNamespace());
Assert.assertEquals(FN, fn.getName());
Assert.assertEquals("(Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;", fn.getDescription());
Assert.assertEquals(0, fn.getMessageIndex());
}
@Test
public void testReturnTypeUnqualified() {
MessageFunction fn = MessageFunction.fromJava(CLS, "String tr(java.lang.String message, java.lang.String... params)");
Assert.assertEquals(NS, fn.getNamespace());
Assert.assertEquals(FN, fn.getName());
Assert.assertEquals("(Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;", fn.getDescription());
Assert.assertEquals(0, fn.getMessageIndex());
}
@Test
public void testVoidReturnType() {
MessageFunction fn = MessageFunction.fromJava(CLS, "void tr(java.lang.String message, java.lang.String... params)");
Assert.assertEquals(NS, fn.getNamespace());
Assert.assertEquals(FN, fn.getName());
Assert.assertEquals("(Ljava/lang/String;[Ljava/lang/String;)V", fn.getDescription());
Assert.assertEquals(0, fn.getMessageIndex());
}
@Test
public void testConstructor() {
MessageFunction fn = MessageFunction.fromJava(CLS + ".<init>()");
Assert.assertEquals(NS, fn.getNamespace());
Assert.assertEquals("<init>", fn.getName());
Assert.assertEquals("()V", fn.getDescription());
Assert.assertEquals(-1, fn.getMessageIndex());
}
@Test
public void testConstructorArgs() {
MessageFunction fn = MessageFunction.fromJava(CLS + ".<init>(java.lang.String message)");
Assert.assertEquals(NS, fn.getNamespace());
Assert.assertEquals("<init>", fn.getName());
Assert.assertEquals("(Ljava/lang/String;)V", fn.getDescription());
Assert.assertEquals("First argument to constructor is the uninitialized object", 1, fn.getMessageIndex());
}
}