package com.hughes.android.dictionary.parser; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import junit.framework.TestCase; public class WikiTokenizerTest extends TestCase { public void testSimple() { final String wikiText = "Hi" + "\n" + "Hello thad you're '''pretty''' cool '''''over''''' there." + "\n" + "hi " + "\n" + "" + "\n" + "asdf\n" + "{{template_not_in_list}}" + "\n" + "# {{template_in_list}}" + "\n" + "[[wikitext]]:[[wikitext]]" + "\n" + // don't want this to trigger a list ": but this is a list!" + "\n" + "*:* and so is this :::" + "\n" + "here's [[some blah|some]] wikitext." + "\n" + "here's a {{template|this has an = sign|blah=2|blah2=3|" + "\n" + "blah3=3,[[asdf]|[asdf asdf]|[asdf asdf asdf]],blah4=4}} and some more text." + "\n" + "== Header 2 ==" + "\n" + "{{some-func|blah={{nested-func|n2}}|blah2=asdf}}" + "\n" + "{{mismatched]]" + "\n" + "[[mismatched}}" + "\n" + "{extraterminated}}" + "\n" + "[extraterminated]]" + "\n" + "=== {{header-template}} ===" + "\n"; final String[] expectedTokens = new String[] { "Hi", "\n", "Hello thad you're ", "", " ", "'''", "pretty", "'''", " cool ", "'''", "''", "over", "'''", "''", " there.", "\n", "hi ", "", "\n", "\n", "asdf", "\n", "{{template_not_in_list}}", "\n", "# {{template_in_list}}", "\n", "[[wikitext]]", ":", "[[wikitext]]", "\n", ": but this is a list!", "\n", "*:* and so is this :::", "\n", "here's ", "[[some blah|some]]", " wikitext.", "\n", "here's a ", "{{template|this has an = sign|blah=2|blah2=3|\nblah3=3,[[asdf]|[asdf asdf]|[asdf asdf asdf]],blah4=4}}", " and some more text.", "\n", "== Header 2 ==", "\n", "{{some-func|blah={{nested-func|n2}}|blah2=asdf}}", "\n", "{{mismatched]]\n", "[[mismatched}}\n", "{extraterminated", "}}", "\n", "[extraterminated", "]]", "\n", "=== {{header-template}} ===", "\n", }; final List actualTokens = new ArrayList(); final WikiTokenizer wikiTokenizer = new WikiTokenizer(wikiText); WikiTokenizer token; int i = 0; while ((token = wikiTokenizer.nextToken()) != null) { actualTokens.add(token.token()); System.out.println("\"" + token.token().replace("\n", "\\n") + "\","); assertEquals(expectedTokens[i++], token.token()); } assertEquals(Arrays.asList(expectedTokens), actualTokens); } public void testWikiHeading() { assertNull(WikiHeading.getHeading("")); assertNull(WikiHeading.getHeading("=")); assertNull(WikiHeading.getHeading("==")); assertNull(WikiHeading.getHeading("=a")); assertNull(WikiHeading.getHeading("=a==")); assertNull(WikiHeading.getHeading("===a==")); assertNull(WikiHeading.getHeading("===a====")); assertNull(WikiHeading.getHeading("a=")); assertEquals("a", WikiHeading.getHeading("=a=").name); assertEquals(1, WikiHeading.getHeading("=a=").depth); assertEquals("aa", WikiHeading.getHeading("==aa==").name); assertEquals(2, WikiHeading.getHeading("==aa==").depth); } public void testWikiFunction() { assertNull(WikiFunction.getFunction("")); assertNull(WikiFunction.getFunction("[[asdf]]")); assertNull(WikiFunction.getFunction("asd [[asdf]]asdf ")); assertEquals("a", WikiFunction.getFunction("{{a}}").name); assertEquals("a", WikiFunction.getFunction("{{a|b}}").name); assertEquals("a", WikiFunction.getFunction("a{{a|b}}a").name); assertEquals("a[[a]]", WikiFunction.getFunction("a{{a[[a]]|b}}a").name); assertEquals("a", WikiFunction.getFunction("a{{a|b[[abc|def]]|[[fgh|jkl]]|qwer}}a").name); assertEquals(Arrays.asList("b[[abc|d=f]]", "qwer", "[[fgh|jkl]]", "qwer"), WikiFunction.getFunction("a{{a|b[[abc|d=f]]|qwer|[[fgh|jkl]]|qwer}}a").args); assertEquals("[[abc|def]]", WikiFunction.getFunction("a{{a|b=[[abc|def]]|qwer|[[fgh|jkl]]|qwer={{asdf}}}}a").namedArgs.get("b")); assertEquals("{{asdf}}", WikiFunction.getFunction("a{{a|b=[[abc|def]]|qwer|[[fgh|jkl]]|qwer={{asdf}}}}a").namedArgs.get("qwer")); } }