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 }