diff options
author | Mike Gerwitz <gerwitm@lovullo.com> | 2016-08-23 11:04:50 -0400 |
---|---|---|
committer | Mike Gerwitz <gerwitm@lovullo.com> | 2016-08-23 11:04:50 -0400 |
commit | ea3edc18caf803e80b947b9d29e2bb20069dff93 (patch) | |
tree | 18bd77f56c62d42842fae9fa23a380d6658bd0e5 /test | |
parent | 83599cef704e58624788a67be546ef3f7190855d (diff) | |
download | tame-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.xspec | 146 |
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> |