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

Wiki: Support renamed folders (fix)

This commit is contained in:
gnosygnu
2017-02-06 22:12:56 -05:00
parent 6f9e92afff
commit 938beac9f9
4379 changed files with 0 additions and 327818 deletions

View File

@@ -1,120 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*; import gplx.core.stores.*;
public class GfmlDataRdr_tst {
@Test public void Raw() {
raw = "root:{}";
rdr = rdr_(raw);
Tfds.Eq(rdr.NameOfNode(), "root");
}
@Test public void Atrs() {
raw = "root:id=1 name=me isPresent=true dateOf='2006-12-08';";
rdr = rdr_(raw);
Tfds.Eq(rdr.ReadInt("id"), 1);
Tfds.Eq(rdr.ReadStr("name"), "me");
Tfds.Eq(rdr.ReadBool("isPresent"), true);
Tfds.Eq_date(rdr.ReadDate("dateOf"), DateAdp_.parse_gplx("2006-12-08"));
}
@Test public void Subs() {
raw = String_.Concat_any(
"root:{",
" computers:id=1 {",
" item:name=cpu;",
" item:name=monitor;",
" }",
" person:id=2 {",
" item:name=hardDrive;",
" item:name=networkCard;",
" }",
"}");
rdr = rdr_(raw);
DataRdr computers = rdr.Subs();
int idx = 0;
while (computers.MoveNextPeer()) {
int expd = idx == 0 ? 1 : 2;
Tfds.Eq(computers.ReadInt("id"), expd);
idx++;
}
Tfds.Eq(idx, 2);
DataRdr items = computers.Subs();
idx = 0;
while (items.MoveNextPeer()) {
String expdStr = idx == 0 ? "hardDrive" : "networkCard";
Tfds.Eq(items.ReadStr("name"), expdStr);
idx++;
}
Tfds.Eq(idx, 2);
}
@Test public void SelectRdr() {
raw = String_.Concat_any(
"root:{",
" person:name=me {}",
" computer:brand=noname {}",
"}");
rdr = rdr_(raw);
DataRdr person = rdr.Subs_byName_moveFirst("person");
Tfds.Eq(person.NameOfNode(), "person");
Tfds.Eq(person.ReadStr("name"), "me");
DataRdr computer = rdr.Subs_byName_moveFirst("computer");
Tfds.Eq(computer.NameOfNode(), "computer");
Tfds.Eq(computer.ReadStr("brand"), "noname");
}
// @Test public void Subs_byKey() {
// raw = String_.Concat_any(
// "root:",
// " person=(name=me)",
// ";");
// rdr = rdr_(raw);
//
// DataRdr person = rdr.Subs_byKey("person");
// Tfds.Eq(person.NameOfNode, "person");
// Tfds.Eq(person.ReadStr("name"), "me");
// }
// @Test public void Type() {
// raw = String_.Concat_any(
// "root:{",
// " _type:{example{explicit_val; bool_val; int_val; string_val; long_val; date_val; float_val; decimal_val;}}",
// " example:val1;",
// "}");
//
// rdr = rdr_(raw);
// DataRdr pointRdr = rdr.Subs(); rdr.MoveNextPeer();
//
// Tfds.Eq(rdr.FieldCount, 8);
// Tfds.Eq(rdr.ReadStr("explicit_val"), "val1");
// Tfds.Eq(rdr.ReadBool("bool_val"), false);
// Tfds.Eq(rdr.ReadInt("int_val"), 0);
// Tfds.Eq(rdr.ReadStr("string_val"), null);
// Tfds.Eq(rdr.ReadLongOrFail("long_val"), (long)0);
// Tfds.Eq(rdr.ReadDate("date_val"), DateAdp_.MinValue);
// Tfds.Eq(rdr.ReadFloat("float_val"), (float)0);
// Tfds.Eq(rdr.FieldAt(1), "bool_val");
// Tfds.Eq(rdr.Read(1), null);
// }
DataRdr rdr_(String raw) {
DataRdr rootRdr = GfmlDataRdr.raw_root_(raw);
return rootRdr;
}
String raw; DataRdr rdr;
}

View File

@@ -1,79 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
class GfmlParse_fxt {
public GfmlNde_mok nde_() {return GfmlNde_mok.new_();}
public GfmlTkn_mok tkn_grp_ary_(String... ary) {return GfmlTkn_mok.new_().Subs_(GfmlTkn_mok.Xto_bry(ary));}
public GfmlTkn_mok tkn_grp_(GfmlTkn_mok... ary) {return GfmlTkn_mok.new_().Subs_(ary);}
public GfmlTkn_mok tkn_itm_(String r) {return GfmlTkn_mok.new_().Raw_(r);}
public void ini_RootLxr_Add(GfmlLxr... ary) {rootLxr.SubLxr_Add(ary);}
public void tst_Doc(String raw, GfmlNde_mok... expdAry) {
GfmlDoc gdoc = bldr.XtoGfmlDoc(raw);
GfmlNde_mok expd = GfmlNde_mok.new_();
for (GfmlNde_mok itm : expdAry)
expd.Subs_(itm);
TfdsTstr_fxt tstr = TfdsTstr_fxt.new_();
GfmlTypeResolver_fxt.tst_Nde(tstr, expd, GfmlNde_mok.gfmlNde_(gdoc.RootNde()));
tstr.tst_Equal("parse");
}
public void tst_Tkn(String raw, GfmlTkn_mok... expdAry) {
GfmlDoc gdoc = bldr.XtoGfmlDoc(raw);
GfmlTkn_mok expd = GfmlTkn_mok.new_();
for (GfmlTkn_mok itm : expdAry)
expd.Subs_(itm);
TfdsTstr_fxt tstr = TfdsTstr_fxt.new_();
GfmlTkn_mok.tst(tstr, expd, GfmlTkn_mok.gfmlNde_(gdoc.RootNde()));
tstr.tst_Equal("parse");
}
public static GfmlParse_fxt new_() {
GfmlParse_fxt rv = new GfmlParse_fxt();
rv.rootLxr = GfmlDocLxrs.Root_lxr();
rv.bldr = GfmlBldr_.new_();
rv.bldr.Doc().RootLxr_set(rv.rootLxr);
return rv;
}
public void tst_Err(String raw, UsrMsg_mok... expdErrs) {
bldr.ThrowErrors_set(false);
GfmlDoc actlDoc = bldr.XtoGfmlDoc(raw);
List_adp expd = List_adp_.New(), actl = actlDoc.UsrMsgs();
expd.Add_many((Object[])expdErrs);
TfdsTstr_fxt tstr = TfdsTstr_fxt.new_();
int max = tstr.List_Max(expd, actl);
for (int i = 0; i < max; i++) {
UsrMsg_mok expdUm = (UsrMsg_mok)tstr.List_FetchAtOrNull(expd, i);
UsrMsg actlUm = (UsrMsg)tstr.List_FetchAtOrNull(actl, i);
UsrMsg_mok actlUmm = UsrMsg_mok.new_(actlUm);
tstr.Eq_str(expdUm.Main(), actlUmm.Main(), "main");
for (int j = 0; j < expdUm.Args().Count(); j++) {
Keyval expdKv = (Keyval)expdUm.Args().Get_at(j);
Keyval actlKv = (Keyval)actlUmm.Args().Get_by(expdKv.Key());
Object actlVal = actlKv == null ? String_.Null_mark : actlKv.Val();
tstr.Eq_str(expdKv.Val(), actlVal, expdKv.Key());
}
for (int j = 0; j < expdUm.Required().Count(); j++) {
String expdKv = (String)expdUm.Required().Get_at(j);
Keyval actlKv = (Keyval)actlUmm.Args().Get_by(expdKv);
Object actlVal = actlKv == null ? String_.Null_mark : actlKv.Val();
Object actlValV = actlKv == null ? "<<REQD>>" : actlKv.Val();
tstr.Eq_str(actlValV, actlVal, expdKv);
}
}
tstr.tst_Equal("errs");
}
GfmlBldr bldr; GfmlLxr rootLxr;
}

View File

@@ -1,102 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
class GfmlTypeCompiler_fxt {
public GfmlTyp_mok typ_() {return GfmlTyp_mok.new_();}
public GfmlNde_mok nde_() {return GfmlNde_mok.new_();}
public GfmlFld_mok fld_() {return GfmlFld_mok.new_();}
public GfmlTypRegy Regy() {return typBldr.TypeRegy();}
public void ini_Typ(List_adp typs, GfmlTyp_mok typ) {typs.Add(typ);}
@gplx.Internal protected void run_InitPragma(GfmlTypRegy regy, GfmlPragma pragma) {
GfmlTypeMakr makr = GfmlTypeMakr.new_();
GfmlType[] typeAry = pragma.MakePragmaTypes(makr);
regy.Add_ary(typeAry);
}
public void tst_Type(GfmlTyp_mok expd, GfmlTyp_mok actl) {
TfdsTstr_fxt tstr = TfdsTstr_fxt.new_();
tst(tstr, expd, actl);
tstr.tst_Equal("typ");
}
public void tst_Compile(GfmlNde_mok nde, GfmlTyp_mok expd) {
GfmlNde gnde = run_Resolve(this.Regy(), "_type/type", nde);
Ordered_hash list = Ordered_hash_.New();
GfmlType actlType = GfmlTypeCompiler.Compile(gnde, GfmlType_.Root, this.Regy(), list);
GfmlTyp_mok actl = GfmlTyp_mok.type_(actlType);
TfdsTstr_fxt tstr = TfdsTstr_fxt.new_();
tst(tstr, expd, actl);
tstr.tst_Equal("typ");
}
public void tst_Parse(String raw, GfmlNde_mok... expdAry) {
GfmlDoc gdoc = GfmlDoc_.parse_any_eol_(raw);
GfmlNde_mok expd = GfmlNde_mok.new_();
for (GfmlNde_mok itm : expdAry)
expd.Subs_(itm);
TfdsTstr_fxt tstr = TfdsTstr_fxt.new_();
GfmlTypeResolver_fxt.tst_Nde(tstr, expd, GfmlNde_mok.gfmlNde_(gdoc.RootNde()));
tstr.tst_Equal("parse");
}
public static void tst(TfdsTstr_fxt tstr, GfmlTyp_mok expd, GfmlTyp_mok actl) {
if (expd.Name() != null) tstr.Eq_str(expd.Name(), actl.Name(), "name");
if (expd.Key() != null) tstr.Eq_str(expd.Key(), actl.Key(), "key");
int max = tstr.List_Max(expd.Subs(), actl.Subs());
for (int i = 0; i < max; i++) {
GfmlFld_mok expdFld = (GfmlFld_mok)tstr.List_FetchAtOrNull(expd.Subs(), i);
GfmlFld_mok actlFld = (GfmlFld_mok)tstr.List_FetchAtOrNull(actl.Subs(), i);
tstr.SubName_push(Int_.To_str(i) + " fld");
tst(tstr, expdFld, actlFld);
tstr.SubName_pop();
}
}
static void tst(TfdsTstr_fxt tstr, GfmlFld_mok expd, GfmlFld_mok actl) {
expd = NullObj(expd); actl = NullObj(actl);
if (expd.Name() != null) tstr.Eq_str(expd.Name(), actl.Name(), "name");
if (expd.TypeKey() != null) tstr.Eq_str(expd.TypeKey(), actl.TypeKey(), "typekey");
if (expd.DefaultTkn() != null) tstr.Eq_str(expd.DefaultTknRaw(), actl.DefaultTknRaw(), "default");
}
static GfmlFld_mok NullObj(GfmlFld_mok v) {return (v == null) ? GfmlFld_mok.new_().ini_ndk_(String_.Null_mark, "") : v;}
public void tst_Resolve(GfmlTyp_mok typ, GfmlNde_mok nde, GfmlNde_mok expd) {
typBldr.TypeRegy().Add(typ.XtoGfmlType());
tst_Resolve(nde, expd);
}
public GfmlNde run_Resolve(GfmlTypRegy regy, String typKey, GfmlNde_mok nde) {
GfmlNde gfmlNde = nde.XtoGfmlItm(regy);
typBldr.OverridePool(regy.FetchOrNull(typKey));
tst_ResolveNde(gfmlNde, typKey);
return gfmlNde;
}
public void tst_Resolve(GfmlNde_mok nde, GfmlNde_mok expd) {
GfmlNde gfmlNde = nde.XtoGfmlItm(typBldr.TypeRegy());
tst_ResolveNde(gfmlNde, GfmlType_.AnyKey);
TfdsTstr_fxt tstr = TfdsTstr_fxt.new_();
GfmlTypeResolver_fxt.tst_Nde(tstr, expd, GfmlNde_mok.gfmlNde_(gfmlNde));
tstr.tst_Equal("test");
}
void tst_ResolveNde(GfmlNde nde, String ownerKey) {
typBldr.NdeBgn(nde, ownerKey);
for (int i = 0; i < nde.SubObjs_Count(); i++) {
GfmlItm itm = (GfmlItm)nde.SubObjs_GetAt(i);
if (itm.ObjType() == GfmlObj_.Type_nde)
tst_ResolveNde((GfmlNde)itm, nde.Type().Key());
else
typBldr.AtrExec(nde, (GfmlAtr)itm);
}
typBldr.NdeEnd();
}
GfmlTypeMgr typBldr = GfmlTypeMgr.new_();
public static GfmlTypeCompiler_fxt new_() {return new GfmlTypeCompiler_fxt();} GfmlTypeCompiler_fxt() {}
}

View File

