package wikokit.base.wikt.sql.test;

import wikokit.base.wikipedia.language.LanguageType;
import wikokit.base.wikipedia.sql.Connect;
import wikokit.base.wikt.sql.TLang;
import wikokit.base.wikt.sql.TLangPOS;
import wikokit.base.wikt.sql.TMeaning;
import wikokit.base.wikt.sql.TPOS;
import wikokit.base.wikt.sql.TPage;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import junit.framework.TestCase;

public class TMeaningTest extends TestCase {

    public Context context = null;
    Connect ruwikt_conn;
    SQLiteDatabase db;
    
    TPage page;
    String page_title;
    TLangPOS tlang_pos;
    TLangPOS[] array_lang_pos;
    
    protected void setUp() throws Exception {
        super.setUp();
        ruwikt_conn = new Connect(context, LanguageType.ru);
        ruwikt_conn.openDatabase();
        db = ruwikt_conn.getDB();
        TLang.createFastMaps(db);
        TPOS.createFastMaps (db);    // once upon a time: use Wiktionary parsed db
        
        page_title = "lead";
        page = TPage.get(db, page_title);
        assertNotNull(page);
        
        // let's found ID:
        // array_lang_pos = TLangPOS.get(db, page);
        array_lang_pos = TLangPOS.getRecursive(db, page);
        
        assertNotNull(array_lang_pos);
        assertTrue   (array_lang_pos.length > 0);
        tlang_pos = array_lang_pos[0];
        int lang_pos_id = tlang_pos.getID();
        assertTrue(lang_pos_id > 0);
    }

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

    public void testGet() {
        System.out.println("get_ru");
        
        TMeaning[] mm_copy1 = tlang_pos.getMeaning();
        assertNotNull(mm_copy1);
        assertTrue(mm_copy1.length > 0);
        int meaning_id1 = mm_copy1[0].getID();
        
        // start of test "get"
        TMeaning[] mm_copy2 = TMeaning.get(db, tlang_pos);
        assertNotNull(mm_copy2);
        assertTrue(mm_copy2.length > 0);
        assertEquals(mm_copy2.length, mm_copy2.length);
        int meaning_id2 = mm_copy2[0].getID();
        assertEquals(meaning_id1, meaning_id2);
    }

    public void testGetByID() {
        System.out.println("getByID_ru");
        
        TMeaning[] mm_copy1 = tlang_pos.getMeaning();
        assertNotNull(mm_copy1);
        assertTrue(mm_copy1.length > 0);
        int meaning_id1 = mm_copy1[0].getID();
        
        // start of test "getByID"
        TMeaning m = TMeaning.getByID(db, meaning_id1);
        assertNotNull(m);
        TLangPOS tlp = m.getLangPOS(db);
        assertNotNull(tlp);
                                            TLangPOS mm_tlp = mm_copy1[0].getLangPOS(db);
                                            assertNotNull(mm_tlp);
                                            assertNotNull(mm_tlp.getPage());
        assertEquals(tlp.getPage().getID(), mm_tlp.getPage().getID());
    }

}
