summaryrefslogtreecommitdiff
path: root/src/pkg/image/png
diff options
context:
space:
mode:
authorNigel Tao <nigeltao@golang.org>2009-10-07 23:14:23 -0700
committerNigel Tao <nigeltao@golang.org>2009-10-07 23:14:23 -0700
commitac1ccce44ba5394811a44d6b1469289cbc011a10 (patch)
tree539e40db9325dbc0a711e5438c2071acdeea714c /src/pkg/image/png
parent963905e72ea01455c27dd6b4523a8599114a2c71 (diff)
downloadgolang-ac1ccce44ba5394811a44d6b1469289cbc011a10.tar.gz
PNG encoder unit test.
R=rsc,r APPROVED=r DELTA=84 (77 added, 6 deleted, 1 changed) OCL=35456 CL=35458
Diffstat (limited to 'src/pkg/image/png')
-rw-r--r--src/pkg/image/png/reader_test.go16
-rw-r--r--src/pkg/image/png/writer_test.go69
2 files changed, 78 insertions, 7 deletions
diff --git a/src/pkg/image/png/reader_test.go b/src/pkg/image/png/reader_test.go
index 4aa3c0a2a..4bc6d891e 100644
--- a/src/pkg/image/png/reader_test.go
+++ b/src/pkg/image/png/reader_test.go
@@ -33,6 +33,14 @@ var filenames = []string {
//"basn6a16", // bit depth is not 8
}
+func readPng(filename string) (image.Image, os.Error) {
+ f, err := os.Open(filename, os.O_RDONLY, 0444);
+ if err != nil {
+ return nil, err;
+ }
+ defer f.Close();
+ return Decode(f);
+}
// An approximation of the sng command-line tool.
func sng(w io.WriteCloser, filename string, png image.Image) {
@@ -103,13 +111,7 @@ func sng(w io.WriteCloser, filename string, png image.Image) {
func TestReader(t *testing.T) {
for _, fn := range filenames {
// Read the .png file.
- pf, err := os.Open("testdata/pngsuite/" + fn + ".png", os.O_RDONLY, 0444);
- if err != nil {
- t.Error(fn, err);
- continue
- }
- defer pf.Close();
- image, err := Decode(pf);
+ image, err := readPng("testdata/pngsuite/" + fn + ".png");
if err != nil {
t.Error(fn, err);
continue
diff --git a/src/pkg/image/png/writer_test.go b/src/pkg/image/png/writer_test.go
new file mode 100644
index 000000000..b832f1c26
--- /dev/null
+++ b/src/pkg/image/png/writer_test.go
@@ -0,0 +1,69 @@
+// 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;
+ }
+ }
+}