/*
* Copyright (C) 2003-2009 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* 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, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.ks.bbcode.core;
import java.util.Arrays;
import java.util.Collection;
import junit.framework.TestCase;
import org.exoplatform.ks.bbcode.api.BBCode;
import org.exoplatform.ks.bbcode.spi.BBCodeData;
import org.exoplatform.ks.bbcode.spi.BBCodeProvider;
/**
* @author <a href="mailto:patrice.lamarque@exoplatform.com">Patrice Lamarque</a>
* @version $Revision$
*/
public class TestBBCodeRenderer extends TestCase {
public void testProcessTag() {
BBCodeRenderer renderer = new BBCodeRenderer();
// simple case
BBCode bbcode = createBBCode("I", "<i>{param}</i>");
String actual = renderer.processTag("[I]italic[/I]", bbcode);
assertEquals("<i>italic</i>", actual);
// several occurrences
actual = renderer.processTag("[I]foo[/I] ... [I]bar[/I]", bbcode);
assertEquals("<i>foo</i> ... <i>bar</i>", actual);
}
public void testRenderLinkAlias() {
BBCodeRenderer renderer = new BBCodeRenderer();
renderer.setBbCodeProvider(new BBCodeProvider() {
public Collection<String> getSupportedBBCodes() {
return Arrays.asList("URL");
}
public BBCode getBBCode(String tagName) {
BBCode bbcode = new BBCode();
bbcode.setTagName("URL");
bbcode.setReplacement("<a href='{option}'>{param}</a>");
bbcode.setOption(true);
return bbcode;
}
});
String actual = renderer.render("[link=http://www.example.org]example[/link]");
assertEquals("<a href='http://www.example.org'>example</a>", actual);
}
public void testProcessOptionedTag() {
BBCodeRenderer renderer = new BBCodeRenderer();
// simple case
BBCode bbc = createOptionedBBCode("email", "<a href='mailto:{option}'>{param}</a>");
String markup = "[email=demo@example.com]Click Here to Email me[/email]";
assertEquals("<a href='mailto:demo@example.com'>Click Here to Email me</a>", renderer.processOptionedTag(markup, bbc));
// test we can replace several occurences
bbc = createOptionedBBCode("foo", "foo:{option}>{param}");
markup = "[foo=bar]blah[/foo] ... [foo=joe]blih[/foo]";
assertEquals("foo:bar>blah ... foo:joe>blih", renderer.processOptionedTag(markup, bbc));
// '+' (plus) symbol is removed from option
bbc = createOptionedBBCode("size", "<font size='{option}'>{param}</font>");
markup = "[size=+2]foo[/size]";
assertEquals("<font size='2'>foo</font>", renderer.processOptionedTag(markup, bbc));
// '"' (quote) symbols are ignored
bbc = createOptionedBBCode("url", "<a href='{option}'>{param}</a>");
markup = "[url=\"http://www.example.org\"]foo[/url]";
assertEquals("<a href='http://www.example.org'>foo</a>", renderer.processOptionedTag(markup, bbc));
// '"' (html quote entity) are ignored
bbc = createOptionedBBCode("url", "<a href='{option}'>{param}</a>");
markup = "[url="http://www.example.org"]foo[/url]";
assertEquals("<a href='http://www.example.org'>foo</a>", renderer.processOptionedTag(markup, bbc));
}
private BBCode createOptionedBBCode(String tag, String replacement) {
BBCode bbc = new BBCode();
bbc.setTagName(tag);
bbc.setOption(true);
bbc.setReplacement(replacement);
return bbc;
}
private BBCode createBBCode(String tag, String replacement) {
BBCode bbc = new BBCode();
bbc.setTagName(tag);
bbc.setOption(false);
bbc.setReplacement(replacement);
return bbc;
}
public void testProcessList() {
BBCodeData bbcode = new BBCodeData();
bbcode.setTagName("list");
bbcode.setIsOption("false");
BBCodeRenderer renderer = new BBCodeRenderer();
String actual = renderer.processList("[list][*]list item 1[*]list item 2[/list]");
assertEquals("<ul><li>list item 1</li><li>list item 2</li></ul>", actual);
}
public void testBuiltinBBCodes() {
BBCodeRenderer renderer = new BBCodeRenderer();
renderer.setBbCodeProvider(new BuiltinBBCodeProvider());
assertEquals("<b>param</b>", renderer.render("[B]param[/B]"));
assertEquals("<i>param</i>", renderer.render("[I]param[/I]"));
assertEquals("<u>param</u>", renderer.render("[U]param[/U]"));
assertEquals("<font color=\"blue\">param</font>", renderer.render("[COLOR=blue]param[/COLOR]"));
assertEquals("<font face=\"courier\">param</font>", renderer.render("[FONT=courier]param[/FONT]"));
assertEquals("<span class=\"highlighted\">param</span>", renderer.render("[HIGHLIGHT]param[/HIGHLIGHT]"));
assertEquals("<div align=\"left\">param</div>", renderer.render("[LEFT]param[/LEFT]"));
assertEquals("<div align=\"right\">param</div>", renderer.render("[RIGHT]param[/RIGHT]"));
assertEquals("<div align=\"center\">param</div>", renderer.render("[CENTER]param[/CENTER]"));
assertEquals("<div align=\"justify\">param</div>", renderer.render("[JUSTIFY]param[/JUSTIFY]"));
assertEquals("<a href=\"mailto:param\">param</a>", renderer.render("[EMAIL]param[/EMAIL]"));
assertEquals("<a href=\"mailto:option\">param</a>", renderer.render("[EMAIL=option]param[/EMAIL]"));
assertEquals("<a target=\"_blank\" href=\"http://www.exoplatform.org\">http://www.exoplatform.org</a>", renderer.render("[URL]http://www.exoplatform.org[/URL]"));
assertEquals("<a target=\"_blank\" href=\"http://www.exoplatform.org\">eXo</a>", renderer.render("[URL=http://www.exoplatform.org]eXo[/URL]"));
assertEquals("<a href=\"http://www.exoplatform.org\">eXo</a>", renderer.render("[GOTO=http://www.exoplatform.org]eXo[/GOTO]"));
assertEquals("<img border=\"0\" alt=\"\" src=\"param\" class=\"inlineimg\"/>", renderer.render("[IMG]param[/IMG]"));
assertEquals("<blockquote>param</blockquote>", renderer.render("[QUOTE]param[/QUOTE]"));
assertEquals("<blockquote cite=\"author\">param</blockquote>", renderer.render("[QUOTE=author]param[/QUOTE]"));
assertEquals("<span class=\"option\">param</span>", renderer.render("[CSS=option]param[/CSS]"));
assertEquals("<font size=\"2\">param</font>", renderer.render("[SIZE=2]param[/SIZE]"));
assertEquals("<font size=\"2\">param</font>", renderer.render("[SIZE=+2]param[/SIZE]"));
assertEquals("<font size=\"-2\">param</font>", renderer.render("[SIZE=-2]param[/SIZE]"));
}
}