package net.jhorstmann.i18n.tools;
import java.lang.reflect.Field;
import java.util.Enumeration;
import java.util.Map;
import java.util.ResourceBundle;
import junit.framework.Assert;
import net.jhorstmann.i18n.GettextResourceBundle;
import org.fedorahosted.tennera.jgettext.HeaderFields;
import org.fedorahosted.tennera.jgettext.HeaderUtil;
import org.fedorahosted.tennera.jgettext.Message;
import org.junit.Test;
public class ResourceBundleCompilerTest {
static MessageBundle createBundle() {
MessageBundle bundle = new MessageBundle();
{
Message msg = HeaderUtil.generateDefaultHeader();
HeaderFields fields = HeaderFields.wrap(msg);
fields.setValue("Plural-Forms", "nplurals=2; plural=n == 1 ? 0 : 1;");
msg = fields.unwrap();
bundle.addMessage(msg);
}
{
Message msg = new Message();
msg.setMsgctxt("ctx1");
msg.setMsgid("id1");
msg.setMsgstr("str1");
bundle.addMessage(msg);
}
{
Message msg = new Message();
msg.setMsgctxt("ctx2");
msg.setMsgid("id2");
msg.setMsgidPlural("id2plural");
msg.addMsgstrPlural("plural", 0);
msg.addMsgstrPlural("plurals", 1);
bundle.addMessage(msg);
}
return bundle;
}
@Test
public void testCompileResourceBundle() throws InstantiationException, IllegalAccessException, NoSuchFieldException {
MessageBundle bundle = createBundle();
String parentClassName = GettextResourceBundle.class.getName();
Class<ResourceBundle> bundleClass = ResourceBundleCompiler.compileAndLoad(bundle, parentClassName, "net.jhorstmann.i18n.tools.TestResourceBundle_de", getClass().getClassLoader());
{
Field messagesField = bundleClass.getDeclaredField("messages");
messagesField.setAccessible(true);
Map messages = (Map) messagesField.get(null);
Assert.assertNotNull(messages);
Assert.assertEquals(3, messages.size());
Object str1 = messages.get("ctx1\u0004id1");
Assert.assertEquals("str1", str1);
Object str2 = messages.get("ctx2\u0004id2");
Assert.assertTrue(str2 instanceof String[]);
Assert.assertEquals(2, ((String[])str2).length);
String singular = ((String[])str2)[0];
String plural = ((String[])str2)[1];
Assert.assertEquals("plural", singular);
Assert.assertEquals("plurals", plural);
}
ResourceBundle rb = bundleClass.newInstance();
{
Assert.assertEquals("str1", GettextResourceBundle.pgettext(rb, "ctx1", "id1"));
Assert.assertEquals("plurals", GettextResourceBundle.npgettext(rb, "ctx2", "id2", "id2plural", 0L));
Assert.assertEquals("plural" , GettextResourceBundle.npgettext(rb, "ctx2", "id2", "id2plural", 1L));
Assert.assertEquals("plurals", GettextResourceBundle.npgettext(rb, "ctx2", "id2", "id2plural", 2L));
Assert.assertEquals("plurals", GettextResourceBundle.npgettext(rb, "ctx2", "id2", "id2plural", 3L));
}
{
Enumeration<String> keys = rb.getKeys();
Assert.assertTrue(keys.hasMoreElements());
}
}
}