1 package org.gnomekr.potron.parser; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 import java.io.Reader; 6 import java.io.StringReader; 7 import java.io.StringWriter; 8 import java.util.ArrayList; 9 import java.util.HashMap; 10 import java.util.List; 11 import java.util.Map; 12 13 import junit.framework.TestCase; 14 15 /*** 16 * POParserTest.java 17 * @author Xavier Cho 18 * @version $Revision 1.1 $ $Date: 2005/08/28 11:47:15 $ 19 */ 20 public class POParserTest extends TestCase { 21 22 private TestParserCallback callback; 23 24 /*** 25 * @see junit.framework.TestCase#setUp() 26 */ 27 @Override 28 protected void setUp() throws Exception { 29 super.setUp(); 30 this.callback = new TestParserCallback(); 31 } 32 33 /*** 34 * @see junit.framework.TestCase#tearDown() 35 */ 36 @Override 37 protected void tearDown() throws Exception { 38 super.tearDown(); 39 this.callback = null; 40 } 41 42 /*** 43 * @throws IOException 44 * @throws ParseException 45 */ 46 public void testParseComment() throws ParseException, IOException { 47 StringWriter writer = new StringWriter(); 48 PrintWriter out = new PrintWriter(writer); 49 50 out.println("# SOME DESCRIPTIVE TITLE."); 51 out.println("# Copyright (C) YEAR Free Software Foundation, Inc."); 52 out.println("# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR."); 53 out.println("#"); 54 out.println("#, fuzzy"); 55 56 String comment = writer.toString(); 57 58 out.println("msgid \"\""); 59 out.println("msgstr \"\""); 60 61 writer.flush(); 62 63 Reader reader = new StringReader(writer.toString()); 64 65 POParser parser = new POParser(callback); 66 parser.parse(reader); 67 68 assertEquals(callback.comment.trim(), comment.trim()); 69 } 70 71 /*** 72 * @throws IOException 73 * @throws ParseException 74 */ 75 public void testParseHeader() throws ParseException, IOException { 76 StringWriter writer = new StringWriter(); 77 PrintWriter out = new PrintWriter(writer); 78 79 out.println("#"); 80 out.println("msgid \"\""); 81 out.println("msgstr \"\""); 82 out.println("\"Project-Id-Version: PACKAGE VERSION//n\""); 83 out.println("\"POT-Creation-Date: 2001-02-09 01:25+0100//n\""); 84 85 writer.flush(); 86 87 Reader reader = new StringReader(writer.toString()); 88 89 POParser parser = new POParser(callback); 90 parser.parse(reader); 91 92 assertEquals(2, callback.headers.size()); 93 94 assertTrue(callback.headers.containsKey("Project-Id-Version")); 95 assertEquals("PACKAGE VERSION", callback.headers 96 .get("Project-Id-Version")); 97 98 assertTrue(callback.headers.containsKey("POT-Creation-Date")); 99 assertEquals("2001-02-09 01:25+0100", callback.headers 100 .get("POT-Creation-Date")); 101 } 102 103 /*** 104 * @throws IOException 105 * @throws ParseException 106 */ 107 public void testParseEntry() throws ParseException, IOException { 108 StringWriter writer = new StringWriter(); 109 PrintWriter out = new PrintWriter(writer); 110 111 out.println("#"); 112 out.println("msgid \"\""); 113 out.println("msgstr \"\""); 114 out.println("\"Project-Id-Version: PACKAGE VERSION//n\""); 115 out.println("\"POT-Creation-Date: 2001-02-09 01:25+0100//n\""); 116 out.println(); 117 out.println("#: gpl.xml:11 gpl.xml:30"); 118 out.println("#, no-c-format"); 119 out.println("#. Tag: title"); 120 out.println("msgid \"GNU General Public License\""); 121 out.println("msgstr \"test\""); 122 out.println(); 123 out.println("#: gpl.xml:15"); 124 out.println("#, no-c-format"); 125 out.println("#, fuzzy"); 126 out.println("msgid \"Free Software Foundation, Inc.\""); 127 out.println("msgstr \"test2\""); 128 129 writer.flush(); 130 131 Reader reader = new StringReader(writer.toString()); 132 133 POParser parser = new POParser(callback); 134 parser.parse(reader); 135 136 assertEquals(2, callback.entries.size()); 137 138 ParserEntry entry = callback.entries.get(0); 139 assertFalse(entry.isFuzzy()); 140 141 assertNotNull("test", entry.getMsgStr()); 142 143 assertEquals("gpl.xml:11 gpl.xml:30", entry.getReferences()); 144 assertEquals("GNU General Public License", entry.getMsgId()); 145 assertEquals("test", entry.getMsgStr().get(0)); 146 147 entry = callback.entries.get(1); 148 assertTrue(entry.isFuzzy()); 149 assertEquals("gpl.xml:15", entry.getReferences()); 150 assertEquals("Free Software Foundation, Inc.", entry.getMsgId()); 151 assertEquals("test2", entry.getMsgStr().get(0)); 152 } 153 154 /*** 155 * @throws IOException 156 * @throws ParseException 157 */ 158 public void testParsePluralEntry() throws ParseException, IOException { 159 StringWriter writer = new StringWriter(); 160 PrintWriter out = new PrintWriter(writer); 161 162 out.println("#"); 163 out.println("msgid \"\""); 164 out.println("msgstr \"\""); 165 out.println("\"Project-Id-Version: PACKAGE VERSION//n\""); 166 out.println("\"POT-Creation-Date: 2001-02-09 01:25+0100//n\""); 167 out.println("\"Plural-Forms: nplurals=3; plural=(n != 1);//n\""); 168 out.println(); 169 out.println("#: gpl.xml:11 gpl.xml:30"); 170 out.println("#, no-c-format"); 171 out.println("#. Tag: title"); 172 out.println("msgid \"GNU General Public License\""); 173 out.println("msgid_plural \"GNU General Public Licenses\""); 174 out.println("msgstr[0] \"test1\""); 175 out.println("msgstr[1] \"test2\""); 176 out.println("msgstr[2] \"test3\""); 177 178 writer.flush(); 179 180 Reader reader = new StringReader(writer.toString()); 181 182 POParser parser = new POParser(callback); 183 parser.parse(reader); 184 185 assertEquals(3, callback.nplural); 186 assertEquals("plural=(n != 1)", callback.pluralExpression); 187 assertEquals(1, callback.entries.size()); 188 189 ParserEntry entry = callback.entries.get(0); 190 assertEquals("GNU General Public Licenses", entry.getMsgIdPlural()); 191 assertNotNull(entry.getMsgStr()); 192 assertEquals(3, entry.getMsgStr().size()); 193 assertEquals("test1", entry.getMsgStr().get(0)); 194 assertEquals("test2", entry.getMsgStr().get(1)); 195 assertEquals("test3", entry.getMsgStr().get(2)); 196 } 197 198 /*** 199 * @throws IOException 200 * @throws ParseException 201 */ 202 public void testStringNormalization() throws ParseException, IOException { 203 StringWriter writer = new StringWriter(); 204 PrintWriter out = new PrintWriter(writer); 205 206 out.println("#"); 207 out.println("msgid \"\""); 208 out.println("msgstr \"\""); 209 out.println("\"Project-Id-Version: PACKAGE VERSION//n\""); 210 out.println(); 211 out.println("#: gpl.xml:11 gpl.xml:30"); 212 out.println("msgid \"GNU //nGeneral //tPublic//n \"License\"\""); 213 out.println("msgstr \"test\""); 214 215 writer.flush(); 216 217 Reader reader = new StringReader(writer.toString()); 218 219 POParser parser = new POParser(callback); 220 parser.parse(reader); 221 222 assertFalse(callback.entries.isEmpty()); 223 224 ParserEntry entry = callback.entries.get(0); 225 assertEquals("GNU \nGeneral \tPublic\n \"License\"", entry.getMsgId()); 226 } 227 228 private class TestParserCallback implements IPOParserCallback { 229 230 private int nplural; 231 private String pluralExpression; 232 private String comment; 233 private Map<String, String> headers; 234 private List<ParserEntry> entries; 235 236 private TestParserCallback() { 237 this.headers = new HashMap<String, String>(); 238 this.entries = new ArrayList<ParserEntry>(); 239 } 240 241 public void startDocument() { 242 } 243 244 public void onComment(String str) { 245 this.comment = str; 246 } 247 248 public void onHeader(String name, String value) { 249 headers.put(name, value); 250 } 251 252 public void onHeaderPluralForm(int nplural, String expression) { 253 this.nplural = nplural; 254 this.pluralExpression = expression; 255 } 256 257 public void onEntry(ParserEntry entry) { 258 entries.add(entry); 259 } 260 261 public void endDocument() { 262 } 263 } 264 }