@@ -1,182 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import gplx.core.strings.*;
interface GfmlItm_mok {
int ObjType();
}
class GfmlAtr_mok implements GfmlItm_mok {
public int ObjType() {return GfmlObj_.Type_atr;}
public String Key() {return key;} public GfmlAtr_mok Key_(String v) {key = v; return this;} private String key;
public String Val() {return val;} public GfmlAtr_mok Val_(String v) {val = v; return this;} private String val;
public GfmlAtr XtoGfmlItm() {
GfmlAtr rv = GfmlAtr.new_(GfmlTkn_.raw_(key), GfmlTkn_.raw_(val), GfmlType_.String);
return rv;
}
public String XtoStrStub() {
String_bldr sb = String_bldr_.new_();
sb.Add_kv("key=", key).Add_kv("val=", val);
return sb.To_str();
}
public static final GfmlAtr_mok Null = new GfmlAtr_mok().Key_(String_.Null_mark).Val_(String_.Null_mark);
public static GfmlAtr_mok as_(Object obj) {return obj instanceof GfmlAtr_mok ? (GfmlAtr_mok)obj : null;}
public static GfmlAtr_mok new_(String key, String val) {
GfmlAtr_mok rv = new GfmlAtr_mok();
rv.key = key; rv.val = val;
return rv;
} GfmlAtr_mok() {}
}
class GfmlNde_mok implements GfmlItm_mok {
public int ObjType() {return GfmlObj_.Type_nde;}
public String Key() {return key;} public GfmlNde_mok Key_(String v) {key = v; return this;} private String key;
public String Hnd() {return hnd;} public GfmlNde_mok Hnd_(String v) {hnd = v; return this;} private String hnd;
public String Typ() {return typ;} public GfmlNde_mok Typ_(String v) {typ = v; return this;} private String typ;
public int ChainId() {return chainId;} public GfmlNde_mok ChainId_(int v) {chainId = v; return this;} int chainId = -1;
public boolean KeyedSubObj() {return keyed;}
public GfmlNde_mok KeyedSubObj_() {return KeyedSubObj_(true);}
public GfmlNde_mok KeyedSubObj_(boolean v) {keyed = v; return this;} private boolean keyed;
public List_adp Subs() {return subs;}
public String XtoStrStub() {
String_bldr sb = String_bldr_.new_();
sb.Add_kv("key=", key).Add_kv("hnd=", hnd).Add_kv("typ=", typ).Add_kv("subs=", Int_.To_str(subs.Count()));
return sb.To_str();
}
public GfmlNde_mok Subs_(GfmlItm_mok... ary) {
for (GfmlItm_mok itm : ary)
subs.Add(itm);
return this;
} List_adp subs = List_adp_.New();
public GfmlNde_mok Atrk_(String k, String v) {subs.Add(GfmlAtr_mok.new_(k, v)); return this;}
public GfmlNde_mok Atru_(String v) {subs.Add(GfmlAtr_mok.new_(GfmlTkn_.NullVal, v)); return this;}
public GfmlNde_mok Atrs_(String... ary) {
for (String itm : ary)
subs.Add(GfmlAtr_mok.new_(GfmlTkn_.NullVal, itm));
return this;
}
public GfmlNde XtoGfmlItm(GfmlTypRegy regy) {return XtoGfmlNde(regy, this);}
static GfmlNde XtoGfmlNde(GfmlTypRegy regy, GfmlNde_mok ownerMok) {
String tmpTypeKey = ownerMok.typ == null ? GfmlType_.AnyKey : ownerMok.typ;
String tmpHnd = ownerMok.hnd == null ? "" : ownerMok.hnd;
GfmlNde rv = GfmlNde.new_(GfmlTkn_.raw_(tmpHnd), regy.FetchOrNull(tmpTypeKey), ownerMok.key != null);
rv.ChainId_(ownerMok.chainId);
if (ownerMok.keyed) rv.KeyedSubObj_(ownerMok.keyed);
if (ownerMok.key != null) rv.KeyTkn_set(GfmlTkn_.val_(ownerMok.key));
for (int i = 0; i < ownerMok.subs.Count(); i++) {
GfmlItm_mok itm = (GfmlItm_mok)ownerMok.subs.Get_at(i);
if (itm.ObjType() == GfmlObj_.Type_nde) {
GfmlNde_mok itmMok = (GfmlNde_mok)itm;
rv.SubObjs_Add(itmMok.XtoGfmlItm(regy));
}
else {
GfmlAtr_mok atrMok = (GfmlAtr_mok)itm;
rv.SubObjs_Add(atrMok.XtoGfmlItm());
}
}
return rv;
}
public static GfmlNde_mok as_(Object obj) {return obj instanceof GfmlNde_mok ? (GfmlNde_mok)obj : null;}
public static final GfmlNde_mok Null = new GfmlNde_mok().Hnd_(String_.Null_mark).Typ_(String_.Null_mark);
public static final GfmlNde_mok ErrAtr = new GfmlNde_mok().Hnd_("<<ErrAtr>>").Typ_("<<ErrAtr>>");
public static GfmlNde_mok new_() {return new GfmlNde_mok();} GfmlNde_mok() {}
public static GfmlNde_mok gfmlNde_(GfmlNde nde) {return InitNde(nde);}
static GfmlNde_mok InitNde(GfmlNde nde) {
GfmlNde_mok rv = new GfmlNde_mok();
rv.typ = nde.Type().Key();
rv.hnd = nde.Hnd();
rv.keyed = nde.KeyedSubObj();
rv.chainId = nde.ChainId();
if (nde.Key() != null) rv.key = nde.Key();
for (int i = 0; i < nde.SubKeys().Count(); i++) {
GfmlItm subItm = (GfmlItm)nde.SubKeys().Get_at(i);
if (subItm.ObjType() == GfmlObj_.Type_atr) {
GfmlAtr subAtr = (GfmlAtr)subItm;
GfmlAtr_mok mokAtr = GfmlAtr_mok.new_(subAtr.Key(), subAtr.DatTkn().Val());
if (!String_.Len_eq_0(subAtr.Key())) mokAtr.Key_(subAtr.Key());
rv.subs.Add(mokAtr);
}
else {
GfmlNde subNde = (GfmlNde)subItm;
GfmlNde_mok mokNde = InitNde(subNde);
rv.subs.Add(mokNde);
}
}
for (int i = 0; i < nde.SubHnds().Count(); i++) {
GfmlNde subNde = (GfmlNde)nde.SubHnds().Get_at(i);
GfmlNde_mok mokNde = InitNde(subNde);
rv.subs.Add(mokNde);
}
return rv;
}
}
class GfmlTypeResolver_fxt {
public GfmlType ini_MakeType(GfmlTyp_mok mok) {
type = mok.XtoGfmlType();
regy.Add(type);
return type;
}
GfmlType type;
public static void tst_Nde(TfdsTstr_fxt tstr, GfmlNde_mok expd, GfmlNde_mok actl) {
expd = NullObj(expd); actl = NullObj(actl);
if (expd.Typ() != null) tstr.Eq_str(expd.Typ(), actl.Typ(), "typ");
if (expd.KeyedSubObj()) tstr.Eq_str(expd.KeyedSubObj(), actl.KeyedSubObj(), "keyed");
if (expd.Key() != null) tstr.Eq_str(expd.Key(), actl.Key(), "key");
if (expd.Hnd() != null) tstr.Eq_str(expd.Hnd(), actl.Hnd(), "hnd");
if (expd.ChainId() != -1) tstr.Eq_str(expd.ChainId(), actl.ChainId(), "chainId");
int max = tstr.List_Max(expd.Subs(), actl.Subs());
for (int i = 0; i < max; i++) {
GfmlItm_mok expdSub = (GfmlItm_mok)tstr.List_FetchAtOrNull(expd.Subs(), i);
GfmlItm_mok actlSub = (GfmlItm_mok)tstr.List_FetchAtOrNull(actl.Subs(), i);
tstr.SubName_push(Int_.To_str(i));
if (expdSub == null) {
GfmlNde_mok mm = GfmlNde_mok.as_(actlSub);
String actlSubStr = mm == null ? "sub:null" : mm.XtoStrStub();
tstr.Eq_str("nde:" + "sub:null", actlSubStr, "expdSub null");
tstr.Fail();
break;
}
else if (expdSub.ObjType() == GfmlObj_.Type_atr) {
GfmlAtr_mok actlAtrMok = GfmlAtr_mok.as_(actlSub);
tst_Nde(tstr, (GfmlAtr_mok)expdSub, actlAtrMok);
}
else {
GfmlNde_mok actlMok = GfmlNde_mok.as_(actlSub);
if (actlMok == null) {
String actlSubStr = actlSub == null ? "sub:null" : "atr:" + ((GfmlAtr_mok)actlSub).XtoStrStub();
tstr.Eq_str("nde:" + ((GfmlNde_mok)expdSub).XtoStrStub(), actlSubStr, "actlSub null");
tstr.Fail();
break;
}
tst_Nde(tstr, (GfmlNde_mok)expdSub, actlMok);
}
tstr.SubName_pop();
}
}
static GfmlNde_mok NullObj(GfmlNde_mok v) {return v == null ? GfmlNde_mok.Null : v;}
static GfmlAtr_mok NullObj(GfmlAtr_mok v) {return v == null ? GfmlAtr_mok.Null : v;}
static void tst_Nde(TfdsTstr_fxt tstr, GfmlAtr_mok expd, GfmlAtr_mok actl) {
expd = NullObj(expd); actl = NullObj(actl);
if (expd.Key() != null) tstr.Eq_str(expd.Key(), actl.Key(), "key");
if (expd.Val() != null) tstr.Eq_str(expd.Val(), actl.Val(), "val");
}
GfmlTypRegy regy = GfmlTypRegy.new_();
public static GfmlTypeResolver_fxt new_() {
GfmlTypeResolver_fxt rv = new GfmlTypeResolver_fxt();
return rv;
} GfmlTypeResolver_fxt() {}
}

View File

@@ -1,77 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
class GfmlTkn_mok {
public String Raw() {return raw;} public GfmlTkn_mok Raw_(String v) {raw = v; return this;} private String raw;
public List_adp Subs() {return list;} List_adp list = List_adp_.New();
public GfmlTkn_mok Subs_(GfmlTkn_mok... ary) {
for (GfmlTkn_mok itm : ary)
list.Add(itm);
return this;
}
// statics
public static GfmlTkn_mok new_() {return new GfmlTkn_mok();} GfmlTkn_mok() {}
public static GfmlTkn_mok gfmlNde_(GfmlNde nde) {
GfmlTkn_mok rv = new GfmlTkn_mok();
InitItm(rv, nde);
return rv;
}
static void InitItm(GfmlTkn_mok rv, GfmlItm owner) {
for (int i = 0; i < owner.SubObjs_Count(); i++) {
GfmlObj subTkn = (GfmlObj)owner.SubObjs_GetAt(i);
GfmlTkn_mok subMok = GfmlTkn_mok.new_();
rv.Subs_(subMok);
GfmlItm subItm = GfmlItm_.as_(subTkn);
if (subItm != null)
InitItm(subMok, subItm);
else
InitTkn(subMok, (GfmlTkn)subTkn);
}
}
static void InitTkn(GfmlTkn_mok mok, GfmlTkn tkn) {
if (tkn.SubTkns().length == 0) // leafTkn; no subs; simply set
mok.Raw_(tkn.Raw());
else { // compTkn; createTkn and iterate
for (int i = 0; i < tkn.SubTkns().length; i++) {
GfmlTkn subTkn = (GfmlTkn)tkn.SubTkns()[i];
GfmlTkn_mok subMok = GfmlTkn_mok.new_();
InitTkn(subMok, subTkn);
mok.Subs_(subMok);
}
}
}
public static GfmlTkn_mok[] Xto_bry(String... ary) {
GfmlTkn_mok[] rv = new GfmlTkn_mok[ary.length];
for (int i = 0; i < rv.length; i++)
rv[i] = GfmlTkn_mok.new_().Raw_(ary[i]);
return rv;
}
public static void tst(TfdsTstr_fxt tstr, GfmlTkn_mok expd, GfmlTkn_mok actl) {
expd = NullObj(expd); actl = NullObj(actl);
if (expd.Raw() != null) tstr.Eq_str(expd.Raw(), actl.Raw(), "raw");
int max = tstr.List_Max(expd.Subs(), actl.Subs());
for (int i = 0; i < max; i++) {
GfmlTkn_mok expdSub = (GfmlTkn_mok)tstr.List_FetchAtOrNull(expd.Subs(), i);
GfmlTkn_mok actlSub = (GfmlTkn_mok)tstr.List_FetchAtOrNull(actl.Subs(), i);
tstr.SubName_push(Int_.To_str(i));
tst(tstr, expdSub, actlSub);
tstr.SubName_pop();
}
}
static GfmlTkn_mok NullObj(GfmlTkn_mok v) {return v == null ? GfmlTkn_mok.new_().Raw_(String_.Null_mark) : v;}
}

View File

@@ -1,83 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
class GfmlFld_mok {
public String Name() {return name;} public GfmlFld_mok Name_(String v) {name = v; return this;} private String name;
public String TypeKey() {return typeKey;} public GfmlFld_mok TypeKey_(String v) {typeKey = v; return this;} private String typeKey;
public GfmlObj DefaultTkn() {return defaultTkn;}
public GfmlFld_mok DefaultTkn_(GfmlObj v) {defaultTkn = v; return this;} GfmlObj defaultTkn = GfmlTkn_.Null;
public GfmlFld_mok Default_(String v) {defaultTkn = GfmlTkn_.raw_(v); return this;}
public String DefaultTknRaw() {return GfmlFld_mok.XtoRaw(defaultTkn);}
public boolean KeyedSubObj() {return keyed;} private boolean keyed = false;
public GfmlFld XtoGfmlFld() {
GfmlFld rv = GfmlFld.new_(keyed, name, typeKey);
rv.DefaultTkn_(defaultTkn);
return rv;
}
public GfmlFld_mok ini_atr_(String name) {this.name = name; this.keyed = true; return this;}
public GfmlFld_mok ini_ndk_(String name, String typKey) {this.name = name; this.typeKey = typKey; this.keyed = true; return this;}
public static GfmlFld_mok new_() {return new GfmlFld_mok();} GfmlFld_mok() {}
public static String XtoRaw(GfmlObj gobj) {
if (gobj == null) return String_.Null_mark;
GfmlTkn tkn = GfmlTkn_.as_(gobj);
if (tkn != null) return tkn.Raw();
GfmlNde nde = GfmlNde.as_(gobj);
return nde.To_str();
}
}
class GfmlTyp_mok {
public String Name() {return name;} public GfmlTyp_mok Name_(String v) {name = v; return this;} private String name;
public String Key() {return key;} public GfmlTyp_mok Key_(String v) {key = v; return this;} private String key;
public List_adp Subs() {return subFlds;} List_adp subFlds = List_adp_.New();
public GfmlTyp_mok Atrs_(String... ary) {
for (String itm : ary)
subFlds.Add(GfmlFld_mok.new_().ini_atr_(itm));
return this;
}
public GfmlTyp_mok Subs_(GfmlFld_mok... ary) {
for (GfmlFld_mok itm : ary)
subFlds.Add(itm);
return this;
}
public GfmlType XtoGfmlType() {
GfmlType rv = GfmlType_.new_(key, name); // all types in tests are top-level
for (int i = 0; i < subFlds.Count(); i++) {
GfmlFld_mok fld = (GfmlFld_mok)subFlds.Get_at(i);
rv.SubFlds().Add(fld.XtoGfmlFld());
}
return rv;
}
public static GfmlTyp_mok new_() {return new GfmlTyp_mok();} GfmlTyp_mok() {}
public static GfmlTyp_mok simple_(String name, String... flds) {
GfmlTyp_mok rv = new GfmlTyp_mok();
rv.key = name; rv.name = name;
for (String fld : flds)
rv.subFlds.Add(GfmlFld_mok.new_().ini_atr_(fld));
return rv;
}
public static GfmlTyp_mok type_(GfmlType typ) {
GfmlTyp_mok rv = new GfmlTyp_mok();
rv.key = typ.Key(); rv.name = typ.NdeName();
for (int i = 0; i < typ.SubFlds().Count(); i++) {
GfmlFld fld = (GfmlFld)typ.SubFlds().Get_at(i);
GfmlFld_mok mkFld = GfmlFld_mok.new_().ini_ndk_(fld.Name(), fld.TypeKey()).DefaultTkn_(fld.DefaultTkn());
rv.subFlds.Add(mkFld);
}
return rv;
}
}

View File

@@ -1,36 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
class UsrMsg_mok {
public String Main() {return main;} public UsrMsg_mok Main_(String v) {main = v; return this;} private String main;
public UsrMsg_mok Add_(String k, Object o) {hash.Add(k, Keyval_.new_(k, o)); return this;}
public UsrMsg_mok Require_(String k) {required.Add(k, k); return this;}
public Ordered_hash Args() {return hash;} Ordered_hash hash = Ordered_hash_.New();
public Ordered_hash Required() {return required;} Ordered_hash required = Ordered_hash_.New();
public static UsrMsg_mok new_(UsrMsg um) {
UsrMsg_mok rv = new UsrMsg_mok();
if (um != null) {
rv.main = um.Hdr();
for (int i = 0; i < um.Args().Count(); i++) {
Keyval kv = (Keyval)um.Args().Get_at(i);
rv.Add_(kv.Key(), kv.Val());
}
}
return rv;
} UsrMsg_mok() {}
}

View File

@@ -1,63 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z011_IntObjHash_tst {
@Before public void setup() {
hash = new IntObjHash_base();
} IntObjHash_base hash;
@Test public void Empty() {
tst_Count(0);
tst_Fetch(1, null);
}
@Test public void Add() {
hash.Add(1, "1");
tst_Count(1);
tst_Fetch(1, "1");
tst_Fetch(2, null);
}
@Test public void Del() {
hash.Add(1, "1");
hash.Del(1);
tst_Count(0);
tst_Fetch(1, null);
}
@Test public void Clear() {
hash.Add(1, "1");
hash.Add(32, "32");
tst_Fetch(1, "1");
tst_Fetch(32, "32");
tst_Count(2);
hash.Clear();
tst_Count(0);
tst_Fetch(2, null);
tst_Fetch(32, null);
}
@Test public void Add_bug() { // fails after expanding ary, and fetching at key=n*16
hash.Add(1, "1");
tst_Count(1);
tst_Fetch(1, "1");
tst_Fetch(15, null); // works
tst_Fetch(17, null); // works
tst_Fetch(16, null); // used to fail
}
void tst_Fetch(int key, Object expd) {Tfds.Eq(expd, hash.Get_by(key));}
void tst_Count(int expd) {Tfds.Eq(expd, hash.Count());}
}

View File

