/* * Priki - Prevalent Wiki * Copyright (c) 2005 Priki * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * http://www.gnu.org/copyleft/gpl.html * * @author Vitor Fernando Pamplona - vitor@babaxp.org * */ package org.priki.format; import java.util.List; import junit.framework.TestCase; import org.priki.bo.AnonymousUser; import org.priki.bo.Text; import org.priki.bo.Wiki; import org.priki.bo.Wikiword; public class JavaCCTextParserTest extends TestCase { private Text text; private int i; private HtmlParser parser; private Wiki wiki; public void setUp() { wiki = new Wiki(); text = null; i = 0; parser = new HtmlParser(wiki); } public String nextKeyword() { return text.getElement(i++).getKeyword(); } Text parseText(String text) { return parser.parseText(text, new AnonymousUser("Vitor")); } public void testHtmlText() { text = parseText("<HTML>Paulo</HTML>"); assertNotNull(text); assertEquals(3, text.getElementCount()); assertEquals("<HTML>", nextKeyword()); assertEquals("Paulo", nextKeyword()); assertEquals("</HTML>", nextKeyword()); } public void testLinkText() { text = parseText(" http://www.javafree.org "); assertNotNull(text); assertEquals(1, text.getElementCount()); assertEquals("http://www.javafree.org", nextKeyword()); text = parseText(" <b>http://www.javafree.org</b> "); assertNotNull(text); assertEquals(3, text.getElementCount()); assertEquals("http://www.javafree.org", text.getElement(1).getKeyword()); text = parseText("http://www.javafree.org."); assertNotNull(text); assertEquals(2, text.getElementCount()); assertEquals("http://www.javafree.org", text.getElement(0).getKeyword()); assertEquals(".", text.getElement(1).getKeyword()); } public void testNormalHTMLText() { text = parseText(" <p>Algum texto</p> "); assertNotNull(text); assertEquals(4, text.getElementCount()); assertEquals("<p>", nextKeyword()); assertEquals("Algum", nextKeyword()); assertEquals("texto", nextKeyword()); assertEquals("</p>", nextKeyword()); text = parseText("<b>Teste</b>"); assertNotNull(text); i=0; assertEquals(3, text.getElementCount()); assertEquals("<b>", nextKeyword()); assertEquals("Teste", nextKeyword()); assertEquals("</b>", nextKeyword()); text = parseText("<b>t<em>este</em></b>"); assertNotNull(text); i=0; //assertEquals(8, text.getElementCount()); assertEquals("<", nextKeyword()); assertEquals("b", nextKeyword()); assertEquals(">", nextKeyword()); text = parseText("<pre>< b >t<em>este</em></b></pre>"); assertNotNull(text); i=0; //assertEquals(8, text.getElementCount()); assertEquals("<pre>< b >t<em>este</em></b></pre>", nextKeyword()); } public void testEmailText() { text = parseText(" vitor@vitorpamplona.com "); assertNotNull(text); assertEquals(1, text.getElementCount()); assertEquals("vitor@vitorpamplona.com", nextKeyword()); text = parseText(" <b>vitor@vitorpamplona.com</b> "); assertNotNull(text); assertEquals(3, text.getElementCount()); assertEquals("vitor@vitorpamplona.com", text.getElement(1).getKeyword()); text = parseText("vitor@vitorpamplona.com."); assertNotNull(text); assertEquals(2, text.getElementCount()); assertEquals("vitor@vitorpamplona.com", text.getElement(0).getKeyword()); assertEquals(".", text.getElement(1).getKeyword()); } public void testHTMLCODEText() { text = parseText(" Vítor "); assertNotNull(text); assertEquals(1, text.getElementCount()); assertEquals("Vítor", nextKeyword()); } public void testHTMLText() { text = parseText(" <dsfasd> "); assertNotNull(text); assertEquals(1, text.getElementCount()); assertEquals("<dsfasd>", text.getElement(i).getKeyword()); text = parseText(" <dsfasd>sfsd "); assertNotNull(text); assertEquals(2, text.getElementCount()); assertEquals("<dsfasd>", text.getElement(0).getKeyword()); assertEquals("sfsd", text.getElement(1).getKeyword()); text = parseText(" <dsfasd>sfsd7 ��&*( "); assertNotNull(text); assertEquals(7, text.getElementCount()); assertEquals("<dsfasd>", text.getElement(0).getKeyword()); assertEquals("sfsd7", text.getElement(1).getKeyword()); assertEquals("�", text.getElement(2).getKeyword()); assertEquals("�", text.getElement(3).getKeyword()); assertEquals("&", text.getElement(4).getKeyword()); assertEquals("*", text.getElement(5).getKeyword()); assertEquals("(", text.getElement(6).getKeyword()); } public void testHTMLPowerText() { text = parseText(" 6<dsfasd>sfsd7( --- __��&*( <"); assertNotNull(text); assertEquals("6", nextKeyword()); assertEquals("<dsfasd>", nextKeyword()); assertEquals("sfsd7", nextKeyword()); assertEquals("(", nextKeyword()); assertEquals("-", nextKeyword()); assertEquals("-", nextKeyword()); assertEquals("-", nextKeyword()); assertEquals("__", nextKeyword()); assertEquals("�", nextKeyword()); assertEquals("�", nextKeyword()); assertEquals("&", nextKeyword()); assertEquals("*", nextKeyword()); assertEquals("(", nextKeyword()); assertEquals("<", nextKeyword()); assertEquals(14, text.getElementCount()); text = parseText(" < asdf sad fasdf > </ OI > </OI> < / OI >"); i=0; assertEquals("<", nextKeyword()); assertEquals("asdf", nextKeyword()); assertEquals("sad", nextKeyword()); assertEquals("fasdf", nextKeyword()); assertEquals(">", nextKeyword()); assertEquals("</ OI >", nextKeyword()); assertEquals("</OI>", nextKeyword()); assertEquals("<", nextKeyword()); assertEquals("/", nextKeyword()); assertEquals("OI", nextKeyword()); assertEquals(">", nextKeyword()); } public void testNormalTextParser() { text = parseText("The book is on the table."); assertEquals(1, wiki.getElementCount()); assertEquals(6, wiki.getWikiwordCount()); assertEquals("The", nextKeyword()); assertEquals("book", nextKeyword()); assertEquals("is", nextKeyword()); assertEquals("on", nextKeyword()); assertEquals("the", nextKeyword()); assertEquals("table", nextKeyword()); assertEquals(".", nextKeyword()); } public void testSimbolicText() { text = parseText("The- book. is on *&the table: Hey"); assertEquals(5, wiki.getElementCount()); assertEquals(7, wiki.getWikiwordCount()); assertEquals("The", nextKeyword()); assertEquals("-", nextKeyword()); assertEquals("book", nextKeyword()); assertEquals(".", nextKeyword()); assertEquals("is", nextKeyword()); assertEquals("on", nextKeyword()); assertEquals("*", nextKeyword()); assertEquals("&", nextKeyword()); assertEquals("the", nextKeyword()); assertEquals("table", nextKeyword()); assertEquals(":", nextKeyword()); assertEquals("Hey", nextKeyword()); } public void testCompositeWikiWord() { Wikiword vitor = new Wikiword("Vitor"); text = parseText("Vitor Fernando Pamplona"); vitor.setDefinition(text); assertEquals("Vitor", nextKeyword()); assertEquals("Fernando", nextKeyword()); assertEquals("Pamplona", nextKeyword()); wiki.newWikiword("Vitor Fernando"); assertEquals(4, wiki.getWikiwordCount()); text = vitor.getDefinition(); // Testing composite parser text = parseText("Vitor Fernando Pamplona"); i=0; assertEquals("Vitor Fernando", nextKeyword()); assertEquals("Pamplona", nextKeyword()); assertEquals(4, wiki.getWikiwordCount()); // Testing composite parser text = parseText("Vitor Pamplona"); i=0; assertEquals("Vitor", nextKeyword()); assertEquals("Pamplona", nextKeyword()); assertEquals(4, wiki.getWikiwordCount()); text = parseText("Paulo Roberto Pamplona"); assertEquals(6, wiki.getWikiwordCount()); wiki.newElement("Paulo Roberto Pamplona"); assertEquals(6, wiki.getWikiwordCount()); assertEquals(1, wiki.getElementCount()); wiki.newWikiword("Paulo Roberto Pamplona"); assertEquals(7, wiki.getWikiwordCount()); text = parseText("Paulo Roberto Pamplona"); i=0; assertEquals("Paulo Roberto Pamplona", nextKeyword()); assertEquals(7, wiki.getWikiwordCount()); text = parseText("Paulo Vitor Roberto Pamplona"); i=0; assertEquals("Paulo", nextKeyword()); assertEquals("Vitor", nextKeyword()); assertEquals("Roberto", nextKeyword()); assertEquals("Pamplona", nextKeyword()); assertEquals(7, wiki.getWikiwordCount()); // Testing non composite parser text = parseText("Paulo Roberto 12 Pamplona"); i=0; assertEquals("Paulo", nextKeyword()); assertEquals("Roberto", nextKeyword()); assertEquals("12", nextKeyword()); assertEquals("Pamplona", nextKeyword()); assertEquals(8, wiki.getWikiwordCount()); } public void testParserInNotChangeTags() { text = parseText("<pre>Paulo</pre> Oi"); assertNotNull(text); assertEquals("<pre>Paulo</pre>", nextKeyword()); assertEquals("Oi", nextKeyword()); assertEquals(2, text.getElementCount()); text = parseText("<pre>Paulo<br> vitor</pre> Oi"); assertNotNull(text); i=0; assertEquals("<pre>Paulo<br> vitor</pre>", nextKeyword()); assertEquals("Oi", nextKeyword()); assertEquals(2, text.getElementCount()); text = parseText("<a href='teste'></a> Oi"); assertNotNull(text); i=0; assertEquals("<a href='teste'></a>", nextKeyword()); assertEquals(2, text.getElementCount()); assertEquals("Oi", nextKeyword()); text = parseText("<a href='teste/teste/teste'>aeee</a> Oi"); assertNotNull(text); i=0; assertEquals("<a href='teste/teste/teste'>aeee</a>", nextKeyword()); assertEquals("Oi", nextKeyword()); assertEquals(2, text.getElementCount()); text = parseText("<a href='<pre></pre> sdfas'> 4545454 </a> Oi"); assertNotNull(text); i=0; assertEquals("<a href='<pre></pre> sdfas'> 4545454 </a>", nextKeyword()); assertEquals(2, text.getElementCount()); assertEquals("Oi", nextKeyword()); text = parseText("<code href='<a></pre> sdfas'> </a> <>></code> Oi"); assertNotNull(text); i=0; assertEquals("<code href='<a></pre> sdfas'> </a> <>></code>", nextKeyword()); assertEquals(2, text.getElementCount()); assertEquals("Oi", nextKeyword()); text = parseText("<a href=\"teste/teste/teste\">aeee</a> Oi"); assertNotNull(text); i=0; assertEquals("<a href=\"teste/teste/teste\">aeee</a>", nextKeyword()); assertEquals("Oi", nextKeyword()); assertEquals(2, text.getElementCount()); } public void testGetOnlyWikiwords() { List<Wikiword> wikiwords = parser.getOnlyWikiwords("Hi <a href=\"teste/teste/teste\">aeee</a> Oi"); i=0; assertEquals(2, wikiwords.size()); assertEquals("Hi", wikiwords.get(i++).getKeyword()); assertEquals("Oi", wikiwords.get(i++).getKeyword()); wikiwords = parser.getOnlyWikiwords("Hi <img href=\"teste/teste/teste\">aeee</img> Oi"); i=0; assertEquals(3, wikiwords.size()); assertEquals("Hi", wikiwords.get(i++).getKeyword()); assertEquals("aeee", wikiwords.get(i++).getKeyword()); assertEquals("Oi", wikiwords.get(i++).getKeyword()); wikiwords = parser.getOnlyWikiwords("Hi <a href=\"teste/teste/teste\" target=\"_blank\">aeee</a> Oi"); i=0; assertEquals(2, wikiwords.size()); assertEquals("Hi", wikiwords.get(i++).getKeyword()); assertEquals("Oi", wikiwords.get(i++).getKeyword()); wikiwords = parser.getOnlyWikiwords("<a href=\"http://daltoncamargo.blogspot.com/\" target=\"_new\">Dalton Camargo</a><br><span style=\"font-size: 10px;\">JEE Software Architect<br>JavaFree.org Founder<br>JavaBB.org Owner<br>Technical Revisor of Spring in Action the Book to Portuguese</span>"); i=0; assertEquals(17, wikiwords.size()); assertEquals("JEE", wikiwords.get(i++).getKeyword()); assertEquals("Software", wikiwords.get(i++).getKeyword()); wikiwords = parser.getOnlyWikiwords("Vitor Fernando Pamplona."); i=0; assertEquals(3, wikiwords.size()); assertEquals("Vitor", wikiwords.get(i++).getKeyword()); assertEquals("Fernando", wikiwords.get(i++).getKeyword()); assertEquals("Pamplona", wikiwords.get(i++).getKeyword()); wikiwords = parser.getOnlyWikiwords("JavaBB.org"); i=0; assertEquals(1, wikiwords.size()); assertEquals("JavaBB.org", wikiwords.get(i++).getKeyword()); } public void testSplitWikiword() { wiki.newWikiword("design patterns"); List<Wikiword> col = parser.getWikiwords("design patterns"); assertEquals(1, col.size()); assertEquals("design patterns", col.get(0).getKeyword()); col = parser.splitWikiword("design patterns"); assertEquals(2, col.size()); assertEquals("design", col.get(0).getKeyword()); assertEquals("patterns", col.get(1).getKeyword()); } public void testHTMLAmbiguityProblem() { text = parseText("<A href=\"sjfkasfdj\">Paulo</ a > Oi <a href=\"sjfkasfdj\">Paulo</a>"); assertEquals("<A href=\"sjfkasfdj\">Paulo</ a >", text.getElement(0).getKeyword()); assertEquals("Oi", text.getElement(1).getKeyword()); assertEquals("<a href=\"sjfkasfdj\">Paulo</a>", text.getElement(2).getKeyword()); text = parseText("<code> some code 1</ code > Oi <code> some code 2</code>"); assertEquals("<code> some code 1</ code >", text.getElement(0).getKeyword()); assertEquals("Oi", text.getElement(1).getKeyword()); assertEquals("<code> some code 2</code>", text.getElement(2).getKeyword()); text = parseText("<pre> some code 1</pre> Oi <pre> some code 2</pre > <pre> some code 3</ pre> <pre> some code 4</pre>"); assertEquals("<pre> some code 1</pre>", text.getElement(0).getKeyword()); assertEquals("Oi", text.getElement(1).getKeyword()); assertEquals("<pre> some code 2</pre >", text.getElement(2).getKeyword()); assertEquals("<pre> some code 3</ pre>", text.getElement(3).getKeyword()); assertEquals("<pre> some code 4</pre>", text.getElement(4).getKeyword()); } public void testHTMLParser() { text = parseText("<p>fabi <a href=\"teste\">teste</a> </p>"); i=0; assertEquals("<p>",nextKeyword()); assertEquals("fabi",nextKeyword()); assertEquals("<",nextKeyword()); assertEquals("a",nextKeyword()); assertEquals("href",nextKeyword()); assertEquals("=",nextKeyword()); assertEquals("\"",nextKeyword()); assertEquals("teste",nextKeyword()); assertEquals("\"",nextKeyword()); assertEquals(">",nextKeyword()); assertEquals("teste",nextKeyword()); assertEquals("<",nextKeyword()); assertEquals("/",nextKeyword()); assertEquals("a",nextKeyword()); assertEquals(">",nextKeyword()); assertEquals("</p>",nextKeyword()); text = parseText("<h2>Titulo 2</h2><p> </p><h3>Título 3 </h3><p> aasdfasdfasdf </p>"); i=0; assertEquals("<h2>",nextKeyword()); assertEquals("Titulo",nextKeyword()); assertEquals("2",nextKeyword()); assertEquals("</h2>",nextKeyword()); assertEquals("<p>",nextKeyword()); assertEquals(" ",nextKeyword()); assertEquals("</p>",nextKeyword()); assertEquals("<h3>",nextKeyword()); assertEquals("Título",nextKeyword()); } public void testCompositeAlmostEqualsWikiword() { wiki.newWikiword("Design Patterns do Vitor"); text = parseText("Design Patterns do Vitor Olá!"); assertEquals(3, text.getElementCount()); assertEquals("Design Patterns do Vitor", text.getElement(0).getKeyword()); wiki.newWikiword("Design Patterns do"); text = parseText("Design Patterns do Olá! Design Patterns do Vitor"); i=0; assertEquals("Design Patterns do", nextKeyword()); assertEquals("Olá", nextKeyword()); assertEquals("!", nextKeyword()); assertEquals("Design Patterns do Vitor", nextKeyword()); } public void testTime() { text = parseText("It's 9:00 o'clock!"); assertEquals("It's", text.getElement(0).getKeyword()); assertEquals("9:00", text.getElement(1).getKeyword()); assertEquals("o'clock", text.getElement(2).getKeyword()); // text = parseText("My friend said: \"Hello Vitor!\""); assertEquals("My", text.getElement(0).getKeyword()); assertEquals("friend", text.getElement(1).getKeyword()); assertEquals("said", text.getElement(2).getKeyword()); assertEquals(":", text.getElement(3).getKeyword()); assertEquals("\"", text.getElement(4).getKeyword()); assertEquals("Hello", text.getElement(5).getKeyword()); assertEquals("Vitor", text.getElement(6).getKeyword()); assertEquals("!", text.getElement(7).getKeyword()); assertEquals("\"", text.getElement(8).getKeyword()); } public void testDate() { text = parseText("It will be in 07/12/2007!"); assertEquals("It", text.getElement(0).getKeyword()); assertEquals("will", text.getElement(1).getKeyword()); assertEquals("be", text.getElement(2).getKeyword()); assertEquals("in", text.getElement(3).getKeyword()); assertEquals("07/12/2007", text.getElement(4).getKeyword()); } public void testNumber() { text = parseText("Numbers: 2.52, 2,35 and 2.356,22"); assertEquals("Numbers", text.getElement(0).getKeyword()); assertEquals(":", text.getElement(1).getKeyword()); assertEquals("2.52", text.getElement(2).getKeyword()); assertEquals(",", text.getElement(3).getKeyword()); assertEquals("2,35", text.getElement(4).getKeyword()); assertEquals("and", text.getElement(5).getKeyword()); assertEquals("2.356,22", text.getElement(6).getKeyword()); } public void testPercent() { text = parseText("25% of those guys"); assertEquals("25%", text.getElement(0).getKeyword()); assertEquals("of", text.getElement(1).getKeyword()); assertEquals("those", text.getElement(2).getKeyword()); assertEquals("guys", text.getElement(3).getKeyword()); } public void tokenizerCheck(String toParse, String... keywords) { text = parseText(toParse); int cont = 0; for (String temp : keywords) { assertEquals(temp, text.getElement(cont++).getKeyword()); } } public void testAnd2() { tokenizerCheck("Alou & crazy", "Alou", "&", "crazy"); } public void testAspas() { tokenizerCheck("Chande maromi's", "Chande", "maromi's"); tokenizerCheck("Chande maromi'", "Chande", "maromi'"); } public void testPlusPlus() { tokenizerCheck("C++", "C++"); } public void testDirectory() { tokenizerCheck("Vitor/Vitor/Teste/Crazy", "Vitor/Vitor/Teste/Crazy"); } public void testSamba() { tokenizerCheck("\\\\Vitor\\Teste\\Vitor\\Halst", "\\\\Vitor\\Teste\\Vitor\\Halst"); } public void testCode() { tokenizerCheck("Pamp<i>lo</i>na", "Pamp<i>lo</i>na"); } }