Mike Gerwitz

Activist for User Freedom

aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorMike Gerwitz <mike.gerwitz@rtspecialty.com>2018-10-29 13:46:28 -0400
committerMike Gerwitz <mike.gerwitz@rtspecialty.com>2019-02-04 10:22:46 -0500
commitc68c2f41d5a03277497a211d6aa574e59b7fee77 (patch)
tree315d5cf63e6d8185813f9185d9befcab5ba6f3c4 /core
parenta35844f3fb1506b689e57b07e7c3f2af15987d67 (diff)
downloadtame-c68c2f41d5a03277497a211d6aa574e59b7fee77.tar.gz
tame-c68c2f41d5a03277497a211d6aa574e59b7fee77.tar.bz2
tame-c68c2f41d5a03277497a211d6aa574e59b7fee77.zip
core/vector/table: Add specification for main templates
* core/test/core/suite.xml: Import core/test/core/vector/table. * core/test/core/vector/table.xml: New specification.
Diffstat (limited to 'core')
-rw-r--r--core/test/core/suite.xml2
-rw-r--r--core/test/core/vector/table.xml219
2 files changed, 220 insertions, 1 deletions
diff --git a/core/test/core/suite.xml b/core/test/core/suite.xml
index f64aed6..28ce1cc 100644
--- a/core/test/core/suite.xml
+++ b/core/test/core/suite.xml
@@ -33,7 +33,7 @@
<import package="vector/fold" />
<import package="vector/interpolate" />
<import package="vector/length" />
- <import package="vector/stub" />
+ <import package="vector/table" />
<import package="aggregate" />
<import package="insurance" />
diff --git a/core/test/core/vector/table.xml b/core/test/core/vector/table.xml
new file mode 100644
index 0000000..5e189d6
--- /dev/null
+++ b/core/test/core/vector/table.xml
@@ -0,0 +1,219 @@
+<?xml version="1.0"?>
+<!--
+ Copyright (C) 2018 R-T Specialty, LLC.
+
+ This file is part of tame-core.
+
+ tame-core is free software: you can redistribute it and/or modify it
+ under the terms of the GNU 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+-->
+<package xmlns="http://www.lovullo.com/rater"
+ xmlns:c="http://www.lovullo.com/calc"
+ xmlns:t="http://www.lovullo.com/rater/apply-template"
+ desc="Table Querying Specs">
+
+ <import package="../../spec" />
+
+ <import package="../../../base" />
+ <import package="../../../vector/table" />
+
+
+ <t:create-table name="test-table"
+ desc="Dummy table for query testing">
+ <t:table-column name="a"
+ index="0"
+ desc="Column A" />
+ <t:table-column name="b"
+ index="1"
+ desc="Column B" />
+ <t:table-column name="c"
+ index="2"
+ desc="Column C" />
+
+ <t:table-rows>
+ <t:table-row>
+ <t:table-value const="1" />
+ <t:table-value const="11" />
+ <t:table-value const="111" />
+ </t:table-row>
+ <t:table-row>
+ <t:table-value const="1" />
+ <t:table-value const="12" />
+ <t:table-value const="121" />
+ </t:table-row>
+
+ <t:table-row>
+ <t:table-value const="2" />
+ <t:table-value const="21" />
+ <t:table-value const="111" />
+ </t:table-row>
+ </t:table-rows>
+ </t:create-table>
+
+
+ <t:describe name="_query-first-field_">
+ <t:it desc="returns first row of multi-row result">
+ <t:given>
+ <t:query-first-field table="test-table" field="c">
+ <t:when field="a">
+ <c:value-of name="#1" />
+ </t:when>
+ </t:query-first-field>
+ </t:given>
+
+ <t:expect>
+ <t:match-result eq="111" />
+ </t:expect>
+ </t:it>
+
+
+ <t:it desc="returns first row of single-row result">
+ <t:given>
+ <t:query-first-field table="test-table" field="c">
+ <t:when field="a">
+ <c:value-of name="#1" />
+ </t:when>
+ <t:when field="b">
+ <c:value-of name="#12" />
+ </t:when>
+ </t:query-first-field>
+ </t:given>
+
+ <t:expect>
+ <t:match-result eq="121" />
+ </t:expect>
+ </t:it>
+ </t:describe>
+
+
+
+ <t:describe name="_query-field_">
+ <t:describe name="with predicates">
+ <t:it desc="returns vector of field values">
+ <t:given>
+ <c:length-of>
+ <t:query-field table="test-table" field="c">
+ <t:when field="a">
+ <c:value-of name="#1" />
+ </t:when>
+ </t:query-field>
+ </c:length-of>
+ </t:given>
+
+ <t:expect>
+ <t:match-result eq="2" />
+ </t:expect>
+ </t:it>
+
+
+ <t:it desc="returns vector of field values even for single result">
+ <t:given>
+ <c:car>
+ <t:query-field table="test-table" field="c">
+ <t:when field="a">
+ <c:value-of name="#1" />
+ </t:when>
+ <t:when field="b">
+ <c:value-of name="#11" />
+ </t:when>
+ </t:query-field>
+ </c:car>
+ </t:given>
+
+ <t:expect>
+ <t:match-result eq="111" />
+ </t:expect>
+ </t:it>
+ </t:describe>
+
+
+ <t:describe name="with no predicates">
+ <t:it desc="returns vector of all field values">
+ <t:given>
+ <c:length-of>
+ <t:query-field table="test-table" field="c" />
+ </c:length-of>
+ </t:given>
+
+ <t:expect>
+ <t:match-result eq="3" />
+ </t:expect>
+ </t:it>
+ </t:describe>
+ </t:describe>
+
+
+
+ <t:describe name="_query-row_">
+ <t:describe name="with predicates">
+ <t:it desc="returns vector of rows">
+ <t:given>
+ <c:length-of>
+ <t:query-row table="test-table">
+ <t:when field="a">
+ <c:value-of name="#1" />
+ </t:when>
+ </t:query-row>
+ </c:length-of>
+ </t:given>
+
+ <t:expect>
+ <t:match-result eq="2" />
+ </t:expect>
+ </t:it>
+
+
+ <t:it desc="returns vector of rows even for single result">
+ <t:given>
+ <c:let>
+ <c:values>
+ <c:value name="first_row" type="integer" set="vector">
+ <c:car>
+ <t:query-row table="test-table">
+ <t:when field="a">
+ <c:value-of name="#1" />
+ </t:when>
+ <t:when field="b">
+ <c:value-of name="#11" />
+ </t:when>
+ </t:query-row>
+ </c:car>
+ </c:value>
+ </c:values>
+
+ <c:sum of="first_row" />
+ </c:let>
+ </t:given>
+
+ <t:expect>
+ <t:match-result eq="123" />
+ </t:expect>
+ </t:it>
+ </t:describe>
+
+
+ <t:describe name="with no predicates">
+ <t:it desc="returns vector of all rows">
+ <t:given>
+ <c:length-of>
+ <t:query-row table="test-table" />
+ </c:length-of>
+ </t:given>
+
+ <t:expect>
+ <t:match-result eq="3" />
+ </t:expect>
+ </t:it>
+ </t:describe>
+ </t:describe>
+</package>