summaryrefslogtreecommitdiffstats
path: root/tcllib/modules/bibtex/bibtex.test
diff options
context:
space:
mode:
Diffstat (limited to 'tcllib/modules/bibtex/bibtex.test')
-rw-r--r--tcllib/modules/bibtex/bibtex.test236
1 files changed, 236 insertions, 0 deletions
diff --git a/tcllib/modules/bibtex/bibtex.test b/tcllib/modules/bibtex/bibtex.test
new file mode 100644
index 0000000..aa84594
--- /dev/null
+++ b/tcllib/modules/bibtex/bibtex.test
@@ -0,0 +1,236 @@
+# -*- tcl -*-
+# bibtex.test: tests for the bibtex parser.
+#
+# Copyright (c) 2005 by Andreas Kupries <a.kupries@westend.com>
+# All rights reserved.
+#
+# RCS: @(#) $Id: bibtex.test,v 1.7 2006/10/09 21:41:40 andreas_kupries Exp $
+
+# -------------------------------------------------------------------------
+
+source [file join \
+ [file dirname [file dirname [file join [pwd] [info script]]]] \
+ devtools testutilities.tcl]
+
+testsNeedTcl 8.4
+testsNeedTcltest 1.0
+
+testing {
+ useLocal bibtex.tcl bibtex
+}
+
+# -------------------------------------------------------------------------
+
+proc track {args} {global track ; lappend track $args ; return}
+proc addstr {token strings} {
+ track string__ $token $strings
+ bibtex::addStrings $token $strings
+}
+
+# -------------------------------------------------------------------------
+
+test bibtex-1.0 {Parse errors} {
+ set code [catch {::bibtex::parse} msg]
+ list $code $msg
+} {1 {wrong # args: should be "::bibtex::parse ?options? ?bibtex?"}}
+
+test bibtex-1.1 {Parse errors} {} {
+ set code [catch {::bibtex::parse -frob} msg]
+ list $code $msg
+} {1 {bad option "frob", should be one of -casesensitivestrings, -channel, -command, -commentcommand, -preamblecommand, -progresscommand, -recordcommand, or -stringcommand}}
+
+test bibtex-1.2 {Parse errors} {
+ set code [catch {::bibtex::parse -frob nibar} msg]
+ list $code $msg
+} {1 {bad option "frob", should be one of -casesensitivestrings, -channel, -command, -commentcommand, -preamblecommand, -progresscommand, -recordcommand, or -stringcommand}}
+
+test bibtex-1.3 {Parse errors} {} {
+ set code [catch {::bibtex::parse -frob nibar fuzz} msg]
+ list $code $msg
+} {1 {bad option "frob", should be one of -casesensitivestrings, -channel, -command, -commentcommand, -preamblecommand, -progresscommand, -recordcommand, or -stringcommand}}
+
+test bibtex-1.4 {Parse errors} {} {
+ set code [catch {::bibtex::parse -command nibar -recordcommand fuzz snarf} msg]
+ list $code $msg
+} {1 {The options -command and -TYPEcommand exclude each other}}
+
+test bibtex-1.5 {Parse errors} {} {
+ set code [catch {::bibtex::parse -channel nibar snarf} msg]
+ list $code $msg
+} {1 {Option -channel and text exclude each other}}
+
+test bibtex-1.6 {Parse errors} {} {
+ set code [catch {::bibtex::parse -channel nibar} msg]
+ list $code $msg
+} {1 {Illegal channel handle "nibar"}}
+
+test bibtex-1.7 {Parse errors} {} {
+ set code [catch {::bibtex::parse -command nibar} msg]
+ list $code $msg
+} {1 {Neither -channel nor text specified}}
+
+test bibtex-1.8 {Parse errors} {} {
+ set code [catch {::bibtex::parse -command nibar fuzz snarf} msg]
+ list $code $msg
+} {1 {wrong # args: ::bibtex::parse ?options? ?bibtex?}}
+
+test bibtex-1.9 {Parse errors} {} {
+ set code [catch {::bibtex::parse -command nibar fuzz} msg]
+ list $code $msg
+} {1 {Option -command and text exclude each other}}
+
+
+# -------------------------------------------------------------------------
+
+set bytecode [list [list \
+ book krasner83 [list \
+ title {Smalltalk-80: Bits of History, Words of Advice} \
+ publisher Addison-Wesley \
+ year 1983 \
+ editor {Glen Krasner} \
+ ]]]
+
+set penn [list [list \
+ inproceedings Carberry90 [list \
+ author {Sandra Carberry} \
+ title {Incorporating default inferences into plan recognition} \
+ booktitle aaai90 \
+ year 1990 \
+ pages 471--478 \
+ address {Boston, MA} \
+ ]]]
+
+set pennfull [list [list \
+ inproceedings Carberry90 [list \
+ author {Sandra Carberry} \
+ title {Incorporating default inferences into plan recognition} \
+ booktitle {Proc. National Conference on Artificial Intelligence, Boston} \
+ year 1990 \
+ pages 471--478 \
+ address {Boston, MA} \
+ ]]]
+
+
+test bibtex-2.0 {Parse string, direct result} {
+ set str [viewFile [file join [file dirname [info script]] bytecode.bib]]
+ bibtex::parse $str
+} $bytecode
+
+test bibtex-2.1 {Parse string, sax mode} {
+ set track {}
+ set str [viewFile [file join [file dirname [info script]] bytecode.bib]]
+ set t [bibtex::parse \
+ -progresscommand {track progress} \
+ -commentcommand {track comment_} \
+ -stringcommand {track string__} \
+ -preamblecommand {track preamble} \
+ -recordcommand {track record__} \
+ $str]
+ bibtex::destroy $t
+ list $t $track
+} [list bibtex2 [list \
+ {progress bibtex2 100} \
+ [linsert [lindex $bytecode 0] 0 record__ bibtex2]
+]]
+
+test bibtex-2.2 {Parse channel, direct result} {
+ # The contents of penn_sub.bib have been taken out of
+ # ftp://ftp.cis.upenn.edu/pub/anoop/bib/pennbib.bib
+
+ set chan [open [file join [file dirname [info script]] penn_sub.bib] r]
+ set records [bibtex::parse -channel $chan]
+ close $chan
+ set records
+} $pennfull
+
+test bibtex-2.3 {Parse channel, sax mode} {
+ set track {}
+ set chan [open [file join [file dirname [info script]] penn_sub.bib] r]
+
+ set t [bibtex::parse \
+ -progresscommand {track progress} \
+ -commentcommand {track comment_} \
+ -stringcommand {track string__} \
+ -preamblecommand {track preamble} \
+ -recordcommand {track record__} \
+ -channel $chan]
+ bibtex::wait $t
+ bibtex::destroy $t
+
+ close $chan
+ set track
+} [list \
+ {progress bibtex4 50} \
+ {string__ bibtex4 {aaai90 {Proc. National Conference on Artificial Intelligence, Boston}}} \
+ {progress bibtex4 100} \
+ [linsert [lindex $penn 0] 0 record__ bibtex4] \
+ ]
+
+test bibtex-2.4 {Parse channel, sax mode 2} {
+ set track {}
+ set chan [open [file join [file dirname [info script]] penn_sub.bib] r]
+
+ set t [bibtex::parse \
+ -progresscommand {track progress} \
+ -commentcommand {track comment_} \
+ -stringcommand addstr \
+ -preamblecommand {track preamble} \
+ -recordcommand {track record__} \
+ -channel $chan]
+ bibtex::wait $t
+ bibtex::destroy $t
+ close $chan
+ set track
+} [list \
+ {progress bibtex5 50} \
+ {string__ bibtex5 {aaai90 {Proc. National Conference on Artificial Intelligence, Boston}}} \
+ {progress bibtex5 100} \
+ [linsert [lindex $pennfull 0] 0 record__ bibtex5] \
+ ]
+
+test bibtex-2.5 {Parse channel, async} {
+ # The contents of penn_sub.bib have been taken out of
+ # ftp://ftp.cis.upenn.edu/pub/anoop/bib/pennbib.bib
+
+ set chan [open [file join [file dirname [info script]] penn_sub.bib] r]
+ proc done {args} {global done ; set done $args ; return}
+
+ set done ""
+ set t [bibtex::parse -command done -channel $chan]
+ vwait ::done
+ bibtex::destroy $t
+ close $chan
+ set done
+} [list bibtex6 $pennfull]
+
+
+test bibtex-3.0 {Destroying a parser} {
+ set code [catch {::bibtex::destroy} msg]
+ list $code $msg
+} [list 1 [tcltest::wrongNumArgs "::bibtex::destroy" "token" 0]]
+
+test bibtex-3.1 {Destroying a parser} {
+ set code [catch {::bibtex::destroy a b} msg]
+ list $code $msg
+} [list 1 [tcltest::tooManyArgs "::bibtex::destroy" "token"]]
+
+test bibtex-3.2 {Destroying a parser} {
+ set code [catch {::bibtex::destroy foo} msg]
+ list $code $msg
+} {1 {Illegal bibtex parser "foo"}}
+
+test bibtex-4.0 {Destroying a parser} {
+
+ set chan [open [file join [file dirname [info script]] bytecode.bib] r]
+ proc done {args} {global done ; set done $args ; return}
+
+ set done ""
+ set t [bibtex::parse -command done -channel $chan]
+ bibtex::destroy $t
+ close $chan
+} {}
+
+# ... Tests of addStrings ...
+# (Requires introspection of parser state)
+
+testsuiteCleanup