package org.wikipedia.page; import org.junit.Test; import org.junit.runner.RunWith; import org.wikipedia.dataclient.WikiSite; import org.wikipedia.staticdata.MainPageNameData; import org.wikipedia.test.TestRunner; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.nullValue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @RunWith(TestRunner.class) public class PageTitleTest { @Test public void testEquals() throws Throwable { assertThat(new PageTitle(null, "India", WikiSite.forLanguageCode("en")).equals(new PageTitle(null, "India", WikiSite.forLanguageCode("en"))), is(true)); assertThat(new PageTitle("Talk", "India", WikiSite.forLanguageCode("en")).equals(new PageTitle("Talk", "India", WikiSite.forLanguageCode("en"))), is(true)); assertThat(new PageTitle(null, "India", WikiSite.forLanguageCode("ta")).equals(new PageTitle(null, "India", WikiSite.forLanguageCode("en"))), is(false)); assertThat(new PageTitle("Talk", "India", WikiSite.forLanguageCode("ta")).equals(new PageTitle("Talk", "India", WikiSite.forLanguageCode("en"))), is(false)); assertThat(new PageTitle("Talk", "India", WikiSite.forLanguageCode("ta")).equals("Something else"), is(false)); } @Test public void testJsonSerialization() throws Throwable { WikiSite enwiki = WikiSite.forLanguageCode("en"); PageTitle title = new PageTitle(null, "Test title", enwiki); assertThat(title, is(new PageTitle(title.toJSON()))); title = new PageTitle("Talk", "Test title", enwiki); assertThat(new PageTitle(title.toJSON()), is(title)); } @Test public void testPrefixedText() throws Throwable { WikiSite enwiki = WikiSite.forLanguageCode("en"); assertThat(new PageTitle(null, "Test title", enwiki).getPrefixedText(), is("Test__title")); assertThat(new PageTitle(null, "Test title", enwiki).getPrefixedText(), is("Test_title")); assertThat(new PageTitle("Talk", "Test title", enwiki).getPrefixedText(), is("Talk:Test_title")); assertThat(new PageTitle(null, "Test title", enwiki).getText(), is("Test_title")); } @Test public void testFromInternalLink() throws Throwable { WikiSite enwiki = WikiSite.forLanguageCode("en"); assertThat(enwiki.titleForInternalLink("/wiki/India").getPrefixedText(), is("India")); assertThat(enwiki.titleForInternalLink("/wiki/India").getNamespace(), nullValue()); assertThat(enwiki.titleForInternalLink("/wiki/Talk:India").getNamespace(), is("Talk")); assertThat(enwiki.titleForInternalLink("/wiki/Talk:India").getText(), is("India")); assertThat(enwiki.titleForInternalLink("/wiki/Talk:India").getFragment(), nullValue()); assertThat(enwiki.titleForInternalLink("/wiki/Talk:India#").getNamespace(), is("Talk")); assertThat(enwiki.titleForInternalLink("/wiki/Talk:India#").getText(), is("India")); assertThat(enwiki.titleForInternalLink("/wiki/Talk:India#").getFragment(), is("")); assertThat(enwiki.titleForInternalLink("/wiki/Talk:India#History").getNamespace(), is("Talk")); assertThat(enwiki.titleForInternalLink("/wiki/Talk:India#History").getText(), is("India")); assertThat(enwiki.titleForInternalLink("/wiki/Talk:India#History").getFragment(), is("History")); } @Test public void testCanonicalURL() throws Throwable { WikiSite enwiki = WikiSite.forLanguageCode("en"); assertThat(enwiki.titleForInternalLink("/wiki/India").getCanonicalUri(), is("https://en.wikipedia.org/wiki/India")); assertThat(enwiki.titleForInternalLink("/wiki/India Gate").getCanonicalUri(), is("https://en.wikipedia.org/wiki/India_Gate")); assertThat(enwiki.titleForInternalLink("/wiki/India's Gate").getCanonicalUri(), is("https://en.wikipedia.org/wiki/India%27s_Gate")); } @Test public void testWikiSite() throws Throwable { WikiSite enwiki = WikiSite.forLanguageCode("en"); assertThat(new PageTitle(null, "Test", enwiki).getWikiSite(), is(enwiki)); assertThat(WikiSite.forLanguageCode("en"), is(enwiki)); } @Test public void testParsing() throws Throwable { WikiSite enwiki = WikiSite.forLanguageCode("en"); assertThat(new PageTitle("Hello", enwiki).getDisplayText(), is("Hello")); assertThat(new PageTitle("Talk:Hello", enwiki).getDisplayText(), is("Talk:Hello")); assertThat(new PageTitle("Talk:Hello", enwiki).getText(), is("Hello")); assertThat(new PageTitle("Talk:Hello", enwiki).getNamespace(), is("Talk")); assertThat(new PageTitle("Wikipedia_talk:Hello world", enwiki).getDisplayText(), is("Wikipedia talk:Hello world")); } @Test public void testSpecial() throws Throwable { assertThat(new PageTitle("Special:Version", WikiSite.forLanguageCode("en")).isSpecial(), is(true)); assertThat(new PageTitle("特別:Version", WikiSite.forLanguageCode("ja")).isSpecial(), is(true)); assertThat(new PageTitle("Special:Version", WikiSite.forLanguageCode("ja")).isSpecial(), is(false)); assertThat(new PageTitle("特別:Version", WikiSite.forLanguageCode("en")).isSpecial(), is(false)); } @Test public void testFile() throws Throwable { assertThat(new PageTitle("File:SomethingSomething", WikiSite.forLanguageCode("en")).isFilePage(), is(true)); assertThat(new PageTitle("ファイル:Version", WikiSite.forLanguageCode("ja")).isFilePage(), is(true)); assertThat(new PageTitle("File:SomethingSomething", WikiSite.forLanguageCode("ja")).isFilePage(), is(false)); assertThat(new PageTitle("ファイル:Version", WikiSite.forLanguageCode("en")).isFilePage(), is(false)); } @Test public void testMainPage() throws Throwable { WikiSite enwiki = WikiSite.forLanguageCode("en"); assertThat(new PageTitle("", enwiki), is(new PageTitle(MainPageNameData.valueFor("en"), enwiki))); } @Test public void testIsMainPageNoTitleNoProps() throws Throwable { final String text = null; WikiSite wiki = WikiSite.forLanguageCode("test"); final String thumbUrl = null; final String desc = null; final PageProperties props = null; PageTitle subject = new PageTitle(text, wiki, thumbUrl, desc, props); assertThat(subject.isMainPage(), is(true)); } @Test public void testIsMainPageTitleNoProps() throws Throwable { String text = "text"; WikiSite wiki = WikiSite.forLanguageCode("test"); final String thumbUrl = null; final String desc = null; final PageProperties props = null; PageTitle subject = new PageTitle(text, wiki, thumbUrl, desc, props); assertThat(subject.isMainPage(), is(false)); } @Test public void testIsMainPageProps() throws Throwable { String text = "text"; WikiSite wiki = WikiSite.forLanguageCode("test"); final String thumbUrl = null; final String desc = null; PageProperties props = mock(PageProperties.class); when(props.isMainPage()).thenReturn(true); PageTitle subject = new PageTitle(text, wiki, thumbUrl, desc, props); assertThat(subject.isMainPage(), is(true)); } /** https://bugzilla.wikimedia.org/66151 */ @Test public void testHashChar() { PageTitle pageTitle = new PageTitle("#", WikiSite.forLanguageCode("en")); assertThat(pageTitle.getNamespace(), nullValue()); assertThat(pageTitle.getText(), is("")); assertThat(pageTitle.getFragment(), is("")); } @Test public void testColonChar() { PageTitle pageTitle = new PageTitle(":", WikiSite.forLanguageCode("en")); assertThat(pageTitle.getNamespace(), is("")); assertThat(pageTitle.getText(), is("")); assertThat(pageTitle.getFragment(), nullValue()); } }