aboutsummaryrefslogtreecommitdiff
path: root/tests/load.test
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2020-04-18 09:34:25 +1000
committerSteve Bennett <steveb@workware.net.au>2020-05-04 21:57:34 +1000
commitda82368c816c8d06f425aa3f25a2a918fdba1df1 (patch)
treee1dc05358910d168edc982ed05523d0b30ad24d5 /tests/load.test
parent8a5861eb51c32e41d638181188c256c1dbb93c96 (diff)
downloadjimtcl-da82368c816c8d06f425aa3f25a2a918fdba1df1.zip
jimtcl-da82368c816c8d06f425aa3f25a2a918fdba1df1.tar.gz
jimtcl-da82368c816c8d06f425aa3f25a2a918fdba1df1.tar.bz2
tests: Add many new additional tests for code coverage
readdir, tty, utf8, signal, alarm, kill, file, jimsh, posix, aio, history, interp, pack, unpack, eventloop, exec, load, package, regexp, regsub Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'tests/load.test')
-rw-r--r--tests/load.test109
1 files changed, 109 insertions, 0 deletions
diff --git a/tests/load.test b/tests/load.test
new file mode 100644
index 0000000..140194f
--- /dev/null
+++ b/tests/load.test
@@ -0,0 +1,109 @@
+source [file dirname [info script]]/testing.tcl
+
+needs cmd load interp
+
+# In order to test loadable modules we need a working build-jim-ext
+# (from the same directory as jimsh).
+# If we don't have that, just skip these tests.
+
+set buildjimext [file join [file dirname [info nameofexecutable]] build-jim-ext]
+# loadtest.c is in the same directory as this script
+set src [file join [file dirname [info script]] loadtest.c]
+
+set skip 1
+if {[file exec $buildjimext]} {
+ set skip [catch {
+ exec $buildjimext $src
+ }]
+ if {!$skip && ![file exists loadtest.so]} {
+ set skip 1
+ }
+}
+if {$skip} {
+ skiptest " (no working build-jim-ext)"
+}
+
+test load-1.0 {load usage} -body {
+ load
+} -returnCodes error -result {wrong # args: should be "load libraryFile"}
+
+# Now everything is done in a child interpreter so that
+# because loadable modules only get unloaded on interpreter exit
+test load-1.1 {load initial} {
+ set interp [interp]
+ $interp eval {exists -command loadtest}
+} {0}
+
+test load-1.2 {create loadable extension} -body {
+ exec $buildjimext $src
+ file exists loadtest.so
+} -result {1}
+
+test load-1.3 {load dynamic extension} -body {
+ $interp eval {
+ load loadtest.so
+ exists -command loadtest
+ }
+} -result {1}
+
+test load-1.4 {run dynamic extension command} -body {
+ $interp eval {
+ loadtest test abc
+ }
+} -result {abc}
+
+test load-1.5 {load invalid dynamic extension} -body {
+ $interp eval {
+ load nonexistent
+ }
+} -returnCodes error -match glob -result {error loading extension "nonexistent": *}
+
+$interp delete
+
+test load-1.6 {load via package require} {
+ set interp [interp]
+ $interp eval {
+ lappend auto_path [pwd]
+ package require loadtest
+ exists -command loadtest
+ }
+} {1}
+
+$interp delete
+
+test load-2.1 {loadable extension with full path} -body {
+ set interp [interp]
+ exec $buildjimext $src
+ $interp eval {
+ load [pwd]/loadtest.so
+ loadtest test def
+ }
+} -result {def} -cleanup {
+ $interp delete
+}
+
+test load-2.2 {loadable extension without extension} -body {
+ set interp [interp]
+ file rename loadtest.so loadtest
+ $interp eval {
+ load loadtest
+ loadtest test def
+ }
+} -result {def} -cleanup {
+ $interp delete
+ file delete loadtest
+}
+
+test load-2.1 {loadable extension with no entrypoint} -body {
+ set interp [interp]
+ exec $buildjimext --notest -DNO_ENTRYPOINT $src
+ $interp eval {
+ load loadtest.so
+ }
+} -returnCodes error -result {No Jim_loadtestInit symbol found in extension loadtest.so} -cleanup {
+ $interp delete
+}
+
+file delete loadtest.so
+
+testreport