@@ -1,73 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
import gplx.core.texts.*; /*CharStream*/
public class z012_GfmlTrie_tst {
@Before public void setup() {
trie = GfmlTrie.new_();
} GfmlTrie trie;
@Test public void Null() {
tst_FindMatch_first("", null);
tst_FindMatch_first("{", null);
}
@Test public void OneChar() {
trie.Add("{", "val0");
tst_FindMatch_first("{", "val0");
tst_FindMatch_first(":", null);
}
@Test public void TwoChar() {
trie.Add("/*", "val0");
tst_FindMatch_first("/*", "val0");
tst_FindMatch_first("//", null);
}
@Test public void ManySym() {
trie.Add(":", "val0");
trie.Add("{", "val1");
tst_FindMatch_first(":", "val0");
tst_FindMatch_first("{", "val1");
tst_FindMatch_first("-", null);
}
@Test public void Overlap_1_2() {
trie.Add("[", "val0");
trie.Add("[:", "val1");
tst_FindMatch_first("[", "val0");
tst_FindMatch_first("[:", "val1");
tst_FindMatch_first("[-", "val0");
tst_FindMatch_first(":", null);
}
@Test public void Overlap_2_1() {
trie.Add("[:", "val0");
trie.Add("[", "val1");
tst_FindMatch_first("[:", "val0");
tst_FindMatch_first("[", "val1");
tst_FindMatch_first("[-", "val1");
tst_FindMatch_first(":", null);
}
@Test public void Overlap_1_1() {
trie.Add("[", "val0");
trie.Add("[", "val1");
tst_FindMatch_first("[", "val1"); // return last added
tst_FindMatch_first(":", null);
}
void tst_FindMatch_first(String text, String expd) {
CharStream stream = CharStream.pos0_(text);
String actl = (String)trie.FindMatch(stream);
Tfds.Eq(expd, actl);
}
}

View File

@@ -1,52 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z015_GfmlDocPos_tst {
GfmlDocPos root = GfmlDocPos_.Root;
@Test public void Root() {
tst_Path(root, "0");
}
@Test public void MoveDown() {
tst_Path(root.NewDown(0), "0_0");
tst_Path(root.NewDown(0).NewDown(0), "0_0_0");
tst_Path(root.NewDown(1).NewDown(2), "0_1_2");
}
@Test public void MoveUp() {
tst_Path(root.NewDown(1).NewDown(2).NewUp(), "0_1");
}
@Test public void CompareTo_same() {
GfmlDocPos lhs = root.NewDown(0);
GfmlDocPos rhs = root.NewDown(0);
tst_CompareTo(lhs, rhs, CompareAble_.Same);
}
@Test public void CompareTo_diffIndex() {
GfmlDocPos lhs = root.NewDown(0);
GfmlDocPos rhs = root.NewDown(1);
tst_CompareTo(lhs, rhs, CompareAble_.Less);
tst_CompareTo(rhs, lhs, CompareAble_.More);
}
@Test public void CompareTo_diffLevel() {
GfmlDocPos lhs = root;
GfmlDocPos rhs = root.NewDown(0);
tst_CompareTo(lhs, rhs, CompareAble_.Less);
tst_CompareTo(rhs, lhs, CompareAble_.More);
}
void tst_Path(GfmlDocPos pos, String expdPath) {Tfds.Eq(expdPath, pos.Path());}
void tst_CompareTo(GfmlDocPos lhs, GfmlDocPos rhs, int expd) {Tfds.Eq(expd, lhs.compareTo(rhs));}
}

View File

@@ -1,55 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z016_GfmlScopeList_tst {
@Before public void setup() {
list = GfmlScopeList.new_("test");
} GfmlScopeList list;
@Test public void None() {
tst_Itm(list, GfmlDocPos_.Root, null);
}
@Test public void One() {
run_Add(list, var_("val1"));
tst_Itm(list, GfmlDocPos_.Root, "val1");
}
@Test public void ByPos() {
run_Add(list, var_("val1").DocPos_(docPos_(0, 0)));
run_Add(list, var_("val2").DocPos_(docPos_(0, 0, 0)));
tst_Itm(list, docPos_(0, 0), "val1");
tst_Itm(list, docPos_(0, 0, 0), "val2");
tst_Itm(list, docPos_(0, 1), "val1");
tst_Itm(list, docPos_(0), null);
}
GfmlVarItm var_(String val) {return GfmlVarItm.new_("key", GfmlTkn_.raw_(val), GfmlVarCtx_.DefaultKey);}
GfmlDocPos docPos_(int... ary) {
int last = ary.length - 1;
int idx = ary[last];
int[] levels = (int[])Array_.Resize(ary, last);
return new GfmlDocPos(levels, idx);
}
void run_Add(GfmlScopeList list, GfmlScopeItm... ary) {
for (GfmlScopeItm itm : ary)
list.Add(itm);
}
void tst_Itm(GfmlScopeList list, GfmlDocPos pos, String expd) {
GfmlVarItm itm = (GfmlVarItm)list.Get_by(pos);
String actl = itm == null ? null : itm.TknVal();
Tfds.Eq(expd, actl);
}
}

View File

@@ -1,53 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z017_GfmlStringHighlighter_tst {
@Test public void Short() {
tst_Err(sh_().Raw_("a=").Mark_(1, '=', "key tkn").Mark_(2, '?', "EOS:missing data")
, "< >"
, " a= "
, " =?"
, ""
, "[1] = key tkn"
, "[2] ? EOS:missing data"
);
}
@Test public void Whitespace() {
tst_Err(sh_().Raw_("a\t\nb").Mark_(0, ' ', "")
, "< tn >"
, " a b "
, " "
);
}
@Test public void Long() {
tst_Err(sh_().Raw_("abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba").Mark_(0, '{', "bgn").Mark_(50, '}', "end")
, "< >"
, " abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba "
, " { } "
, ""
, "[00] { bgn"
, "[50] } end"
);
}
GfmlStringHighlighter sh_() {return GfmlStringHighlighter.new_();}
void tst_Err(GfmlStringHighlighter sh, String... expdLines) {
String[] actlLines = sh.Gen();
Tfds.Eq_ary_str(expdLines, actlLines);
}
}

View File

@@ -1,77 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z051_GfmlFldPool_keyed_tst {
@Before public void setup() {
GfmlTypeMakr makr = GfmlTypeMakr.new_();
GfmlType type = makr.MakeSubType("point", "x", "y", "z");
fldPool = GfmlFldPool.new_(type);
} GfmlFldPool fldPool;
@Test public void PopByKey_inOrder() {
tst_Keyed_PopByKey(fldPool, "x", "x", "y", "z");
}
@Test public void PopByKey_outOfOrder() {
tst_Keyed_PopByKey(fldPool, "y", "y", "x", "z");
}
@Test public void PopByKey_unknown() {
tst_Keyed_PopByKey(fldPool, "a", GfmlItmKeys.NullKey, "x", "y", "z");
}
@Test public void PopByKey_alreadyRemoved() {
tst_Keyed_PopByKey(fldPool, "x", "x", "y", "z");
tst_Keyed_PopByKey(fldPool, "x", GfmlItmKeys.NullKey, "y", "z");
}
@Test public void PopByKey_depleted() {
tst_Keyed_PopByKey(fldPool, "x", "x", "y", "z");
tst_Keyed_PopByKey(fldPool, "y", "y", "z");
tst_Keyed_PopByKey(fldPool, "z", "z");
tst_Keyed_PopByKey(fldPool, "x", GfmlItmKeys.NullKey);
}
@Test public void PopNext_inOrder() {
tst_Keyed_PopNext(fldPool, "x", "y", "z");
tst_Keyed_PopNext(fldPool, "y", "z");
tst_Keyed_PopNext(fldPool, "z");
try {
tst_Keyed_PopNext(fldPool, GfmlItmKeys.NullKey);
Tfds.Fail("should have failed");
}
catch (Exception exc) {Err_.Noop(exc);}
}
@Test public void PopByKey_PopNext() {
tst_Keyed_PopByKey(fldPool, "y", "y", "x", "z");
tst_Keyed_PopNext(fldPool, "x", "z");
}
void tst_Keyed_PopByKey(GfmlFldPool fldPool, String key, String expdFldId, String... expdSubs) {
GfmlFld actlFld = fldPool.Keyed_PopByKey(key);
Tfds.Eq(expdFldId, actlFld.Name());
String[] actlSubs = new String[fldPool.Keyd_Count()];
for (int i = 0; i < actlSubs.length; i++) {
actlSubs[i] = fldPool.Keyd_FetchAt(i).Name();
}
Tfds.Eq_ary(expdSubs, actlSubs);
}
void tst_Keyed_PopNext(GfmlFldPool fldPool, String expdFldId, String... expdSubs) {
GfmlFld actlFld = fldPool.Keyed_PopNext();
Tfds.Eq(expdFldId, actlFld.Name());
String[] actlSubs = new String[fldPool.Keyd_Count()];
for (int i = 0; i < actlSubs.length; i++) {
actlSubs[i] = fldPool.Keyd_FetchAt(i).Name();
}
Tfds.Eq_ary(expdSubs, actlSubs);
}
}

View File

@@ -1,71 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*; import gplx.core.stores.*;
public class z081_GfmlDataWtr_tst {
@Before public void setup() {
wtr = GfmlDataWtr.new_();
wtr.WriteNodeBgn("root");
} DataWtr wtr;
@Test public void Basic() {
tst_XtoStr(wtr, "root:;");
}
@Test public void Atr_one() {
wtr.WriteData("key", "data");;
tst_XtoStr(wtr, "root:key='data';");
}
@Test public void Atr_many() {
wtr.WriteData("key1", "data1");
wtr.WriteData("key2", "data2");
tst_XtoStr(wtr, "root:key1='data1' key2='data2';");
}
@Test public void Nde_one() {
wtr.WriteNodeBgn("sub0");
tst_XtoStr(wtr, "root:{sub0:;}");
}
@Test public void Nde_many() {
wtr.WriteNodeBgn("sub0");
wtr.WriteNodeEnd();
wtr.WriteNodeBgn("sub1");
tst_XtoStr(wtr, "root:{sub0:;sub1:;}");
}
@Test public void Nde_nested() {
wtr.WriteNodeBgn("sub0");
wtr.WriteNodeBgn("sub1");
tst_XtoStr(wtr, "root:{sub0:{sub1:;}}");
}
@Test public void OneAtrOneNde() {
wtr.WriteData("key1", "data1");
wtr.WriteNodeBgn("sub0");
tst_XtoStr(wtr, "root:key1='data1'{sub0:;}");
}
@Test public void OneAtrOneNdeOneAtr() {
wtr.WriteData("key1", "data1");
wtr.WriteNodeBgn("sub0");
wtr.WriteData("key2", "data2");
tst_XtoStr(wtr, "root:key1='data1'{sub0:key2='data2';}");
}
@Test public void EscapeQuote() {
wtr.WriteData("key", "data's");;
tst_XtoStr(wtr, "root:key='data''s';");
}
void tst_XtoStr(DataWtr wtr, String expd) {
String actl = wtr.To_str();
Tfds.Eq(expd, actl);
}
}

View File

@@ -1,54 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*; import gplx.core.stores.*;
public class z082_GfmlDataWtrOpts_tst {
@Before public void setup() {
wtr = GfmlDataWtr.new_();
wtr.WriteNodeBgn("root");
} DataWtr wtr;
@Test public void KeyedSpr() {
wtr.InitWtr(GfmlDataWtrOpts.Key_const, GfmlDataWtrOpts.new_().KeyedSeparator_("\t"));
wtr.WriteData("key1", "data1");
wtr.WriteData("key2", "data2");
tst_XtoStr(wtr, "root:key1='data1'\tkey2='data2';");
}
@Test public void IndentNamesOn() {
wtr.InitWtr(GfmlDataWtrOpts.Key_const, GfmlDataWtrOpts.new_().IndentNodesOn_());
wtr.WriteNodeBgn("nde1");
wtr.WriteNodeBgn("nde2");
wtr.WriteNodeEnd();
tst_XtoStr(wtr, String_.Concat_lines_crlf
( "root:{"
, " nde1:{"
, " nde2:;"
, " }"
, "}"
));
}
@Test public void IgnoreNullNamesOn() {
wtr.InitWtr(GfmlDataWtrOpts.Key_const, GfmlDataWtrOpts.new_().IgnoreNullNamesOn_());
wtr.WriteNodeBgn("");
wtr.WriteData("key1", "data1");
tst_XtoStr(wtr, String_.Concat("root:{key1='data1';}"));
}
void tst_XtoStr(DataWtr wtr, String expd) {
String actl = wtr.To_str();
Tfds.Eq(expd, actl);
}
}

View File

@@ -1,68 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
import gplx.core.texts.*; /*CharStream*/
public class z091_GfmlLxr_basic_tst {
@Before public void setup() {
rootLxr = GfmlLxr_.general_("gfml.root", GfmlTkn_.cmd_("tkn:text", GfmlBldrCmd_.Null));
} GfmlLxr rootLxr;
@Test public void Empty() {
tst_Fetch("");
}
@Test public void General() {
tst_Fetch("text", "text");
}
@Test public void Solo() {
ini_AddSymbol(",");
tst_Fetch(",", ",");
tst_Fetch(",data0", ",", "data0");
tst_Fetch("data0,", "data0", ",");
tst_Fetch("data0,data1", "data0", ",", "data1");
}
@Test public void Range() {
ini_AddRange(" ", "\t");
tst_Fetch(" ", " ");
tst_Fetch(" a", " ", "a");
tst_Fetch("\t ", "\t ");
tst_Fetch("\ta ", "\t", "a", " ");
}
void ini_AddSymbol(String symbol) {
GfmlTkn tkn = GfmlTkn_.singleton_("tkn", symbol, symbol, GfmlBldrCmd_.Null);
GfmlLxr lxr = GfmlLxr_.solo_(symbol, tkn);
rootLxr.SubLxr_Add(lxr);
}
void ini_AddRange(String... symbols) {
GfmlTkn tkn = GfmlTkn_.cmd_("tkn", GfmlBldrCmd_.Null);
GfmlLxr lxr = GfmlLxr_.range_("merge", symbols, tkn, false);
rootLxr.SubLxr_Add(lxr);
}
GfmlTkn tst_Fetch(String raw, String... expd) {
CharStream stream = CharStream.pos0_(raw);
List_adp list = List_adp_.New();
GfmlTkn tkn = null;
while (true) {
tkn = rootLxr.MakeTkn(stream, 0);
if (tkn == GfmlTkn_.EndOfStream) break;
list.Add(tkn.Raw());
}
String[] actl = (String[])list.To_ary(String.class);
Tfds.Eq_ary(expd, actl);
return tkn;
}
}

View File

@@ -1,50 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z101_core_ndeInline_tst {
GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Before public void setup() {
fx.ini_RootLxr_Add(GfmlDocLxrs.NdeInline_lxr());
}
@Test public void One() {
fx.tst_Doc("a;", fx.nde_().Atru_("a"));
fx.tst_Tkn("a;"
, fx.tkn_grp_
( fx.tkn_grp_ary_("a")
, fx.tkn_itm_(";")
));
}
@Test public void Many() {
fx.tst_Doc("a;b;"
, fx.nde_().Atru_("a")
, fx.nde_().Atru_("b")
);
fx.tst_Tkn("a;b;"
, fx.tkn_grp_
( fx.tkn_grp_ary_("a")
, fx.tkn_itm_(";")
)
, fx.tkn_grp_
( fx.tkn_grp_ary_("b")
, fx.tkn_itm_(";")
)
);
}
}

View File

@@ -1,79 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z102_core_whitespace_tst {
GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdeInline_lxr()
, GfmlDocLxrs.Whitespace_lxr()
);
}
@Test public void Space() {
fx.tst_Doc("a b;", fx.nde_().Atru_("a").Atru_("b"));
fx.tst_Tkn("a b;"
, fx.tkn_grp_
( fx.tkn_grp_ary_("a")
, fx.tkn_itm_(" ")
, fx.tkn_grp_ary_("b")
, fx.tkn_itm_(";")
)
);
}
@Test public void Tab() {
fx.tst_Doc("a\tb;", fx.nde_().Atru_("a").Atru_("b"));
}
@Test public void NewLine() {
fx.tst_Doc(String_.Format("a{0}b;", String_.CrLf), fx.nde_().Atru_("a").Atru_("b"));
}
@Test public void MergeSameWs() {
fx.tst_Doc("a b;", fx.nde_().Atru_("a").Atru_("b"));
}
@Test public void MergeDiffWs() {
fx.tst_Doc("a\t b;", fx.nde_().Atru_("a").Atru_("b"));
fx.tst_Tkn("a\t b;"
, fx.tkn_grp_
( fx.tkn_grp_ary_("a")
, fx.tkn_itm_("\t ")
, fx.tkn_grp_ary_("b")
, fx.tkn_itm_(";")
)
);
}
@Test public void LeadingWs() {
fx.tst_Doc(" a;", fx.nde_().Atru_("a"));
fx.tst_Tkn(" a;"
, fx.tkn_itm_(" ")
, fx.tkn_grp_
( fx.tkn_grp_ary_("a")
, fx.tkn_itm_(";")
)
);
}
@Test public void TrailingWs() {
fx.tst_Doc("a ;", fx.nde_().Atru_("a"));
fx.tst_Tkn("a ;"
, fx.tkn_grp_
( fx.tkn_grp_ary_("a")
, fx.tkn_itm_(" ")
, fx.tkn_itm_(";")
)
);
}
}

