Mike Gerwitz

Activist for User Freedom

aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorMike Gerwitz <gerwitm@lovullo.com>2016-08-23 11:04:50 -0400
committerMike Gerwitz <gerwitm@lovullo.com>2016-08-23 11:04:50 -0400
commitea3edc18caf803e80b947b9d29e2bb20069dff93 (patch)
tree18bd77f56c62d42842fae9fa23a380d6658bd0e5 /test
parent83599cef704e58624788a67be546ef3f7190855d (diff)
downloadtame-ea3edc18caf803e80b947b9d29e2bb20069dff93.tar.gz
tame-ea3edc18caf803e80b947b9d29e2bb20069dff93.tar.bz2
tame-ea3edc18caf803e80b947b9d29e2bb20069dff93.zip
Initial symbol documentation, find-symbol
* doc/tame.texi: Include `Symbol Table'. * src/symtable.xsl: Added. * test/symtable.xspec: Added, testing `find-symbol'.
Diffstat (limited to 'test')
-rw-r--r--test/symtable.xspec146
1 files changed, 146 insertions, 0 deletions
diff --git a/test/symtable.xspec b/test/symtable.xspec
new file mode 100644
index 0000000..c684cc4
--- /dev/null
+++ b/test/symtable.xspec
@@ -0,0 +1,146 @@
+<?xml version="1.0"?>
+<!--
+ Tests dependency graph
+
+ Copyright (C) 2016 LoVullo Associates, Inc.
+
+ This file is part of TAME.
+
+ TAME 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/>.
+-->
+<description xmlns="http://www.jenitennison.com/xslt/xspec"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:x="http://www.jenitennison.com/xslt/xspec"
+ xmlns:symtable="http://www.lovullo.com/tame/symtable"
+ xmlns:preproc="http://www.lovullo.com/rater/preproc"
+ xmlns:foo="http://www.lovullo.com/_junk"
+ stylesheet="../src/symtable.xsl">
+
+ <variable name="table" as="element( preproc:syms )">
+ <preproc:syms>
+ <preproc:sym name="dup-a"
+ src="dup-a-first"
+ foo:dup="true" />
+ <preproc:sym name="dup-b"
+ src="dup-b-first"
+ foo:dup="true" />
+
+ <preproc:sym name="dup-a"
+ src="dup-a-second"
+ foo:dup="true" />
+ <preproc:sym name="dup-b"
+ src="dup-b-second"
+ foo:dup="true" />
+ <preproc:sym name="dup-b"
+ src="dup-b-third"
+ foo:dup="true" />
+
+ <!-- one of them is the same package as another; all three
+ should be recognized as duplicates so that the caller can
+ resolve or report intelligently -->
+ <preproc:sym name="dup-c-somesame"
+ src="dup-c-first"
+ foo:dup="true" />
+ <preproc:sym name="dup-c-somesame"
+ src="dup-c-same"
+ foo:unique="first"
+ foo:dup="true" />
+ <preproc:sym name="dup-c-somesame"
+ src="dup-c-same"
+ foo:unique="second"
+ foo:dup="true" />
+
+ <preproc:sym name="non-dup"
+ src="ok" />
+
+ <preproc:sym name="non-dup-samepkg"
+ src="same" />
+ <preproc:sym name="non-dup-samepkg"
+ src="same" />
+
+ <!-- some symbols may be missing @src entirely to denote a local
+ symbol -->
+ <preproc:sym name="no-src" />
+
+ <!-- same package, no @src -->
+ <preproc:sym name="no-src-local"
+ foo:uniq="a" />
+ <preproc:sym name="no-src-local"
+ foo:uniq="b" />
+
+ <!-- so it should be considered in determining a duplicate -->
+ <preproc:sym name="no-src-dup"
+ foo:uniq="a"
+ foo:dup="true" />
+ <preproc:sym name="no-src-dup"
+ foo:uniq="b"
+ foo:dup="true" />
+ <preproc:sym name="no-src-dup"
+ src="no-src"
+ foo:dup="true" />
+
+ <!-- ignore externs (one) -->
+ <preproc:sym name="extern-dup-one"
+ src="extern-a" />
+ <preproc:sym name="extern-dup-one"
+ extern="true"
+ src="extern-b" />
+
+ <!-- ignore externs (both) -->
+ <preproc:sym name="extern-dup-both"
+ extern="true"
+ src="extern-a" />
+ <preproc:sym name="extern-dup-both"
+ extern="true"
+ src="extern-b" />
+
+ <!-- ignore externs (combo) -->
+ <preproc:sym name="extern-dup-bothish"
+ src="extern-a" />
+ <preproc:sym name="extern-dup-bothish"
+ extern="true"
+ src="extern-b" />
+ <preproc:sym name="extern-dup-bothish"
+ extern="true"
+ src="extern-c" />
+ </preproc:syms>
+ </variable>
+
+ <variable name="dupes" as="element( preproc:sym )+"
+ select="$table/preproc:sym[ @foo:dup = 'true' ]" />
+
+ <variable name="distinct-dupes" as="xs:string+"
+ select="distinct-values(
+ $table/preproc:sym[
+ @foo:dup = 'true' ]/@name )" />
+
+
+ <scenario label="symtable:find-duplicates">
+ <call function="symtable:find-duplicates">
+ <param name="symtable"
+ select="$table" />
+ </call>
+
+ <expect label="finds all duplicates"
+ test="empty( $dupes except $x:result )" />
+
+ <expect label="does not find any non-duplicates"
+ test="empty( $x:result except $dupes )" />
+
+ <expect label="returns all duplicates by reference"
+ test="every $sym in $x:result
+ satisfies $sym/parent::* is $table" />
+ </scenario>
+</description>