1package imageutil
2
3import (
4 "bytes"
5 "image/png"
6 "os"
7 "testing"
8)
9
10func TestIsHEIC(t *testing.T) {
11 tests := []struct {
12 name string
13 data []byte
14 want bool
15 }{
16 {"empty", []byte{}, false},
17 {"too short", []byte{0, 0, 0, 0, 'f', 't', 'y', 'p'}, false},
18 {"heic brand", []byte{0, 0, 0, 0, 'f', 't', 'y', 'p', 'h', 'e', 'i', 'c'}, true},
19 {"heix brand", []byte{0, 0, 0, 0, 'f', 't', 'y', 'p', 'h', 'e', 'i', 'x'}, true},
20 {"mif1 brand", []byte{0, 0, 0, 0, 'f', 't', 'y', 'p', 'm', 'i', 'f', '1'}, true},
21 {"avif brand", []byte{0, 0, 0, 0, 'f', 't', 'y', 'p', 'a', 'v', 'i', 'f'}, true},
22 {"not ftyp", []byte{0, 0, 0, 0, 'x', 'x', 'x', 'x', 'h', 'e', 'i', 'c'}, false},
23 {"unknown brand", []byte{0, 0, 0, 0, 'f', 't', 'y', 'p', 'i', 's', 'o', 'm'}, false},
24 {"png", []byte{0x89, 'P', 'N', 'G', 0x0d, 0x0a, 0x1a, 0x0a, 0, 0, 0, 0}, false},
25 }
26 for _, tt := range tests {
27 t.Run(tt.name, func(t *testing.T) {
28 if got := IsHEIC(tt.data); got != tt.want {
29 t.Errorf("IsHEIC() = %v, want %v", got, tt.want)
30 }
31 })
32 }
33}
34
35func TestConvertHEICToPNG(t *testing.T) {
36 // Skip if no real HEIC test file available
37 testFile := "/tmp/shelley-screenshots/upload_349d2aa15d2b3e4e.heic"
38 data, err := os.ReadFile(testFile)
39 if err != nil {
40 t.Skipf("test HEIC file not available: %v", err)
41 }
42
43 if !IsHEIC(data) {
44 t.Fatal("test file should be detected as HEIC")
45 }
46
47 pngData, err := ConvertHEICToPNG(data)
48 if err != nil {
49 t.Fatalf("ConvertHEICToPNG failed: %v", err)
50 }
51
52 // Verify it's valid PNG
53 _, err = png.Decode(bytes.NewReader(pngData))
54 if err != nil {
55 t.Fatalf("result is not valid PNG: %v", err)
56 }
57}