View File

@@ -1,52 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z103_core_elmKey_tst {
GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdeInline_lxr()
, GfmlDocLxrs.ElmKey_lxr()
);
}
@Test public void Basic() {
fx.tst_Doc("a=b;", fx.nde_().Atrk_("a", "b"));
fx.tst_Tkn("a=b;"
, fx.tkn_grp_
( fx.tkn_grp_ary_("a", "=", "b")
, fx.tkn_itm_(";")
)
);
}
@Test public void Ws() {
fx.ini_RootLxr_Add(GfmlDocLxrs.Whitespace_lxr());
fx.tst_Tkn("a = b;"
, fx.tkn_grp_
( fx.tkn_grp_ary_("a", " ", "=", " ", "b")
, fx.tkn_itm_(";")
)
);
}
// @Test public void Err_NotNamed() {
// fx.tst_Err("=", GfmlOutCmds.DatTkn_notFound_Err_());
// }
// @Test public void Err_NotValued() {
// fx.tst_Err("a=;", GfmlOutCmds.elmKey_notValued_Err());
// }
}

View File

@@ -1,51 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z111_core_comment0_tst {
GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdeInline_lxr()
, GfmlDocLxrs.Whitespace_lxr() // add whitespace to make sure it has no effect
, GfmlDocLxrs.Comment0_lxr() // bgn=// end=\n
);
}
@Test public void Basic() {
fx.tst_Doc("//a" + String_.Lf);
fx.tst_Tkn("//a" + String_.Lf
, fx.tkn_grp_ary_("//", "a", String_.Lf)
);
}
@Test public void Data() {
fx.tst_Doc("a;//b" + String_.Lf, fx.nde_().Atru_("a"));
fx.tst_Tkn("a;//b" + String_.Lf
, fx.tkn_grp_
( fx.tkn_grp_ary_("a")
, fx.tkn_itm_(";"))
, fx.tkn_grp_ary_("//", "b", String_.Lf)
);
}
// @Test public void DanglingBgn() {
// try {
// fx.tst_Err("//", GfmlOutCmds.Frame_danglingBgn_Err_());
// Tfds.Fail_expdError();
// }
// catch (Exception exc) {Err_.Noop(exc);}
// }
}

View File

@@ -1,69 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z112_core_comment1_tst {
GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdeInline_lxr()
, GfmlDocLxrs.Comment1_lxr()
);
}
@Test public void Basic() {
fx.tst_Doc("/*a*/");
fx.tst_Tkn("/*a*/"
, fx.tkn_grp_ary_("/*", "a", "*/")
);
}
@Test public void Data() {
fx.tst_Doc("a;/*b*/", fx.nde_().Atru_("a"));
fx.tst_Tkn("a;/*b*/"
, fx.tkn_grp_
( fx.tkn_grp_ary_("a")
, fx.tkn_itm_(";"))
, fx.tkn_grp_ary_("/*", "b", "*/")
);
}
@Test public void IgnoreWs() {
fx.tst_Tkn("/* b c */"
, fx.tkn_grp_ary_("/*", " b c ", "*/")
);
}
@Test public void EscapeBgn() {
fx.tst_Tkn("/* /*/* */"
, fx.tkn_grp_ary_("/*", " ", "/*/*", " ", "*/")
);
}
@Test public void EscapeEnd() {
fx.tst_Tkn("/* */*/ */"
, fx.tkn_grp_ary_("/*", " ", "*/*/", " ", "*/")
);
}
@Test public void Nest() {
fx.tst_Tkn("/* b0 /* c */ b1 */"
, fx.tkn_grp_
( fx.tkn_itm_("/*")
, fx.tkn_itm_(" b0 ")
, fx.tkn_grp_ary_("/*", " c ", "*/")
, fx.tkn_itm_(" b1 ")
, fx.tkn_itm_("*/")
)
);
}
}

View File

@@ -1,41 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z120_quotes_eval0_tst {
GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdeInline_lxr()
, GfmlDocLxrs.Eval0_lxr()
);
}
@Test public void Basic() {
fx.tst_Doc("<~t>;", fx.nde_().Atru_("\t"));
fx.tst_Tkn("<~t>;"
, fx.tkn_grp_
( fx.tkn_grp_
( fx.tkn_grp_ary_("<~", "t", ">"))
, fx.tkn_itm_(";")
)
);
}
@Test public void DoublingIsNotEscaping() {
fx.tst_Doc("<~t>>>;", fx.nde_().Atru_("\t").Atru_(">>")); // >> does not resolve to >
}
}

View File

@@ -1,52 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z121_quotes_quotes0_tst {
GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdeInline_lxr()
, GfmlDocLxrs.Quote0_lxr()
);
}
@Test public void Basic() {
fx.tst_Doc("'abc';", fx.nde_().Atru_("abc"));
fx.tst_Tkn("'abc';"
, fx.tkn_grp_
( fx.tkn_grp_
( fx.tkn_grp_ary_("'", "abc", "'"))
, fx.tkn_itm_(";")
)
);
}
@Test public void Escape() {
fx.tst_Doc("'a''b';", fx.nde_().Atru_("a'b"));
fx.tst_Tkn("'a''b';"
, fx.tkn_grp_
( fx.tkn_grp_
( fx.tkn_grp_ary_("'", "a", "''", "b", "'"))
, fx.tkn_itm_(";")
)
);
}
@Test public void ManyAtrs_LastQuoted() { // bugfix
fx.ini_RootLxr_Add(GfmlDocLxrs.Whitespace_lxr());
fx.tst_Doc("a 'b';", fx.nde_().Atru_("a").Atru_("b"));
}
}

View File

@@ -1,64 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z122_quotes_quote0_eval0_tst {
GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdeInline_lxr()
, GfmlDocLxrs.Quote0_Eval0_lxr()
);
}
@Test public void Basic() {
fx.tst_Doc("'a<~t>b';", fx.nde_().Atru_("a\tb"));
fx.tst_Tkn("'a<~t>b';"
, fx.tkn_grp_
( fx.tkn_grp_
( fx.tkn_grp_
( fx.tkn_itm_("'")
, fx.tkn_itm_("a")
, fx.tkn_grp_ary_("<~", "t", ">")
, fx.tkn_itm_("b")
, fx.tkn_itm_("'")
))
, fx.tkn_itm_(";")
)
);
}
@Test public void QuoteInside() {
fx.tst_Doc("'a<~'t'>b';", fx.nde_().Atru_("a\tb"));
fx.tst_Tkn("'a<~'t'>b';"
, fx.tkn_grp_
( fx.tkn_grp_
( fx.tkn_grp_
( fx.tkn_itm_("'")
, fx.tkn_itm_("a")
, fx.tkn_grp_
( fx.tkn_itm_("<~")
, fx.tkn_grp_ary_("'", "t", "'")
, fx.tkn_itm_(">")
)
, fx.tkn_itm_("b")
, fx.tkn_itm_("'")
))
, fx.tkn_itm_(";")
)
);
}
}

View File

@@ -1,40 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z123_quotes_quoteBlock_tst {
GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdeInline_lxr()
, GfmlDocLxrs.QuoteBlock_lxr()
);
}
@Test public void Basic() {
fx.tst_Doc("|'abc'|;", fx.nde_().Atru_("abc"));
}
@Test public void Escape_bgn() {
fx.tst_Doc("|'a|'|'b'|;", fx.nde_().Atru_("a|'b"));
}
@Test public void Escape_end() {
fx.tst_Doc("|'a'|'|b'|;", fx.nde_().Atru_("a'|b"));
}
@Test public void Nest() {
fx.tst_Doc("|'a|'-'|b'|;", fx.nde_().Atru_("a-b"));
}
}

View File

@@ -1,61 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z124_quotes_quoteFold_tst {
GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdeInline_lxr()
, GfmlDocLxrs.QuoteFold_lxr()
);
}
@Test public void Quote() {
fx.tst_Doc("^'a b'^;", fx.nde_().Atru_("a b"));
}
@Test public void Tab() {
fx.tst_Doc("^'a\tb'^;", fx.nde_().Atru_("ab"));
fx.tst_Tkn("^'a\tb'^;"
, fx.tkn_grp_
( fx.tkn_grp_
( fx.tkn_grp_ary_("^'", "a", "\t", "b", "'^"))
, fx.tkn_itm_(";"))
);
}
@Test public void NewLine() {
fx.tst_Doc(String_.Concat("^'a", String_.CrLf, "b'^;"), fx.nde_().Atru_("ab"));
}
@Test public void Eval() {
fx.tst_Doc("^'a<~t>b'^;", fx.nde_().Atru_("a\tb"));
}
@Test public void Nest() {
fx.tst_Doc("^'a^'-'^b'^;", fx.nde_().Atru_("a-b"));
}
@Test public void EscapeBgn() {
fx.tst_Doc("^'a^'^'b'^;", fx.nde_().Atru_("a^'b"));
}
@Test public void EscapeEnd() {
fx.tst_Doc("^'a'^'^b'^;", fx.nde_().Atru_("a'^b"));
}
@Test public void Comment0() {
fx.tst_Doc(String_.Concat("^'a//comment", String_.CrLf, "b'^;"), fx.nde_().Atru_("ab"));
}
@Test public void Comment1() {
fx.tst_Doc("^'a/*comment*/b'^;", fx.nde_().Atru_("ab"));
}
}

View File

@@ -1,65 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z151_ndeSubs_basic_tst {
GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdeBodyBgn_lxr()
, GfmlDocLxrs.NdeBodyEnd_lxr()
);
}
@Test public void Basic() {
fx.tst_Doc("{}", fx.nde_());
fx.tst_Tkn("{}"
, fx.tkn_grp_ary_("{", "}")
);
}
@Test public void Many() {
fx.tst_Doc("{}{}", fx.nde_(), fx.nde_());
}
@Test public void Nested() {
fx.tst_Doc("{{}}"
, fx.nde_().Subs_
( fx.nde_())
);
}
@Test public void NestedMany() {
fx.tst_Doc("{{}{}}"
, fx.nde_().Subs_
( fx.nde_()
, fx.nde_()
));
}
@Test public void Complex() {
fx.tst_Doc(String_.Concat
( "{"
, "{"
, "{}"
, "}"
, "{}"
, "}"
)
, fx.nde_().Subs_
( fx.nde_().Subs_
( fx.nde_())
, fx.nde_()
));
}
}

View File

@@ -1,68 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z152_ndeSubs_data_tst {
GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdeBodyBgn_lxr()
, GfmlDocLxrs.NdeBodyEnd_lxr()
, GfmlDocLxrs.NdeInline_lxr()
, GfmlDocLxrs.Whitespace_lxr()
);
}
@Test public void ToInline() {
fx.tst_Doc("{a;}"
, fx.nde_().Subs_
( fx.nde_().Atru_("a"))
);
}
@Test public void ToInline_many() {
fx.tst_Doc("{a b;}"
, fx.nde_().Subs_
( fx.nde_().Atru_("a").Atru_("b"))
);
}
@Test public void ToBody() {
fx.tst_Doc("{a{}}"
, fx.nde_().Subs_
( fx.nde_().Atru_("a"))
);
}
@Test public void ToBody_many() {
fx.tst_Doc("{a b{}}"
, fx.nde_().Subs_
( fx.nde_().Atru_("a").Atru_("b"))
);
}
@Test public void ToBody_manyNest() {
fx.tst_Doc("a{b;}"
, fx.nde_().Atru_("a").Subs_
( fx.nde_().Atru_("b"))
);
}
@Test public void ToBody_many2() {
fx.tst_Doc("a{b{c;}}"
, fx.nde_().Atru_("a").Subs_
( fx.nde_().Atru_("b").Subs_
( fx.nde_().Atru_("c"))
)
);
}
}

View File

@@ -1,46 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z161_ndeHdrs_inline_tst {
GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdeHeader_lxr()
, GfmlDocLxrs.NdeInline_lxr()
, GfmlDocLxrs.Whitespace_lxr()
);
}
@Test public void Basic() {
fx.tst_Doc("a:;", fx.nde_().Hnd_("a"));
fx.tst_Tkn("a:;"
, fx.tkn_grp_ary_("a", ":", ";")
);
}
@Test public void Many() {
fx.tst_Doc("a:;b:;"
, fx.nde_().Hnd_("a")
, fx.nde_().Hnd_("b")
);
}
@Test public void Ws() {
fx.tst_Tkn("a : ;"
, fx.tkn_grp_ary_("a", " ", ":", " ", ";")
);
}
}

View File

@@ -1,33 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z162_ndeHdrs_err_tst {
GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdeHeader_lxr()
);
}
@Test public void NotNamed() {
fx.tst_Err(":", UsrMsg_mok.new_(GfmlUsrMsgs.fail_DatTkn_notFound()));
}
@Test public void Dangling() {
fx.tst_Err("a{", UsrMsg_mok.new_(GfmlUsrMsgs.fail_Frame_danglingBgn()));
}
}

View File

@@ -1,52 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z163_ndeHdrs_body_tst {
GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdeHeader_lxr()
, GfmlDocLxrs.NdeBodyBgn_lxr()
, GfmlDocLxrs.NdeBodyEnd_lxr()
);
}
@Test public void Basic() {
fx.tst_Doc("a:{}", fx.nde_().Hnd_("a"));
}
@Test public void Many() {
fx.tst_Doc("a:{}b:{}"
, fx.nde_().Hnd_("a")
, fx.nde_().Hnd_("b")
);
}
@Test public void Nested() {
fx.tst_Doc("a:{b:{}}"
, fx.nde_().Hnd_("a").Subs_
( fx.nde_().Hnd_("b"))
);
}
@Test public void NestedMany() {
fx.tst_Doc("a:{b:{}c:{}}"
, fx.nde_().Hnd_("a").Subs_
( fx.nde_().Hnd_("b")
, fx.nde_().Hnd_("c")
)
);
}
}

View File

@@ -1,53 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z164_hdeHdrs_data_tst {
GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.Whitespace_lxr()
, GfmlDocLxrs.NdeHeader_lxr()
, GfmlDocLxrs.NdeInline_lxr()
, GfmlDocLxrs.NdeBodyBgn_lxr()
, GfmlDocLxrs.NdeBodyEnd_lxr()
);
}
@Test public void Bas1() {
fx.tst_Tkn("a:b;"
, fx.tkn_grp_
( fx.tkn_itm_("a")
, fx.tkn_itm_(":")
, fx.tkn_grp_ary_("b")
, fx.tkn_itm_(";")
));
}
@Test public void Basic3() {
fx.tst_Tkn("a:b{c;}"
, fx.tkn_grp_
( fx.tkn_itm_("a")
, fx.tkn_itm_(":")
, fx.tkn_grp_ary_("b")
, fx.tkn_itm_("{")
, fx.tkn_grp_
( fx.tkn_grp_ary_("c")
, fx.tkn_itm_(";"))
, fx.tkn_itm_("}")
));
}
}

View File

@@ -1,65 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z181_ndeDots_basic_tst {
GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdeDot_lxr()
, GfmlDocLxrs.NdeInline_lxr()
, GfmlDocLxrs.NdeBodyBgn_lxr()
, GfmlDocLxrs.NdeBodyEnd_lxr()
);
}
@Test public void One() {
fx.tst_Doc("{a.b;c;}"
, fx.nde_().ChainId_(0).Subs_
( fx.nde_().Hnd_("a").ChainId_(1).Subs_
( fx.nde_().Hnd_("b").ChainId_(1)
)
, fx.nde_().Atru_("c").ChainId_(0)
));
fx.tst_Tkn("{a.b;c;}"
, fx.tkn_grp_
( fx.tkn_itm_("{")
, fx.tkn_grp_
( fx.tkn_itm_("a")
, fx.tkn_itm_(".")
, fx.tkn_grp_
( fx.tkn_itm_("b")
, fx.tkn_itm_(";"))
)
, fx.tkn_grp_
( fx.tkn_grp_ary_("c")
, fx.tkn_itm_(";"))
, fx.tkn_itm_("}")
));
}
@Test public void Many() {
fx.tst_Doc("{a.b.c.d;e;}"
, fx.nde_().ChainId_(0).Subs_
( fx.nde_().Hnd_("a").ChainId_(1).Subs_
( fx.nde_().Hnd_("b").ChainId_(1).Subs_
( fx.nde_().Hnd_("c").ChainId_(1).Subs_
( fx.nde_().Hnd_("d").ChainId_(1)
)))
, fx.nde_().ChainId_(0).Atru_("e")
));
}
}

