-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathjfif_test.go
98 lines (89 loc) · 1.71 KB
/
jfif_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package jfif
import (
"os"
"path/filepath"
"testing"
)
var tests = []struct {
path string
refs []SegmentP
}{
{
path: "min.jpg",
refs: []SegmentP{
{0, SOI, 0},
{2, DQT, 67},
{71, SOF9, 11},
{84, DAC, 6},
{92, SOS, 8},
},
},
{
path: "lego.jpg",
refs: []SegmentP{
{0, SOI, 0},
{2, APP0, 16},
{20, APP1, 11310},
{11332, APP1, 5025},
{16359, DQT, 67},
{16428, DQT, 67},
{16497, SOF0, 17},
{16516, DHT, 31},
{16549, DHT, 81},
{16632, DHT, 30},
{16664, DHT, 74},
{16740, SOS, 12},
},
},
}
func TestScanSegments(t *testing.T) {
for _, tt := range tests {
t.Run(tt.path, func(t *testing.T) {
f, err := os.Open(filepath.Join("testdata", tt.path))
if err != nil {
t.Fatal(err)
}
refs, err := ScanSegments(f)
if err != nil {
t.Fatal(err)
}
verifySegments(t, refs, tt.refs)
})
}
}
func TestDecodeSegments(t *testing.T) {
for _, tt := range tests {
t.Run(tt.path, func(t *testing.T) {
f, err := os.Open(filepath.Join("testdata", tt.path))
if err != nil {
t.Fatal(err)
}
segs, err := DecodeSegments(f)
if err != nil {
t.Fatal(err)
}
refs := make([]SegmentP, len(segs))
for i, s := range segs {
refs[i] = s.SegmentP
if s.Length > 0 && len(s.Data)+2 != int(s.Length) {
t.Errorf("data %d: got %d, want %d", i, len(s.Data), s.Length-2)
}
}
verifySegments(t, refs, tt.refs)
})
}
}
func TestEncodeSegment(t *testing.T) { // TODO
}
func verifySegments(t *testing.T, got, want []SegmentP) {
if len(got) != len(want) {
t.Errorf("len: got %d, want %d", len(got), len(want))
return
}
for i, w := range want {
g := got[i]
if g != w {
t.Errorf("seg %d: got %d, want %d", i, g, w)
}
}
}