package de.jalin.jspwiki.filter;

import com.ecyrd.jspwiki.filters.FilterException;
import com.ecyrd.jspwiki.filters.PageFilter;

import junit.framework.TestCase;

public class UseModFilterTest extends TestCase
{

    protected void setUp() throws Exception
    {
        super.setUp();
    }

    protected void tearDown() throws Exception
    {
        super.tearDown();
    }

    public void testPreTranslateTitle()
    {
        PageFilter useModFilter = new UseModFilter();
        try
        {
            assertEquals("*Item\n", useModFilter.preTranslate(null, "*Item\n"));
            assertEquals("__Item__\n", useModFilter.preTranslate(null, "====Item====\n"));
            assertEquals("!! Title\n", useModFilter.preTranslate(null, "!! Title\n"));
            assertEquals("!!!Title\n", useModFilter.preTranslate(null, "=Title=\n"));
            assertEquals("!!!Title\nText.\n", useModFilter.preTranslate(null, "=Title\n=\nText.\n"));
            assertEquals("!!!Title Title\n", useModFilter.preTranslate(null, "=Title \nTitle=\n"));
            assertEquals("! SubSubtitle \n", useModFilter.preTranslate(null, "=== SubSubtitle ===\n"));
            assertEquals("!! Subtitle \n", useModFilter.preTranslate(null, "== Subtitle ==\n"));
            assertEquals("== Subtitle =\n", useModFilter.preTranslate(null, "== Subtitle =\n"));
            assertEquals("== Subtitle\n", useModFilter.preTranslate(null, "== Subtitle\n"));
            assertEquals("== SubtitleText1Text2Text3\n", useModFilter.preTranslate(null, "== Subtitle\nText1\nText2\nText3\n"));
        }
        catch (FilterException e)
        {
            fail(e.getMessage());
        }
    }

    public void testPreTranslateBoldItalics()
    {
        PageFilter useModFilter = new UseModFilter();
        try
        {
            assertEquals("*__''Item''__\n", useModFilter.preTranslate(null, "*'''''Item'''''\n"));
            assertEquals("__Item__\n", useModFilter.preTranslate(null, "'''Item'''\n"));
            assertEquals("!!!Title\n__Text__.\n", useModFilter.preTranslate(null, "=Title\n=\n'''Text'''.\n"));
        }
        catch (FilterException e)
        {
            fail(e.getMessage());
        }
    }

    public void testPreTranslatePre()
    {
        PageFilter useModFilter = new UseModFilter();
        try
        {
            assertEquals("{{{\n$ cat file.txt\n}}}\n", useModFilter.preTranslate(null, "<pre>\n$ cat file.txt\n</pre>\n"));
            assertEquals("__{{{Item}}}__\n", useModFilter.preTranslate(null, "'''<pre>Item</pre>'''\n"));
            assertEquals("{{{\n  Item\n  Item\n}}}\n", useModFilter.preTranslate(null, "  Item\n  Item\n"));
        }
        catch (FilterException e)
        {
            fail(e.getMessage());
        }
    }

    public void testPreTranslateIndent()
    {
        PageFilter useModFilter = new UseModFilter();
        try
        {
            assertEquals("%%(margin-bottom: 12pt; margin-top: 12pt; margin-left: 24pt)\nMein Kommentar\n%%\n", useModFilter.preTranslate(null, ":Mein Kommentar\n"));
            assertEquals("%%(margin-bottom: 12pt; margin-top: 12pt; margin-left: 48pt)\nMein Kommentar\n%%\n", useModFilter.preTranslate(null, "::Mein Kommentar\n"));
            assertEquals("%%(margin-bottom: 12pt; margin-top: 12pt; margin-left: 48pt)\nKommentar Eins\n%%\n%%(margin-bottom: 12pt; margin-top: 12pt; margin-left: 72pt)\nKommentar Zwo\n%%\n", useModFilter.preTranslate(null, "::Kommentar Eins\n:::Kommentar Zwo\n"));
            assertEquals("%%(margin-bottom: 12pt; margin-top: 12pt; margin-left: 48pt)\nMein Kommentar\nmit Folgezeile\n%%\n", useModFilter.preTranslate(null, "::Mein Kommentar\nmit Folgezeile\n"));
        }
        catch (FilterException e)
        {
            fail(e.getMessage());
        }
    }

}
