/**
* Copyright (C) 2015 BITPlan GmbH
*
* Pater-Delp-Str. 1
* D-47877 Willich-Schiefbahn
*
* http://www.bitplan.com
*
*/
package com.bitplan.mediawiki.japi;
import static org.junit.Assert.*;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import org.junit.Test;
import com.bitplan.mediawiki.japi.api.Api;
import com.bitplan.mediawiki.japi.api.Extensiondistributor;
import com.bitplan.mediawiki.japi.api.General;
import com.bitplan.mediawiki.japi.api.Limit;
import com.bitplan.mediawiki.japi.api.Ns;
import com.bitplan.mediawiki.japi.api.Query;
import com.bitplan.mediawiki.japi.api.Snapshots;
import com.bitplan.mediawiki.japi.api.Statistics;
/**
* Test for http://www.mediawiki.org/wiki/API:Meta
*/
public class TestAPI_Meta extends APITestbase {
/**
* http://www.mediawiki.org/wiki/API:Meta#siteinfo_.2F_si
*
* @throws Exception
*/
@Test
public void testGeneralSiteInfo() throws Exception {
for (ExampleWiki lwiki : getWikis()) {
// lwiki.wiki.setDebug(true);
// FIXME add to interface
General general = lwiki.getGeneral();
assertNotNull(general);
boolean mayBeNull = true;
check("generator", general.getGenerator());
check("logo", general.getLogo(), mayBeNull);
String wikiVersion=general.getGenerator();
// debug=true;
if (debug)
LOGGER.log(Level.INFO,wikiVersion);
if (wikiVersion.compareToIgnoreCase("Mediawiki 1.20") >= 0) {
assertEquals(lwiki.wiki.getSiteurl()+"/"+lwiki.wiki.getScriptPath(),lwiki.getLogo(), general.getLogo());
check("favicon", general.getFavicon());
check("langconversion", general.getLangconversion());
check("linkprefix", general.getLinkprefix());
check("linkprefixcharset", general.getLinkprefixcharset());
check("linktrail", general.getLinktrail());
// MediaWiki 1.27.0-wmf.20 does not have this
// check("maxuploadsize", general.getMaxuploadsize());
List<Limit> imageLimits = general.getImagelimits().getLimit();
assertNotNull(imageLimits);
for (Limit imageLimit : imageLimits) {
check("\twidth", imageLimit.getWidth());
check("\theight", imageLimit.getHeight());
}
Extensiondistributor extdist = general.getExtensiondistributor();
if (extdist != null) {
check("ext-list", extdist.getList());
Snapshots snapshots = extdist.getSnapshots();
assertNotNull(snapshots);
for (String snapshot : snapshots.getSnapshot()) {
check("snapshot", snapshot.trim());
}
}
if (general.getGenerator().compareToIgnoreCase("Mediawiki 1.25") >= 0) {
check("githash", general.getGitHash());
}
}
check("language", general.getLang());
check("articlepath", general.getArticlepath());
check("base", general.getBase());
check("case", general.getCase());
check("dbtype", general.getDbtype());
check("dbversion", general.getDbversion());
check("fallback", general.getFallback());
check("gitbranch", general.getGitBranch(), mayBeNull);
check("hhvmversion", general.getHhvmversion(), mayBeNull);
check("imagewhitelistenabled", general.getImagewhitelistenabled(),
mayBeNull);
check("legaltitlechars", general.getLegaltitlechars(), mayBeNull);
check("mainpage", general.getMainpage());
check("misermode", general.getMisermode(), mayBeNull);
check("phpsapi", general.getPhpsapi());
check("phpversion", general.getPhpversion());
check("script", general.getScript());
check("scriptpath", general.getScriptpath());
check("server", general.getServer());
check("servername", general.getServername(), mayBeNull);
check("sitename", general.getSitename());
}
}
@Test
/**
* test statistics
* @throws Exception
*/
public void testStatistics() throws Exception {
for (ExampleWiki lwiki : getWikis()) {
Api api = getQueryResult(lwiki, "&meta=siteinfo&siprop=statistics");
assertNotNull(api);
Query query = api.getQuery();
assertNotNull(query);
Statistics statistics = query.getStatistics();
assertNotNull(statistics);
assertTrue(lwiki.wiki.getSiteurl()+" "+statistics.getPages()+">"+lwiki.getExpectedPages(),statistics.getPages().intValue() >= lwiki.getExpectedPages());
}
}
/**
* test namespace retrieving
* http://www.mediawiki.org/wiki/Help:Namespaces
* @throws Exception
*/
@Test
public void testNameSpaces() throws Exception {
for (ExampleWiki lwiki : getWikis()) {
Mediawiki mw=(Mediawiki) lwiki.wiki;
Map<String, Ns> namespaces = mw.getSiteInfo().getNamespaces();
assertNotNull(namespaces);
assertTrue(namespaces.size()>12);
// debug=true;
if (debug) {
for (Ns namespace:namespaces.values()) {
LOGGER.log(Level.INFO,namespace.getId()+":"+namespace.getValue()+"->"+namespace.getCanonical());
}
}
}
}
/**
* set up the name space for the given lang and list of namespacenames
* @param lang
* @param nameSpaceApiXml
* @return - the wiki created
* @throws Exception
*/
public Mediawiki setUpNameSpace(String nameSpaceApiXml) throws Exception {
Mediawiki result=new Mediawiki();
Api api=Api.fromXML(nameSpaceApiXml);
Query query = api.getQuery();
result.setUpSiteInfo(query);
return result;
}
/**
* test the mapping of namespaces from one wiki to another
* @throws Exception
*/
@Test
public void testNameSpaceMapping() throws Exception {
// http://fr.wikipedia.org/w/api.php?action=query&meta=siteinfo&siprop=namespaces&format=xml
String nameSpaceApiXmlFr="<?xml version=\"1.0\"?><api><query><general lang='fr'></general><namespaces><ns _idx=\"-2\" id=\"-2\" case=\"first-letter\" canonical=\"Media\" xml:space=\"preserve\">Média</ns><ns _idx=\"-1\" id=\"-1\" case=\"first-letter\" canonical=\"Special\" xml:space=\"preserve\">Spécial</ns><ns _idx=\"0\" id=\"0\" case=\"first-letter\" content=\"\" xml:space=\"preserve\" /><ns _idx=\"1\" id=\"1\" case=\"first-letter\" subpages=\"\" canonical=\"Talk\" xml:space=\"preserve\">Discussion</ns><ns _idx=\"2\" id=\"2\" case=\"first-letter\" subpages=\"\" canonical=\"User\" xml:space=\"preserve\">Utilisateur</ns><ns _idx=\"3\" id=\"3\" case=\"first-letter\" subpages=\"\" canonical=\"User talk\" xml:space=\"preserve\">Discussion utilisateur</ns><ns _idx=\"4\" id=\"4\" case=\"first-letter\" subpages=\"\" canonical=\"Project\" xml:space=\"preserve\">Wikipédia</ns><ns _idx=\"5\" id=\"5\" case=\"first-letter\" subpages=\"\" canonical=\"Project talk\" xml:space=\"preserve\">Discussion Wikipédia</ns><ns _idx=\"6\" id=\"6\" case=\"first-letter\" canonical=\"File\" xml:space=\"preserve\">Fichier</ns><ns _idx=\"7\" id=\"7\" case=\"first-letter\" subpages=\"\" canonical=\"File talk\" xml:space=\"preserve\">Discussion fichier</ns><ns _idx=\"8\" id=\"8\" case=\"first-letter\" canonical=\"MediaWiki\" xml:space=\"preserve\">MediaWiki</ns><ns _idx=\"9\" id=\"9\" case=\"first-letter\" subpages=\"\" canonical=\"MediaWiki talk\" xml:space=\"preserve\">Discussion MediaWiki</ns><ns _idx=\"10\" id=\"10\" case=\"first-letter\" subpages=\"\" canonical=\"Template\" xml:space=\"preserve\">Modèle</ns><ns _idx=\"11\" id=\"11\" case=\"first-letter\" subpages=\"\" canonical=\"Template talk\" xml:space=\"preserve\">Discussion modèle</ns><ns _idx=\"12\" id=\"12\" case=\"first-letter\" subpages=\"\" canonical=\"Help\" xml:space=\"preserve\">Aide</ns><ns _idx=\"13\" id=\"13\" case=\"first-letter\" subpages=\"\" canonical=\"Help talk\" xml:space=\"preserve\">Discussion aide</ns><ns _idx=\"14\" id=\"14\" case=\"first-letter\" subpages=\"\" canonical=\"Category\" xml:space=\"preserve\">Catégorie</ns><ns _idx=\"15\" id=\"15\" case=\"first-letter\" subpages=\"\" canonical=\"Category talk\" xml:space=\"preserve\">Discussion catégorie</ns><ns _idx=\"100\" id=\"100\" case=\"first-letter\" subpages=\"\" canonical=\"Portail\" xml:space=\"preserve\">Portail</ns><ns _idx=\"101\" id=\"101\" case=\"first-letter\" subpages=\"\" canonical=\"Discussion Portail\" xml:space=\"preserve\">Discussion Portail</ns><ns _idx=\"102\" id=\"102\" case=\"first-letter\" subpages=\"\" canonical=\"Projet\" xml:space=\"preserve\">Projet</ns><ns _idx=\"103\" id=\"103\" case=\"first-letter\" subpages=\"\" canonical=\"Discussion Projet\" xml:space=\"preserve\">Discussion Projet</ns><ns _idx=\"104\" id=\"104\" case=\"first-letter\" subpages=\"\" canonical=\"Référence\" xml:space=\"preserve\">Référence</ns><ns _idx=\"105\" id=\"105\" case=\"first-letter\" subpages=\"\" canonical=\"Discussion Référence\" xml:space=\"preserve\">Discussion Référence</ns><ns _idx=\"828\" id=\"828\" case=\"first-letter\" subpages=\"\" canonical=\"Module\" xml:space=\"preserve\">Module</ns><ns _idx=\"829\" id=\"829\" case=\"first-letter\" subpages=\"\" canonical=\"Module talk\" xml:space=\"preserve\">Discussion module</ns><ns _idx=\"2600\" id=\"2600\" case=\"first-letter\" canonical=\"Topic\" defaultcontentmodel=\"flow-board\" xml:space=\"preserve\">Sujet</ns></namespaces></query></api>";
// http://de.wikipedia.org/w/api.php?action=query&meta=siteinfo&siprop=namespaces&format=xml
String nameSpaceApiXmlDe="<?xml version=\"1.0\"?><api><query><general lang='de'></general><namespaces><ns _idx=\"-2\" id=\"-2\" case=\"first-letter\" canonical=\"Media\" xml:space=\"preserve\">Medium</ns><ns _idx=\"-1\" id=\"-1\" case=\"first-letter\" canonical=\"Special\" xml:space=\"preserve\">Spezial</ns><ns _idx=\"0\" id=\"0\" case=\"first-letter\" content=\"\" xml:space=\"preserve\" /><ns _idx=\"1\" id=\"1\" case=\"first-letter\" subpages=\"\" canonical=\"Talk\" xml:space=\"preserve\">Diskussion</ns><ns _idx=\"2\" id=\"2\" case=\"first-letter\" subpages=\"\" canonical=\"User\" xml:space=\"preserve\">Benutzer</ns><ns _idx=\"3\" id=\"3\" case=\"first-letter\" subpages=\"\" canonical=\"User talk\" xml:space=\"preserve\">Benutzer Diskussion</ns><ns _idx=\"4\" id=\"4\" case=\"first-letter\" subpages=\"\" canonical=\"Project\" xml:space=\"preserve\">Wikipedia</ns><ns _idx=\"5\" id=\"5\" case=\"first-letter\" subpages=\"\" canonical=\"Project talk\" xml:space=\"preserve\">Wikipedia Diskussion</ns><ns _idx=\"6\" id=\"6\" case=\"first-letter\" canonical=\"File\" xml:space=\"preserve\">Datei</ns><ns _idx=\"7\" id=\"7\" case=\"first-letter\" subpages=\"\" canonical=\"File talk\" xml:space=\"preserve\">Datei Diskussion</ns><ns _idx=\"8\" id=\"8\" case=\"first-letter\" canonical=\"MediaWiki\" xml:space=\"preserve\">MediaWiki</ns><ns _idx=\"9\" id=\"9\" case=\"first-letter\" subpages=\"\" canonical=\"MediaWiki talk\" xml:space=\"preserve\">MediaWiki Diskussion</ns><ns _idx=\"10\" id=\"10\" case=\"first-letter\" canonical=\"Template\" xml:space=\"preserve\">Vorlage</ns><ns _idx=\"11\" id=\"11\" case=\"first-letter\" subpages=\"\" canonical=\"Template talk\" xml:space=\"preserve\">Vorlage Diskussion</ns><ns _idx=\"12\" id=\"12\" case=\"first-letter\" subpages=\"\" canonical=\"Help\" xml:space=\"preserve\">Hilfe</ns><ns _idx=\"13\" id=\"13\" case=\"first-letter\" subpages=\"\" canonical=\"Help talk\" xml:space=\"preserve\">Hilfe Diskussion</ns><ns _idx=\"14\" id=\"14\" case=\"first-letter\" subpages=\"\" canonical=\"Category\" xml:space=\"preserve\">Kategorie</ns><ns _idx=\"15\" id=\"15\" case=\"first-letter\" subpages=\"\" canonical=\"Category talk\" xml:space=\"preserve\">Kategorie Diskussion</ns><ns _idx=\"100\" id=\"100\" case=\"first-letter\" subpages=\"\" canonical=\"Portal\" xml:space=\"preserve\">Portal</ns><ns _idx=\"101\" id=\"101\" case=\"first-letter\" subpages=\"\" canonical=\"Portal Diskussion\" xml:space=\"preserve\">Portal Diskussion</ns><ns _idx=\"828\" id=\"828\" case=\"first-letter\" subpages=\"\" canonical=\"Module\" xml:space=\"preserve\">Modul</ns><ns _idx=\"829\" id=\"829\" case=\"first-letter\" subpages=\"\" canonical=\"Module talk\" xml:space=\"preserve\">Modul Diskussion</ns></namespaces></query></api>";
Mediawiki sourceWiki=setUpNameSpace(nameSpaceApiXmlDe);
Mediawiki targetWiki=setUpNameSpace(nameSpaceApiXmlFr);
String targetNameSpace=sourceWiki.getSiteInfo().mapNamespace("Vorlage",targetWiki.getSiteInfo());
assertEquals("Modèle",targetNameSpace);
}
@Test
public void testGetNameSpaceFromPageTitle() throws Exception {
String pageTitles[]={"Template:someTemplate","MainPage","Template:someTemplate:with weird colons:","File:SomeFilewith File: again"};
String expected[]={"Template",null,"Template","File","Modèle:French template"};
int index=0;
for (String pageTitle:pageTitles) {
String template=PageInfo.getNameSpaceName(pageTitle);
assertEquals(expected[index],template);
index++;
}
}
}