package org.wikipedia.dataclient;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.wikipedia.json.GsonMarshaller;
import org.wikipedia.json.GsonUnmarshaller;
import org.wikipedia.page.PageTitle;
import org.wikipedia.test.TestParcelUtil;
import org.wikipedia.test.TestRunner;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
@RunWith(TestRunner.class) public class WikiSiteTest {
@Test public void testSupportedAuthority() {
assertThat(WikiSite.supportedAuthority("fr.wikipedia.org"), is(true));
assertThat(WikiSite.supportedAuthority("fr.m.wikipedia.org"), is(true));
assertThat(WikiSite.supportedAuthority("roa-rup.wikipedia.org"), is(true));
assertThat(WikiSite.supportedAuthority("google.com"), is(false));
}
@Test public void testForLanguageCodeScheme() {
WikiSite subject = WikiSite.forLanguageCode("test");
assertThat(subject.scheme(), is("https"));
}
@Test public void testForLanguageCodeAuthority() {
WikiSite subject = WikiSite.forLanguageCode("test");
assertThat(subject.authority(), is("test.wikipedia.org"));
}
@Test public void testForLanguageCodeLanguage() {
WikiSite subject = WikiSite.forLanguageCode("test");
assertThat(subject.languageCode(), is("test"));
}
@Test public void testForLanguageCodeNoLanguage() {
WikiSite subject = WikiSite.forLanguageCode("");
assertThat(subject.languageCode(), is(""));
}
@Test public void testForLanguageCodeNoLanguageAuthority() {
WikiSite subject = WikiSite.forLanguageCode("");
assertThat(subject.authority(), is("wikipedia.org"));
}
@Test public void testForLanguageCodeLanguageAuthority() {
WikiSite subject = WikiSite.forLanguageCode("zh-hans");
assertThat(subject.authority(), is("zh.wikipedia.org"));
}
@Test public void testCtorScheme() {
WikiSite subject = new WikiSite(false, "simple.wikipedia.beta.wmflabs.org", "simple");
assertThat(subject.secureScheme(), is(false));
}
@Test public void testCtorNoScheme() {
WikiSite subject = new WikiSite("wikipedia.org");
assertThat(subject.secureScheme(), is(true));
}
@Test public void testCtorAuthority() {
WikiSite subject = new WikiSite("test.wikipedia.org");
assertThat(subject.authority(), is("test.wikipedia.org"));
}
@Test public void testCtorAuthorityLanguage() {
WikiSite subject = new WikiSite("test.wikipedia.org");
assertThat(subject.languageCode(), is("test"));
}
@Test public void testCtorAuthorityNoLanguage() {
WikiSite subject = new WikiSite("wikipedia.org");
assertThat(subject.languageCode(), is(""));
}
@Test public void testCtorMobileAuthorityLanguage() {
WikiSite subject = new WikiSite("test.m.wikipedia.org");
assertThat(subject.languageCode(), is("test"));
}
@Test public void testCtorMobileAuthorityNoLanguage() {
WikiSite subject = new WikiSite("m.wikipedia.org");
assertThat(subject.languageCode(), is(""));
}
@Test public void testCtorParcel() throws Throwable {
WikiSite subject = WikiSite.forLanguageCode("test");
TestParcelUtil.test(subject);
}
@Test public void testSecureSchemeHttp() {
WikiSite subject = new WikiSite(false, "192.168.1.11:8080", "");
assertThat(subject.secureScheme(), is(false));
}
@Test public void testSecureSchemeHttps() {
WikiSite subject = new WikiSite(true, "192.168.1.11:8080", "");
assertThat(subject.secureScheme(), is(true));
}
@Test public void testSchemeHttp() {
WikiSite subject = new WikiSite(false, "meta.wikimedia.org", "");
assertThat(subject.scheme(), is("http"));
}
@Test public void testSchemeHttps() {
WikiSite subject = new WikiSite(true, "meta.wikimedia.org", "");
assertThat(subject.scheme(), is("https"));
}
@Test public void testAuthority() {
WikiSite subject = new WikiSite(true, "test.wikipedia.org", "test");
assertThat(subject.authority(), is("test.wikipedia.org"));
}
@Test public void testMobileAuthorityLanguage() {
WikiSite subject = WikiSite.forLanguageCode("fiu-vro");
assertThat(subject.mobileAuthority(), is("fiu-vro.m.wikipedia.org"));
}
@Test public void testMobileAuthorityNoLanguage() {
WikiSite subject = new WikiSite("wikipedia.org");
assertThat(subject.mobileAuthority(), is("m.wikipedia.org"));
}
@Test public void testMobileAuthorityLanguageAuthority() {
WikiSite subject = new WikiSite("no.wikipedia.org", "nb");
assertThat(subject.mobileAuthority(), is("no.m.wikipedia.org"));
}
@Test public void testMobileAuthorityMobileAuthority() {
WikiSite subject = new WikiSite("ru.m.wikipedia.org");
assertThat(subject.mobileAuthority(), is("ru.m.wikipedia.org"));
}
@Test public void testMobileAuthorityMobileAuthorityNoLanguage() {
WikiSite subject = new WikiSite("m.wikipedia.org");
assertThat(subject.mobileAuthority(), is("m.wikipedia.org"));
}
@Test public void testDbNameLanguage() {
WikiSite subject = new WikiSite("en.wikipedia.org", "en");
assertThat(subject.dbName(), is("enwiki"));
}
@Test public void testDbNameSpecialLanguage() {
WikiSite subject = new WikiSite("no.wikipedia.org", "nb");
assertThat(subject.dbName(), is("nowiki"));
}
@Test public void testHost() {
WikiSite subject = WikiSite.forLanguageCode("test");
assertThat(subject.host(), is("test.wikipedia.org"));
}
@Test public void testMobileHost() {
WikiSite subject = WikiSite.forLanguageCode("test");
assertThat(subject.mobileHost(), is("test.m.wikipedia.org"));
}
@Test public void testMobileHostNoLanguage() {
WikiSite subject = WikiSite.forLanguageCode("");
assertThat(subject.mobileHost(), is("m.wikipedia.org"));
}
@Test public void testPort() {
final int port = 8080;
WikiSite subject = new WikiSite("192.168.1.11:" + port);
assertThat(subject.port(), is(port));
}
@Test public void testPortDefault() {
WikiSite subject = WikiSite.forLanguageCode("test");
assertThat(subject.port(), is(-1));
}
@Test public void testPath() {
WikiSite subject = WikiSite.forLanguageCode("test");
assertThat(subject.path("Segment"), is("/w/Segment"));
}
@Test public void testPathEmpty() {
WikiSite subject = WikiSite.forLanguageCode("test");
assertThat(subject.path(""), is("/w/"));
}
@Test public void testUrl() {
WikiSite subject = new WikiSite(false, "test.192.168.1.11:8080", "test");
assertThat(subject.url(), is("http://test.192.168.1.11:8080"));
}
@Test public void testUrlPath() {
WikiSite subject = WikiSite.forLanguageCode("test");
assertThat(subject.url("Segment"), is("https://test.wikipedia.org/w/Segment"));
}
@Test public void testLanguageCode() {
WikiSite subject = WikiSite.forLanguageCode("lang");
assertThat(subject.languageCode(), is("lang"));
}
@Test public void testUnmarshal() {
WikiSite wiki = WikiSite.forLanguageCode("test");
assertThat(GsonUnmarshaller.unmarshal(WikiSite.class, GsonMarshaller.marshal(wiki)), is(wiki));
}
@Test public void testUnmarshalScheme() {
WikiSite wiki = new WikiSite(false, "wikipedia.org", "");
assertThat(GsonUnmarshaller.unmarshal(WikiSite.class, GsonMarshaller.marshal(wiki)), is(wiki));
}
@Test public void testTitleForInternalLink() {
WikiSite wiki = WikiSite.forLanguageCode("en");
assertThat(new PageTitle("Main Page", wiki), is(wiki.titleForInternalLink("")));
assertThat(new PageTitle("Main Page", wiki), is(wiki.titleForInternalLink("/wiki/")));
assertThat(new PageTitle("wiki", wiki), is(wiki.titleForInternalLink("wiki")));
assertThat(new PageTitle("wiki", wiki), is(wiki.titleForInternalLink("/wiki/wiki")));
assertThat(new PageTitle("wiki/wiki", wiki), is(wiki.titleForInternalLink("/wiki/wiki/wiki")));
}
@Test public void testEquals() {
assertThat(WikiSite.forLanguageCode("en"), is(WikiSite.forLanguageCode("en")));
assertThat(WikiSite.forLanguageCode("ta"), not(WikiSite.forLanguageCode("en")));
assertThat(WikiSite.forLanguageCode("ta").equals("ta.wikipedia.org"), is(false));
}
@Test public void testNormalization() {
assertThat("bm.wikipedia.org", is(WikiSite.forLanguageCode("bm").authority()));
}
}