Library: verify DataSrc binding for Map

This commit is contained in:
Fischlurch 2024-03-27 18:26:55 +01:00
parent 597d8191c7
commit 4c4ae0691c
2 changed files with 197 additions and 17 deletions

View file

@ -42,6 +42,7 @@ using std::regex_search;
using std::smatch;
using util::_Fmt;
using util::join;
using lib::diff::MakeRec;
namespace lib {
@ -455,6 +456,66 @@ for} tail...
void
verify_Map_binding()
{
MapS data{{"a","5"}
,{"i","p,q,r"}
,{"i.p.a","11"}
,{"i.q.a","22"}
,{"i.q.aa","222"}};
auto binding = bindDataSource (data);
CHECK (meta::typeStr(binding) == "TextTemplate::DataSource<map<string, string>, void>"_expect );
CHECK ( binding.contains("a"));
CHECK (not binding.contains("b"));
CHECK (binding.retrieveContent("a") == "5"_expect );
CHECK (binding.retrieveContent("i") == "p,q,r"_expect );
CHECK (binding.retrieveContent("i.q.aa") == "222"_expect );
CHECK (not binding.isNested());
auto it = binding.getSequence("i");
CHECK (it);
CHECK (*it == "i.p."_expect );
CHECK (meta::typeStr(it) == "IterExplorer<IterableDecorator<string, CheckedCore<iter_explorer::Transformer<iter_explorer::BaseAdapter<RegexSearchIter>, string> > > >"_expect );
auto subBind = binding.openContext(it);
CHECK (subBind.isNested());
CHECK ((meta::is_same<decltype(binding),decltype(subBind)>()));
CHECK ( subBind.contains("a"));
CHECK (not subBind.contains("b"));
CHECK (not subBind.contains("aa"));
CHECK ( subBind.contains("i"));
CHECK (subBind.retrieveContent("i") == "p,q,r"_expect );
CHECK (subBind.retrieveContent("a") == "11"_expect );
++it;
CHECK (it);
CHECK (*it == "i.q."_expect );
// Note: existing sub-ctx is not automatically linked to the Iterator
CHECK (subBind.retrieveContent("a") == "11"_expect );
// ...rather need to open a new sub-ctx explicitly
subBind = binding.openContext(it);
CHECK (subBind.isNested());
CHECK (subBind.contains("a"));
CHECK (subBind.contains("aa"));
CHECK (subBind.retrieveContent("a") == "22"_expect );
CHECK (subBind.retrieveContent("aa") == "222"_expect);
CHECK (subBind.retrieveContent("i.p.a") == "11"_expect );
CHECK (subBind.retrieveContent("i.q.a") == "22"_expect );
++it;
CHECK (it);
CHECK (*it == "i.r."_expect );
subBind = binding.openContext(it);
CHECK ( subBind.contains("a"));
CHECK (not subBind.contains("aa"));
CHECK (subBind.retrieveContent("a") == "5"_expect );
CHECK (subBind.retrieveContent("i.p.a") == "11"_expect );
CHECK (subBind.retrieveContent("i.q.a") == "22"_expect );
++it;
CHECK (isnil (it));
VERIFY_ERROR (ITER_EXHAUST, *it);
}
@ -464,6 +525,106 @@ for} tail...
void
verify_ETD_binding()
{
auto root = MakeRec()
.set("a", 5)
.set("i", MakeRec()
.scope( MakeRec()
.set("a", 11)
.genNode()
, MakeRec()
.set("a", 22)
.set("aa", 222)
.genNode()
))
.genNode();
SHOW_EXPR(root)
auto binding = bindDataSource (root);
SHOW_TYPE(decltype(binding))
SHOW_EXPR(meta::typeStr(binding))
SHOW_EXPR(binding.contains("a"))
SHOW_EXPR(binding.contains("b"))
SHOW_EXPR(binding.retrieveContent("a"))
SHOW_EXPR(binding.retrieveContent("i"))
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SHOW_EXPR(binding.retrieveContent("i.q.aa"))
SHOW_EXPR(binding.isNested())
CHECK (meta::typeStr(binding) == "TextTemplate::DataSource<map<string, string>, void>"_expect );
CHECK ( binding.contains("a"));
CHECK (not binding.contains("b"));
CHECK (binding.retrieveContent("a") == "5"_expect );
CHECK (binding.retrieveContent("i") == "p,q,r"_expect );
CHECK (binding.retrieveContent("i.q.aa") == "222"_expect );
CHECK (not binding.isNested());
auto it = binding.getSequence("i");
SHOW_EXPR(meta::typeStr(it))
SHOW_EXPR(bool(it))
SHOW_EXPR(*it)
CHECK (it);
CHECK (*it == "i.p."_expect );
CHECK (meta::typeStr(it) == "IterExplorer<IterableDecorator<string, CheckedCore<iter_explorer::Transformer<iter_explorer::BaseAdapter<RegexSearchIter>, string> > > >"_expect );
auto subBind = binding.openContext(it);
SHOW_EXPR(meta::typeStr(subBind))
SHOW_EXPR(bool(std::is_same<decltype(binding),decltype(subBind)>()))
SHOW_EXPR(subBind.isNested())
SHOW_EXPR(subBind.contains("a"))
SHOW_EXPR(subBind.contains("b"))
SHOW_EXPR(subBind.contains("aa"))
SHOW_EXPR(subBind.contains("i"))
SHOW_EXPR(subBind.retrieveContent("i"))
SHOW_EXPR(subBind.retrieveContent("a"))
CHECK (subBind.isNested());
CHECK ((meta::is_same<decltype(binding),decltype(subBind)>()));
CHECK ( subBind.contains("a"));
CHECK (not subBind.contains("b"));
CHECK (not subBind.contains("aa"));
CHECK ( subBind.contains("i"));
CHECK (subBind.retrieveContent("i") == "p,q,r"_expect );
CHECK (subBind.retrieveContent("a") == "11"_expect );
++it;
SHOW_EXPR(bool(it))
SHOW_EXPR(*it)
CHECK (it);
CHECK (*it == "i.q."_expect );
SHOW_EXPR(subBind.retrieveContent("a"))
CHECK (subBind.retrieveContent("a") == "11"_expect );
subBind = binding.openContext(it);
SHOW_EXPR(subBind.isNested())
SHOW_EXPR(subBind.contains("a"))
SHOW_EXPR(subBind.contains("aa"))
SHOW_EXPR(subBind.retrieveContent("a"))
SHOW_EXPR(subBind.retrieveContent("aa"))
SHOW_EXPR(subBind.retrieveContent("i.p.a"))
SHOW_EXPR(subBind.retrieveContent("i.q.a"))
CHECK (subBind.isNested());
CHECK (subBind.contains("a"));
CHECK (subBind.contains("aa"));
CHECK (subBind.retrieveContent("a") == "22"_expect );
CHECK (subBind.retrieveContent("aa") == "222"_expect);
CHECK (subBind.retrieveContent("i.p.a") == "11"_expect );
CHECK (subBind.retrieveContent("i.q.a") == "22"_expect );
++it;
SHOW_EXPR(bool(it))
CHECK (it);
SHOW_EXPR(*it)
CHECK (*it == "i.r."_expect );
subBind = binding.openContext(it);
SHOW_EXPR(subBind.contains("a"))
SHOW_EXPR(subBind.contains("aa"))
SHOW_EXPR(subBind.retrieveContent("a"))
SHOW_EXPR(subBind.retrieveContent("i.p.a"))
SHOW_EXPR(subBind.retrieveContent("i.q.a"))
CHECK ( subBind.contains("a"));
CHECK (not subBind.contains("aa"));
CHECK (subBind.retrieveContent("a") == "5"_expect );
CHECK (subBind.retrieveContent("i.p.a") == "11"_expect );
CHECK (subBind.retrieveContent("i.q.a") == "22"_expect );
++it;
SHOW_EXPR(bool(it))
CHECK (isnil (it));
VERIFY_ERROR (ITER_EXHAUST, *it);
#endif
}
};

