/* * Priki - Prevalent Wiki * Copyright (c) 2006 - 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.prevalence; import junit.framework.TestCase; import org.priki.bo.Wikiword; import org.priki.format.HtmlFormatter; import org.priki.prevalence.exceptions.ConflictingWikiwordsException; public class CompositeWikiwordTransactionTest extends TestCase { @Override protected void setUp() throws Exception { Prevalence.getInstance().execute(new ClearWikiTransaction()); } public void testCaseSensitiveWikiword() { Prevalence p = Prevalence.getInstance(); // Check case sensitive ParserTransaction transaction = new ParserTransaction("user giovane", "JavaFree", "Virtual Java community", true); p.execute(transaction); Wikiword word = p.getWiki().getWikiword("JavaFree"); assertNotNull(word); assertTrue(word.isCaseSensitive()); // Check case insensitive transaction = new ParserTransaction("user giovane", "JavaFree", "Virtual Java community", false); p.execute(transaction); word = p.getWiki().getWikiword("JavaFree"); assertNotNull(word); assertFalse(word.isCaseSensitive()); } public void testCaseInsensitiveRecompilation() { Prevalence p = Prevalence.getInstance(); // Check case insensitive ParserTransaction transaction = new ParserTransaction("user vitor", "Java Free Cool", "Test Java Free Cool java free cool", false); p.execute(transaction); Wikiword word = p.getWiki().getWikiword("Java Free Cool"); assertNotNull(word); assertFalse(word.isCaseSensitive()); // Check case formatter. assertEquals("Test", word.getDefinition().getElement(0).getKeyword()); assertEquals("Java Free Cool", word.getDefinition().getElement(1).getKeyword()); assertEquals("Java Free Cool", word.getDefinition().getElement(2).getKeyword()); } public void testCaseInsensitiveWikiword() { Prevalence p = Prevalence.getInstance(); // Check case insensitive ParserTransaction transaction = new ParserTransaction("user giovane", "JavaFree", "Virtual Java community", false); p.execute(transaction); Wikiword word = p.getWiki().getWikiword("JavaFree"); assertNotNull(word); assertFalse(word.isCaseSensitive()); // Check case sensitive transaction = new ParserTransaction("user giovane", "JavaFree", "Virtual Java community", true); p.execute(transaction); word = p.getWiki().getWikiword("JavaFree"); assertNotNull(word); assertTrue(word.isCaseSensitive()); } public void testCaseInsensitiveCompositeWikiword() { Prevalence p = Prevalence.getInstance(); // Create wikiword with definition "Design Patterns" ParserTransaction transaction = new ParserTransaction("user giovane", "Teste", "Testing insensitive wikiword Design Patterns", true); p.execute(transaction); // Create insensitive wikiword "design patterns" transaction = new ParserTransaction("user giovane", "design patterns", "This wikiword must replace the Teste definition", false); p.execute(transaction); // The words Design should got be removed from wiki assertNull(p.getWiki().getWikiword("Design")); assertNull(p.getWiki().getWikiword("design")); // Check the link bewtween "design patterns" and "Teste" Wikiword patterns = p.getWiki().getWikiword("design patterns"); Wikiword teste = p.getWiki().getWikiword("Teste"); assertNotNull(patterns); assertNotNull(teste); assertEquals(1, patterns.getRelated().size()); assertEquals(1, patterns.getRelated().getCount(teste)); //FIXME This behavior is not desired, changing de user text to "design patterns" assertEquals("Testing insensitive wikiword design patterns", new HtmlFormatter().formatWithoutLinks(teste.getDefinition())); } public void testCaseSensitiveCompositeWikiwordChangingToInsensitive() { Prevalence p = Prevalence.getInstance(); // Create wikiword with definition "Design Patterns" ParserTransaction transaction = new ParserTransaction("user giovane", "Teste", "Testing insensitive wikiword Design Patterns", true); p.execute(transaction); // Create sensitive wikiword "design patterns" transaction = new ParserTransaction("user giovane", "design patterns", "This wikiword must replace the Teste definition", true); p.execute(transaction); // Change to insensitive transaction = new ParserTransaction("user giovane", "design patterns", "This wikiword must replace the Teste definition", false); p.execute(transaction); // The words Design should got be removed from wiki assertNull(p.getWiki().getWikiword("Design")); assertNull(p.getWiki().getWikiword("design")); // Check the link between "design patterns" and "Teste" Wikiword patterns = p.getWiki().getWikiword("design patterns"); Wikiword teste = p.getWiki().getWikiword("Teste"); assertNotNull(patterns); assertNotNull(teste); assertEquals(1, patterns.getRelated().size()); assertEquals(1, patterns.getRelated().getCount(teste)); //FIXME This behavior is not desired, changing de user text to "design patterns" assertEquals("Testing insensitive wikiword design patterns", new HtmlFormatter().formatWithoutLinks(teste.getDefinition())); } public void testCaseInsensitiveWikiwordReplacingUndefiniedSensitiveWikiword() { Prevalence p = Prevalence.getInstance(); // Create wikiword "JavaFree" // It instances many undefinied wikiwords "Virtual", "Java", "community" ParserTransaction transaction = new ParserTransaction("user giovane", "JavaFree", "Virtual Java community", true); p.execute(transaction); assertNotNull(p.getWiki().getWikiword("Java")); // Create insensitive wikiword "java" to replace "Java" transaction = new ParserTransaction("user giovane", "java", "Object Oriented Programming Language", false); p.execute(transaction); assertNull(p.getWiki().getWikiword("Java")); assertNotNull(p.getWiki().getWikiword("java")); // Check the link bewtween "JavaFree" and "java" Wikiword javafree = p.getWiki().getWikiword("JavaFree"); Wikiword java = p.getWiki().getWikiword("java"); assertEquals(1, java.getRelated().size()); assertEquals(1, java.getRelated().getCount(javafree)); //FIXME This behavior is not desired, changing de user text to "java" assertEquals("Virtual java community", new HtmlFormatter().formatWithoutLinks(javafree.getDefinition())); } public void testCaseSensitiveWikiwordChangingToInsensitive() { Prevalence p = Prevalence.getInstance(); // Create wikiword "JavaFree" and definition with "javafree" ParserTransaction transaction = new ParserTransaction("user giovane", "JavaFree", "javafree is a virtual community", true); p.execute(transaction); assertNotNull(p.getWiki().getWikiword("JavaFree")); assertNotNull(p.getWiki().getWikiword("javafree")); // Changes wikiword "javafree" to insensitive transaction = new ParserTransaction("user giovane", "JavaFree", "javafree is a virtual community", false); p.execute(transaction); assertNotNull(p.getWiki().getWikiword("JavaFree")); assertNull(p.getWiki().getWikiword("javafree")); // Check the link bewtween "JavaFree" and "JavaFree" Wikiword javafree = p.getWiki().getWikiword("JavaFree"); assertEquals(1, javafree.getRelated().size()); assertEquals(1, javafree.getRelated().getCount(javafree)); //FIXME This behavior is not desired, changing de user text to "JavaFree" assertEquals("JavaFree is a virtual community", new HtmlFormatter().formatWithoutLinks(javafree.getDefinition())); } public void testConflictingWikiwords() { Prevalence p = Prevalence.getInstance(); // Conflict between a sensitive and insensitive wikiword ParserTransaction transaction = new ParserTransaction("user giovane", "JavaFree", "Virtual Java community", false); p.execute(transaction); try { transaction = new ParserTransaction("user giovane", "JAVAFREE", "Virtual Java community", true); p.execute(transaction); fail(); } catch (ConflictingWikiwordsException e) { // OK } // Conflict between a insensitive and sensitive wikiword transaction = new ParserTransaction("user giovane", "JavaFree", "Virtual Java community", true); p.execute(transaction); try { transaction = new ParserTransaction("user giovane", "javafree", "Virtual Java community", false); p.execute(transaction); fail(); } catch (ConflictingWikiwordsException e) { // OK } } }