go-libwebp

Experimental translation from libwebp to Go source.
Log | Files | Refs | README | LICENSE

commit 2c27660c379f4dc04d54852fccc8f883b0fdef72
parent 5b89d308e57cde1ac64afa7cb259ec89c9013e96
Author: Jack Mordaunt <jackmordaunt.dev@gmail.com>
Date:   Thu, 19 Oct 2023 16:09:53 +0800

webp: add basic encode test

This is a smoke test to make sure we can produce a valid webp and not
error along the way.

Signed-off-by: Jack Mordaunt <jackmordaunt.dev@gmail.com>

Diffstat:
M.gitignore | 1+
Dtest.webp | 0
Mwebp/encode.go | 1+
Awebp/testdata/golden-in.png | 0
Awebp/testdata/golden-out.webp | 0
Awebp/webp_test.go | 42++++++++++++++++++++++++++++++++++++++++++
6 files changed, 44 insertions(+), 0 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -1,2 +1,3 @@ cdb.json .DS_Store +golden-got.webp diff --git a/test.webp b/test.webp Binary files differ. diff --git a/webp/encode.go b/webp/encode.go @@ -101,6 +101,7 @@ func encode(enc *Encoder, w io.Writer, m *image.RGBA) error { ) defer lib.WebPFree(tls, enc.out) + if size == 0 { return fmt.Errorf("encoding webp image: size %d", size) } diff --git a/webp/testdata/golden-in.png b/webp/testdata/golden-in.png Binary files differ. diff --git a/webp/testdata/golden-out.webp b/webp/testdata/golden-out.webp Binary files differ. diff --git a/webp/webp_test.go b/webp/webp_test.go @@ -0,0 +1,42 @@ +package webp + +import ( + "bytes" + _ "embed" + "image/png" + "os" + "path/filepath" + "testing" +) + +//go:embed testdata/golden-in.png +var goldenIn []byte + +//go:embed testdata/golden-out.webp +var goldenOut []byte + +// TestSmoke runs a basic smoke test to see if we can encode and decode a webp. +func TestSmoke(t *testing.T) { + m, err := png.Decode(bytes.NewReader(goldenIn)) + if err != nil { + t.Fatalf("decoding image: %v", err) + } + + buf := bytes.NewBuffer(nil) + + if err := Encode(buf, m); err != nil { + t.Fatalf("encoding webp: %v", err) + } + + if !bytes.Equal(goldenOut, buf.Bytes()) { + t.Errorf("bytes not equal, want %d, got %d", len(goldenOut), buf.Len()) + } + + if err := os.WriteFile(filepath.Join("testdata", "golden-got.webp"), buf.Bytes(), 0o655); err != nil { + t.Errorf("writing output png: %v", err) + } + + if _, err := Decode(buf); err != nil { + t.Fatalf("decoding webp: %v", err) + } +}