View file

@ -113535,9 +113535,9 @@ std::cout &lt;&lt; tmpl.render({&quot;what&quot;, &quot;World&quot;}) &lt;&lt; s
<node CREATED="1711331469327" ID="ID_1328551681" MODIFIED="1711331478314" TEXT="Ebene-2 : Keys zusammensetzen"/>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1711335652300" ID="ID_1349211278" MODIFIED="1711335681237" TEXT="Test">
<arrowlink COLOR="#d00f57" DESTINATION="ID_1713123157" ENDARROW="Default" ENDINCLINATION="104;-13;" ID="Arrow_ID_413173793" STARTARROW="None" STARTINCLINATION="-338;-54;"/>
<icon BUILTIN="flag-pink"/>
<node COLOR="#338800" CREATED="1711335652300" ID="ID_1349211278" MODIFIED="1711560321006" TEXT="Test">
<arrowlink COLOR="#0f4ed0" DESTINATION="ID_1713123157" ENDARROW="Default" ENDINCLINATION="192;-30;" ID="Arrow_ID_413173793" STARTARROW="None" STARTINCLINATION="-485;165;"/>
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
@ -113947,27 +113947,32 @@ std::cout &lt;&lt; tmpl.render({&quot;what&quot;, &quot;World&quot;}) &lt;&lt; s
<icon BUILTIN="idea"/>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1711508533490" ID="ID_1740637248" MODIFIED="1711508536658" TEXT="Test">
<icon BUILTIN="flag-pink"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1711508533490" ID="ID_1740637248" MODIFIED="1711560355372" TEXT="Test">
<icon BUILTIN="pencil"/>
<node COLOR="#ff00cb" CREATED="1711508538010" ID="ID_1041108883" MODIFIED="1711508554635" TEXT="puh....">
<font NAME="SansSerif" SIZE="11"/>
<icon BUILTIN="smiley-neutral"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711508556799" ID="ID_681566820" MODIFIED="1711508573324" TEXT="erst mal schrittweise herantasten...">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711508602973" ID="ID_1154919226" MODIFIED="1711508628990" TEXT="einen Beispiel-Daten-Kontext bereitstellen">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1711508556799" ID="ID_681566820" MODIFIED="1711560360996" TEXT="erst mal schrittweise herantasten...">
<arrowlink COLOR="#236cc2" DESTINATION="ID_778488140" ENDARROW="Default" ENDINCLINATION="97;-12;" ID="Arrow_ID_1117346354" STARTARROW="None" STARTINCLINATION="67;272;"/>
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1711508602973" ID="ID_1154919226" MODIFIED="1711560365246" TEXT="einen Beispiel-Daten-Kontext bereitstellen">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711508585131" ID="ID_1692560421" MODIFIED="1711508628990" TEXT="die DataSource explizit erzeugen">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1711508585131" ID="ID_1692560421" MODIFIED="1711560367785" TEXT="die DataSource explizit erzeugen">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711508631813" ID="ID_464128354" MODIFIED="1711508654315" TEXT="die Zugriffsmethoden durchspielen">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1711508631813" ID="ID_464128354" MODIFIED="1711560375265" TEXT="die Zugriffsmethoden durchspielen">
<icon BUILTIN="pencil"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711508645715" ID="ID_1542705162" MODIFIED="1711508654315" TEXT="dann weiter zur Iteration">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1711560334047" ID="ID_101340479" MODIFIED="1711560352394" STYLE="fork" TEXT="brauche dedizierten String-Renderer">
<font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="yes"/>
</node>
</node>
</node>
</node>
@ -114067,12 +114072,26 @@ std::cout &lt;&lt; tmpl.render({&quot;what&quot;, &quot;World&quot;}) &lt;&lt; s
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710793522467" ID="ID_1713123157" MODIFIED="1710793546412" TEXT="verify_Map_binding">
<linktarget COLOR="#d00f57" DESTINATION="ID_1713123157" ENDARROW="Default" ENDINCLINATION="104;-13;" ID="Arrow_ID_413173793" SOURCE="ID_1349211278" STARTARROW="None" STARTINCLINATION="-338;-54;"/>
<node COLOR="#338800" CREATED="1710793522467" ID="ID_1713123157" MODIFIED="1711560321006" TEXT="verify_Map_binding">
<linktarget COLOR="#0f4ed0" DESTINATION="ID_1713123157" ENDARROW="Default" ENDINCLINATION="192;-30;" ID="Arrow_ID_413173793" SOURCE="ID_1349211278" STARTARROW="None" STARTINCLINATION="-485;165;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1711560219750" ID="ID_1483659926" MODIFIED="1711560279366" TEXT="Map explizit bauen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1711560226369" ID="ID_11952279" MODIFIED="1711560281334" TEXT="DataSrc explizit erzeugen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1711560235266" ID="ID_1820876835" MODIFIED="1711560282509" TEXT="alle DataSrc-Methoden durchspielen">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710793547451" ID="ID_778488140" MODIFIED="1711560211460" TEXT="verify_ETD_binding">
<linktarget COLOR="#236cc2" DESTINATION="ID_778488140" ENDARROW="Default" ENDINCLINATION="97;-12;" ID="Arrow_ID_1117346354" SOURCE="ID_681566820" STARTARROW="None" STARTINCLINATION="67;272;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711560265587" ID="ID_1134491764" MODIFIED="1711560277302" TEXT="alles v&#xf6;llig analog wie beim Map-Binding">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710793547451" ID="ID_778488140" MODIFIED="1710793552697" TEXT="verify_ETD_binding">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1711560243235" ID="ID_415632339" MODIFIED="1711560257453" TEXT="ein Template damit instantieren"/>
</node>
</node>
</node>