View File

@@ -1,73 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z182_ndeDots_subs_tst {
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdeDot_lxr()
, GfmlDocLxrs.NdeInline_lxr()
, GfmlDocLxrs.NdeBodyBgn_lxr()
, GfmlDocLxrs.NdeBodyEnd_lxr()
);
} GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Test public void Basic() {
fx.tst_Doc("{a.b{}z;}"
, fx.nde_().ChainId_(0).Subs_
( fx.nde_().Hnd_("a").ChainId_(1).Subs_
( fx.nde_().Hnd_("b").ChainId_(1)
)
, fx.nde_().Atru_("z").ChainId_(0)
));
}
@Test public void Nest() {
fx.ini_RootLxr_Add(GfmlDocLxrs.NdeHeader_lxr());
fx.tst_Doc("{a.b.c{d:e;}z;}" // shorthand of {a{b{c{d:e;}}}}
, fx.nde_().ChainId_(0).Subs_
( fx.nde_().Hnd_("a").ChainId_(1).Subs_
( fx.nde_().Hnd_("b").ChainId_(1).Subs_
( fx.nde_().Hnd_("c").ChainId_(1).Subs_
( fx.nde_().Hnd_("d").ChainId_(0).Atru_("e")
)
)
)
, fx.nde_().ChainId_(0).Atru_("z")
));
}
@Test public void Chain() {
fx.tst_Doc("{a.b.c;z;}"
, fx.nde_().ChainId_(0).Subs_
( fx.nde_().Hnd_("a").ChainId_(1).Subs_
( fx.nde_().Hnd_("b").ChainId_(1).Subs_
( fx.nde_().Hnd_("c").ChainId_(1))
)
, fx.nde_().ChainId_(0).Atru_("z")
));
}
@Test public void NdeHdr() {
fx.ini_RootLxr_Add(GfmlDocLxrs.NdeHeader_lxr());
fx.tst_Doc("{a:b.c;z;}"
, fx.nde_().ChainId_(0).Subs_
( fx.nde_().Hnd_("a").Atru_("b").ChainId_(1).Subs_
( fx.nde_().Hnd_("c").ChainId_(1)//.Subs_
// ( fx.nde_().Hnd_("c"))
)
, fx.nde_().Atru_("z").ChainId_(0)
));
}
}

View File

@@ -1,140 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z183_ndeDots_parens_tst {
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdeDot_lxr()
, GfmlDocLxrs.NdeInline_lxr()
, GfmlDocLxrs.NdeBodyBgn_lxr()
, GfmlDocLxrs.NdeBodyEnd_lxr()
, GfmlDocLxrs.NdeHdrBgn_lxr()
, GfmlDocLxrs.NdeHdrEnd_lxr()
);
} GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Test public void Basic() {
fx.tst_Doc("{a.b(c);z;}"
, fx.nde_().ChainId_(0).Subs_
( fx.nde_().Hnd_("a").ChainId_(1).Subs_
( fx.nde_().Hnd_("b").ChainId_(1).Atru_("c")
)
, fx.nde_().ChainId_(0).Atru_("z")
));
}
@Test public void Basic_tkn() {
//A_('1');
fx.tst_Tkn("a(c);"
, fx.tkn_grp_
( fx.tkn_itm_("a"), fx.tkn_itm_("(")
, fx.tkn_grp_(fx.tkn_itm_("c"))
, fx.tkn_itm_(")"), fx.tkn_itm_(";")
)
);
}
@Test public void Basic2_tkn() {
fx.tst_Tkn("a.b(c);"
, fx.tkn_grp_
( fx.tkn_itm_("a"), fx.tkn_itm_(".")
, fx.tkn_grp_
( fx.tkn_itm_("b"), fx.tkn_itm_("("), fx.tkn_grp_ary_("c"), fx.tkn_itm_(")"), fx.tkn_itm_(";")
)
)
);
}
@Test public void Many() {
fx.ini_RootLxr_Add(GfmlDocLxrs.Whitespace_lxr());
fx.tst_Doc("{a.b(c d e);z;}"
, fx.nde_().ChainId_(0).Subs_
( fx.nde_().Hnd_("a").ChainId_(1).Subs_
( fx.nde_().Hnd_("b").ChainId_(1).Atru_("c").Atru_("d").Atru_("e")
)
, fx.nde_().ChainId_(0).Atru_("z")
));
}
// @Test public void Many2() {
// fx.ini_RootLxr_Add(GfmlDocLxrs.Whitespace_lxr());
// fx.tst_Doc("{a.b(c){d();}}"
// , fx.nde_().ChainId_(0).Subs_
// ( fx.nde_().Hnd_("a").ChainId_(1).Subs_
// ( fx.nde_().Hnd_("b").ChainId_(1).Atru_("c").Subs_
// ( fx.nde_().Hnd_("d")
// )
// )
// ));
// }
@Test public void Chain() {
fx.ini_RootLxr_Add(GfmlDocLxrs.Whitespace_lxr());
fx.tst_Doc("{a.b(c).d(e);z;}"
, fx.nde_().ChainId_(0).Subs_
( fx.nde_().Hnd_("a").ChainId_(1).Subs_
( fx.nde_().Hnd_("b").ChainId_(1).Atru_("c").Subs_
( fx.nde_().Hnd_("d").ChainId_(1).Atru_("e")
)
)
, fx.nde_().ChainId_(0).Atru_("z")
));
}
@Test public void Nest() {
fx.tst_Doc("{a.b(c.d);z;}"
, fx.nde_().ChainId_(0).Subs_
( fx.nde_().Hnd_("a").ChainId_(1).Subs_
( fx.nde_().Hnd_("b").ChainId_(1).KeyedSubObj_(false).Subs_
( fx.nde_().Hnd_("c").ChainId_(2).KeyedSubObj_(true).Subs_
( fx.nde_().Hnd_("d").ChainId_(2).KeyedSubObj_(false)
)
)
)
, fx.nde_().Atru_("z")
));
}
@Test public void Nest_longer() {
fx.tst_Doc("{a.b.c(d.e.f);z;}"
, fx.nde_().ChainId_(0).Subs_
( fx.nde_().Hnd_("a").ChainId_(1).Subs_
( fx.nde_().Hnd_("b").KeyedSubObj_(false).ChainId_(1).Subs_
( fx.nde_().Hnd_("c").KeyedSubObj_(false).ChainId_(1).Subs_
( fx.nde_().Hnd_("d").KeyedSubObj_(true).ChainId_(2).Subs_
( fx.nde_().Hnd_("e").KeyedSubObj_(false).ChainId_(2).Subs_
( fx.nde_().Hnd_("f").KeyedSubObj_(false).ChainId_(2)
)
)
)
)
)
, fx.nde_().Atru_("z")
));
}
@Test public void Nest_deeper() {
fx.tst_Doc("{a.b(c.d(e.f));z;}"
, fx.nde_().ChainId_(0).Subs_
( fx.nde_().Hnd_("a").ChainId_(1).Subs_
( fx.nde_().Hnd_("b").KeyedSubObj_(false).ChainId_(1).Subs_
( fx.nde_().Hnd_("c").KeyedSubObj_(true).ChainId_(2).Subs_
( fx.nde_().Hnd_("d").KeyedSubObj_(false).ChainId_(2).Subs_
( fx.nde_().Hnd_("e").KeyedSubObj_(true).ChainId_(3).Subs_
( fx.nde_().Hnd_("f").KeyedSubObj_(false).ChainId_(3)
)
)
)
)
)
, fx.nde_().Atru_("z")
));
}
}

View File

@@ -1,47 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z184_ndeDots_atrSpr_tst {
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdeDot_lxr()
, GfmlDocLxrs.NdeInline_lxr()
, GfmlDocLxrs.NdeBodyBgn_lxr()
, GfmlDocLxrs.NdeBodyEnd_lxr()
, GfmlDocLxrs.NdeHdrBgn_lxr()
, GfmlDocLxrs.NdeHdrEnd_lxr()
, GfmlDocLxrs.AtrSpr_lxr()
);
} GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Test public void NestMult() {
fx.ini_RootLxr_Add(GfmlDocLxrs.AtrSpr_lxr());
fx.tst_Doc("{a.b(c.d,e.f);z;}"
, fx.nde_().ChainId_(0).Subs_
( fx.nde_().Hnd_("a").ChainId_(1).Subs_
( fx.nde_().Hnd_("b").ChainId_(1).KeyedSubObj_(false).Subs_
( fx.nde_().Hnd_("c").ChainId_(2).KeyedSubObj_(true).Subs_
( fx.nde_().Hnd_("d").ChainId_(2).KeyedSubObj_(false))
, fx.nde_().Hnd_("e").ChainId_(3).KeyedSubObj_(true).Subs_
( fx.nde_().Hnd_("f").ChainId_(3).KeyedSubObj_(false))
)
)
, fx.nde_().ChainId_(0).Atru_("z")
));
}
}

View File

@@ -1,120 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z191_ndeProps_basic_tst {
GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdePropBgn_lxr()
, GfmlDocLxrs.NdePropEnd_lxr()
, GfmlDocLxrs.NdeBodyBgn_lxr()
, GfmlDocLxrs.NdeBodyEnd_lxr()
, GfmlDocLxrs.NdeHeader_lxr()
, GfmlDocLxrs.NdeInline_lxr()
);
}
@Test public void Basic() {
fx.tst_Doc("a:[b]{}"
, fx.nde_().Hnd_("a").Subs_
( fx.nde_().KeyedSubObj_().Atru_("b"))
);
}
@Test public void Basic_empty() {
fx.tst_Tkn("[];"
, fx.tkn_grp_
( fx.tkn_grp_ary_("[", "]")
, fx.tkn_itm_(";")
));
}
@Test public void Hdr() {
fx.tst_Tkn("a[];"
, fx.tkn_grp_
( fx.tkn_grp_ary_("a")
, fx.tkn_grp_ary_("[", "]")
, fx.tkn_itm_(";")
));
}
@Test public void WithInnerNde() {
fx.tst_Doc("a:[b]{c;}"
, fx.nde_().Hnd_("a").Subs_
( fx.nde_().KeyedSubObj_().Atru_("b")
, fx.nde_().Atru_("c")
));
}
@Test public void DoesNotUsurpDatTknForName() {
fx.tst_Doc("a:b[c]{}"
, fx.nde_().Hnd_("a").Atru_("b").Subs_
( fx.nde_().KeyedSubObj_().Atru_("c")
));
}
@Test public void NoHeader_body() {
fx.tst_Doc("a[b]{}"
, fx.nde_().Atru_("a").Subs_
( fx.nde_().KeyedSubObj_().Atru_("b")
));
}
@Test public void NoHeader_inline() {
fx.tst_Doc("a[b];"
, fx.nde_().Atru_("a").Subs_
( fx.nde_().KeyedSubObj_().Atru_("b")
));
}
@Test public void Nesting() {
fx.tst_Doc("a:[b:;]{}"
, fx.nde_().Hnd_("a").Subs_
( fx.nde_().KeyedSubObj_().Subs_
( fx.nde_().Hnd_("b"))
));
}
@Test public void Nesting2() {
fx.tst_Doc("a:[b{}]{}"
, fx.nde_().Hnd_("a").Subs_
( fx.nde_().KeyedSubObj_().Atru_("b")
));
}
@Test public void CanBeKeyed_header() {
fx.ini_RootLxr_Add(GfmlDocLxrs.ElmKey_lxr());
fx.tst_Doc("a:b=[c];"
, fx.nde_().Hnd_("a").Subs_
( fx.nde_().KeyedSubObj_().Key_("b").Atru_("c")
));
}
@Test public void CanBeKeyed2_inline() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.Whitespace_lxr()
, GfmlDocLxrs.ElmKey_lxr()
);
fx.tst_Doc("a b=[c];"
, fx.nde_().Atru_("a").Subs_
( fx.nde_().KeyedSubObj_().Key_("b").Atru_("c")
));
}
@Test public void Sole() {
fx.ini_RootLxr_Add(GfmlDocLxrs.Whitespace_lxr());
fx.tst_Doc("[a b]"
, fx.nde_().KeyedSubObj_().Atru_("a").Atru_("b"));
}
@Test public void Nest1() {
fx.ini_RootLxr_Add(GfmlDocLxrs.Whitespace_lxr());
fx.tst_Doc("[a [b]]"
, fx.nde_().Atru_("a").Subs_
( fx.nde_().KeyedSubObj_().Atru_("b")
));
}
}

View File

@@ -1,39 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z192_ndeProps_dots_tst {
GfmlParse_fxt fx = GfmlParse_fxt.new_();
@Before public void setup() {
fx.ini_RootLxr_Add
( GfmlDocLxrs.NdeDot_lxr()
, GfmlDocLxrs.NdeInline_lxr()
, GfmlDocLxrs.NdeBodyBgn_lxr()
, GfmlDocLxrs.NdeBodyEnd_lxr()
, GfmlDocLxrs.NdePropBgn_lxr()
, GfmlDocLxrs.NdePropEnd_lxr()
);
}
@Test public void Stress() {
fx.tst_Doc("a.b[c];"
, fx.nde_().Hnd_("a").Subs_
( fx.nde_().Hnd_("b").Subs_
( fx.nde_().KeyedSubObj_().Atru_("c"))
));
}
}

View File

@@ -1,66 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z400_GfmlTypeMakr_tst {
@Before public void setup() {
makr = GfmlTypeMakr.new_();
} GfmlTypeMakr makr; GfmlType type; GfmlTypeCompiler_fxt fx = GfmlTypeCompiler_fxt.new_();
@Test public void MakeSubType() {
type = makr.MakeSubType("point", "x", "y");
fx.tst_Type
( fx.typ_().Key_("point").Subs_
( fx.fld_().ini_atr_("x").TypeKey_(GfmlType_.StringKey)
, fx.fld_().ini_atr_("y").TypeKey_(GfmlType_.StringKey)
)
, GfmlTyp_mok.type_(type)
);
tst_XtoAry(makr, "point");
}
@Test public void MakeSubTypeAsOwner() {
type = makr.MakeSubTypeAsOwner("item");
fx.tst_Type
( fx.typ_().Key_("item")
, GfmlTyp_mok.type_(type)
);
tst_Owner(makr, "item");
tst_XtoAry(makr, "item");
}
@Test public void MakeSubTypeAsOwner_MakeSubType() {
type = makr.MakeSubTypeAsOwner("item");
makr.MakeSubType("pos", "x", "y");
fx.tst_Type
( fx.typ_().Key_("item").Subs_
( fx.fld_().Name_("pos").TypeKey_("item/pos"))
, GfmlTyp_mok.type_(type)
);
tst_Owner(makr, "item");
tst_XtoAry(makr, "item", "item/pos");
}
void tst_Owner(GfmlTypeMakr typeMakr, String expdKey) {
Tfds.Eq(expdKey, typeMakr.Owner().Key());
}
void tst_XtoAry(GfmlTypeMakr typeMakr, String... expdAry) {
GfmlType[] actlTypeAry = typeMakr.Xto_bry();
String[] actlAry = new String[actlTypeAry.length];
for (int i = 0; i < actlAry.length; i++) {
actlAry[i] = actlTypeAry[i].Key();
}
Tfds.Eq_ary(expdAry, actlAry);
}
}

View File

