OSDN Git Service

Update Go library to r60.
[pf3gnuchains/gcc-fork.git] / libgo / go / archive / zip / writer_test.go
1 // Copyright 2011 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package zip
6
7 import (
8         "bytes"
9         "io/ioutil"
10         "rand"
11         "testing"
12 )
13
14 // TODO(adg): a more sophisticated test suite
15
16 const testString = "Rabbits, guinea pigs, gophers, marsupial rats, and quolls."
17
18 func TestWriter(t *testing.T) {
19         largeData := make([]byte, 1<<17)
20         for i := range largeData {
21                 largeData[i] = byte(rand.Int())
22         }
23
24         // write a zip file
25         buf := new(bytes.Buffer)
26         w := NewWriter(buf)
27         testCreate(t, w, "foo", []byte(testString), Store)
28         testCreate(t, w, "bar", largeData, Deflate)
29         if err := w.Close(); err != nil {
30                 t.Fatal(err)
31         }
32
33         // read it back
34         r, err := NewReader(sliceReaderAt(buf.Bytes()), int64(buf.Len()))
35         if err != nil {
36                 t.Fatal(err)
37         }
38         testReadFile(t, r.File[0], []byte(testString))
39         testReadFile(t, r.File[1], largeData)
40 }
41
42 func testCreate(t *testing.T, w *Writer, name string, data []byte, method uint16) {
43         header := &FileHeader{
44                 Name:   name,
45                 Method: method,
46         }
47         f, err := w.CreateHeader(header)
48         if err != nil {
49                 t.Fatal(err)
50         }
51         _, err = f.Write(data)
52         if err != nil {
53                 t.Fatal(err)
54         }
55 }
56
57 func testReadFile(t *testing.T, f *File, data []byte) {
58         rc, err := f.Open()
59         if err != nil {
60                 t.Fatal("opening:", err)
61         }
62         b, err := ioutil.ReadAll(rc)
63         if err != nil {
64                 t.Fatal("reading:", err)
65         }
66         err = rc.Close()
67         if err != nil {
68                 t.Fatal("closing:", err)
69         }
70         if !bytes.Equal(b, data) {
71                 t.Errorf("File contents %q, want %q", b, data)
72         }
73 }