# This file is a Tcl script to test out the code in tkImgFmtPPM.c,
# which reads and write PPM-format image files for photo widgets.
# The files is organized in the standard fashion for Tcl tests.
#
# Copyright (c) 1994-1997 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
# All rights reserved.
#
# RCS: @(#) $Id: imgPPM.test,v 1.5 2002/07/13 21:52:34 dgp Exp $

package require tcltest 2.1
namespace import -force tcltest::configure
namespace import -force tcltest::testsDirectory
configure -testdir [file join [pwd] [file dirname [info script]]]
configure -loadfile [file join [testsDirectory] constraints.tcl]
tcltest::loadTestedCommands

namespace import -force tcltest::makeFile
namespace import -force tcltest::removeFile

eval image delete [image names]

proc put {file data} {
    set f [open $file w]
    fconfigure $f -translation lf
    puts -nonewline $f $data
    close $f
}

test imgPPM-1.1 {FileReadPPM procedure} {
    put test.ppm "P6\n0 256\n255\nabcdef"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {1 {PPM image file "test.ppm" has dimension(s) <= 0}}
test imgPPM-1.2 {FileReadPPM procedure} {
    put test.ppm "P6\n-2 256\n255\nabcdef"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {1 {PPM image file "test.ppm" has dimension(s) <= 0}}
test imgPPM-1.3 {FileReadPPM procedure} {
    put test.ppm "P6\n10 0\n255\nabcdef"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {1 {PPM image file "test.ppm" has dimension(s) <= 0}}
test imgPPM-1.4 {FileReadPPM procedure} {
    put test.ppm "P6\n10 -2\n255\nabcdef"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {1 {PPM image file "test.ppm" has dimension(s) <= 0}}
test imgPPM-1.5 {FileReadPPM procedure} {
    put test.ppm "P6\n10 20\n256\nabcdef"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {1 {PPM image file "test.ppm" has bad maximum intensity value 256}}
test imgPPM-1.6 {FileReadPPM procedure} {
    put test.ppm "P6\n10 20\n0\nabcdef"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {1 {PPM image file "test.ppm" has bad maximum intensity value 0}}
test imgPPM-1.7 {FileReadPPM procedure} {
    put test.ppm "P6\n10 10\n255\nabcdef"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {1 {error reading PPM image file "test.ppm": not enough data}}
test imgPPM-1.8 {FileReadPPM procedure} {
    put test.ppm "P6\n5 4\n255\n01234567890123456789012345678901234567890123456789012345678"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {1 {error reading PPM image file "test.ppm": not enough data}}
test imgPPM-1.9 {FileReadPPM procedure} {
    put test.ppm "P6\n5 4\n150\n012345678901234567890123456789012345678901234567890123456789"
    list [catch {image create photo p1 -file test.ppm} msg] $msg \
	    [image width p1] [image height p1]
} {0 p1 5 4}

catch {image delete p1}
put test.ppm "P6\n5 4\n255\n012345678901234567890123456789012345678901234567890123456789"
image create photo p1 -file test.ppm
test imgPPM-2.1 {FileWritePPM procedure} {
    list [catch {p1 write not_a_dir/bar/baz/gorp} msg] [string tolower $msg] \
	    [string tolower $errorCode]
} {1 {couldn't open "not_a_dir/bar/baz/gorp": no such file or directory} {posix enoent {no such file or directory}}}
test imgPPM-2.2 {FileWritePPM procedure} {
    catch {unset data}
    p1 write -format ppm test2.ppm
    set fd [open test2.ppm]
    set data [read $fd]
    close $fd
    set data
} {P6
5 4
255
012345678901234567890123456789012345678901234567890123456789}

test imgPPM-3.1 {ReadPPMFileHeader procedure} {
    catch {image delete p1}
    put test.ppm "#   \n#\n#\nP6\n#\n##\n5 4\n255\n012345678901234567890123456789012345678901234567890123456789"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {0 p1}
test imgPPM-3.2 {ReadPPMFileHeader procedure} {
    catch {image delete p1}
    put test.ppm "P6\n5\n 4   	                                                                 255\n012345678901234567890123456789012345678901234567890123456789"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {0 p1}
test imgPPM-3.3 {ReadPPMFileHeader procedure} {
    catch {image delete p1}
    put test.ppm "P6\n#                                                                      asdfasdf\n5 4\n255\n012345678901234567890123456789012345678901234567890123456789"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {0 p1}
test imgPPM-3.4 {ReadPPMFileHeader procedure} {
    catch {image delete p1}
    put test.ppm "P6 \n5 4\n255\n012345678901234567890123456789012345678901234567890123456789"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {0 p1}
test imgPPM-3.5 {ReadPPMFileHeader procedure} {
    catch {image delete p1}
    put test.ppm "P5\n5 4\n255\n01234567890123456789"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {0 p1}
test imgPPM-3.6 {ReadPPMFileHeader procedure} {
    catch {image delete p1}
    put test.ppm "P3\n5 4\n255\n012345678901234567890123456789012345678901234567890123456789"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {1 {couldn't recognize data in image file "test.ppm"}}
test imgPPM-3.7 {ReadPPMFileHeader procedure} {
    catch {image delete p1}
    put test.ppm "P6x\n5 4\n255\n012345678901234567890123456789012345678901234567890123456789"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {1 {couldn't recognize data in image file "test.ppm"}}
test imgPPM-3.8 {ReadPPMFileHeader procedure} {
    catch {image delete p1}
    put test.ppm "P6\nxy5 4\n255\n012345678901234567890123456789012345678901234567890123456789"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {1 {couldn't recognize data in image file "test.ppm"}}
test imgPPM-3.9 {ReadPPMFileHeader procedure} {
    catch {image delete p1}
    put test.ppm "P6\n5\n255\n!012345678901234567890123456789012345678901234567890123456789"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {1 {couldn't recognize data in image file "test.ppm"}}
test imgPPM-3.10 {ReadPPMFileHeader procedure} {
    catch {image delete p1}
    put test.ppm "P6\n5 4\nzz255\n012345678901234567890123456789012345678901234567890123456789"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {1 {couldn't recognize data in image file "test.ppm"}}
test imgPPM-3.11 {ReadPPMFileHeader procedure, empty file} {
    catch {image delete p1}
    put test.ppm "     "
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {1 {couldn't recognize data in image file "test.ppm"}}
test imgPPM-3.12 {ReadPPMFileHeader procedure, file ends too soon} {
    catch {image delete p1}
    put test.ppm "P6\n566"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {1 {couldn't recognize data in image file "test.ppm"}}
test imgPPM-3.13 {ReadPPMFileHeader procedure, file ends too soon} {
    catch {image delete p1}
    put test.ppm "P6\n566\n#asdf"
    list [catch {image create photo p1 -file test.ppm} msg] $msg
} {1 {couldn't recognize data in image file "test.ppm"}}

removeFile test.ppm
removeFile test2.ppm
eval image delete [image names]

# cleanup
::tcltest::cleanupTests
return