110 lines
2.4 KiB
Plaintext
110 lines
2.4 KiB
Plaintext
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
|