@@ -1,65 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z401_types_compile_basic_tst {
@Before public void setup() {
fx.run_InitPragma(fx.Regy(), GfmlPragmaType.new_());
} GfmlTypeCompiler_fxt fx = GfmlTypeCompiler_fxt.new_();
@Test public void Basic() {
fx.tst_Compile
( fx.nde_().Atrs_("point", "gfml.point").Subs_
( fx.nde_().Atru_("x")
, fx.nde_().Atru_("y")
)
, fx.typ_().Name_("point").Key_("gfml.point").Atrs_("x", "y")
);
}
@Test public void Nest() {
fx.tst_Compile
( fx.nde_().Atrs_("item", "gfml.item").Subs_
( fx.nde_().Atru_("pos").Atrk_("type", "gfml.item.point")
)
, fx.typ_().Name_("item").Key_("gfml.item").Subs_
( fx.fld_().Name_("pos").TypeKey_("gfml.item.point")
)
);
}
@Test public void NestMany() {
fx.tst_Compile
( fx.nde_().Atrs_("item", "gfml.item").Subs_
( fx.nde_().Atru_("pos").Atrk_("type", "gfml.item.point")
, fx.nde_().Atru_("size").Atrk_("type", "gfml.item.size")
)
, fx.typ_().Name_("item").Key_("gfml.item").Subs_
( fx.fld_().Name_("pos").TypeKey_("gfml.item.point")
, fx.fld_().Name_("size").TypeKey_("gfml.item.size")
)
);
}
@Test public void Recurse() {
fx.tst_Compile
( fx.nde_().Atrs_("widget", "gfml.widget").Subs_
( fx.nde_().Atru_("widget").Atrk_("type", "gfml.widget")
)
, fx.typ_().Name_("widget").Key_("gfml.widget").Subs_
( fx.fld_().Name_("widget").TypeKey_("gfml.widget")
)
);
}
}

View File

@@ -1,63 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z402_types_compile_implicit_tst {
@Before public void setup() {
fx.run_InitPragma(fx.Regy(), GfmlPragmaType.new_());
} GfmlTypeCompiler_fxt fx = GfmlTypeCompiler_fxt.new_();
@Test public void Fld_typeKey_leaf() {
fx.tst_Compile
( fx.nde_().Atrs_("point", "gfml.point").Subs_
( fx.nde_().Atru_("x").Atrk_("type", "gfml.int") // explicit
, fx.nde_().Atru_("y") // implicit: GfmlType_.String
)
, fx.typ_().Name_("point").Key_("gfml.point").Subs_
( fx.fld_().Name_("x").TypeKey_("gfml.int")
, fx.fld_().Name_("y").TypeKey_("gfml.String")
));
}
@Test public void Fld_typeKey_nest() {
fx.tst_Compile
( fx.nde_().Atrs_("rect", "gfml.rect").Subs_
( fx.nde_().Atru_("pos").Atrk_("type", "gfml.point").Subs_ // explicit
( fx.nde_().Atru_("x")
, fx.nde_().Atru_("y")
)
, fx.nde_().Atru_("size").Subs_ // implicit: gfml.rect.size; (needs to have subs)
( fx.nde_().Atru_("w")
, fx.nde_().Atru_("h")
)
)
, fx.typ_().Name_("rect").Key_("gfml.rect").Subs_
( fx.fld_().Name_("pos").TypeKey_("gfml.point")
, fx.fld_().Name_("size").TypeKey_("gfml.rect/size")
));
}
@Test public void Typ_key() {
fx.tst_Compile
( fx.nde_().Atrs_("point", "gfml.point") // explicit: gfml.point
, fx.typ_().Name_("point").Key_("gfml.point")
);
fx.tst_Compile
( fx.nde_().Atrs_("point") // implicit: point
, fx.typ_().Name_("point").Key_("point")
);
}
}

View File

@@ -1,64 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z403_types_compile_default_tst {
@Before public void setup() {
fx.run_InitPragma(fx.Regy(), GfmlPragmaType.new_());
} GfmlTypeCompiler_fxt fx = GfmlTypeCompiler_fxt.new_();
@Test public void Basic() {
fx.tst_Compile
( fx.nde_().Atrs_("point", "gfml.point").Subs_
( fx.nde_().Atru_("x").Atrk_("default", "10")
, fx.nde_().Atru_("y")
)
, fx.typ_().Name_("point").Key_("gfml.point").Subs_
( fx.fld_().Name_("x").Default_("10")
, fx.fld_().Name_("y").Default_(GfmlTkn_.NullRaw)
));
}
@Test public void Nde() {
fx.tst_Compile
( fx.nde_().Atrs_("rect", "gfml.rect").Subs_
( fx.nde_().Atru_("point").Subs_
( fx.nde_().Key_("default").Atrk_("x", "1").Atrk_("y", "2") // NOTE: naming b/c unnamed attribs are not returned in SubKeys
))
, fx.typ_().Name_("rect").Key_("gfml.rect").Subs_
( fx.fld_().Name_("point").DefaultTkn_
( ndek_("point", atr_("x", "1"), atr_("y", "2")))
));
}
@Test public void Nde_unnamed() {
fx.tst_Compile
( fx.nde_().Atrs_("rect", "gfml.rect").Subs_
( fx.nde_().Atru_("point").Subs_
( fx.nde_().Key_("").Atru_("1").Atru_("2")
))
, fx.typ_().Name_("rect").Key_("gfml.rect").Subs_
( fx.fld_().Name_("point").DefaultTkn_
( ndek_("point", atr_("", "1"), atr_("", "2")))
));
}
static GfmlAtr atr_(String key, String val) {return GfmlAtr.string_(GfmlTkn_.raw_(key), GfmlTkn_.raw_(val));}
static GfmlNde ndek_(String key, GfmlItm... subs) {
GfmlNde rv = GfmlNde.new_(GfmlTkn_.raw_(key), GfmlType_.Null, true);
for (GfmlItm sub : subs)
rv.SubObjs_Add(sub);
return rv;
}
}

View File

@@ -1,66 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z411_types_apply_atrs_basic_tst {
@Before public void setup() {
pointType = fx.typ_().Key_("point").Atrs_("x", "y", "z");
} GfmlTypeCompiler_fxt fx = GfmlTypeCompiler_fxt.new_(); GfmlTyp_mok pointType;
@Test public void Unnamed_one() {
fx.tst_Resolve
( pointType
, fx.nde_().Hnd_("point").Atru_("10")
, fx.nde_().Typ_("point").Atrk_("x", "10")
);
}
@Test public void Unnamed_three() {
fx.tst_Resolve
( pointType
, fx.nde_().Hnd_("point").Atrs_("10", "20", "30")
, fx.nde_().Typ_("point").Atrk_("x", "10").Atrk_("y", "20").Atrk_("z", "30")
);
}
@Test public void Keys_partial1() {
fx.tst_Resolve
( pointType
, fx.nde_().Hnd_("point").Atrk_("x", "10").Atrs_("20", "30")
, fx.nde_().Typ_("point").Atrk_("x", "10").Atrk_("y", "20").Atrk_("z", "30")
);
}
@Test public void Keys_partial2() {
fx.tst_Resolve
( pointType
, fx.nde_().Hnd_("point").Atrk_("x", "10").Atrk_("y", "20").Atru_("30")
, fx.nde_().Typ_("point").Atrk_("x", "10").Atrk_("y", "20").Atrk_("z", "30")
);
}
@Test public void OutOfOrder_z_1() {
fx.tst_Resolve
( pointType
, fx.nde_().Hnd_("point").Atrk_("z", "30").Atrs_("10", "20")
, fx.nde_().Typ_("point").Atrk_("z", "30").Atrk_("x", "10").Atrk_("y", "20")
);
}
@Test public void OutOfOrder_z_2() {
fx.tst_Resolve
( pointType
, fx.nde_().Hnd_("point").Atru_("10").Atrk_("z", "30").Atru_("20")
, fx.nde_().Typ_("point").Atrk_("x", "10").Atrk_("z", "30").Atrk_("y", "20")
);
}
}

View File

@@ -1,52 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z421_types_apply_ndes_basic_tst {
@Before public void setup() {
fx.Regy().Add(
fx.typ_().Key_("pos").Subs_
( GfmlFld_mok.new_().ini_atr_("x")
, GfmlFld_mok.new_().ini_atr_("y")
).XtoGfmlType());
fx.Regy().Add(
fx.typ_().Key_("rect").Subs_
( GfmlFld_mok.new_().ini_ndk_("pos", "pos")
).XtoGfmlType());
} GfmlTypeCompiler_fxt fx = GfmlTypeCompiler_fxt.new_();
@Test public void NamedNde_but_UnnamedAtr() {
fx.tst_Resolve
( fx.nde_().Hnd_("rect").Subs_
( fx.nde_().Key_("pos").Atrs_("1")
)
, fx.nde_().Hnd_("rect").Subs_
( fx.nde_().Typ_("pos").Atrk_("x", "1")
)
);
}
@Test public void UnnamedNde() {
fx.tst_Resolve
( fx.nde_().Hnd_("rect").Subs_
( fx.nde_().Key_(GfmlTkn_.NullRaw).Atrs_("1")
)
, fx.nde_().Hnd_("rect").Subs_
( fx.nde_().Typ_("pos").Atrk_("x", "1")
)
);
}
}

View File

@@ -1,74 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z422_types_apply_ndes_multi_tst {
@Before public void setup() {
fx.Regy().Add
( fx.typ_().Key_("pos").Subs_
( GfmlFld_mok.new_().ini_atr_("x")
, GfmlFld_mok.new_().ini_atr_("y")
).XtoGfmlType());
fx.Regy().Add
( fx.typ_().Key_("size").Subs_
( GfmlFld_mok.new_().ini_atr_("w")
, GfmlFld_mok.new_().ini_atr_("h")
).XtoGfmlType());
fx.Regy().Add
( fx.typ_().Key_("rect").Subs_
( GfmlFld_mok.new_().ini_ndk_("pos", "pos")
, GfmlFld_mok.new_().ini_ndk_("size", "size")
).XtoGfmlType());
} GfmlTypeCompiler_fxt fx = GfmlTypeCompiler_fxt.new_();
@Test public void Unnamed() {
fx.tst_Resolve
( fx.nde_().Hnd_("rect").Subs_
( fx.nde_().Key_(GfmlTkn_.NullRaw).Atrs_("1")
, fx.nde_().Key_(GfmlTkn_.NullRaw).Atrs_("3")
)
, fx.nde_().Typ_("rect").Subs_
( fx.nde_().Typ_("pos").Atrk_("x", "1")
, fx.nde_().Typ_("size").Atrk_("w", "3")
)
);
}
@Test public void Partial() {
fx.tst_Resolve
( fx.nde_().Hnd_("rect").Subs_
( fx.nde_().Key_("pos").Atrs_("1")
, fx.nde_().Key_(GfmlTkn_.NullRaw).Atrs_("3")
)
, fx.nde_().Typ_("rect").Subs_
( fx.nde_().Typ_("pos").Atrk_("x", "1")
, fx.nde_().Typ_("size").Atrk_("w", "3")
)
);
}
@Test public void OutOfOrder() {
fx.tst_Resolve
( fx.nde_().Hnd_("rect").Subs_
( fx.nde_().Key_("size").Atrs_("3")
, fx.nde_().Key_(GfmlTkn_.NullRaw).Atrs_("1")
)
, fx.nde_().Typ_("rect").Subs_
( fx.nde_().Typ_("size").Atrk_("w", "3")
, fx.nde_().Typ_("pos").Atrk_("x", "1")
)
);
}
}

View File

@@ -1,49 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z423_types_apply_ndes_misc_tst {
@Before public void setup() {
} GfmlTypeCompiler_fxt fx = GfmlTypeCompiler_fxt.new_();
@Test public void Recurse() {
fx.Regy().Add(
fx.typ_().Key_("item").Subs_
( GfmlFld_mok.new_().ini_atr_("key")
, GfmlFld_mok.new_().ini_ndk_("item", "item")
).XtoGfmlType());
fx.tst_Resolve
( fx.nde_().Hnd_("item").Atru_("1").Subs_
( fx.nde_().Hnd_("item").Atru_("2"))
, fx.nde_().Hnd_("item").Atrk_("key", "1").Subs_
( fx.nde_().Hnd_("item").Atrk_("key", "2")
));
}
@Test public void OwnerTypePrecedesTopLevel() {
GfmlTypeMakr makr = GfmlTypeMakr.new_();
GfmlType topLevelSize = makr.MakeSubType("size", "width", "height");
GfmlType rect = makr.MakeSubTypeAsOwner("rect");
GfmlType rectSize = makr.MakeSubType("size", "w", "h");
fx.Regy().Add(topLevelSize).Add(rect).Add(rectSize);
fx.tst_Resolve
( fx.nde_().Hnd_("rect").Subs_
( fx.nde_().Hnd_("size").Atru_("1").Atru_("2"))
, fx.nde_().Hnd_("rect").Subs_
( fx.nde_().Typ_("rect/size").Atrk_("w", "1").Atrk_("h", "2")
));
}
}

View File

@@ -1,67 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z424_types_apply_ndes_nest_tst {
@Before public void setup() {
GfmlTypeMakr makr = GfmlTypeMakr.new_();
makr.MakeRootType("gfml.item", "item");
makr.MakeSubType("pos", "x", "y");
fx.Regy().Add_ary(makr.Xto_bry());
} GfmlTypeCompiler_fxt fx = GfmlTypeCompiler_fxt.new_();
@Test public void InvokeByHnd() {
fx.tst_Resolve
( fx.nde_().Hnd_("gfml.item").Subs_
( fx.nde_().Hnd_("pos").Atrs_("10", "20"))
, fx.nde_().Typ_("gfml.item").Subs_
( fx.nde_().Typ_("gfml.item/pos").Atrk_("x", "10").Atrk_("y", "20")
));
}
@Test public void InvokeByTyp() {
fx.tst_Resolve
( fx.nde_().Hnd_("gfml.item").Subs_
( fx.nde_().Hnd_("gfml.item/pos").Atrs_("10", "20"))
, fx.nde_().Typ_("gfml.item").Subs_
( fx.nde_().Typ_("gfml.item/pos").Atrk_("x", "10").Atrk_("y", "20")
));
}
@Test public void NoInvokeByName() {
fx.tst_Resolve
( fx.nde_().Hnd_("gfml.item").Subs_
( fx.nde_().Hnd_("gfml.item").Atrs_("10", "20")) // item is not in .SubFlds, but is in regy
, fx.nde_().Typ_("gfml.item").Subs_
( fx.nde_().Typ_("gfml.item").Atrs_("10", "20")
));
}
@Test public void Name_subLevel() {
GfmlTypeMakr makr = GfmlTypeMakr.new_();
makr.MakeRootType("font", "size");
makr.MakeSubType("color", "name");
fx.Regy().Add_ary(makr.Xto_bry());
fx.tst_Resolve
( fx.nde_().Hnd_("color").Atru_("blue")
, fx.nde_().Typ_(GfmlType_.AnyKey).Atru_("blue")// confirm that subFlds in other types are not selectable by name; i.e.: must be font/color, not just color
);
}
@Test public void Unresolved() {
fx.tst_Resolve
( fx.nde_().Hnd_("").Atrs_("10", "20")
, fx.nde_().Typ_(GfmlType_.AnyKey).Atrs_("10", "20")
);
}
}

View File

@@ -1,53 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z441_types_parse_basic_tst {
GfmlTypeCompiler_fxt fx = GfmlTypeCompiler_fxt.new_();
@Test public void Null() {
fx.tst_Parse(String_.Concat
( "point:1;"
)
, fx.nde_().Hnd_("point").Typ_(GfmlType_.AnyKey).Atru_("1")
);
}
@Test public void Basic() {
fx.tst_Parse(String_.Concat
( "_type:{"
, "point {"
, "x;"
, "}"
, "}"
, "point:1;"
)
, fx.nde_().Hnd_("point").Typ_("point").Atrk_("x", "1")
);
}
@Test public void MultipleAtrs() {
fx.tst_Parse(String_.Concat
( "_type:{"
, "point {"
, "x; y;"
, "}"
, "}"
, "point:1 2;"
)
, fx.nde_().Hnd_("point").Typ_("point").Atrk_("x", "1").Atrk_("y", "2")
);
}
}

View File

