diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Keyval_find_.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Keyval_find_.java
new file mode 100644
index 000000000..96c78d40b
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Keyval_find_.java
@@ -0,0 +1,49 @@
+/*
+XOWA: the XOWA Offline Wiki Application
+Copyright (C) 2012 gnosygnu@gmail.com
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see .
+*/
+package gplx.xowa.xtns.scribunto.libs; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.scribunto.*;
+public class Keyval_find_ {
+ public static Keyval Find(boolean fail, Keyval[] root, String... keys) {
+ Keyval found = null;
+
+ Keyval[] kvs = root;
+ int keys_len = keys.length;
+ for (int i = 0; i < keys_len; ++i) {
+ String key = keys[i];
+ int kvs_len = kvs.length;
+ found = null;
+ for (int j = 0; j < kvs_len; ++j) {
+ Keyval kv = kvs[j];
+ if (String_.Eq(kv.Key(), key)) {
+ found = kv;
+ break;
+ }
+ }
+ if (found == null) {
+ if (fail)
+ throw Err_.new_wo_type("could not find key", "key", key);
+ else
+ break;
+ }
+ if (i == keys_len - 1)
+ return found;
+ else
+ kvs = (Keyval[])found.Val();
+ }
+ return found;
+ }
+}
diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase_srl_tst.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase_srl_tst.java
index 38fbbb6c2..7c31eecba 100644
--- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase_srl_tst.java
+++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase_srl_tst.java
@@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.xtns.scribunto.libs; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.scribunto.*;
-import org.junit.*;
+import org.junit.*; import gplx.core.tests.*;
import gplx.langs.jsons.*; import gplx.xowa.xtns.wbases.*; import gplx.xowa.xtns.wbases.core.*; import gplx.xowa.xtns.wbases.claims.*; import gplx.xowa.xtns.wbases.claims.itms.*; import gplx.xowa.xtns.wbases.parsers.*;
public class Scrib_lib_wikibase_srl_tst {
@Before public void init() {fxt.Clear();} private Scrib_lib_wikibase_srl_fxt fxt = new Scrib_lib_wikibase_srl_fxt();
@@ -360,6 +360,14 @@ public class Scrib_lib_wikibase_srl_tst {
, ""
);
}
+ @Test public void Claims_time_typed() {
+ Wbase_claim_time claim = (Wbase_claim_time)fxt.Wdata_fxt().Make_claim_time(2, "2001-02-03 04:05:06", 9);
+ Scrib_lib_wikibase_srl_visitor visitor = new Scrib_lib_wikibase_srl_visitor();
+ visitor.Visit_time(claim);
+ Keyval keyval = Keyval_find_.Find(true, visitor.Rv(), "value", "timezone");
+ Gftest.Eq__str("timezone", keyval.Key());
+ Gftest.Eq__int(0, (int)keyval.Val()); // fails when keyval.Val() is String; DATE:2016-10-28
+ }
}
class Scrib_lib_wikibase_srl_fxt {
private Wdata_doc_bldr wdoc_bldr;
diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase_srl_visitor.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase_srl_visitor.java
index f92433f08..5b5a5f220 100644
--- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase_srl_visitor.java
+++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase_srl_visitor.java
@@ -71,7 +71,7 @@ class Scrib_lib_wikibase_srl_visitor implements Wbase_claim_visitor {
rv[1] = Keyval_.new_(Wbase_claim_time_.Itm__precision.Key_str() , itm.Precision_int()); // NOTE: must return int, not str; DATE:2014-02-18
rv[2] = Keyval_.new_(Wbase_claim_time_.Itm__before.Key_str() , itm.Before_int());
rv[3] = Keyval_.new_(Wbase_claim_time_.Itm__after.Key_str() , itm.After_int());
- rv[4] = Keyval_.new_(Wbase_claim_time_.Itm__timezone.Key_str() , Wbase_claim_time_.Dflt__timezone.Val_str()); // ASSUME: always 0 b/c UTF?; DATE:2015-09-21
+ rv[4] = Keyval_.new_(Wbase_claim_time_.Itm__timezone.Key_str() , Wbase_claim_time_.Dflt__timezone.Val_int()); // ASSUME: always 0 b/c UTC?; DATE:2015-09-21
rv[5] = Keyval_.new_(Wbase_claim_time_.Itm__calendarmodel.Key_str() , Wbase_claim_time_.Dflt__calendarmodel.Val_str());
return rv;
}