# This file is a Tcl script to test out the code in tkImgSVGnano.c, which reads
# and write SVG-format image files for photo widgets. The files is organized
# in the standard fashion for Tcl tests.
#
# Copyright © 2018 Rene Zaumseil
# All rights reserved.
package require tcltest 2.2
namespace import ::tcltest::*
eval tcltest::configure $argv
tcltest::loadTestedCommands
imageInit
namespace eval svgnano {
variable data
set data(plus) {\
}
set data(bad) {\
}
tcltest::makeFile $data(plus) plus.svg
set data(plusFilePath) [file join [tcltest::configure -tmpdir] plus.svg]
tcltest::makeFile $data(bad) bad.svg
set data(badFilePath) [file join [tcltest::configure -tmpdir] bad.svg]
test imgSVGnano-1.1 {reading simple image} -setup {
catch {rename foo ""}
} -body {
image create photo foo -data $data(plus)
list [image width foo] [image height foo]
} -cleanup {
rename foo ""
} -result {100 100}
test imgSVGnano-1.2 {simple image with options} -setup {
catch {rename foo ""}
} -body {
image create photo foo -data $data(plus) -format {svg -dpi 100 -scale 3}
list [image width foo] [image height foo]
} -cleanup {
rename foo ""
} -result {300 300}
# test on crash found by Koen Danckaert
test imgSVGnano-1.3 {reformat image options} -setup {
catch {rename foo ""}
} -body {
image create photo foo -data $data(plus)
catch {foo configure -format {svg -scale}}
list {}
} -cleanup {
rename foo ""
} -result {{}}
test imgSVGnano-1.4 {image options} -setup {
catch {rename foo ""}
} -body {
image create photo foo -data $data(plus)
foo configure -format {svg -scale 2}
foo configure -format {svg -dpi 600}
list [image width foo] [image height foo]
} -cleanup {
rename foo ""
} -result {100 100}
test imgSVGnano-1.5 {reading simple image from file} -setup {
catch {rename foo ""}
} -body {
image create photo foo -file $data(plusFilePath)
list [image width foo] [image height foo]
} -cleanup {
rename foo ""
} -result {100 100}
test imgSVGnano-1.6 {simple image from file with options} -setup {
catch {rename foo ""}
} -body {
image create photo foo -file $data(plusFilePath) -format {svg -dpi 100 -scale 3}
list [image width foo] [image height foo]
} -cleanup {
rename foo ""
} -result {300 300}
test imgSVGnano-1.7 {very small scale gives 1x1 image} -body {
image create photo foo -format "svg -scale 0.000001"\
-data $data(plus)
list [image width foo] [image height foo]
} -cleanup {
rename foo ""
} -result {1 1}
test imgSVGnano-1.8 {very small scale gives 1x1 image, from file} -body {
image create photo foo -format "svg -scale 0.000001"\
-file $data(plusFilePath)
list [image width foo] [image height foo]
} -cleanup {
rename foo ""
} -result {1 1}
test imgSVGnano-2.1 {reading a bad image} -body {
image create photo foo -format svg -data $data(bad)
} -returnCodes error -result {couldn't recognize image data}
test imgSVGnano-2.2 {using bad option} -body {
image create photo foo -data $data(plus) -format {svg -scale 0}
} -returnCodes error -result {-scale value must be positive}
test imgSVGnano-2.3 {using bad option} -body {
image create photo foo -data $data(plus)
foo configure -format {svg 1.0}
} -cleanup {
rename foo ""
} -returnCodes error -result {bad option "1.0": must be -dpi, -scale, -scaletoheight, or -scaletowidth}
test imgSVGnano-2.4 {reading a bad image from file} -body {
image create photo foo -format svg -file $data(badFilePath)
} -returnCodes error -match glob\
-result {couldn't recognize data in image file "*/bad.svg"}
# -scaletoheight and -scaletowidth options
test imgSVGnano-3.1 {multiple scale options} -body {
image create photo foo -format "svg -scale 1 -scaletowidth 20"\
-data $data(bad)
} -returnCodes error -result {only one of -scale, -scaletoheight, -scaletowidth may be given}
test imgSVGnano-3.2 {no number parameter to -scaletowidth} -body {
image create photo foo -format "svg -scaletowidth invalid"\
-data $data(plus)
} -returnCodes error -result {expected integer but got "invalid"}
test imgSVGnano-3.3 {no number parameter to -scaletoheight} -body {
image create photo foo -format "svg -scaletoheight invalid"\
-data $data(plus)
} -returnCodes error -result {expected integer but got "invalid"}
test imgSVGnano-3.4 {zero parameter to -scaletowidth} -body {
image create photo foo -format "svg -scaletowidth 0"\
-data $data(plus)
} -returnCodes error -result {-scaletowidth value must be positive}
test imgSVGnano-3.5 {zero parameter to -scaletoheight} -body {
image create photo foo -format "svg -scaletoheight 0"\
-data $data(plus)
} -returnCodes error -result {-scaletoheight value must be positive}
test imgSVGnano-3.6 {no number parameter to -scaletoheight} -body {
image create photo foo -format "svg -scaletoheight invalid"\
-data $data(plus)
} -returnCodes error -result {expected integer but got "invalid"}
test imgSVGnano-3.7 {option -scaletowidth} -body {
image create photo foo -format "svg -scaletowidth 20"\
-data $data(plus)
image width foo
} -cleanup {
rename foo ""
} -result 20
test imgSVGnano-3.8 {option -scaletoheight} -body {
image create photo foo -format "svg -scaletoheight 20"\
-data $data(plus)
image height foo
} -cleanup {
rename foo ""
} -result 20
test imgSVGnano-3.10 {change from -scaletoheight to -scale} -body {
set res {}
image create photo foo -format "svg -scaletoheight 16"\
-data $data(plus)
lappend res [image width foo] [image height foo]
foo configure -format "svg -scale 2"
lappend res [image width foo] [image height foo]
} -cleanup {
rename foo ""
unset res
} -result {16 16 200 200}
# svg file access
test imgSVGnano-4.1 {reread file on configure -scale} -setup {
catch {rename foo ""}
set res {}
} -body {
image create photo foo -file $data(plusFilePath)
lappend res [image width foo] [image height foo]
foo configure -format "svg -scale 2"
lappend res [image width foo] [image height foo]
} -cleanup {
rename foo ""
unset res
} -result {100 100 200 200}
test imgSVGnano-4.2 {error on file not accessible on reread due to configure} -setup {
catch {rename foo ""}
tcltest::makeFile $data(plus) tmpplus.svg
image create photo foo -file [file join [tcltest::configure -tmpdir] tmpplus.svg]
tcltest::removeFile tmpplus.svg
} -body {
foo configure -format "svg -scale 2"
} -cleanup {
rename foo ""
} -returnCodes error -match glob -result {couldn't open "*/tmpplus.svg": no such file or directory}
# Special images
test imgSVGnano-5.0 {image without any of "width", "height" and "viewbox"} -body {
image create photo foo -data\
{\
}
} -cleanup {
rename foo ""
} -result {foo}
test imgSVGnano-5.1 {bug ea665e08f3 - too many values in parameters of the transform attribute} -body {
# shall not loop endlessly
image create photo foo -data\
{\
}
} -cleanup {
rename foo ""
} -result {foo}
test imgSVGnano-5.2 {bug d6e9b4db40 - "}
} -returnCodes error -result {couldn't recognize image data}
tcltest::removeFile plus.svg
tcltest::removeFile bad.svg
};# end of namespace svgnano
namespace delete svgnano
imageFinish
cleanupTests
return
# Local Variables:
# mode: tcl
# fill-column: 78
# End: