]> gitweb.fperrin.net Git - DictionaryPC.git/blob - src/com/hughes/android/dictionary/parser/WikiTokenizerTest.java
go
[DictionaryPC.git] / src / com / hughes / android / dictionary / parser / WikiTokenizerTest.java
1 package com.hughes.android.dictionary.parser;
2
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.List;
6
7 import junit.framework.TestCase;
8
9 public class WikiTokenizerTest extends TestCase {
10
11   public void testWikiLink() {
12     String wikiText;
13     
14     wikiText = "[[abc]]";
15     assertEquals(wikiText, new WikiTokenizer(wikiText).nextToken().token());
16     assertTrue(new WikiTokenizer(wikiText).nextToken().isWikiLink());
17     assertEquals("abc", new WikiTokenizer(wikiText).nextToken().wikiLinkText());
18     assertEquals(null, new WikiTokenizer(wikiText).nextToken().wikiLinkDest());
19     
20     wikiText = "[[abc|def]]";
21     assertEquals(wikiText, new WikiTokenizer(wikiText).nextToken().token());
22     assertTrue(new WikiTokenizer(wikiText).nextToken().isWikiLink());
23     assertEquals("def", new WikiTokenizer(wikiText).nextToken().wikiLinkText());
24     assertEquals("abc", new WikiTokenizer(wikiText).nextToken().wikiLinkDest());
25
26     wikiText = "[[abc|def|ghi{{a|=2}}p]]";
27     assertEquals(wikiText, new WikiTokenizer(wikiText).nextToken().token());
28     assertTrue(new WikiTokenizer(wikiText).nextToken().isWikiLink());
29     assertEquals("ghi{{a|=2}}p", new WikiTokenizer(wikiText).nextToken().wikiLinkText());
30     assertEquals("abc", new WikiTokenizer(wikiText).nextToken().wikiLinkDest());
31
32     wikiText = "[[abc]][[def]]";
33     assertEquals("[[abc]]", new WikiTokenizer(wikiText).nextToken().token());
34     assertEquals("abc", new WikiTokenizer(wikiText).nextToken().wikiLinkText());
35     assertEquals("def", new WikiTokenizer(wikiText).nextToken().nextToken().wikiLinkText());
36
37   }
38   
39   public void testWikiList() {
40     String wikiText;
41
42     wikiText = "* This is ''bold''' asdf.";
43     assertEquals(wikiText, new WikiTokenizer(wikiText).nextToken().token());
44   }
45   
46   public void testFunction() {
47     String wikiText;
48     
49     wikiText = "{{abc}}";
50     assertEquals(wikiText, new WikiTokenizer(wikiText).nextToken().token());
51     assertTrue(new WikiTokenizer(wikiText).nextToken().isFunction());
52     assertEquals("abc", new WikiTokenizer(wikiText).nextToken().functionName());
53     assertEquals(0, new WikiTokenizer(wikiText).nextToken().functionPositionArgs().size());
54     assertEquals(0, new WikiTokenizer(wikiText).nextToken().functionNamedArgs().size());
55
56     wikiText = "{{abc|def}}";
57     assertEquals(wikiText, new WikiTokenizer(wikiText).nextToken().token());
58     assertTrue(new WikiTokenizer(wikiText).nextToken().isFunction());
59     assertEquals("abc", new WikiTokenizer(wikiText).nextToken().functionName());
60     assertEquals(Arrays.asList("def"), new WikiTokenizer(wikiText).nextToken().functionPositionArgs());
61     assertEquals(0, new WikiTokenizer(wikiText).nextToken().functionNamedArgs().size());
62
63     wikiText = "{{abc|d[[|]]ef|ghi}}";
64     assertEquals(wikiText, new WikiTokenizer(wikiText).nextToken().token());
65     assertTrue(new WikiTokenizer(wikiText).nextToken().isFunction());
66     assertEquals("abc", new WikiTokenizer(wikiText).nextToken().functionName());
67     assertEquals(Arrays.asList("d[[|]]ef", "ghi"), new WikiTokenizer(wikiText).nextToken().functionPositionArgs());
68     assertEquals(0, new WikiTokenizer(wikiText).nextToken().functionNamedArgs().size());
69
70     wikiText = "{{abc|arg1=101|ghi|arg2=202|arg3={{n1|n2=7|n3}}|{{d}}}}";
71     assertEquals(wikiText, new WikiTokenizer(wikiText).nextToken().token());
72     assertTrue(new WikiTokenizer(wikiText).nextToken().isFunction());
73     assertEquals("abc", new WikiTokenizer(wikiText).nextToken().functionName());
74     assertEquals(Arrays.asList("ghi", "{{d}}"), new WikiTokenizer(wikiText).nextToken().functionPositionArgs());
75     assertEquals(3, new WikiTokenizer(wikiText).nextToken().functionNamedArgs().size());
76     assertEquals("101", new WikiTokenizer(wikiText).nextToken().functionNamedArgs().get("arg1"));
77     assertEquals("202", new WikiTokenizer(wikiText).nextToken().functionNamedArgs().get("arg2"));
78     assertEquals("{{n1|n2=7|n3}}", new WikiTokenizer(wikiText).nextToken().functionNamedArgs().get("arg3"));
79
80     
81   }
82   
83   public void testReturn() {
84     String wikiText;
85
86     wikiText = "hello\n=Heading=\nhello2";
87     
88     final WikiTokenizer tokenizer = new WikiTokenizer(wikiText);
89     
90     assertEquals("hello", tokenizer.nextToken().token());
91     tokenizer.returnToLineStart();
92     assertEquals("hello", tokenizer.nextToken().token());
93     assertEquals("\n", tokenizer.nextToken().token());
94     tokenizer.returnToLineStart();
95     assertEquals("hello", tokenizer.nextToken().token());
96     assertEquals("\n", tokenizer.nextToken().token());
97     
98     assertEquals("=Heading=", tokenizer.nextToken().token());
99     tokenizer.returnToLineStart();
100     assertEquals("=Heading=", tokenizer.nextToken().token());
101     assertEquals("\n", tokenizer.nextToken().token());
102     tokenizer.returnToLineStart();
103     assertEquals("=Heading=", tokenizer.nextToken().token());
104     assertEquals("\n", tokenizer.nextToken().token());
105
106     assertEquals("hello2", tokenizer.nextToken().token());
107     assertEquals(null, tokenizer.nextToken());
108     tokenizer.returnToLineStart();
109     assertEquals("hello2", tokenizer.nextToken().token());
110     assertEquals(null, tokenizer.nextToken());
111     
112     
113   }
114
115   public void testWikiHeading() {
116     String wikiText;
117
118     wikiText = "==";
119     assertEquals("==", new WikiTokenizer(wikiText).nextToken().token());
120     assertTrue(new WikiTokenizer(wikiText).nextToken().isHeading());
121     assertEquals(2, new WikiTokenizer(wikiText).nextToken().headingDepth());
122     assertEquals("", new WikiTokenizer(wikiText).nextToken().headingWikiText());
123     assertEquals(1, new WikiTokenizer(wikiText).nextToken().errors.size());
124
125     
126     wikiText = "=a";
127     assertEquals("=a", new WikiTokenizer(wikiText).nextToken().token());
128     assertTrue(new WikiTokenizer(wikiText).nextToken().isHeading());
129     assertEquals(1, new WikiTokenizer(wikiText).nextToken().headingDepth());
130     assertEquals("a", new WikiTokenizer(wikiText).nextToken().headingWikiText());
131     assertEquals(1, new WikiTokenizer(wikiText).nextToken().errors.size());
132
133     wikiText = "=a==";
134     assertEquals("=a==", new WikiTokenizer(wikiText).nextToken().token());
135     assertTrue(new WikiTokenizer(wikiText).nextToken().isHeading());
136     assertEquals(1, new WikiTokenizer(wikiText).nextToken().headingDepth());
137     assertEquals("a", new WikiTokenizer(wikiText).nextToken().headingWikiText());
138     assertEquals(1, new WikiTokenizer(wikiText).nextToken().errors.size());
139
140     wikiText = "a=";
141     assertEquals("a", new WikiTokenizer(wikiText).nextToken().token());
142     assertFalse(new WikiTokenizer(wikiText).nextToken().isHeading());
143
144     wikiText = "=a=";
145     assertEquals("=a=", new WikiTokenizer(wikiText).nextToken().token());
146     assertTrue(new WikiTokenizer(wikiText).nextToken().isHeading());
147     assertEquals(1, new WikiTokenizer(wikiText).nextToken().headingDepth());
148     assertEquals("a", new WikiTokenizer(wikiText).nextToken().headingWikiText());
149     assertEquals(0, new WikiTokenizer(wikiText).nextToken().errors.size());
150
151     wikiText = "==aa[[|=]] {{|={{=}} }}==";
152     assertEquals(wikiText, new WikiTokenizer(wikiText).nextToken().token());
153     assertTrue(new WikiTokenizer(wikiText).nextToken().isHeading());
154     assertEquals(2, new WikiTokenizer(wikiText).nextToken().headingDepth());
155     assertEquals("aa[[|=]] {{|={{=}} }}", new WikiTokenizer(wikiText).nextToken().headingWikiText());
156     assertEquals(0, new WikiTokenizer(wikiText).nextToken().errors.size());
157   }
158
159   
160
161   public void testSimple() {
162     final String wikiText =
163       "Hi" + "\n" +
164       "Hello =thad| you're <!-- not --> '''pretty''' cool '''''over''''' there." + "\n" +
165       "hi <!--" + "\n" +
166       "multi-line" + "\n" +
167       "# comment -->" + "\n" +
168       "" + "\n" +
169       "asdf\n" +
170       "{{template_not_in_list}}" + "\n" +
171       "# {{template_in_list}}" + "\n" +
172       "[[wikitext]]:[[wikitext]]" + "\n" +  // don't want this to trigger a list
173       ": but this is a list!" + "\n" +
174       "*:* and so is this :::" + "\n" +
175       "here's [[some blah|some]] wikitext." + "\n" +
176       "here's a {{template|this has an = sign|blah=2|blah2=3|" + "\n" +
177       "blah3=3,[[asdf]|[asdf asdf]|[asdf asdf asdf]],blah4=4}} and some more text." + "\n" +
178       "== Header 2 ==" + "\n" +
179       "{{some-func|blah={{nested-func|n2}}|blah2=asdf}}" + "\n" +
180       "{{mismatched]]" + "\n" +
181       "[[mismatched}}" + "\n" +
182       "{extraterminated}}" + "\n" +
183       "[extraterminated]]" + "\n" +
184       "=== {{header-template}} ===" + "\n";
185     
186     final String[] expectedTokens = new String[] {
187         "Hi",
188         "\n",
189         "Hello ",
190         "=",
191         "thad",
192         "|",
193         " you're ",
194         "<!-- not -->",
195         " ",
196         "'''",
197         "pretty",
198         "'''",
199         " cool ",
200         "'''",
201         "''",
202         "over",
203         "'''",
204         "''",
205         " there.",
206         "\n",
207         "hi ",
208         "<!--\nmulti-line\n# comment -->",
209         "\n",
210         "\n",
211         "asdf",
212         "\n",
213         "{{template_not_in_list}}",
214         "\n",
215         "# {{template_in_list}}",
216         "\n",
217         "[[wikitext]]",
218         ":",
219         "[[wikitext]]",
220         "\n",
221         ": but this is a list!",
222         "\n",
223         "*:* and so is this :::",
224         "\n",
225         "here's ",
226         "[[some blah|some]]",
227         " wikitext.",
228         "\n",
229         "here's a ",
230         "{{template|this has an = sign|blah=2|blah2=3|\nblah3=3,[[asdf]|[asdf asdf]|[asdf asdf asdf]],blah4=4}}",
231         " and some more text.",
232         "\n",
233         "== Header 2 ==",
234         "\n",
235         "{{some-func|blah={{nested-func|n2}}|blah2=asdf}}",
236         "\n",
237         "{{mismatched]]",
238         "\n",
239         "[[mismatched}}",
240         "\n",
241         "{extraterminated",
242         "}}",
243         "\n",
244         "[extraterminated",
245         "]]",
246         "\n",
247         "=== {{header-template}} ===",
248         "\n",
249         };
250     
251     final List<String> actualTokens = new ArrayList<String>();
252     
253     final WikiTokenizer wikiTokenizer = new WikiTokenizer(wikiText);
254     WikiTokenizer token;
255     int i = 0;
256     while ((token = wikiTokenizer.nextToken()) != null) {
257       actualTokens.add(token.token());
258       System.out.println("\"" + token.token().replace("\n", "\\n") + "\",");
259       assertEquals(expectedTokens[i++], token.token());
260     }
261     assertEquals(Arrays.asList(expectedTokens), actualTokens);
262   }
263   
264 }