1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2026-03-02 03:49:30 +00:00

RandomRootPage: Do not fail to find page for some random selections; also, do not show 'Redirected from redirected_title' [#719]

This commit is contained in:
gnosygnu
2020-05-13 09:20:46 -04:00
parent a6331f5c89
commit a2fe75f402
19 changed files with 610 additions and 263 deletions

View File

@@ -0,0 +1,98 @@
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012-2020 gnosygnu@gmail.com
XOWA is licensed under the terms of the General Public License (GPL) Version 3,
or alternatively under the terms of the Apache License Version 2.0.
You may use XOWA according to either of these licenses as is most appropriate
for your project on a case-by-case basis.
The terms of each license can be found in the source code repository:
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.xowa.addons.wikis.pages.randoms.specials;
import gplx.Bry_;
import gplx.String_;
import gplx.core.tests.Gftest;
import gplx.dbs.wkrs.randoms.TestRandomWkr;
import gplx.xowa.Xoa_app_fxt;
import gplx.xowa.Xoa_test_;
import gplx.xowa.Xoa_ttl;
import gplx.xowa.Xoa_url;
import gplx.xowa.Xoae_app;
import gplx.xowa.Xoae_page;
import gplx.xowa.Xop_fxt;
import gplx.xowa.Xowe_wiki;
import gplx.xowa.specials.Xow_special_page;
import gplx.xowa.wikis.nss.Xow_ns_;
import org.junit.Test;
public class Rndm_root_specialTest {
private final RandomRootTstr tstr = new RandomRootTstr();
@Test public void NsMain() {
tstr.InitCreatePage("A", "A/B/C");
tstr.Test("Special:RandomRootPage/Main", Xow_ns_.Tid__main, "A"); // NOTE: will always be rootPage; EX: "A" -> "A"; "A/B/C" -> "A"
}
@Test public void NsHelp() {
tstr.InitCreatePage("Help:A", "Help:A/B/C");
tstr.Test("Special:RandomRootPage/Help", Xow_ns_.Tid__help, "Help:A");
}
}
class RandomRootTstr {
private Xowe_wiki wiki;
private Xop_fxt parserTstr;
private TestRandomWkr testRandomWkr;
public RandomRootTstr() {
// init db-aware wiki
Xoae_app app = Xoa_app_fxt.Make__app__edit();
this.wiki = Xoa_app_fxt.Make__wiki__edit(app);
Xoa_test_.Init__db__edit(wiki);
wiki.Data__core_mgr().Db__text().Tbl__text().Create_tbl(); // NOTE: need to call text.Create_tbl b/c Init__db__edit does not create it
// init parserTstr
this.parserTstr = new Xop_fxt(app, wiki);
// init testRandomWkr
this.testRandomWkr = TestRandomWkr.New(wiki.Data__core_mgr().Db__core().Conn());
}
public void InitCreatePage(String... ary) {
for (String page : ary) {
parserTstr.Init_page_create(page, page);
// add ttl.Root to the testRandomWkr
Xoa_ttl pageTtl = wiki.Ttl_parse(Bry_.new_u8(page));
testRandomWkr.AddRow(String_.new_u8(pageTtl.Root_txt()));
}
}
public void Test(String special_url, int expd_ns, String expd) {
// call Special:RandomRoot
Rndm_root_special special_page = new gplx.xowa.addons.wikis.pages.randoms.specials.Rndm_root_special();
Xoae_page page = Test_special_open(wiki, special_page, special_url);
// test sql
Gftest.Eq__str("page_title", testRandomWkr.SelectRandomRowSelect());
Gftest.Eq__str("page p", testRandomWkr.SelectRandomRowFrom());
Gftest.Eq__str("p.page_namespace = " + expd_ns + " AND p.page_redirect_id = -1 AND p.page_title NOT LIKE '%/%'", testRandomWkr.SelectRandomRowWhere());
// test page
Gftest.Eq__str(expd, page.Url().Page_bry());
Gftest.Eq__str("", page.Db().Text().Text_bry()); // ISSUE#:719:redirect should not load page else redirect info will get lost; EX:"Redirected from trg_ttl" instead of "Redirected from src_ttl"; PAGE:en.s; DATE:2020-05-13
}
public static Xoae_page Test_special_open(Xowe_wiki wiki, Xow_special_page special_page, String special_url) {
Xoae_page page = Init_page(wiki, special_url);
special_page.Special__gen(wiki, page, page.Url(), page.Ttl());
return page;
}
private static Xoae_page Init_page(Xowe_wiki wiki, String url_str) {
// basic boot-strapping to make sure ctx.Page has .Url and .Ttl
byte[] url_bry = Bry_.new_u8(url_str);
Xoae_page page = wiki.Parser_mgr().Ctx().Page();
page.Url_(wiki.Utl__url_parser().Parse(url_bry));
page.Ttl_(Xoa_ttl.Parse(wiki, url_bry));
return page;
}
}