/* XOWA: the XOWA Offline Wiki Application Copyright (C) 2012-2017 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.langs.phps; import gplx.*; import gplx.langs.*; import org.junit.*; public class Php_srl_parser_tst { Php_srl_parser_fxt fxt = new Php_srl_parser_fxt(); @Before public void init() {fxt.Clear();} @Test public void Nil() {fxt.Test_parse("N;", fxt.itm_nil_());} @Test public void Bool_y() {fxt.Test_parse("b:1;", fxt.itm_bool_y_());} @Test public void Bool_n() {fxt.Test_parse("b:0;", fxt.itm_bool_n_());} @Test public void Num_int() {fxt.Test_parse("i:123;", fxt.itm_int_(123));} @Test public void Num_int_neg() {fxt.Test_parse("i:-123;", fxt.itm_int_(-123));} @Test public void Num_double() {fxt.Test_parse("d:1.23;", fxt.itm_double_(1.23d));} @Test public void Num_double_inf_pos(){fxt.Test_parse("d:INF;", fxt.itm_double_(Double_.Inf_pos));} @Test public void Num_double_exp() {fxt.Test_parse("d:1.2e+2;", fxt.itm_double_(120));} @Test public void Num_double_nan() {fxt.Test_parse("d:NAN;", fxt.itm_double_(Double_.NaN));} @Test public void Str_len_3() {fxt.Test_parse("s:3:\"abc\";", fxt.itm_str_("abc"));} @Test public void Str_len_4() {fxt.Test_parse("s:4:\"abcd\";", fxt.itm_str_("abcd"));} @Test public void Str_len_0() {fxt.Test_parse("s:0:\"\";", fxt.itm_str_(""));} @Test public void Ary_empty() {fxt.Test_parse("a:0:{}", fxt.itm_ary_());} @Test public void Ary_flat_one() {fxt.Test_parse("a:1:{i:1;i:9;}", fxt.itm_ary_().Subs_add(fxt.itm_kvi_(1, fxt.itm_int_(9))));} @Test public void Ary_flat_many() { fxt.Test_parse(String_.Concat ( "a:3:{" , "i:1;i:9;" , "i:2;i:8;" , "i:3;i:7;" , "}"), fxt.itm_ary_().Subs_add_many ( fxt.itm_kvi_(1, fxt.itm_int_(9)) , fxt.itm_kvi_(2, fxt.itm_int_(8)) , fxt.itm_kvi_(3, fxt.itm_int_(7)) )); } @Test public void Ary_nest_one() { fxt.Test_parse(String_.Concat ( "a:1:{" , "i:1;" , "a:2:{" , "i:1;i:9;" , "i:2;i:8;" , "}" , "}" ) , fxt.itm_ary_().Subs_add_many ( fxt.itm_kvi_(1, fxt.itm_ary_().Subs_add_many ( fxt.itm_kvi_(1, fxt.itm_int_(9)) , fxt.itm_kvi_(2, fxt.itm_int_(8)) )))); } @Test public void Ary_key_str() { fxt.Test_parse(String_.Concat ( "a:1:{" , "s:3:\"abc\";" , "i:987;" , "}"), fxt.itm_ary_().Subs_add_many ( fxt.itm_kvs_("abc", fxt.itm_int_(987)) )); } @Test public void Func() { fxt.Test_parse("O:42:\"Scribunto_LuaStandaloneInterpreterFunction\":1:{s:2:\"id\";i:123;}", fxt.itm_func_(123)); } @Test public void Smoke() { // fxt.Test_parse("a:2:{s:6:\"values\";a:1:{i:1;a:9:{s:21:\"makeProt"+"ectedEnvFuncs\";O:42:\"Scribunto_LuaStandaloneInterpreterFunction\":1:{s:2:\"id\";i:2;}s:3:\"log\";O:42:\"Scribunto_LuaStandaloneInterpreterFunction\":1:{s:2:\"id\";i:3;}s:14:\"clearLogBuffer\";O:42:\"Scribunto_LuaStandaloneInterpreterFunction\":1:{s:2:\"id\";i:4;}s:5:\"setup\";O:42:\"Scribunto_LuaStandaloneInterpreterFunction\":1:{s:2:\"id\";i:5;}s:5:\"clone\";O:42:\"Scribunto_LuaStandaloneInterpreterFunction\":1:{s:2:\"id\";i:6;}s:15:\"getCurrentFrame\";O:42:\"Scribunto_LuaStandaloneInterpreterFunction\":1:{s:2:\"id\";i:7;}s:13:\"executeModule\";O:42:\"Scribunto_LuaStandaloneInterpreterFunction\":1:{s:2:\"id\";i:8;}s:15:\"executeFunction\";O:42:\"Scribunto_LuaStandaloneInterpreterFunction\":1:{s:2:\"id\";i:9;}s:12:\"getLogBuffer\";O:42:\"Scribunto_LuaStandaloneInterpreterFunction\":1:{s:2:\"id\";i:10;}}}s:2:\"op\";s:6:\"return\";}"); } } class Php_srl_parser_fxt { public void Clear() { parser = new Php_srl_parser(); factory = parser.Factory(); } Php_srl_parser parser; Php_srl_factory factory; Bry_bfr tmp_bfr = Bry_bfr_.Reset(255); public Php_srl_itm itm_nil_() {return factory.Nil();} public Php_srl_itm itm_bool_n_() {return factory.Bool_n();} public Php_srl_itm itm_bool_y_() {return factory.Bool_y();} public Php_srl_itm itm_int_(int v) {return factory.Int(-1, -1, v);} public Php_srl_itm itm_double_(double v) {return factory.Double(-1, -1, v);} public Php_srl_itm itm_str_(String v) {return factory.Str(-1, -1, v);} public Php_srl_itm itm_func_(int v) {return factory.Func(-1, -1, v);} public Php_srl_itm_ary itm_ary_() {return factory.Ary(-1, -1);} public Php_srl_itm_kv itm_kvi_(int k, Php_srl_itm v){return factory.Kv().Key_(itm_int_(k)).Val_(v);} public Php_srl_itm_kv itm_kvs_(String k, Php_srl_itm v){return factory.Kv().Key_(itm_str_(k)).Val_(v);} public void Test_parse(String raw_str, Php_srl_itm... expd_ary) { byte[] raw = Bry_.new_u8(raw_str); Php_srl_itm_ary root = parser.Parse(raw); Php_srl_itm root_sub = root.Subs_get_at(0).Val(); root_sub.Xto_bfr(tmp_bfr, 0); String actl = tmp_bfr.To_str_and_clear(); String expd = Xto_str(expd_ary, 0, expd_ary.length); Tfds.Eq_str_lines(expd, actl, actl); } String Xto_str(Php_srl_itm[] ary, int bgn, int end) { for (int i = bgn; i < end; i++) { Php_srl_itm itm = ary[i]; itm.Xto_bfr(tmp_bfr, 0); } return tmp_bfr.To_str_and_clear(); } }