Fetch, resize, reformat, and cache Atmosphere avatar images atp.pics
atproto
at optimize-resolution 109 lines 2.8 kB view raw
1//go:build cgo 2 3package transform_test 4 5import ( 6 "image" 7 "image/color" 8 "image/jpeg" 9 "bytes" 10 "testing" 11 12 "atp.pics/internal/transform" 13) 14 15func makeJPEG(w, h int) []byte { 16 img := image.NewRGBA(image.Rect(0, 0, w, h)) 17 for y := range h { 18 for x := range w { 19 img.Set(x, y, color.RGBA{R: 100, G: 150, B: 200, A: 255}) 20 } 21 } 22 var buf bytes.Buffer 23 _ = jpeg.Encode(&buf, img, &jpeg.Options{Quality: 90}) 24 return buf.Bytes() 25} 26 27func TestTransform_ProportionalResize_WidthOnly(t *testing.T) { 28 src := makeJPEG(400, 200) 29 out, ct, err := transform.Transform(src, "image/jpeg", transform.Params{Width: 200, Format: "webp"}) 30 if err != nil { 31 t.Fatalf("Transform error: %v", err) 32 } 33 if ct != "image/webp" { 34 t.Errorf("Content-Type = %q, want image/webp", ct) 35 } 36 if len(out) == 0 { 37 t.Error("output is empty") 38 } 39} 40 41func TestTransform_ProportionalResize_HeightOnly(t *testing.T) { 42 src := makeJPEG(400, 200) 43 out, ct, err := transform.Transform(src, "image/jpeg", transform.Params{Height: 100, Format: "webp"}) 44 if err != nil { 45 t.Fatalf("Transform error: %v", err) 46 } 47 if ct != "image/webp" { 48 t.Errorf("Content-Type = %q, want image/webp", ct) 49 } 50 if len(out) == 0 { 51 t.Error("output is empty") 52 } 53} 54 55func TestTransform_CoverFit_BothDimensions(t *testing.T) { 56 src := makeJPEG(400, 200) 57 out, ct, err := transform.Transform(src, "image/jpeg", transform.Params{Width: 100, Height: 100, Format: "webp"}) 58 if err != nil { 59 t.Fatalf("Transform error: %v", err) 60 } 61 if ct != "image/webp" { 62 t.Errorf("Content-Type = %q, want image/webp", ct) 63 } 64 if len(out) == 0 { 65 t.Error("output is empty") 66 } 67} 68 69func TestTransform_JPEG_Output(t *testing.T) { 70 src := makeJPEG(200, 200) 71 out, ct, err := transform.Transform(src, "image/jpeg", transform.Params{Width: 100, Height: 100, Quality: 80, Format: "jpg"}) 72 if err != nil { 73 t.Fatalf("Transform error: %v", err) 74 } 75 if ct != "image/jpeg" { 76 t.Errorf("Content-Type = %q, want image/jpeg", ct) 77 } 78 if len(out) == 0 { 79 t.Error("output is empty") 80 } 81} 82 83func TestTransform_PNG_Output(t *testing.T) { 84 src := makeJPEG(200, 200) 85 out, ct, err := transform.Transform(src, "image/jpeg", transform.Params{Width: 100, Height: 100, Format: "png"}) 86 if err != nil { 87 t.Fatalf("Transform error: %v", err) 88 } 89 if ct != "image/png" { 90 t.Errorf("Content-Type = %q, want image/png", ct) 91 } 92 if len(out) == 0 { 93 t.Error("output is empty") 94 } 95} 96 97func TestTransform_NoResize_DefaultDimensions(t *testing.T) { 98 src := makeJPEG(300, 150) 99 out, ct, err := transform.Transform(src, "image/jpeg", transform.Params{Format: "webp", Quality: 85}) 100 if err != nil { 101 t.Fatalf("Transform error: %v", err) 102 } 103 if ct != "image/webp" { 104 t.Errorf("Content-Type = %q, want image/webp", ct) 105 } 106 if len(out) == 0 { 107 t.Error("output is empty") 108 } 109}