// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package png import ( "fmt"; "image"; "io"; "os"; "testing"; ) func diff(m0, m1 image.Image) os.Error { if m0.Width() != m1.Width() || m0.Height() != m1.Height() { return os.NewError(fmt.Sprintf("dimensions differ: %dx%d vs %dx%d", m0.Width(), m0.Height(), m1.Width(), m1.Height())) } for y := 0; y < m0.Height(); y++ { for x := 0; x < m0.Width(); x++ { r0, g0, b0, a0 := m0.At(x, y).RGBA(); r1, g1, b1, a1 := m1.At(x, y).RGBA(); if r0 != r1 || g0 != g1 || b0 != b1 || a0 != a1 { return os.NewError(fmt.Sprintf("colors differ at (%d, %d): %v vs %v", x, y, m0.At(x, y), m1.At(x, y))) } } } return nil; } func TestWriter(t *testing.T) { // The filenames variable is declared in reader_test.go. for _, fn := range filenames { qfn := "testdata/pngsuite/" + fn + ".png"; // Read the image. m0, err := readPng(qfn); if err != nil { t.Error(fn, err); continue; } // Read the image again, and push it through a pipe that encodes at the write end, and decodes at the read end. pr, pw := io.Pipe(); defer pr.Close(); go func() { defer pw.Close(); m1, err := readPng(qfn); if err != nil { t.Error(fn, err); return; } err = Encode(pw, m1); if err != nil { t.Error(fn, err); return; } }(); m2, err := Decode(pr); if err != nil { t.Error(fn, err); continue; } // Compare the two. err = diff(m0, m2); if err != nil { t.Error(fn, err); continue; } } }