From af19381e3c51c146fd309aa7388f643395fb195c Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Sun, 9 Dec 2018 22:00:07 -0500 Subject: [PATCH] Scribunto: Fix broken test for fetchLanguageNames --- .../gplx/xowa/langs/names/Xol_name_mgr.java | 38 ++++++++----------- .../xowa/langs/names/Xol_name_mgr_tst.java | 2 +- .../gplx/xowa/xtns/cldrs/Cldr_name_file.java | 4 +- .../xowa/xtns/cldrs/Cldr_name_loader.java | 10 +++-- .../xowa/xtns/cldrs/Cldr_name_loader_tst.java | 2 +- .../scribunto/libs/Scrib_lib_language.java | 5 ++- .../libs/Scrib_lib_language_tst.java | 16 ++++++++ 7 files changed, 46 insertions(+), 31 deletions(-) diff --git a/400_xowa/src/gplx/xowa/langs/names/Xol_name_mgr.java b/400_xowa/src/gplx/xowa/langs/names/Xol_name_mgr.java index c58c83ae6..27bee6b33 100644 --- a/400_xowa/src/gplx/xowa/langs/names/Xol_name_mgr.java +++ b/400_xowa/src/gplx/xowa/langs/names/Xol_name_mgr.java @@ -36,10 +36,10 @@ public class Xol_name_mgr { * @return String Language name or empty * @since 1.20 */ - public String fetchLanguageName(String code, byte[] inLanguage, byte[] include_bry) { + public String fetchLanguageName(String code, String inLanguage, String include) { code = String_.Lower(code); - if (include_bry == null) include_bry = fetchLanguageNamesUncached__all__key; - Ordered_hash array = fetchLanguageNames(inLanguage, include_bry); + if (include == null) include = "all"; + Ordered_hash array = fetchLanguageNames(inLanguage, include); Keyval rv = (Keyval)array.Get_by(code); return rv == null ? "" : rv.Val_to_str_or_null(); } @@ -59,23 +59,17 @@ public class Xol_name_mgr { private Ordered_hash lang_names_cached; private Ordered_hash lang_files_cached; - private static final byte[] Null_bry = Bry_.new_a7("null"); - public Ordered_hash fetchLanguageNames(byte[] inLanguage, byte[] include_bry) { - byte[] cacheKey = inLanguage == null ? Null_bry : inLanguage; - cacheKey = Bry_.Add(cacheKey, Byte_ascii.Colon_bry, include_bry); + public Ordered_hash fetchLanguageNames(String inLanguage, String include_str) { + if (inLanguage == null) inLanguage = "null"; + String cacheKey = inLanguage + ":" + include_str; if (languageNameCache == null) - languageNameCache = Ordered_hash_.New_bry(); + languageNameCache = Ordered_hash_.New(); Ordered_hash ret = (Ordered_hash)languageNameCache.Get_by(cacheKey); if (ret == null) { - Byte_obj_val include_byte = (Byte_obj_val)fetchLanguageNamesUncachedEnum.Get_by(include_bry); + Byte_obj_val include_byte = (Byte_obj_val)fetchLanguageNamesUncachedEnum.Get_by(include_str); byte include = include_byte == null ? fetchLanguageNamesUncached__all : include_byte.Val(); - Cldr_name_file cldr_file = cldr_loader.Load_or_null(String_.new_u8(inLanguage)); - if (cldr_file == null) { - ret = Ordered_hash_.New(); - languageNameCache.Add(cacheKey, ret); - return ret; - } + Cldr_name_file cldr_file = cldr_loader.Load_or_empty(inLanguage); if (lang_names_cached == null) lang_names_cached = name_loader.Load_as_hash(); @@ -154,14 +148,13 @@ public class Xol_name_mgr { , fetchLanguageNamesUncached__all = 1 // cldr + Names.php , fetchLanguageNamesUncached__mwFile = 2 // *.json|*.php ; - private static final byte[] fetchLanguageNamesUncached__all__key = Bry_.new_a7("all"); - private static final Hash_adp_bry fetchLanguageNamesUncachedEnum = Hash_adp_bry.cs() - .Add_str_byte("mw", fetchLanguageNamesUncached__mw) - .Add_str_byte("all", fetchLanguageNamesUncached__all) - .Add_str_byte("mwFile", fetchLanguageNamesUncached__mwFile) + private static final Hash_adp fetchLanguageNamesUncachedEnum = Hash_adp_.New() + .Add_and_more("mw" , Byte_obj_val.new_(fetchLanguageNamesUncached__mw)) + .Add_and_more("all" , Byte_obj_val.new_(fetchLanguageNamesUncached__all)) + .Add_and_more("mwFile", Byte_obj_val.new_(fetchLanguageNamesUncached__mwFile)) ; public static Ordered_hash fetchLanguageNamesUncached - ( byte[] inLanguage, byte include + ( String inLanguage, byte include , Ordered_hash cldr_names , Ordered_hash lang_names , Ordered_hash lang_files @@ -190,13 +183,12 @@ public class Xol_name_mgr { // $mwNames = $wgExtraLanguageNames + MediaWiki\Languages\Data\Names::$names; Ordered_hash mwNames = lang_names; int mwNames_len = mwNames.Len(); - String inLanguageStr = String_.new_u8(inLanguage); for (int i = 0; i < mwNames_len; i++) { Keyval mw_name = (Keyval)mwNames.Get_at(i); // # - Prefer own MediaWiki native name when not using the hook // # - For other mwNames just add if not added through the hook String code = mw_name.Key(); - if (String_.Eq(code, inLanguageStr) || !names.Has(code)) { + if (String_.Eq(code, inLanguage) || !names.Has(code)) { names.Add_if_dupe_use_nth(code, Keyval_.new_(code, mw_name.Val_to_str_or_empty())); } } diff --git a/400_xowa/src/gplx/xowa/langs/names/Xol_name_mgr_tst.java b/400_xowa/src/gplx/xowa/langs/names/Xol_name_mgr_tst.java index b384f302e..64622bea3 100644 --- a/400_xowa/src/gplx/xowa/langs/names/Xol_name_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/langs/names/Xol_name_mgr_tst.java @@ -79,7 +79,7 @@ class Xol_name_mgr_fxt { , Ordered_hash lang_names , Ordered_hash lang_files , Ordered_hash expd_langs) { - Ordered_hash actl_langs = Xol_name_mgr.fetchLanguageNamesUncached(Bry_.new_u8(inLanguage), include, cldr_names, lang_names, lang_files); + Ordered_hash actl_langs = Xol_name_mgr.fetchLanguageNamesUncached(inLanguage, include, cldr_names, lang_names, lang_files); Gftest.Eq__ary(To_str_ary(expd_langs), To_str_ary(actl_langs)); } private static String[] Add_suffix(String[] ary, String val_suffix) { diff --git a/400_xowa/src/gplx/xowa/xtns/cldrs/Cldr_name_file.java b/400_xowa/src/gplx/xowa/xtns/cldrs/Cldr_name_file.java index 8c9993ee2..35fbd1fb0 100644 --- a/400_xowa/src/gplx/xowa/xtns/cldrs/Cldr_name_file.java +++ b/400_xowa/src/gplx/xowa/xtns/cldrs/Cldr_name_file.java @@ -23,5 +23,7 @@ public class Cldr_name_file { public Ordered_hash Currency_names() {return currency_names;} private final Ordered_hash currency_names = Ordered_hash_.New(); public Ordered_hash Currency_symbols() {return currency_symbols;} private final Ordered_hash currency_symbols = Ordered_hash_.New(); public Ordered_hash Country_names() {return country_names;} private final Ordered_hash country_names = Ordered_hash_.New(); - public Ordered_hash Time_units() {return time_units;} private final Ordered_hash time_units = Ordered_hash_.New(); + public Ordered_hash Time_units() {return time_units;} private final Ordered_hash time_units = Ordered_hash_.New(); + + public static final Cldr_name_file Empty = new Cldr_name_file("EMPTY"); } diff --git a/400_xowa/src/gplx/xowa/xtns/cldrs/Cldr_name_loader.java b/400_xowa/src/gplx/xowa/xtns/cldrs/Cldr_name_loader.java index 910a49a21..787527c04 100644 --- a/400_xowa/src/gplx/xowa/xtns/cldrs/Cldr_name_loader.java +++ b/400_xowa/src/gplx/xowa/xtns/cldrs/Cldr_name_loader.java @@ -26,7 +26,7 @@ public class Cldr_name_loader { this.cldr_dir = cldr_dir; } - public Cldr_name_file Load_or_null(String lang_key) { + public Cldr_name_file Load_or_empty(String lang_key) { // normalize to lc; scrib will pass lower_case, but underlying files are Title_case lang_key = String_.Lower(lang_key); @@ -41,13 +41,17 @@ public class Cldr_name_loader { // get file Io_url url = (Io_url)urls_hash.Get_by(lang_key); if (url == null) { + files_hash.Add(lang_key, Cldr_name_file.Empty); Gfo_usr_dlg_.Instance.Warn_many("", "", "no cldrName file exists for lang; lang=~{lang}", lang_key); - return null; + return Cldr_name_file.Empty; } + + // load json byte[] json = Io_mgr.Instance.LoadFilBry(url); if (Bry_.Len_eq_0(json)) { + files_hash.Add(lang_key, Cldr_name_file.Empty); Gfo_usr_dlg_.Instance.Warn_many("", "", "json is empty; lang=~{lang}", lang_key); - return null; + return Cldr_name_file.Empty; } // parse, cache and return diff --git a/400_xowa/src/gplx/xowa/xtns/cldrs/Cldr_name_loader_tst.java b/400_xowa/src/gplx/xowa/xtns/cldrs/Cldr_name_loader_tst.java index 7b2e8fb50..ac040a3ac 100644 --- a/400_xowa/src/gplx/xowa/xtns/cldrs/Cldr_name_loader_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/cldrs/Cldr_name_loader_tst.java @@ -31,7 +31,7 @@ class Cldr_name_loader_fxt { Io_mgr.Instance.SaveFilStr(Io_url_.new_fil_(Dir_name + fil_name), txt); } public void Test__load_file_is_null(boolean expd, String lang_key) { - Cldr_name_file name_file = name_loader.Load_or_null(lang_key); + Cldr_name_file name_file = name_loader.Load_or_empty(lang_key); Gftest.Eq__bool(expd, name_file == null); } } diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language.java index c35b30597..e54c6bc02 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language.java @@ -131,8 +131,9 @@ public class Scrib_lib_language implements Scrib_lib { } public boolean FetchLanguageName(Scrib_proc_args args, Scrib_proc_rslt rslt) { String lang_code = args.Pull_str(0); - byte[] inLanguage = args.Pull_bry(1); - String rv = core.App().Lang_mgr().Name_mgr().fetchLanguageName(lang_code, inLanguage, null); + String inLanguage = args.Cast_str_or_null(1); + String include = args.Cast_str_or(2, "mw"); + String rv = core.App().Lang_mgr().Name_mgr().fetchLanguageName(lang_code, inLanguage, include); return rslt.Init_obj(rv); /* byte[] lang_code = args.Pull_bry(0); diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language_tst.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language_tst.java index c6e16803b..f8bf73e7c 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language_tst.java @@ -15,6 +15,7 @@ Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt */ package gplx.xowa.xtns.scribunto.libs; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.scribunto.*; import org.junit.*; +import gplx.langs.jsons.*; import gplx.xowa.langs.*; import gplx.xowa.langs.msgs.*; import gplx.xowa.langs.numbers.*; public class Scrib_lib_language_tst { @Before public void init() { @@ -42,6 +43,21 @@ public class Scrib_lib_language_tst { fxt.Test_scrib_proc_bool(lib, Scrib_lib_language.Invk_isValidBuiltInCode, Object_.Ary("e n"), false); } @Test public void FetchLanguageName() { + Io_mgr.Instance.SaveFilStr("mem/xowa/bin/any/xowa/cfg/lang/data/names.json", Json_doc.Make_str_by_apos + ( "[" + , " {" + , " 'code':'en'" + , " , 'name':'English'" + , " , 'note':'en_note'" + , " }" + , ", {" + , " 'code':'fr'" + , " , 'name':'Français'" + , " , 'note':'fr_note'" + , " }" + , "]" + + )); fxt.Test_scrib_proc_str(lib, Scrib_lib_language.Invk_fetchLanguageName, Object_.Ary("en"), "English"); fxt.Test_scrib_proc_str(lib, Scrib_lib_language.Invk_fetchLanguageName, Object_.Ary("fr"), "Français"); fxt.Test_scrib_proc_str(lib, Scrib_lib_language.Invk_fetchLanguageName, Object_.Ary("qz"), "");