
package wikokit.base.wikipedia.text;

import wikokit.base.wikipedia.text.WikiParser;
import wikokit.base.wikipedia.text.ReferenceParser;
import wikokit.base.wikipedia.language.LanguageType;

import junit.framework.TestCase;

public class ReferenceParserTest extends TestCase {
    
    public ReferenceParserTest(String testName) {
        super(testName);
    }            

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

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

    /** Test of expandMoveToEndOfText method, of class ReferenceParser. */
    public void testExpandMoveToEndOfText() {
        System.out.println("expandMoveToEndOfText");
        StringBuffer wiki_text, expResult, result;
            
        // 1. expand and move ref text to the end of text
        wiki_text = new StringBuffer(
"Впечатление произвело не только, и даже не столько увиденное и услышанное, сколько личность самого " +
"их будущего Гуруджи<ref>Джи – уважительная приставка, по типу «сан» у японцев.</ref> — Шри Рам Кумар Шармы.");

        expResult = new StringBuffer(
"Впечатление произвело не только, и даже не столько увиденное и услышанное, сколько личность самого " +
"их будущего Гуруджи — Шри Рам Кумар Шармы.\n\nДжи – уважительная приставка, по типу «сан» у японцев.");
        result = ReferenceParser.expandMoveToEndOfText(wiki_text);
        assertTrue(expResult.toString().equalsIgnoreCase( result.toString() ) );
        
        
        // 2. complex: remove ref with template inside: <ref>{{...}}</ref>
        wiki_text = new StringBuffer(
"''Bold [[wiktionary:pale|pale]] text. ''<ref>{{cite book |last= Axell |first= Albert |coauthors = " +
    "Kase, Hideaki | year=2002 | title= Kamikaze: Japan’s suicide gods |publisher= New York: Longman. " + 
    "ISBN 0-582-77232-X | pages=p. 16 }}</ref>\n" +
" A special ceremony before going to combat usually took place.");
        
        expResult = new StringBuffer(
                "Bold pale text. \n A special ceremony before going to combat usually took place.");
        result = ReferenceParser.expandMoveToEndOfText(wiki_text);
        //result = WikiParser.parseCurlyBrackets(result);
        result = WikiParser.parseDoubleApostrophe(result);
        result = WikiParser.parseDoubleBrackets(result, LanguageType.en, true);
        assertTrue(expResult.toString().equalsIgnoreCase( result.toString() ) );
    }
    
    
    /** remove hyperlink in ref which is not within brackets '[]' */
    public void testExpandReferenceToEndOfText_hyperlink() {
        System.out.println("expandReferenceToEndOfText_hyperlink");
        StringBuffer wiki_text, expResult, result;
        
        // 1. remove (only link)
        // <ref>http://tank.uw.ru/archive/koliestwennyj/index.khtml</ref> -> ""
        wiki_text = new StringBuffer("<ref>http://tank.uw.ru/archive/koliestwennyj/index.khtml</ref>");
        result = ReferenceParser.expandMoveToEndOfText(wiki_text);
        assertEquals(0, result.length());
        
        // "abc <ref>http://tank.uw.ru/archive/koliestwennyj/index.khtml</ref> text -> "abc text"
        wiki_text = new StringBuffer("abc<ref>http://tank.uw.ru/archive/koliestwennyj/index.khtml</ref> text");
        expResult = new StringBuffer("abc text");
        result = WikiParser.convertWikiToText(wiki_text, LanguageType.ru, true);
        assertTrue(expResult.toString().equalsIgnoreCase( result.toString() ) );
        
        // 2. append text
        // "abc<ref>http://tank.uw link text</ref> text" -> "abc text\n\n link text"
        wiki_text = new StringBuffer("abc<ref>http://tank.uw link text</ref> text");
        expResult = new StringBuffer("abc text\n\nlink text");
        result = WikiParser.convertWikiToText(wiki_text, LanguageType.ru, true);
        assertTrue(expResult.toString().equalsIgnoreCase( result.toString() ) );
    }

    /** Test of removeReferences method, of class ReferenceParser. */
    public void testRemoveReferencesOnly() {
        System.out.println("removeReferencesOnly");
        StringBuffer wiki_text, expResult, result;

        // 1. expand and move ref text to the end of text
        wiki_text = new StringBuffer(
"Впечатление от Гуруджи<ref>Джи – уважительная приставка....</ref> — Шри Рам Кумар Шармы.");

        expResult = new StringBuffer(
"Впечатление от Гуруджи — Шри Рам Кумар Шармы.");
        result = ReferenceParser.removeReferences(wiki_text);
        assertTrue(expResult.toString().equalsIgnoreCase( result.toString() ) );


        // 2. complex: remove ref with template inside: <ref>{{...}}</ref>
        //      but do not expand [[Wiki text|wiki text]]
        wiki_text = new StringBuffer(
"''Bold [[wiktionary:pale|pale]] text. ''<ref>{{cite book |last= Axell |first= Albert |coauthors = " +
    "Kase, Hideaki | year=2002 | title= Kamikaze: Japan’s suicide gods |publisher= New York: Longman. " +
    "ISBN 0-582-77232-X | pages=p. 16 }}</ref>\n" +
" A special ceremony before going to combat usually took place.");

        //expResult = new StringBuffer(
        //        "Bold pale text. \n A special ceremony before going to combat usually took place.");
        expResult = new StringBuffer(
"''Bold [[wiktionary:pale|pale]] text. ''" +
    "\n" +
" A special ceremony before going to combat usually took place.");

        result = ReferenceParser.removeReferences(wiki_text);
        assertTrue(expResult.toString().equalsIgnoreCase( result.toString() ) );


        // 3. complex: remove several references
        wiki_text = new StringBuffer(
"{{помета|сиб.}} [[ловушка]]<ref>Брокгауз</ref><ref>Даль</ref><ref>[http://www]</ref>{{пример|кулёма на медведя…}}");

        expResult = new StringBuffer(
"{{помета|сиб.}} [[ловушка]]{{пример|кулёма на медведя…}}");

        result = ReferenceParser.removeReferences(wiki_text);
        assertTrue(expResult.toString().equalsIgnoreCase( result.toString() ) );
    }
}