@@ -1,101 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z442_types_parse_default_tst {
@Test public void Basic() {
fx.tst_Parse(String_.Concat
( "_type:{"
, "point {x;}"
, "}"
, "1;"
)
, fx.nde_().Hnd_("point").Typ_("point").Atrk_("x", "1")
);
}
@Test public void Pinned() {
fx.tst_Parse(String_.Concat
( "_type:{"
, "point {x;}"
, "}"
, "1;" // uses point, but should pin
, "2;" // uses pin
)
, fx.nde_().Hnd_("point").Typ_("point").Atrk_("x", "1")
, fx.nde_().Hnd_("point").Typ_("point").Atrk_("x", "2")
);
}
@Test public void Many() {
fx.tst_Parse(String_.Concat
( "_type:{"
, "point {x;}" // point is always pinned
, "size {w;}" // size is defined, but can only be invoked by hnd
, "}"
, "1;"
, "2;"
)
, fx.nde_().Hnd_("point").Typ_("point").Atrk_("x", "1")
, fx.nde_().Hnd_("point").Typ_("point").Atrk_("x", "2")
);
}
@Test public void Nested() {
fx.tst_Parse(String_.Concat
( "_type:{"
, "item {"
, "point {x; y;}"
, "}"
, "}"
, "{1 2;}"
)
, fx.nde_().Hnd_("item").Typ_("item").Subs_
( fx.nde_().Hnd_("point").Typ_("item/point").Atrk_("x", "1").Atrk_("y", "2")
)
);
}
@Test public void NestedWithAtr() {
fx.tst_Parse(String_.Concat
( "_type:{"
, "item {"
, "name;"
, "point {x; y;}"
, "}"
, "}"
, "1 {1 2;}"
// , "1 {point:{1 2}}" // breaks b/c point is not resolved as item/point
)
, fx.nde_().Hnd_("item").Typ_("item").Atrk_("name", "1").Subs_
( fx.nde_().Hnd_("point").Typ_("item/point").Atrk_("x", "1").Atrk_("y", "2")
)
);
}
//@Test
public void WithDefault() {
fx.tst_Parse(String_.Concat
( "_type:{"
, "point {"
, "x 1;"
, "y;"
, "}"
, "}"
, "2;"
)
, fx.nde_().Hnd_("point").Typ_("point").Atrk_("x", "1").Atrk_("y", "2")
);
}
GfmlTypeCompiler_fxt fx = GfmlTypeCompiler_fxt.new_();
}

View File

@@ -1,50 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z443_types_parse_keyd_tst {
@Test public void Basic() {
fx.tst_Parse(String_.Concat
( "[10 12];"
)
, fx.nde_().Subs_
( fx.nde_().Atru_("10").Atru_("12")
)
);
}
// @Test // FIX: IGNORE
public void KeydDefault() {
fx.tst_Parse(String_.Concat
( "_type:{"
, " rect {"
, " point [1 2];"
, " }"
, "}"
, "rect:;"
, "rect:;"
)
, fx.nde_().Typ_("rect").Subs_
( fx.nde_().Hnd_("point").Atru_("1").Atru_("2")
)
, fx.nde_().Typ_("rect").Subs_
( fx.nde_().Hnd_("point").Atru_("1").Atru_("2")
)
);
}
GfmlTypeCompiler_fxt fx = GfmlTypeCompiler_fxt.new_();
}

View File

@@ -1,41 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
class GfmlDefaultItem_fxt {
@gplx.Internal protected GfmlDefaultItem make_(String typeKey, String key, GfmlTkn val) {return GfmlDefaultItem.new_(typeKey, key, val);}
@gplx.Internal protected GfmlDefaultItem make_(String typeKey, String key, String val) {return GfmlDefaultItem.new_(typeKey, key, GfmlTkn_.raw_(val));}
@gplx.Internal protected void tst_Item(GfmlDefaultItem actl, GfmlDefaultItem expd) {
Tfds.Eq(expd.TypeKey(), actl.TypeKey());
Tfds.Eq(expd.Key(), actl.Key());
Tfds.Eq(GfmlFld_mok.XtoRaw(expd.Val()), GfmlFld_mok.XtoRaw(actl.Val()));
Tfds.Eq(Val_to_str_or_null(expd.ValPrev()), Val_to_str_or_null(actl.ValPrev()));
}
@gplx.Internal protected void tst_List(List_adp list, GfmlDefaultItem... expdAry) {
for (int i = 0; i < expdAry.length; i++) {
GfmlDefaultItem actl = (GfmlDefaultItem)list.Get_at(i);
GfmlDefaultItem expd = expdAry[i];
tst_Item(actl, expd);
}
Tfds.Eq(expdAry.length, list.Count());
}
String Val_to_str_or_null(GfmlObj gobj) {
GfmlTkn tkn = GfmlTkn_.as_(gobj);
return tkn == null ? null : tkn.Val();
}
public static GfmlDefaultItem_fxt new_() {return new GfmlDefaultItem_fxt();} GfmlDefaultItem_fxt() {}
}

View File

@@ -1,46 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z451_dflts_compile_tst {
@Before public void setup() {
regy = fx_typ.Regy();
pragma = GfmlPragmaDefault.new_();
fx_typ.run_InitPragma(regy, pragma);
} GfmlTypRegy regy; GfmlPragmaDefault pragma; GfmlDefaultItem_fxt fx = GfmlDefaultItem_fxt.new_(); GfmlTypeCompiler_fxt fx_typ = GfmlTypeCompiler_fxt.new_();
@Test public void Basic() {
GfmlNde gnde = fx_typ.run_Resolve(regy, "_default/type/atr"
, fx_typ.nde_().Atru_("x").Atru_("10")
);
GfmlDefaultItem actl = pragma.CompileItem(gnde, "point");
fx.tst_Item(actl, fx.make_("point", "x", "10"));
}
@Test public void Many() {
GfmlNde gnde = fx_typ.run_Resolve(regy, "_default/type"
, fx_typ.nde_().Atru_("point").Subs_
( fx_typ.nde_().Atrs_("x", "10")
, fx_typ.nde_().Atrs_("y", "20")
));
List_adp list = List_adp_.New();
pragma.CompileSubNde(gnde, list);
fx.tst_List(list
, fx.make_("point", "x", "10")
, fx.make_("point", "y", "20")
);
}
}

View File

@@ -1,96 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z452_dflts_exec_tst {
@Before public void setup() {
type = make_("gfml.point", "point", "x");
} GfmlDefaultItem item; GfmlType type; GfmlDefaultItem_fxt fx_item = GfmlDefaultItem_fxt.new_();
@Test public void Basic() {
tst_SubFldDefault(type, "x", null);
item = fx_item.make_("gfml.point", "x", "10");
item.Exec_bgn(type);
tst_SubFldDefault(type, "x", "10");
item.Exec_end(type);
tst_SubFldDefault(type, "x", null);
}
@Test public void Overwrite() {
ini_SubFldDefault_add(type, "x", "0");
tst_SubFldDefault(type, "x", "0");
item = fx_item.make_("gfml.point", "x", "10");
item.Exec_bgn(type);
tst_SubFldDefault(type, "x", "10");
item.Exec_end(type);
tst_SubFldDefault(type, "x", "0");
}
@Test public void CreateDefault() {
tst_SubFldExists(type, "y", false);
item = fx_item.make_("gfml.point", "y", "10");
item.Exec_bgn(type);
tst_SubFldDefault(type, "y", "10");
item.Exec_end(type);
tst_SubFldExists(type, "y", false);
}
@Test public void DefaultTkn() {
Object[] ary = ini_eval_("0");
GfmlTkn varTkn = (GfmlTkn)ary[0];
GfmlVarItm varItem = (GfmlVarItm)ary[1];
item = fx_item.make_("gfml.point", "x", varTkn);
varItem.Tkn_set(GfmlTkn_.raw_("10"));
item.Exec_bgn(type);
tst_SubFldDefault(type, "x", "10");
}
Object[] ini_eval_(String text) {
GfmlVarCtx evalContext = GfmlVarCtx.new_("testContext");
GfmlTkn valTkn = GfmlTkn_.raw_(text);
GfmlVarItm varItem = GfmlVarItm.new_("varKey", valTkn, "testContext");
evalContext.Add_if_dupe_use_nth(varItem);
GfmlVarTkn rv = new GfmlVarTkn("eval", GfmlTknAry_.ary_(valTkn), evalContext, "varKey");
return new Object[] {rv, varItem};
}
void ini_SubFldDefault_add(GfmlType type, String subFldKey, String defaultVal) {
GfmlFld subFld = type.SubFlds().Get_by(subFldKey);
GfmlTkn defaultTkn = GfmlTkn_.raw_(defaultVal);;
subFld.DefaultTkn_(defaultTkn);
}
void tst_SubFldDefault(GfmlType type, String subFldKey, String expdDefaultVal) {
GfmlFld subFld = type.SubFlds().Get_by(subFldKey);
GfmlTkn defaultTkn = GfmlTkn_.as_(subFld.DefaultTkn());
String actlDefaultVal = defaultTkn == null || defaultTkn == GfmlTkn_.Null ? null : defaultTkn.Val();
Tfds.Eq(expdDefaultVal, actlDefaultVal);
}
void tst_SubFldExists(GfmlType type, String subFldKey, boolean expd) {
GfmlFld subFld = type.SubFlds().Get_by(subFldKey);
Tfds.Eq(expd, subFld != null);
}
GfmlType make_(String key, String name, String... atrs) {
GfmlTypeMakr typeMakr = GfmlTypeMakr.new_();
GfmlType rv = typeMakr.MakeRootType(key, name);
for (String atr : atrs)
typeMakr.AddSubFld(GfmlFld.new_(true, atr, GfmlType_.StringKey));
return rv;
}
}

View File

@@ -1,49 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z455_dflts_scope_tst {
@Before public void setup() {
regy = GfmlTypRegy.new_();
GfmlTypeMakr makr = GfmlTypeMakr.new_();
rootPos = GfmlDocPos_.Root.NewDown(0);
GfmlType type = makr.MakeRootType("point", "point", "x", "y").DocPos_(rootPos);
regy.Add(type);
} GfmlDocPos rootPos, currPos; GfmlTypRegy regy;
@Test public void Basic() {
currPos = rootPos.NewDown(0);
tst_FetchOrNullByPos(regy, "point", rootPos, "point", "x", "y");
tst_FetchOrNullByPos(regy, "point", currPos, "point", "x", "y");
List_adp list = List_adp_.New();
list.Add(GfmlDefaultItem.new_("point", "z", GfmlTkn_.raw_("0")));
GfmlDefaultPragma_bgnCmd.ExecList(regy, currPos, list);
tst_FetchOrNullByPos(regy, "point", rootPos, "point", "x", "y");
tst_FetchOrNullByPos(regy, "point", currPos, "point", "x", "y", "z");
}
GfmlType tst_FetchOrNullByPos(GfmlTypRegy regy, String key, GfmlDocPos docPos, String expdTypeKey, String... expdSubs) {
GfmlType actl = regy.FetchOrNull(key, docPos);
Tfds.Eq(expdTypeKey, actl.Key());
String[] actlSubs = new String[actl.SubFlds().Count()];
for (int i = 0; i < actlSubs.length; i++)
actlSubs[i] = actl.SubFlds().Get_at(i).Name();
Tfds.Eq_ary(expdSubs, actlSubs);
return actl;
}
}

View File

@@ -1,35 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z456_dflts_parse_tst {
@Test public void Fix_DefaultChangesPinnedType() {
fx.tst_Parse(String_.Concat
( "_type:{"
, "item {"
, "name;"
, "}"
, "}"
, "_default:{item {name 10;}}"
, ";"
)
, fx.nde_().Typ_("item").Atrk_("name", "10")
);
}
GfmlTypeCompiler_fxt fx = GfmlTypeCompiler_fxt.new_();
}

View File

@@ -1,35 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z481_vars_compile_tst {
@Before public void setup() {
regy = fx.Regy();
pragma = GfmlPragmaVar.new_();
fx.run_InitPragma(regy, pragma);
} GfmlTypeCompiler_fxt fx = GfmlTypeCompiler_fxt.new_(); GfmlTypRegy regy; GfmlPragmaVar pragma;
@Test public void Text1() {
GfmlNde gnde = fx.run_Resolve(regy, "_var/text"
, fx.nde_().Atru_("key_test").Atru_("val_test").Atru_("context_test"));
GfmlVarItm itm = pragma.CompileItmNde(gnde);
Tfds.Eq_rev(itm.Key(), "key_test");
Tfds.Eq_rev(itm.TknVal(), "val_test");
Tfds.Eq_rev(itm.CtxKey(), "context_test");
}
}

View File

@@ -1,85 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z482_vars_parse_tst {
GfmlTypeCompiler_fxt fx = GfmlTypeCompiler_fxt.new_();
@Test public void Basic() {
fx.tst_Parse(String_.Concat
( "_var:{"
, " size '20,20';"
, "}"
, "'<~size>';"
)
, fx.nde_().Atru_("20,20")
);
}
@Test public void Many() {
fx.tst_Parse(String_.Concat
( "_var:{"
, " size '20,20';"
, " pos '30,30';"
, "}"
, "'<~size>' '<~pos>';"
)
, fx.nde_().Atru_("20,20").Atru_("30,30")
);
}
@Test public void Deferred() {
fx.tst_Parse(String_.Concat
( "_var:{"
, " key0 '<~key1>';"
, "}"
, "_var:{"
, " key1 val1;"
, "}"
, "'<~key0>';"
)
, fx.nde_().Atru_("val1")
);
}
@Test public void Swap() {
fx.tst_Parse(String_.Concat
( "{"
, " _var:{"
, " size '20,20';"
, " }"
, " '<~size>';"
, " _var:{"
, " size '30,30';"
, " }"
, " '<~size>';"
, "}"
)
, fx.nde_().Subs_
( fx.nde_().Atru_("20,20")
, fx.nde_().Atru_("30,30")
)
);
}
@Test public void Context() {
fx.tst_Parse(String_.Concat
( "_var:{"
, " size '20,20' gui;"
, "}"
, "'<~gui.size>' <~size>;"
)
, fx.nde_().Atru_("20,20").Atru_("<~size>")
);
}
}

View File

@@ -1,88 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z501_lxr_parse_tst {
GfmlTypeCompiler_fxt fx = GfmlTypeCompiler_fxt.new_();
@Test public void SymCreate() {
fx.tst_Parse(String_.Concat
( "_lxr_sym:key='gfml.elm_key_1' raw='<-' cmd='gfml.elm_key';"
, "a<-1;"
)
, fx.nde_().Atrk_("a", "1")
);
}
@Test public void SymUpdate() {
fx.tst_Parse(String_.Concat
( "_lxr_sym:key='gfml.elm_key_0' raw='<-';"
, "a<-1 b=1;"
)
, fx.nde_().Atrk_("a", "1").Atru_("b=1")
);
}
@Test public void SwapCreate() {
fx.tst_Parse(String_.Concat
( "_lxr_sym:key='gfml.swap_0' raw='/?/?' val='/?';"
, "/?/?;"
)
, fx.nde_().Atru_("/?")
);
}
@Test public void FrameCreate() {
fx.tst_Parse(String_.Concat
( "_lxr_frame:key='gfml.comment_2' type='comment' bgn='/-' end='-/';"
, "a=/-ignore-/b;"
)
, fx.nde_().Atrk_("a", "b")
);
}
@Test public void FrameUpdate() {
fx.tst_Parse(String_.Concat
( "_lxr_frame:key='gfml.comment_0' bgn='--' end='!';"
, "a=--ignore!"
, "b;"
)
, fx.nde_().Atrk_("a", "b")
);
}
//@Test
public void FrameCreateNest() {
fx.tst_Parse(String_.Concat
( "_lxr_frame:key='gfml.comment_2' type='comment' bgn='/-' end='-/' {"
, "sym:key='gfml.comment_2_escape_bgn' raw='/-/-' val='/-' cmd='gfml.elm_data';"
, "sym:key='gfml.comment_2_escape_end' raw='-/-/' val='-/' cmd='gfml.elm_data';"
, "}"
, "a=/-/-/-ignore-/b;"
)
, fx.nde_().Atrk_("a", "b")
);
// todo:
// cmd should be waitingTkns add, not data (makes invisible
// should resolve type on sym to lxr_sym (since _lxr_sym is not invoked) or create _lxr_frame/sym type
// how to change inner lxrs (lookup by key?)
}
// @Test public void FrameUpdateEval() {
// raw = String_.Concat
// ( "_lxr_frame:key='gfml.eval_0' bgn='~<' end='>';" // how to handle '<~' where <~ (block quote)
// , "a=~[t];"
// );
// gdoc = GfmlDoc_.parse_any_eol_(raw);
// fx_nde.tst_SubKeys(gdoc, 0, atr_("a", "\t"));
// }
}

View File

