/*
* ArticleIdAndTitleTest.java
* JUnit based test
*/
package wikipedia.data;
import junit.framework.*;
import wikipedia.kleinberg.Article;
import wikipedia.kleinberg.SessionHolder;
import wikipedia.sql.Connect;
import wikipedia.sql.PageTable;
import wikipedia.sql.PageNamespace;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.Set;
public class ArticleIdAndTitleTest extends TestCase {
static int t_redirect_id, t2_id, t3_id;
static String t_redirect, t2_absent_page, t3;
static String title_from, title_to;
static int id_from, id_to;
static Article[] articles_t_redirect_t3;
public Connect connect, connect_ru;
public SessionHolder session;
public ArticleIdAndTitleTest(String testName) {
super(testName);
}
protected void setUp() throws Exception {
connect = new Connect();
connect.Open(Connect.WP_HOST, Connect.WP_DB, Connect.WP_USER, Connect.WP_PASS);
connect_ru = new Connect();
connect_ru.Open(Connect.WP_RU_HOST,Connect.WP_RU_DB,Connect.WP_RU_USER,Connect.WP_RU_PASS);
session = new SessionHolder();
session.initObjects();
int categories_max_steps = 99;
t_redirect = connect.enc.EncodeFromJava("MIT");
t2_absent_page = "The title of absent page";
t3 = connect.enc.EncodeFromJava("Planetes");
t_redirect_id = PageTable.getIDByTitleNamespace(connect_ru, t_redirect, PageNamespace.MAIN);
t2_id = PageTable.getIDByTitleNamespace(connect_ru, t2_absent_page, PageNamespace.MAIN);
assertEquals(0, t2_id);
t3_id = PageTable.getIDByTitleNamespace(connect_ru, t3, PageNamespace.MAIN);
session.connect = connect_ru;
title_from = session.connect.enc.EncodeFromJava("Трансформеры"); // Transformers (toyline)
title_to = session.connect.enc.EncodeFromJava("Робот"); // Robot
id_from = PageTable.getIDByTitleNamespace(connect_ru, title_from, PageNamespace.MAIN);
id_to = PageTable.getIDByTitleNamespace(connect_ru, title_to, PageNamespace.MAIN);
articles_t_redirect_t3 = new Article[2];
articles_t_redirect_t3[0] = new Article();
articles_t_redirect_t3[0].page_id = t_redirect_id;
articles_t_redirect_t3[0].page_title = t_redirect;
articles_t_redirect_t3[1] = new Article();
articles_t_redirect_t3[1].page_id = t3_id;
articles_t_redirect_t3[1].page_title = t3;
}
protected void tearDown() throws Exception {
connect.Close();
connect_ru.Close();
}
/**
* Test of create method, of class wikipedia.data.ArticleIdAndTitle.
*/
public void testCreate() {
System.out.println("create");
ArticleIdAndTitle[] result = ArticleIdAndTitle.create(null);
result = ArticleIdAndTitle.create(articles_t_redirect_t3);
assertEquals(result.length, 2);
assertEquals(result[0].id, t_redirect_id);
assertEquals(result[0].title, t_redirect);
assertEquals(result[1].id, t3_id);
assertEquals(result[1].title, t3);
}
public void testJoin() {
System.out.println("join");
ArticleIdAndTitle[] aid = new ArticleIdAndTitle[2];
aid[0] = new ArticleIdAndTitle(t2_id, t2_absent_page);
aid[1] = new ArticleIdAndTitle(t3_id, t3);
Map<Integer, Article> map_id_article_exist = new HashMap<Integer, Article> ();
map_id_article_exist.put(t_redirect_id, articles_t_redirect_t3[0]);
map_id_article_exist.put(t3_id, articles_t_redirect_t3[1]);
ArticleIdAndTitle[] result = ArticleIdAndTitle.join(aid, map_id_article_exist);
// result = aid + map_id_article_exist
// result = [t2, t3] + [t1, t_redirect] = [t2, t3, t1, t_redirect]
assertEquals(4, result.length);
}
/**
* Test of createByTitle method, of class wikipedia.data.ArticleIdAndTitle.
*/
public void testCreateByTitle() {
System.out.println("createByTitle");
assertTrue(null != connect);
Map<String,Set<String>> m_out = new HashMap<String,Set<String>>();
Map<String,Set<String>> m_in = new HashMap<String,Set<String>>();
ArticleIdAndTitle[] result = ArticleIdAndTitle.createByTitle(connect, m_out, m_in, null);
assertEquals(0, result.length);
String[] titles = {t_redirect, t2_absent_page, t3};
result = ArticleIdAndTitle.createByTitle(connect, m_out, m_in, titles);
assertEquals(2, result.length);
assertEquals(result[0].title, t_redirect);
assertEquals(result[1].title, t3);
}
public void testCreateById_ru() {
System.out.println("createById_ru");
ArticleIdAndTitle[] result = ArticleIdAndTitle.createById(connect, null);
assertEquals(0, result.length);
Integer[] source_id = { id_from, id_to};
//String[] result_titles = {title_from, title_to};
result = ArticleIdAndTitle.createById(connect_ru, source_id);
assertEquals(2, result.length);
assertEquals(title_from, result[0].title);
assertEquals(title_to, result[1].title);
}
public void testCreateById_redirects_ru() {
System.out.println("createById_redirects_ru");
if(t_redirect_id < 0)
t_redirect_id = -t_redirect_id;
Integer[] source_id = { t_redirect_id, t2_id, t3_id};
Integer[] result_id = { t_redirect_id, t3_id};
// source_titles t_redirect, t2_absent_page, t3;
String[] result_titles = {t_redirect, t3};
ArticleIdAndTitle[] result = ArticleIdAndTitle.createById(connect_ru, source_id);
assertEquals(2, result.length);
assertEquals(t_redirect, result[0].title);
assertTrue ( result[0].id < 0);
assertEquals(t3, result[1].title);
assertEquals(t3_id, result[1].id );
}
public void testCreateMapIdTitle() {
System.out.println("createMapIdTitle");
Map<Integer, String> result = ArticleIdAndTitle.createMapIdTitle(null);
assertEquals(0, result.size());
ArticleIdAndTitle[] aid = new ArticleIdAndTitle[2];
aid[0] = new ArticleIdAndTitle(1, t_redirect);
aid[1] = new ArticleIdAndTitle(3, t3);
result = ArticleIdAndTitle.createMapIdTitle(aid);
assertEquals(result.size(), 2);
assertEquals(result.get(1), t_redirect);
assertEquals(result.get(3), t3);
}
public void testGetTitles() {
System.out.println("getTitles");
List<String> result = ArticleIdAndTitle.getTitles (null);
assertEquals(0, result.size());
ArticleIdAndTitle[] aid = new ArticleIdAndTitle[2];
aid[0] = new ArticleIdAndTitle(0, t_redirect);
aid[1] = new ArticleIdAndTitle(0, t3);
result = ArticleIdAndTitle.getTitles (aid);
assertEquals(result.size(), 2);
assertEquals(result.get(0), t_redirect);
assertEquals(result.get(1), t3);
}
public void testSkipTitles() {
System.out.println("testSkipTitles");
//session.Init(connect_ru, null, categories_max_steps);
session.skipTitlesWithSpaces(false);
//session.randomPages(false);
ArticleIdAndTitle[] result;
// null test 1
result = ArticleIdAndTitle.skipTitles (session, null);
assertEquals(null, result);
// test with skipTitlesWithSpaces = false
ArticleIdAndTitle[] aid = new ArticleIdAndTitle[2];
aid[0] = new ArticleIdAndTitle(0, "word");
aid[1] = new ArticleIdAndTitle(0, "several_words_with_spaces");
result = ArticleIdAndTitle.skipTitles (session, aid);
assertEquals(2, result.length);
// /////////////////////////////////////
// test with skipTitlesWithSpaces = true
session.skipTitlesWithSpaces(true);
result = ArticleIdAndTitle.skipTitles (session, aid);
assertEquals(1, result.length);
// null test 2
result = ArticleIdAndTitle.skipTitles (session, null);
assertEquals(0, result.length);
}
public void testSkipTitles_redirects__and__removed_articles() {
System.out.println("testSkipTitles_redirects__and__removed_articles");
ArticleIdAndTitle[] result;
ArticleIdAndTitle[] aid = new ArticleIdAndTitle[2];
aid[0] = new ArticleIdAndTitle(10, "word");
aid[1] = new ArticleIdAndTitle(11, "several_words_with_spaces");
List<ArticleIdAndTitle> redirect = new ArrayList<ArticleIdAndTitle>(2);
redirect.add( new ArticleIdAndTitle(12, "redirect1") );
redirect.add( new ArticleIdAndTitle(13, "redirect2_with_several_words_with_spaces") );
aid[1].redirect = redirect;
// /////////////////////////////////////
// test with skipTitlesWithSpaces = false
session.skipTitlesWithSpaces(false);
session.removed_articles.clear();
result = ArticleIdAndTitle.skipTitles (session, aid);
assertEquals(0, session.removed_articles.sizeId());
assertEquals(0, session.removed_articles.sizeTitle());
// /////////////////////////////////////
// test with skipTitlesWithSpaces = true
session.skipTitlesWithSpaces(true);
result = ArticleIdAndTitle.skipTitles (session, aid);
assertEquals(3, session.removed_articles.sizeId());
assertEquals(3, session.removed_articles.sizeTitle());
assertTrue(session.removed_articles.hasTitle("several_words_with_spaces"));
assertTrue(session.removed_articles.hasTitle("redirect1"));
assertTrue(session.removed_articles.hasTitle("redirect2_with_several_words_with_spaces"));
}
}