You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gnosygnu_xowa/400_xowa/src/gplx/xowa/xtns/jsonConfigs/scribunto/Jscfg_scrib_lib_tst.java

256 lines
7.5 KiB

/*
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.xtns.jsonConfigs.scribunto;
import gplx.Bry_;
import gplx.Keyval;
import gplx.Keyval_;
import gplx.String_;
import gplx.core.tests.Gftest;
import gplx.langs.jsons.Json_doc;
import gplx.xowa.Xowe_wiki;
import gplx.xowa.langs.Xoa_lang_mgr;
import gplx.xowa.langs.Xol_lang_itm;
import gplx.xowa.xtns.scribunto.Scrib_invoke_func_fxt;
import org.junit.Test;
public class Jscfg_scrib_lib_tst {
private final Jscfg_scrib_lib_fxt fxt = new Jscfg_scrib_lib_fxt();
@Test public void Get() {
fxt.Init__page("Data:Test.tab", Json_doc.Make_str_by_apos
( "{"
, " 'data':"
, " ["
, " ["
, " 'Q1'"
, " , 'Data:Q1'"
, " ]"
, " ,"
, " ["
, " 'Q2'"
, " , 'Data:Q2'"
, " ]"
, " ]"
, "}"
));
fxt.Test__get("Test.tab", String_.Concat_lines_nl_skip_last
( "1="
, " data="
, " 1="
, " 1=Q1"
, " 2=Data:Q1"
, " 2="
, " 1=Q2"
, " 2=Data:Q2"
));
}
@Test public void Get_localize_null() { // null defaults to wiki.Lang
fxt.Init__page__multilingual();
fxt.Test__get( "Test_localize.tab", null, String_.Concat_lines_nl_skip_last
( "1="
, " license=CC0-1.0"
, " description=Object table"
, " sources=Objects in Data:Data.tab completed by [https://www.wikidata.org Wikidata]"
, " schema="
, " fields="
, " 1="
, " name=wikidataID"
, " type=String"
, " title=Wikidata item"
, " 2="
, " name=wikidataLabel"
, " type=localized"
, " title=Wikidata label"
, " data="
, " 1="
, " 1=Q183"
, " 2=Germany"
, " 2="
, " 1=Q61912"
, " 2=Wertheim am Main"
));
}
@Test public void Get_localize_underscore() {// underscore retrieves the entire document
fxt.Init__page__multilingual();
fxt.Test__get( "Test_localize.tab", "_", String_.Concat_lines_nl_skip_last
( "1="
, " license=CC0-1.0"
, " description="
, " de=Objekttabelle"
, " en=Object table"
, " sources=Objects in Data:Data.tab completed by [https://www.wikidata.org Wikidata]"
, " schema="
, " fields="
, " 1="
, " name=wikidataID"
, " type=String"
, " title="
, " de=Wikidata-Item"
, " en=Wikidata item"
, " 2="
, " name=wikidataLabel"
, " type=localized"
, " title="
, " de=Wikidata-Label"
, " en=Wikidata label"
, " data="
, " 1="
, " 1=Q183"
, " 2="
, " de=Deutschland"
, " en=Germany"
, " 2="
, " 1=Q61912"
, " 2="
, " de=Wertheim"
, " en=Wertheim am Main"
));
}
@Test public void Get_localize_de() {
fxt.Init__lang("de", "en");
fxt.Init__page__multilingual();
fxt.Test__get( "Test_localize.tab", "de", String_.Concat_lines_nl_skip_last
( "1="
, " license=CC0-1.0"
, " description=Objekttabelle"
, " sources=Objects in Data:Data.tab completed by [https://www.wikidata.org Wikidata]"
, " schema="
, " fields="
, " 1="
, " name=wikidataID"
, " type=String"
, " title=Wikidata-Item"
, " 2="
, " name=wikidataLabel"
, " type=localized"
, " title=Wikidata-Label"
, " data="
, " 1="
, " 1=Q183"
, " 2=Deutschland"
, " 2="
, " 1=Q61912"
, " 2=Wertheim"
));
}
@Test public void pickLocalizedString() {
Xol_lang_itm lang = fxt.Init__lang("zh-cn", "zh1,zh0");
// match key
fxt.Test__pickLocalizedString(lang, fxt.Init__picklocalizedStringKvs("fr", "zh-cn"), "zh-cn");
// match fallback; note that zh1 is higher in fallback list, but lower in kvs
fxt.Test__pickLocalizedString(lang, fxt.Init__picklocalizedStringKvs("zh0", "zh1"), "zh1");
// match en if no key or fallbacks
fxt.Test__pickLocalizedString(lang, fxt.Init__picklocalizedStringKvs("fr", "en"), "en");
// pick 1st if no match
fxt.Test__pickLocalizedString(lang, fxt.Init__picklocalizedStringKvs("fr", "de"), "fr");
}
}
class Jscfg_scrib_lib_fxt {
private final Scrib_invoke_func_fxt fxt = new Scrib_invoke_func_fxt();
private final Jscfg_scrib_lib lib;
private final Xowe_wiki commons_wiki;
public Jscfg_scrib_lib_fxt() {
fxt.Clear_for_lib();
lib = new Jscfg_scrib_lib();
lib.Init();
lib.Core_(fxt.Core());
this.commons_wiki = fxt.Parser_fxt().Wiki().Appe().Wiki_mgr().Get_by_or_make(gplx.xowa.wikis.domains.Xow_domain_itm_.Bry__commons).Init_assert();
}
public void Init__page(String page, String text) {
fxt.Parser_fxt().Init_page_create(commons_wiki, page, text);
}
public void Init__page__multilingual() {
this.Init__page("Data:Test_localize.tab", Json_doc.Make_str_by_apos
( "{"
, " 'license': 'CC0-1.0',"
, " 'description': {"
, " 'de': 'Objekttabelle',"
, " 'en': 'Object table'"
, " },"
, " 'sources': 'Objects in Data:Data.tab completed by [https://www.wikidata.org Wikidata]',"
, " 'schema': {"
, " 'fields': ["
, " {"
, " 'name': 'wikidataID',"
, " 'type': 'String',"
, " 'title': {"
, " 'de': 'Wikidata-Item',"
, " 'en': 'Wikidata item'"
, " }"
, " },"
, " {"
, " 'name': 'wikidataLabel',"
, " 'type': 'localized',"
, " 'title': {"
, " 'de': 'Wikidata-Label',"
, " 'en': 'Wikidata label'"
, " }"
, " }"
, " ]"
, " },"
, " 'data': ["
, " ["
, " 'Q183',"
, " {"
, " 'de': 'Deutschland',"
, " 'en': 'Germany'"
, " }"
, " ],"
, " ["
, " 'Q61912',"
, " {"
, " 'de': 'Wertheim',"
, " 'en': 'Wertheim am Main'"
, " }"
, " ]"
, " ]"
, "}"
));
}
public Xol_lang_itm Init__lang(String key, String fallbacks) {
Xoa_lang_mgr lang_mgr = fxt.Core().App().Lang_mgr();
Xol_lang_itm lang = Xol_lang_itm.New(lang_mgr, Bry_.new_u8(key));
lang.Fallback_bry_(Bry_.new_a7(fallbacks));
lang_mgr.Add(lang);
return lang;
}
public Keyval[] Init__picklocalizedStringKvs(String... vals) {
int len = vals.length;
Keyval[] rv = new Keyval[len];
for (int i = 0; i < len; i++) {
String val = vals[i];
rv[i] = Keyval_.new_(val, val);
}
return rv;
}
public void Test__get(String page, String expd) {
Test__get(page, null, expd);
}
public void Test__get(String page, String lang, String expd) {
fxt.Test_scrib_proc_str_ary(lib, Jscfg_scrib_lib.Invk_get, Keyval_.Ary(Keyval_.int_(1, page), Keyval_.int_(2, lang)), expd);
}
public void Test__pickLocalizedString(Xol_lang_itm lang, Keyval[] kv_ary, String expd) {
Keyval actl_kv = Jscfg_localizer.pickLocalizedString(lang, "key", kv_ary);
Gftest.Eq__obj_or_null(expd, actl_kv.Val());
}
}