summaryrefslogtreecommitdiffstats
path: root/tests/autoMkindex.test
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2002-07-01 04:06:51 (GMT)
committerdgp <dgp@users.sourceforge.net>2002-07-01 04:06:51 (GMT)
commit21c2b3f94cc68e59ad5b480e23615818aca6c6e3 (patch)
tree598fe38989c6bb6e2a7fcdef06a31cce6335fe7d /tests/autoMkindex.test
parent9aa8e5b0df06c585ca9336eaea31fd6cde87d2f5 (diff)
downloadtcl-21c2b3f94cc68e59ad5b480e23615818aca6c6e3.zip
tcl-21c2b3f94cc68e59ad5b480e23615818aca6c6e3.tar.gz
tcl-21c2b3f94cc68e59ad5b480e23615818aca6c6e3.tar.bz2
* Updated auto_mkIndex tests to use
[makeFile] and [removeFile] so tests are done in [temporaryDirecotry] where write access is guaranteed.
Diffstat (limited to 'tests/autoMkindex.test')
-rw-r--r--tests/autoMkindex.test151
1 files changed, 139 insertions, 12 deletions
diff --git a/tests/autoMkindex.test b/tests/autoMkindex.test
index 77c4d80..37b7f61 100644
--- a/tests/autoMkindex.test
+++ b/tests/autoMkindex.test
@@ -9,20 +9,97 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# RCS: @(#) $Id: autoMkindex.test,v 1.12 2001/05/03 22:38:20 dgp Exp $
+# RCS: @(#) $Id: autoMkindex.test,v 1.13 2002/07/01 04:06:51 dgp Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
- package require tcltest
+ package require tcltest 2
namespace import -force ::tcltest::*
}
-# temporarily copy the autoMkindex.tcl file from testsDirectory to
-# temporaryDirectory
-set origMkindexFile [file join $::tcltest::testsDirectory autoMkindex.tcl]
-set newMkindexFile [file join $::tcltest::temporaryDirectory autoMkindex.tcl]
-if {![catch {file copy $origMkindexFile $newMkindexFile}]} {
- set removeAutoMkindex 1
+makeFile {# Test file for:
+# auto_mkindex
+#
+# This file provides example cases for testing the Tcl autoloading
+# facility. Things are much more complicated with namespaces and classes.
+# The "auto_mkindex" facility can no longer be built on top of a simple
+# regular expression parser. It must recognize constructs like this:
+#
+# namespace eval foo {
+# proc test {x y} { ... }
+# namespace eval bar {
+# proc another {args} { ... }
+# }
+# }
+#
+# Note that procedures and itcl class definitions can be nested inside
+# of namespaces.
+#
+# Copyright (c) 1993-1998 Lucent Technologies, Inc.
+
+# This shouldn't cause any problems
+namespace import -force blt::*
+
+# Should be able to handle "proc" definitions, even if they are
+# preceded by white space.
+
+proc normal {x y} {return [expr $x+$y]}
+ proc indented {x y} {return [expr $x+$y]}
+
+#
+# Should be able to handle proc declarations within namespaces,
+# even if they have explicit namespace paths.
+#
+namespace eval buried {
+ proc inside {args} {return "inside: $args"}
+
+ namespace export pub_*
+ proc pub_one {args} {return "one: $args"}
+ proc pub_two {args} {return "two: $args"}
+}
+proc buried::within {args} {return "within: $args"}
+
+namespace eval buried {
+ namespace eval under {
+ proc neath {args} {return "neath: $args"}
+ }
+ namespace eval ::buried {
+ proc relative {args} {return "relative: $args"}
+ proc ::top {args} {return "top: $args"}
+ proc ::buried::explicit {args} {return "explicit: $args"}
+ }
+}
+
+# With proper hooks, we should be able to support other commands
+# that create procedures
+
+proc buried::myproc {name body args} {
+ ::proc $name $body $args
+}
+namespace eval ::buried {
+ proc mycmd1 args {return "mycmd"}
+ myproc mycmd2 args {return "mycmd"}
+}
+::buried::myproc mycmd3 args {return "another"}
+
+proc {buried::my proc} {name body args} {
+ ::proc $name $body $args
+}
+namespace eval ::buried {
+ proc mycmd4 args {return "mycmd"}
+ {my proc} mycmd5 args {return "mycmd"}
}
+{::buried::my proc} mycmd6 args {return "another"}
+
+# A correctly functioning [auto_import] won't choke when a child
+# namespace [namespace import]s from its parent.
+#
+namespace eval ::parent::child {
+ namespace import ::parent::*
+}
+proc ::parent::child::test {} {}
+
+} autoMkindex.tcl
+
# Save initial state of auto_mkindex_parser
@@ -42,7 +119,7 @@ proc AutoMkindexTestReset {} {
set result ""
set origDir [pwd]
-cd $::tcltest::testsDirectory
+cd $::tcltest::temporaryDirectory
test autoMkindex-1.1 {remove any existing tclIndex file} {
file delete tclIndex
@@ -176,6 +253,37 @@ test autoMkindex-3.3 {auto_mkindex_parser::command} {knownBug} {
list [lvalue $::result *mycmd4*] [lvalue $::result *mycmd5*] [lvalue $::result *mycmd6*]
} "{::buried::mycmd4 $element} {::buried::mycmd5 $element} {mycmd6 $element}"
+
+makeDirectory pkg
+makeFile {
+package provide football 1.0
+
+namespace eval ::pro:: {
+ #
+ # export only public functions.
+ #
+ namespace export {[a-z]*}
+}
+namespace eval ::college:: {
+ #
+ # export only public functions.
+ #
+ namespace export {[a-z]*}
+}
+
+proc ::pro::team {} {
+ puts "go packers!"
+ return true
+}
+
+proc ::college::team {} {
+ puts "go badgers!"
+ return true
+}
+
+} [file join pkg samename.tcl]
+
+
test autoMkindex-4.1 {platform indenpendant source commands} {
file delete tclIndex
auto_mkindex . pkg/samename.tcl
@@ -187,6 +295,17 @@ test autoMkindex-4.1 {platform indenpendant source commands} {
set result
} {{set auto_index(::college::team) [list source [file join $dir pkg samename.tcl]]} {set auto_index(::pro::team) [list source [file join $dir pkg samename.tcl]]}}
+removeFile [file join pkg samename.tcl]
+
+makeFile {
+set dollar1 "this string contains an unescaped dollar sign -> \\$foo"
+set dollar2 "this string contains an escaped dollar sign -> \$foo \\\$foo"
+set bracket1 "this contains an unescaped bracket [NoSuchProc]"
+set bracket2 "this contains an escaped bracket \[NoSuchProc\]"
+set bracket3 "this contains nested unescaped brackets [[NoSuchProc]]"
+proc testProc {} {}
+} [file join pkg magicchar.tcl]
+
test autoMkindex-5.1 {escape magic tcl chars in general code} {
file delete tclIndex
set result {}
@@ -198,6 +317,13 @@ test autoMkindex-5.1 {escape magic tcl chars in general code} {
}
set result
} {set auto_index(testProc) [list source [file join $dir pkg magicchar.tcl]]}
+
+removeFile [file join pkg magicchar.tcl]
+
+makeFile {
+proc {[magic mojo proc]} {} {}
+} [file join pkg magicchar2.tcl]
+
test autoMkindex-5.2 {correctly locate auto loaded procs with []} {
file delete tclIndex
set res {}
@@ -211,6 +337,9 @@ test autoMkindex-5.2 {correctly locate auto loaded procs with []} {
set res
} 0
+removeFile [file join pkg magicchar2.tcl]
+removeDirectory pkg
+
# Clean up.
unset result
@@ -220,9 +349,7 @@ if {[info exist saveCommands]} {
}
rename AutoMkindexTestReset ""
-if {[info exists removeAutoMkindex]} {
- catch {file delete $newMkindexFile}
-}
+removeFile autoMkindex.tcl
if {[file exists tclIndex]} {
file delete -force tclIndex
}