#DOCUMENTATION by cg
class: RegressionTests::IntegerTest
added: #testReading2
changed: #testBitReversed
"{ Encoding: utf8 }"
"{ Package: 'stx:goodies/regression' }"
"{ NameSpace: RegressionTests }"
TestCase subclass:#ImageReaderTest
instanceVariableNames:''
classVariableNames:''
poolDictionaries:''
category:'tests-Regression-File Formats'
!
!ImageReaderTest class methodsFor:'documentation'!
documentation
"
documentation to be added.
[author:]
cg (cg@AQUA-DUO)
[instance variables:]
[class variables:]
[see also:]
"
! !
!ImageReaderTest methodsFor:'tests'!
test001_bmp
|img|
img := Image fromFile:(Helper packageDirectoryForRegressionTests construct:'testData/bmpImages/test1.bmp').
self assert:(img notNil).
self assert:(img depth == 1).
"/ img inspect.
self assert:((img colorAtX:0 y:0) rgbValue = 16r4040FF).
self assert:((img colorAtX:0 y:63) rgbValue = 16r4040FF).
self assert:((img colorAtX:0 y:18) rgbValue = 16r40FF40).
"
self run:#test001_bmp
self new test001_bmp"
!
test002_bmp
|img|
img := Image fromFile:(Helper packageDirectoryForRegressionTests construct:'testData/bmpImages/test4.bmp').
self assert:(img notNil).
self assert:(img depth == 4).
self assert:((img colorAtX:0 y:15) rgbValue = 16rFF0000).
self assert:((img colorAtX:35 y:15) rgbValue = 16r004000).
self assert:((img colorAtX:35 y:30) rgbValue = 16r008000).
self assert:((img colorAtX:35 y:45) rgbValue = 16r00C000).
self assert:((img colorAtX:35 y:60) rgbValue = 16r00FF00).
self assert:((img colorAtX:70 y:15) rgbValue = 16r0000FF).
"/ img inspect.
"
self run:#test002_bmp
self new test002_bmp"
!
test003_bmp
|img|
img := Image fromFile:(Helper packageDirectoryForRegressionTests construct:'testData/bmpImages/test8.bmp').
self assert:(img notNil).
self assert:(img depth == 8).
self assert:((img colorAtX:30 y:0) rgbValue = 16rFF0000).
"/ img inspect
"
self run:#test003_bmp
self new test003_bmp"
!
test004_bmp
|img|
img := Image fromFile:(Helper packageDirectoryForRegressionTests construct:'testData/bmpImages/testcompress4.bmp').
self assert:(img notNil).
self assert:(img depth == 4).
self assert:((img colorAtX:0 y:15) rgbValue = 16rFF0000).
self assert:((img colorAtX:35 y:15) rgbValue = 16r004000).
self assert:((img colorAtX:35 y:30) rgbValue = 16r008000).
self assert:((img colorAtX:35 y:45) rgbValue = 16r00C000).
self assert:((img colorAtX:35 y:60) rgbValue = 16r00FF00).
self assert:((img colorAtX:70 y:15) rgbValue = 16r0000FF).
"/ img inspect.
"
self run:#test004_bmp
self new test004_bmp"
!
test005_bmp
|img|
img := Image fromFile:(Helper packageDirectoryForRegressionTests construct:'testData/bmpImages/testcompress8.bmp').
self assert:(img notNil).
self assert:(img depth == 8).
self assert:((img colorAtX:30 y:0) rgbValue = 16rFF0000).
"/ img inspect.
"
self run:#test005_bmp
self new test005_bmp"
!
test006_bmp
|img|
img := Image fromFile:(Helper packageDirectoryForRegressionTests construct:'testData/bmpImages/test8os2.bmp').
self assert:(img notNil).
"/ img inspect.
"
self run:#test006_bmp
self new test006_bmp"
!
test007_bmp
|img|
img := Image fromFile:(Helper packageDirectoryForRegressionTests construct:'testData/bmpImages/test4os2v2.bmp').
self assert:(img notNil).
"/ img inspect.
"
self run:#test007_bmp
self new test007_bmp"
!
test008_bmp
|img|
img := Image fromFile:(Helper packageDirectoryForRegressionTests construct:'testData/bmpImages/test16.bmp').
self assert:(img notNil).
"/ img inspect.
"
self run:#test008_bmp
self new test008_bmp"
!
test009_bmp
|img|
img := Image fromFile:(Helper packageDirectoryForRegressionTests construct:'testData/bmpImages/test24.bmp').
self assert:(img notNil).
"/ img inspect.
"
self run:#test009_bmp
self new test009_bmp"
!
test010_bmp
|img|
img := Image fromFile:(Helper packageDirectoryForRegressionTests construct:'testData/bmpImages/test32.bmp').
self assert:(img notNil).
"/ img inspect.
"
self run:#test010_bmp
self new test010_bmp"
!
test101
|alpha s bits img|
img := Depth32Image width:16 height:16.
alpha := #[
0 0 0 0 63 63 63 63 127 127 127 127 255 255 255 255
0 0 0 0 63 63 63 63 127 127 127 127 255 255 255 255
0 0 0 0 63 63 63 63 127 127 127 127 255 255 255 255
0 0 0 0 63 63 63 63 127 127 127 127 255 255 255 255
0 0 0 0 63 63 63 63 127 127 127 127 255 255 255 255
0 0 0 0 63 63 63 63 127 127 127 127 255 255 255 255
0 0 0 0 63 63 63 63 127 127 127 127 255 255 255 255
0 0 0 0 63 63 63 63 127 127 127 127 255 255 255 255
0 0 0 0 63 63 63 63 127 127 127 127 255 255 255 255
0 0 0 0 63 63 63 63 127 127 127 127 255 255 255 255
0 0 0 0 63 63 63 63 127 127 127 127 255 255 255 255
0 0 0 0 63 63 63 63 127 127 127 127 255 255 255 255
0 0 0 0 63 63 63 63 127 127 127 127 255 255 255 255
0 0 0 0 63 63 63 63 127 127 127 127 255 255 255 255
0 0 0 0 63 63 63 63 127 127 127 127 255 255 255 255
0 0 0 0 63 63 63 63 127 127 127 127 255 255 255 255
].
s := WriteStream on:#[].
alpha do:[:a |
s nextPut:127. "/ r
s nextPut:127. "/ g
s nextPut:127. "/ b
s nextPut:a.
].
bits := (s contents).
img bits:bits.
"/ img inspect.
"
self run:#test101
self new test101
"
!
testPNG_001_basn0g01
|img|
img := Image fromFile:(Helper packageDirectoryForRegressionTests construct:'testData/pngImages/basn0g01.png').
self assert:(img notNil).
self assert:(img depth == 1).
self assert:(img extent = (32@32)).
self assert:(img colorAt:(0@0)) = Color white.
self assert:(img colorAt:(31@31)) = Color black.
"/ img inspect.
"
self run:#testPNG_001_basn0g01
self new testPNG_001_basn0g01
"
"Created: / 05-02-2011 / 10:32:32 / cg"
!
testPNG_002_basn0g02
|img|
img := Image fromFile:(Helper packageDirectoryForRegressionTests construct:'testData/pngImages/basn0g02.png').
self assert:(img notNil).
self assert:(img depth == 2).
self assert:(img extent = (32@32)).
self assert:(img colorAt:(0@0)) rgbValue = 0.
self assert:(img colorAt:(31@31)) rgbValue = 16rAAAAAA.
"/ img inspect.
"
self run:#testPNG_002_basn0g02
self new testPNG_002_basn0g02
"
"Created: / 05-02-2011 / 10:33:24 / cg"
!
testPNG_003_basi0g01
|img|
img := Image fromFile:(Helper packageDirectoryForRegressionTests construct:'testData/pngImages/basi0g01.png').
self assert:(img notNil).
self assert:(img depth == 1).
self assert:(img extent = (32@32)).
self assert:(img colorAt:(0@0)) = Color white.
self assert:(img colorAt:(31@31)) = Color black.
"/ img inspect.
"
self run:#testPNG_003_basi0g01
self new testPNG_003_basi0g01
"
"Created: / 05-02-2011 / 10:32:32 / cg"
!
testPNG_004_tbbn0g04
"a grayscale image with mask"
|img|
img := Image fromFile:(Helper packageDirectoryForRegressionTests construct:'testData/pngImages/tbbn0g04.png').
self assert:(img notNil).
self assert:(img depth == 4).
self assert:(img extent = (32@32)).
self assert:(img photometric = #blackIs0).
self assert:(img mask notNil).
"/ img inspect.
"
self run:#testPNG_004_tbbn0g04
self new testPNG_004_tbbn0g04
"
"Created: / 17-02-2017 / 14:11:44 / cg"
!
testPNG_004_tbbn3p03
|img|
img := Image fromFile:(Helper packageDirectoryForRegressionTests construct:'testData/pngImages/tbbn0g04.png').
self assert:(img notNil).
self assert:(img depth == 4).
self assert:(img extent = (32@32)).
self assert:(img photometric = #blackIs0).
self assert:(img mask notNil).
"/ img inspect.
"
self run:#testPNG_004_tbbn0g04
self new testPNG_004_tbbn0g04
"
"Created: / 17-02-2017 / 14:12:55 / cg"
!
testPNG_005_tbbn3p08
"a palette image with mask"
|img|
img := Image fromFile:(Helper packageDirectoryForRegressionTests construct:'testData/pngImages/tbbn3p08.png').
self assert:(img notNil).
self assert:(img depth == 8).
self assert:(img extent = (32@32)).
self assert:(img photometric = #palette).
self assert:(img mask notNil).
"/ img inspect.
"
self run:#testPNG_005_tbbn3p08
self new testPNG_005_tbbn3p08
"
"Created: / 17-02-2017 / 14:13:50 / cg"
!
test_bmp_01
|img allOK failed|
failed := OrderedCollection new.
allOK := true.
(Helper packageDirectoryForRegressionTests construct:'testData/bmpImages') directoryContentsAsFilenamesDo:[:f |
(f isRegularFile and:[f hasSuffix:'bmp']) ifTrue:[
Error handle:[:ex |
img := nil.
] do:[
img := Image fromFile:f.
].
img isNil ifTrue:[
Transcript printf:'failed: %s\n' with:f baseName.
allOK := false.
failed add:f baseName.
].
].
].
self assert:allOK description:('failed to read: %s' printfWith:(failed asStringWith:', ')).
"
self run:#test_bmp_01
self new test_bmp_01
"
!
test_bmp_02
|img allOK failed|
failed := OrderedCollection new.
allOK := true.
(Helper packageDirectoryForRegressionTests construct:'testData/bmpImages/bmpsuite-2.4') directoryContentsAsFilenamesDo:[:f |
(f isRegularFile and:[f hasSuffix:'bmp']) ifTrue:[
Error handle:[:ex |
img := nil.
] do:[
img := Image fromFile:f.
].
img isNil ifTrue:[
Transcript printf:'failed: %s\n' with:f baseName.
allOK := false.
failed add:f baseName.
].
].
].
self assert:allOK description:('failed to read: %s' printfWith:(failed asStringWith:', ')).
"
self run:#test_bmp_02
self new test_bmp_02
"
!
test_png_01
"/ currently, 4 files fail;
"/ these are greyscale+alpha images
|img allOK failed|
failed := OrderedCollection new.
allOK := true.
(Helper packageDirectoryForRegressionTests construct:'testData/pngImages') directoryContentsAsFilenamesDo:[:f |
(f isRegularFile and:[f hasSuffix:'png']) ifTrue:[
img := nil.
(f baseName startsWith:'x') ifTrue:[
"/ should fail
self should:[ img := Image fromFile:f ] raise:(Image badImageFormatQuerySignal).
self assert:img == nil.
] ifFalse:[
Error handle:[:ex |
Transcript printf:'PNG failed: %s (%s)\n' with:f baseName with:ex description.
img := nil.
] do:[
img := Image fromFile:f.
].
img isNil ifTrue:[
allOK := false.
failed add:f baseName.
"/ self halt.
"/ img := Image fromFile:f.
].
].
].
].
"/ self assert:allOK description:('failed to read: %s' printfWith:(failed asStringWith:', ')).
allOK ifFalse:[
self assert:(failed size <= 4) description:('failed to read: %s' printfWith:(failed asStringWith:', ')).
].
"
self run:#test_png_01
self new test_png_01
"
"Modified: / 17-02-2017 / 11:36:53 / cg"
!
test_png_02
|referenceImg img|
img := Image fromFile:(Helper packageDirectoryForRegressionTests construct:'testData/pngImages/basn0g01.png').
self assert:(img notNil).
referenceImg := (Depth1Image new) width: 32; height: 32;
photometric:(#palette);
bitsPerSample:(#[1]);
samplesPerPixel:(1);
bits:(ByteArray fromPackedString:'
?????/????3????8????<OO3?>C3<??@<?O? OL3?0C3L?8@<3O<@O G>@C8A?@@?L? @O3O0@C??8@@??<@@O?>@@C??@@@?? O8O?0C>C?8@00?<@LLO>@
C>C?@@? ? @LLO0@CCC8@@? <@@O8N@@@@C@@@@@ @@@@@@@@@@b') ;
colorMapFromArray:#[0 0 0 255 255 255];
yourself.
self assert:(img bits = referenceImg bits).
self assert:(img width = referenceImg width).
self assert:(img height = referenceImg height).
self assert:(img depth = referenceImg depth).
self assert:(img bitsPerSample asArray = referenceImg bitsPerSample asArray).
self assert:(img samplesPerPixel = referenceImg samplesPerPixel).
self assert:(img colorFromValue:0) = (referenceImg colorFromValue:0).
self assert:(img colorFromValue:1) = (referenceImg colorFromValue:1).
"
self run:#test_png_02
self new test_png_02
"
!
test_save_1BitPaletteImage
|testImage readerImage
testView expectedImage gotFromReaderImage|
self skip:'some image formats read back different images; needs fix'.
true "Display isNil" ifTrue:[
self skip.
].
"/ a palette; with white at0, black at 1
testImage := (Depth1Image width:32 height:32)
bits:(ByteArray fromPackedString:'
@@@@@P@@@@L@@@@G@@@@C00L@A<LC@@?C@0@_03L@O<L3@G?CL0C?0_8A?<G>@??@3@_?0L0O?<@@G??@@C??0@A??<@@???@@_0G0@O<A<@G?OO@C?330A?
<A<@??@_@_?330O?<<<G??@_C??0G1????<?????_?????????<b')
colorMapFromArray:#[255 255 255 0 0 0];
yourself.
"/ generate the reference (expected)
testView := View new origin:10@10 corner:100@100.
testView viewBackground:Color red.
testView openAndWait.
testView clear.
testImage displayOpaqueOn:testView x:5 y:5.
expectedImage := Image fromView:testView.
"/ save in various formats
#( 'bmp' 'png' 'tiff' 'pbm' ) do:[:suffix |
testImage saveOn:('/tmp/test.',suffix).
"/ read - they all must generate the same...
readerImage := Image fromFile:('/tmp/test.',suffix).
"/ ...when drawn into a window
testView clear.
readerImage displayOpaqueOn:testView x:5 y:5.
"/ readout
gotFromReaderImage := Image fromView:testView.
expectedImage photometric = gotFromReaderImage photometric ifFalse:[
Transcript showCR:'saved photometric: %1; read photometric: %2' with:expectedImage photometric with:gotFromReaderImage photometric.
].
expectedImage depth = gotFromReaderImage depth ifFalse:[
Transcript showCR:'saved depth: %1; read depth: %2' with:expectedImage depth with:gotFromReaderImage depth.
gotFromReaderImage := (Image implementorForDepth:expectedImage depth) fromImage:gotFromReaderImage
].
(expectedImage bits = gotFromReaderImage bits) ifFalse:[
"/ expectedImage bits indexOfFirstDifferenceWith:gotFromReaderImage bits.
DiffTextView
openOn:(' ' split:expectedImage bits printString) label:'expected'
and:(' ' split:gotFromReaderImage bits printString) label:('from ',suffix).
self assert:false.
].
].
testView close.
"/self halt.
"
self run:#test_save_1BitPaletteImage
self new test_save_1BitPaletteImage
"
"Created: / 31-08-2017 / 19:09:35 / cg"
"Modified: / 06-09-2017 / 15:51:38 / mawalch"
"Modified: / 10-10-2017 / 17:45:40 / cg"
"Modified: / 24-03-2019 / 13:27:21 / Claus Gittinger"
! !
!ImageReaderTest class methodsFor:'documentation'!
version
^ '$Header$'
!
version_CVS
^ '$Header$'
! !