/*
* Copyright 1998-2017 Linux.org.ru
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ru.org.linux.util.bbcode;
import org.apache.commons.httpclient.URI;
import org.junit.Before;
import org.junit.Test;
import ru.org.linux.spring.SiteConfig;
import ru.org.linux.user.UserService;
import ru.org.linux.util.formatter.ToHtmlFormatter;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static ru.org.linux.util.bbcode.tags.QuoteTag.citeFooter;
import static ru.org.linux.util.bbcode.tags.QuoteTag.citeHeader;
public class SimpleParserTest {
private LorCodeService lorCodeService;
private String url;
@Before
public void init() throws Exception {
String mainUrl = "http://127.0.0.1:8080/";
URI mainURI = new URI(mainUrl, true, "UTF-8");
SiteConfig siteConfig = mock(SiteConfig.class);
when(siteConfig.getMainURI()).thenReturn(mainURI);
ToHtmlFormatter toHtmlFormatter = new ToHtmlFormatter();
toHtmlFormatter.setSiteConfig(siteConfig);
lorCodeService = new LorCodeService();
lorCodeService.setUserService(mock(UserService.class));
lorCodeService.setToHtmlFormatter(toHtmlFormatter);
url = "http://127.0.0.1:8080/forum/talks/22464";
}
@Test
public void brTest() {
assertEquals("<p><br></p>", lorCodeService.parseComment("[br]", false));
}
@Test
public void boldTest() {
assertEquals("<p><b>hello world</b></p>", lorCodeService.parseComment("[b]hello world[/b]", false));
}
@Test
public void italicTest() {
assertEquals("<p><i>hello world</i></p>", lorCodeService.parseComment("[i]hello world[/i]", false));
}
@Test
public void strikeoutTest() {
assertEquals("<p><s>hello world</s></p>", lorCodeService.parseComment("[s]hello world[/s]", false));
}
@Test
public void emphasisTest() {
assertEquals("<p><strong>hello world</strong></p>", lorCodeService.parseComment("[strong]hello world[/strong]", false));
}
@Test
public void quoteTest() {
assertEquals(lorCodeService.parseComment("[quote]hello world[/quote]", false),
citeHeader + "<p>hello world</p>" + citeFooter);
}
@Test
public void quoteTextTest() {
assertEquals(lorCodeService.extractPlainTextFromLorcode("[quote]hello world[/quote]"),
"«hello world»");
}
@Test
public void quoteParamTest() {
assertEquals(lorCodeService.parseComment("[quote=maxcom]hello world[/quote]", false),
citeHeader + "<p><cite>maxcom</cite></p><p>hello world</p>"+citeFooter);
}
@Test
public void quoteCleanTest() {
assertEquals("", lorCodeService.parseComment("[quote][/quote]", false));
}
@Test
public void urlTest() {
assertEquals("<p><a href=\"http://linux.org.ru\">http://linux.org.ru</a></p>",
lorCodeService.parseComment("[url]http://linux.org.ru[/url]", false));
}
@Test
public void paragraphSpacesTest() {
assertEquals("<p><a href=\"http://linux.org.ru\">http://linux.org.ru</a> <a href=\"http://linux.org.ru\">http://linux.org.ru</a></p>",
lorCodeService.parseComment("[url]http://linux.org.ru[/url] [url]http://linux.org.ru[/url]", false));
}
@Test
public void urlParamTest() {
assertEquals("<p><a href=\"http://linux.org.ru\">linux</a></p>", lorCodeService.parseComment("[url=http://linux.org.ru]linux[/url]", false));
}
@Test
public void urlParamWithTagTest() {
assertEquals("<p><a href=\"http://linux.org.ru\"><b>l</b>inux</a></p>", lorCodeService.parseComment("[url=http://linux.org.ru][b]l[/b]inux[/url]", false));
}
@Test
public void urlParamWithTagTest2() {
assertEquals("<p><a href=\"http://linux.org.ru\"><b>linux</b></a></p>", lorCodeService.parseComment("[url=http://linux.org.ru][b]linux[/b][/url]", false));
}
@Test
public void listTest() {
assertEquals("<ul><li>one</li><li>two</li><li>three</li></ul>", lorCodeService.parseComment("[list][*]one[*]two[*]three[/list]", false));
assertEquals(
"<ul><li>one\n" +
"</li><li>two\n" +
"</li><li>three\n" +
"</li></ul>",
lorCodeService.parseComment("[list]\n[*]one\n[*]two\n[*]three\n[/list]", false));
assertEquals(
"<ul><li>one\n" +
"</li><li>two\n" +
"</li><li>three\n" +
"</li></ul>",
lorCodeService.parseTopic("[list]\n[*]one\n[*]two\n[*]three\n[/list]", false));
}
@Test
public void overflow1Test() {
assertEquals("<p>ololo</p>" + citeHeader +"<p><i>hz</i></p>" + citeFooter,
lorCodeService.parseComment("ololo[quote][i]hz[/i][/quote]", false));
}
@Test
public void preTest() {
assertEquals(
"<pre>Тег используем мы этот,\n" +
"Чтобы строки разделять,\n" +
"Если вдруг стихи захочем\n" +
"Здесь, на ЛОРе, запощать.\n\n" +
"Ну а строфы разделяем\n" +
"Как привыкли уж давно!</pre>"
, lorCodeService.parseComment(
"[pre]Тег используем мы этот,\n" +
"Чтобы строки разделять,\n" +
"Если вдруг стихи захочем\n" +
"Здесь, на ЛОРе, запощать.\n\n" +
"Ну а строфы разделяем\n" +
"Как привыкли уж давно![/pre]"
, false));
}
@Test
public void spacesTest() {
assertEquals("<p>some text</p><p> some again text <a href=\"http://example.com\">example</a> example</p>",
lorCodeService.parseComment("some text\n\n some again text [url=http://example.com]example[/url] example", false));
}
@Test
public void cutTest() {
assertEquals("<p>test</p>",
lorCodeService.parseComment("[cut]test[/cut]", false));
assertEquals("<p>( <a href=\"http://127.0.0.1:8080/forum/talks/22464#cut0\">читать дальше...</a> )</p>",
lorCodeService.parseTopicWithMinimizedCut("[cut]test[/cut]", url, false));
assertEquals("<p>( <a href=\"http://127.0.0.1:8080/forum/talks/22464#cut0\">читать дальше...</a> )</p>",
lorCodeService.parseTopicWithMinimizedCut("[cut]test[/cut]", url, false));
assertEquals("<div id=\"cut0\"><p>test</p></div>",
lorCodeService.parseTopic("[cut]test[/cut]", false));
}
@Test
public void cut2Test() {
assertEquals("<p>test</p>",
lorCodeService.parseComment("[cut]\n\ntest[/cut]", false));
assertEquals("<p>( <a href=\"http://127.0.0.1:8080/forum/talks/22464#cut0\">читать дальше...</a> )</p>",
lorCodeService.parseTopicWithMinimizedCut("[cut]\n\ntest[/cut]", url, false));
assertEquals("<p>( <a href=\"http://127.0.0.1:8080/forum/talks/22464#cut0\">читать дальше...</a> )</p>",
lorCodeService.parseTopicWithMinimizedCut("[cut]\n\ntest[/cut]", url, false));
assertEquals("<div id=\"cut0\"><p>test</p></div>",
lorCodeService.parseTopic("[cut]\n\ntest[/cut]", false));
}
@Test
public void cut3Test() {
assertEquals("<p>some text</p><div id=\"cut0\"><ul><li>one</li><li><p>two</p></li></ul></div>",
lorCodeService.parseTopic("some text\n\n[cut]\n\n[list][*]one\n\n[*]\n\ntwo[/cut]", false));
assertEquals("<p>some text</p><p>( <a href=\"http://127.0.0.1:8080/forum/talks/22464#cut0\">читать дальше...</a> )</p>",
lorCodeService.parseTopicWithMinimizedCut("some text\n\n[cut]\n\n[list][*]one\n\n[*]\n\ntwo[/cut]", url, false));
assertEquals("<p>some text</p><p>( <a href=\"http://127.0.0.1:8080/forum/talks/22464#cut0\">читать дальше...</a> )</p>",
lorCodeService.parseTopicWithMinimizedCut("some text\n\n[cut]\n\n[list][*]one\n\n[*]\n\ntwo[/cut]", url, false));
}
@Test
public void cut4Test() {
assertEquals("<div id=\"cut0\"><p>test</p></div><div id=\"cut1\"><p>test</p></div>",
lorCodeService.parseTopic("[cut]\n\ntest[/cut][cut]test[/cut]", false));
}
@Test
public void appleTest() {
assertEquals(citeHeader + "<p> Apple ][</p>" + citeFooter + "<p> текст</p>",
lorCodeService.parseComment("[quote] Apple ][[/quote] текст", false));
}
@Test
public void urlParameterQuotesTest() {
assertEquals("<p><a href=\"http://www.example.com\">example</a></p>",
lorCodeService.parseComment("[url=\"http://www.example.com]example[/url]", false));
assertEquals("<p><a href=\"http://www.example.com\">example</a></p>",
lorCodeService.parseComment("[url=\"http://www.example.com\"]example[/url]", false));
assertEquals("<p><a href=\"http://www.example.com\">example</a></p>",
lorCodeService.parseComment("[url='http://www.example.com']example[/url]", false));
assertEquals("<p><a href=\"http://www.example.com\">example</a></p>",
lorCodeService.parseComment("[url='http://www.example.com]example[/url]", false));
}
@Test
public void cutWithParameterTest() {
assertEquals("<p>( <a href=\"http://127.0.0.1:8080/forum/talks/22464#cut0\">нечитать!</a> )</p>",
lorCodeService.parseTopicWithMinimizedCut("[cut=нечитать!]\n\ntest[/cut]", url, false));
}
@Test
public void autoLinksInList() {
assertEquals("<ul><li><a href=\"http://www.example.com\">http://www.example.com</a></li><li>sure</li><li>profit!</li></ul>",
lorCodeService.parseComment("[list][*]www.example.com[*]sure[*]profit![/list]", false));
}
@Test
public void quoteQuoteQuote() {
assertEquals(citeHeader + "<p>прювет!</p>" + citeFooter,
lorCodeService.parseComment("[quote][quote][quote][quote][quote][quote][quote][quote][quote][quote][quote][quote][quote][quote][quote][quote][quote][quote]прювет![/quote][/quote][/quote][/quote][/quote][/quote][/quote][/quote][/quote][/quote][/quote][/quote][/quote][/quote][/quote][/quote][/quote][/quote]", false));
}
@Test
public void escapeDoubleBrackets() {
assertEquals("<p>[[doNotTag]]</p>",
lorCodeService.parseComment("[[doNotTag]]", false));
assertEquals("<p>[[/doNotTag]]</p>",
lorCodeService.parseComment("[[/doNotTag]]", false));
assertEquals("<p>[b]</p>",
lorCodeService.parseComment("[[b]]", false));
assertEquals("<p>[/b]</p>",
lorCodeService.parseComment("[[/b]]", false));
assertEquals("<div class=\"code\"><pre class=\"no-highlight\"><code>[[doNotTag]]</code></pre></div>",
lorCodeService.parseComment("[code][[doNotTag]][/code]", false));
assertEquals("<div class=\"code\"><pre class=\"no-highlight\"><code>[[/doNotTag]]</code></pre></div>",
lorCodeService.parseComment("[code][[/doNotTag]][/code]", false));
assertEquals("<div class=\"code\"><pre class=\"no-highlight\"><code>[[b]]</code></pre></div>",
lorCodeService.parseComment("[code][[b]][/code]", false));
assertEquals("<div class=\"code\"><pre class=\"no-highlight\"><code>[[/b]]</code></pre></div>",
lorCodeService.parseComment("[code][[/b]][/code]", false));
assertEquals("<p>[[[doNotTag]]]</p>",
lorCodeService.parseComment("[[[doNotTag]]]", false));
assertEquals("<p>[[[/doNotTag]]]</p>",
lorCodeService.parseComment("[[[/doNotTag]]]", false));
assertEquals("<p>[[b]]</p>",
lorCodeService.parseComment("[[[b]]]", false));
assertEquals("<p>[[/b]]</p>",
lorCodeService.parseComment("[[[/b]]]", false));
assertEquals("<div class=\"code\"><pre class=\"no-highlight\"><code>[[b]]</code></pre></div><p>[b]</p>",
lorCodeService.parseComment("[code][[b]][/code][[b]]", false));
assertEquals("<div class=\"code\"><pre class=\"no-highlight\"><code>[[/b]]</code></pre></div><p>[b]</p>",
lorCodeService.parseComment("[code][[/b]][/code][[b]]", false));
assertEquals("<div class=\"code\"><pre class=\"no-highlight\"><code>[[code]]</code></pre></div>",
lorCodeService.parseComment("[code][[code]][/code]", false));
assertEquals("<div class=\"code\"><pre class=\"no-highlight\"><code>[[/code]]</code></pre></div>",
lorCodeService.parseComment("[code][[/code]][/code]", false));
}
}