@@ -1,130 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z601_edit_atr_tst {
GfmlUpdateFx fx = GfmlUpdateFx.new_();
@Test public void Basic() {
fx .Raw_("a=1;").Update_(fx.atr_().NdeIdxs_(0).Atr_("a", "2"))
.tst_("a=2;");
}
@Test public void WhiteSpaceComment() {
fx .Raw_("a = /*comment*/1;").Update_(fx.atr_().NdeIdxs_(0).Atr_("a", "2"))
.tst_("a = /*comment*/2;");
}
@Test public void Quoted() {
fx .Raw_("a='1';").Update_(fx.atr_().NdeIdxs_(0).Atr_("a", "2"))
.tst_("a='2';");
}
@Test public void EmbeddedQuote() {
fx .Raw_("a=1;").Update_(fx.atr_().NdeIdxs_(0).Atr_("a", "1'2"))
.tst_("a='1''2';");
}
@Test public void ReuseQuote() {
fx .Raw_("a=|'1'|;").Update_(fx.atr_().NdeIdxs_(0).Atr_("a", "2"))
.tst_("a=|'2'|;");
}
@Test public void ReuseQuoteWithEmbeddedQuote() {
fx .Raw_("a=|'1'2'|;").Update_(fx.atr_().NdeIdxs_(0).Atr_("a", "2'3"))
.tst_("a=|'2'3'|;");
}
// @Test public void AtrIdx() {
// fx .Raw_("1;").Update_(fx.atr_().NdeIdxs_(0).AtrIdx_(0, "2"))
// .tst_("2;");
// }
// @Test public void AtrIdx_parens() {
// fx .Raw_("A_('1');").Update_(fx.atr_().NdeIdxs_(0).AtrIdx_(0, "2"))
// .tst_("A_('2');");
// }
@Test public void AddNew() {
fx .Raw_("a:;").Update_(fx.atr_().NdeIdxs_(0).Atr_("b", "1"))
.tst_("a:b='1';");
}
@Test public void AddExisting() {
fx .Raw_("a='1';").Update_(fx.atr_().NdeIdxs_(0).Atr_("b", "2"))
.tst_("a='1' b='2';");
}
@Test public void Add_many() {
fx .Raw_("a='1';").Update_(fx.atr_().NdeIdxs_(0).Atr_("b", "2")).Update_(fx.atr_().NdeIdxs_(0).Atr_("c", "3"))
.tst_("a='1' b='2' c='3';");
}
@Test public void AddNode() {
fx .Raw_("a(){}").Update_(fx.nde_().NdeIdxs_(0).Nest_("b"))
.tst_("a(){b(){}}");
}
@Test public void AddNodeMany() {
fx .Raw_("a(){}").Update_(fx.nde_().NdeIdxs_(0).Nest_("b")).Update_(fx.nde_().NdeIdxs_(0).Nest_("c"))
.tst_("a(){b(){}c(){}}");
}
@Test public void EditNode() {
fx .Raw_("a(){b(){}}").Update_(fx.nde_().NdeIdxs_(0).Nest_("b"))
.tst_("a(){b(){}}");
}
}
interface GfmlUpdateCmd {
void Exec(GfmlDoc gdoc);
}
class GfmlUpdateCmd_atr implements GfmlUpdateCmd {
public GfmlUpdateCmd_atr NdeIdxs_(int... v) {ndeIdxs = v; return this;} int[] ndeIdxs;
public GfmlUpdateCmd_atr Atr_(String key, String val) {atrKey = key; atrVal = val; return this;} String atrKey, atrVal;
// public GfmlUpdateCmd_atr AtrIdx_(int idx, String val) {atrIdx = idx; atrVal = val; return this;} int atrIdx = -1;
public void Exec(GfmlDoc gdoc) {
GfmlNde nde = GetNde(ndeIdxs, gdoc.RootNde());
nde.UpdateAtr(atrKey, atrVal);
// GfmlAtr atr = atrIdx != -1 ? GfmlAtr.as_(nde.SubKeys().Get_at(atrIdx)) : GfmlAtr.as_(nde.SubKeys().Get_by(atrKey));
// atr.UpdateAtr(atrKey, atrVal);
atrKey = ""; atrVal = "";//atrIdx = -1;
}
public static GfmlNde GetNde(int[] ndeIdxs, GfmlNde owner) {
GfmlNde nde = owner;
for (int i = 0; i < ndeIdxs.length; i++) {
int ndeIdx = ndeIdxs[i];
nde = (GfmlNde)owner.SubHnds().Get_at(ndeIdx);
}
return nde;
}
public static GfmlUpdateCmd_atr new_() {return new GfmlUpdateCmd_atr();} GfmlUpdateCmd_atr() {}
}
class GfmlUpdateCmd_nde implements GfmlUpdateCmd {
public GfmlUpdateCmd_nde NdeIdxs_(int... v) {ndeIdxs = v; return this;} int[] ndeIdxs;
public GfmlUpdateCmd_nde Nest_(String hnd) {ndeHnd = hnd; return this;} String ndeHnd;
public void Exec(GfmlDoc gdoc) {
GfmlNde nde = GfmlUpdateCmd_atr.GetNde(ndeIdxs, gdoc.RootNde());
nde.UpdateNde(ndeHnd);
ndeHnd = "";
}
public static GfmlUpdateCmd_nde new_() {return new GfmlUpdateCmd_nde();} GfmlUpdateCmd_nde() {}
}
class GfmlUpdateFx {
public GfmlUpdateCmd_atr atr_() {return GfmlUpdateCmd_atr.new_();}
public GfmlUpdateCmd_nde nde_() {return GfmlUpdateCmd_nde.new_();}
public String Raw() {return raw;} public GfmlUpdateFx Raw_(String v) {raw = v; return this;} private String raw;
public GfmlUpdateFx Update_(GfmlUpdateCmd cmd) {cmds.Add(cmd); return this;} List_adp cmds = List_adp_.New();
public GfmlUpdateFx tst_(String expd) {
GfmlDoc actlDoc = GfmlDataNde.new_any_eol_(raw).Doc();
for (int i = 0; i < cmds.Count(); i++) {
GfmlUpdateCmd cmd = (GfmlUpdateCmd)cmds.Get_at(i);
cmd.Exec(actlDoc);
}
String actl = actlDoc.RootNde().To_str();
Tfds.Eq(expd, actl);
cmds.Clear();
return this;
}
public static GfmlUpdateFx new_() {return new GfmlUpdateFx();} GfmlUpdateFx() {}
}

View File

@@ -1,24 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z602_edit_nde_tst {
GfmlUpdateFx fx = GfmlUpdateFx.new_();
@Test public void Basic() {
}
}

View File

@@ -1,81 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
import gplx.core.stores.*;
public class z801_useCase_DataRdr_tst {
String raw;
@Test public void Subs_byName() {
raw = String_.Concat
( "_type:{"
, " item {"
, " point {"
, " x;"
, " y;"
, " }"
, " }"
, "}"
, "item:{"
, " 1 2;"
, "}"
);
rdr = GfmlDataRdr.raw_root_(raw);
subRdr = rdr.Subs_byName_moveFirst("point");
fx_rdr.tst_Atrs(subRdr, kv_("x", "1"), kv_("y", "2"));
}
// @Test
public void Subs_byName3() {
raw = String_.Concat
( "_type:{"
, " item {"
, " key"
, " point {"
, " x;"
, " y;"
, " }"
, " }"
, "}"
, "abc point=(1 2);"
);
rdr = GfmlDataRdr.raw_root_(raw);
subRdr = rdr.Subs_byName_moveFirst("point");
fx_rdr.tst_Atrs(subRdr, kv_("x", "1"), kv_("y", "2"));
}
Keyval kv_(String key, Object val) {return Keyval_.new_(key, val);}
DataRdr_Fxt fx_rdr = DataRdr_Fxt.Instance;
DataRdr rdr, subRdr;
}
class DataRdr_Fxt {
@gplx.Internal protected DataRdr run_Subs_at(DataRdr rdr, int i) {
DataRdr rv = rdr.Subs();
int count = -1;
while (count++ < i) {
rv.MoveNextPeer();
}
return rv;
}
@gplx.Internal protected void tst_Atrs(DataRdr rdr, Keyval... expdAry) {
Keyval[] actlAry = new Keyval[rdr.FieldCount()];
for (int i = 0; i < actlAry.length; i++)
actlAry[i] = rdr.KeyValAt(i);
Tfds.Eq_ary_str(expdAry, actlAry);
}
public static final DataRdr_Fxt Instance = new DataRdr_Fxt(); DataRdr_Fxt() {}
}

View File

@@ -1,87 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z803_useCase_KbdKeyboard_tst {
String raw; GfmlDoc gdoc;
@Test public void Quote() { // smokeTest; make sure DefaultLxr supports both quoting mechanisms
fx.tst_Parse(String_.Concat
( "gfui-keyboard-ui:{"
, " keyQuote {"
, " \"'\" 'key.quote';"
, " '\"' 'key.quote+key.shift' shift;"
, " }"
, "}"
)
, fx.nde_().Hnd_("gfui-keyboard-ui").Subs_
( fx.nde_().Atru_("keyQuote").Subs_
( fx.nde_().Atrs_("'", "key.quote")
, fx.nde_().Atrs_("\"", "key.quote+key.shift", "shift")
)
)
);
}
@Test public void Key_LtrA() {
fx.tst_Parse(String_.Concat
( TypeHeader
, "keys:{"
, " keyA {"
, " a 'key.a';"
, " A 'key.a+key.shift' shift;"
, " }"
, "}"
)
, fx.nde_().Hnd_("keys").Subs_
( fx.nde_().Hnd_("key").Typ_("keys/key").Atrk_("size", "48,45").Atrk_("relAnchor", "{previous},rightOf").Atrk_("id", "keyA").Subs_
( fx.nde_().Hnd_("sendKeyCode").Typ_("sendKeyCode").Atrk_("modifier", "normal").Atrk_("displayText", "a").Atrk_("keyCode", "key.a")
, fx.nde_().Hnd_("sendKeyCode").Typ_("sendKeyCode").Atrk_("displayText", "A").Atrk_("keyCode", "key.a+key.shift").Atrk_("modifier", "shift")
)
)
);
}
@Test public void Load_Smoke() {
Io_url url = Tfds.RscDir.GenSubFil_nest("110_gfml", "cfgs_archive", "gfui-keyboard-ui.cfg.gfml");
raw = Io_mgr.Instance.LoadFilStr(url);
gdoc = GfmlDoc_.parse_any_eol_(raw);
// Tfds.Write(gdoc.RootNde().To_str());
}
String TypeHeader = String_.Concat
( "_type:{"
, " keys {"
, " key {"
, " id;"
, " size default='48,45';"
, " relAnchor default='{previous},rightOf';"
, " sendKeyCode type=sendKeyCode;"
, " }"
, " }"
, " sendKeyCode {"
, " displayText;"
, " keyCode;"
, " modifier default=normal;"
, " }"
, " changeModifier {"
, " displayText;"
, " modifier default=normal;"
, " newModifierId;"
, " isSticky;"
, " }"
, "}"
);
GfmlTypeCompiler_fxt fx = GfmlTypeCompiler_fxt.new_();
}

View File

@@ -1,50 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*;
public class z811_useCase_GfmlIoSql_tst {
@Test public void Basic() {
tst_Doc("fld1=val1", nde_("fld").Atrs_add_("word", "fld1").Atrs_add_("op", "=").Atrs_add_("word", "val1"));
tst_Doc("fld1 = val1", nde_("fld").Atrs_add_("word", "fld1").Atrs_add_("op", "=").Atrs_add_("word", "val1"));
tst_Doc("fld1='val1'", nde_("fld").Atrs_add_("word", "fld1").Atrs_add_("op", "=").Atrs_add_("word", "val1"));
tst_Doc("fld1='val 1'", nde_("fld").Atrs_add_("word", "fld1").Atrs_add_("op", "=").Atrs_add_("word", "val 1"));
}
@Test public void Basic2() {
tst_Doc("1=1 OR 2=2", nde_("fld").Atrs_add_("word", "1").Atrs_add_("op", "=").Atrs_add_("word", "1")
.Atrs_add_("word", "OR")
.Atrs_add_("word", "2").Atrs_add_("op", "=").Atrs_add_("word", "2")
);
tst_Doc("(1=1)", nde_("fld").Atrs_add_("op", "(").Atrs_add_("word", "1").Atrs_add_("op", "=").Atrs_add_("word", "1")
.Atrs_add_("op", ")")
);
}
void tst_Doc(String raw, GfmlNdeWrapper expd) {
GfmlDoc doc = SqlDoc.XtoDoc(raw);
GfmlNde actl = (GfmlNde)doc.RootNde();
Tfds.Eq_ary_str(To_str(expd.Nde()), To_str(actl));
}
String[] To_str(GfmlNde nde) {
List_adp list = List_adp_.New();
for (int i = 0; i < nde.SubObjs_Count(); i++) {
GfmlAtr atr = (GfmlAtr)nde.SubObjs_GetAt(i);
list.Add(atr.Key() + "=" + atr.DatTkn().Raw());
}
return list.To_str_ary();
}
GfmlNdeWrapper nde_(String name) {return GfmlNdeWrapper.new_().Name_(name);}
}

View File

@@ -1,117 +0,0 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
package gplx.gfml; import gplx.*;
import org.junit.*; import gplx.core.strings.*; import gplx.core.envs.*;
public class z901_perf_tst {
TimerWatch tmr = TimerWatch.new_();
@Test public void EmptyTestSoJunitWillNotFail() {}
// @Test
public void Long() {
// String longText = String_.Repeat("a", 30 * 1000 * 1000);
String longText = Io_mgr.Instance.LoadFilStr(Io_url_.new_any_("C:\\core_weekly.temp.gfio"));
// String_bldr sbXml = String_bldr_.new_();
// sbXml.Add("<");
// sbXml.Add(longText);
// sbXml.Add("/>");
// tmr.Bgn();
// gplx.langs.xmls.XmlDoc_.parse(sbXml.To_str());
// tmr.End_and_print("xml"); // 400
String_bldr sbGfml = String_bldr_.new_();
for (int i = 0; i < 10; i++) {
sbGfml.Add(longText);
// sbGfml.Add(longText);
// sbGfml.Add(longText);
// sbGfml.Add(longText);
}
// tmr.Bgn();
// gplx.core.texts.CharStream.pos0_(sbGfml.To_str());
// tmr.End_and_print("char"); // 1700
tmr.Bgn();
GfmlDoc_.parse_any_eol_(sbGfml.To_str());
tmr.End_and_print("gfml"); // 1700
}
//@Test
public void Prop() {
int max = 100 * 1000 * 1000;
PerfFieldVsProc c = new PerfFieldVsProc();
int v = 0;
tmr.Bgn();
for (int i = 0; i < max; i++)
v = member;
tmr.End_and_print("member");
tmr.Bgn();
for (int i = 0; i < max; i++)
v = c.Val_field;
tmr.End_and_print("field");
tmr.Bgn();
for (int i = 0; i < max; i++)
v = c.Val_proc();
tmr.End_and_print("proc");
Tfds.Write(v);
}
// @Test
// public void ClassComp() {
// int max = 100 * 1000 * 1000;
// ClassType ct = new ClassType3();
// long v = 0;
// // 2625 CS, 718 JAVA
// tmr.Bgn();
// for (int i = 0; i < max; i++) {
// if (ct.Type() == ClassType_.Type_1) v += 1;
// else if (ct.Type() == ClassType_.Type_2) v += 2;
// else if (ct.Type() == ClassType_.Type_3) v += 3;
// }
// tmr.End_and_print("var");
// v = 0;
// // 12437 CS, 578 JAVA
// tmr.Bgn();
// for (int i = 0; i < max; i++) {
// Class<?> type = ct.getClass();
// if (type == typeof(ClassType1)) v += 1;
// else if (type == typeof(ClassType2)) v += 2;
// else if (type == typeof(ClassType3)) v += 3;
// }
// tmr.End_and_print("type");
// }
interface ClassType {int Type();}
class ClassType_ {public static final int Type_1 = 1, Type_2 = 2, Type_3 = 3;}
class ClassType1 implements ClassType {public int Type() {return ClassType_.Type_1;}}
class ClassType2 implements ClassType {public int Type() {return ClassType_.Type_2;}}
class ClassType3 implements ClassType {public int Type() {return ClassType_.Type_3;}}
int member = 1;
}
class PerfFieldVsProc {
public int Val_field = 1;
public int Val_proc() {return 1;}
}
class TimerWatch {
public void Bgn() {bgnTime = System_.Ticks();} long bgnTime;
public void End() {duration = System_.Ticks() - bgnTime;} long duration;
public void End_and_print(String text) {
this.End();
Tfds.Write(XtoStr_ms() + " " + text);
}
public String XtoStr_ms() {return Long_.To_str(duration);}
public static TimerWatch new_() {
TimerWatch rv = new TimerWatch();
rv.Bgn();
return rv;
} TimerWatch() {}
}