diff options
author | Steve Bennett <steveb@workware.net.au> | 2020-04-18 09:34:25 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2020-05-04 21:57:34 +1000 |
commit | da82368c816c8d06f425aa3f25a2a918fdba1df1 (patch) | |
tree | e1dc05358910d168edc982ed05523d0b30ad24d5 /tests/load.test | |
parent | 8a5861eb51c32e41d638181188c256c1dbb93c96 (diff) | |
download | jimtcl-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.test | 109 |
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 |