Imported Upstream version 4.7.2
[platform/upstream/gcc48.git] / libgo / go / mime / multipart / 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 multipart
6
7 import (
8         "bytes"
9         "io/ioutil"
10         "testing"
11 )
12
13 func TestWriter(t *testing.T) {
14         fileContents := []byte("my file contents")
15
16         var b bytes.Buffer
17         w := NewWriter(&b)
18         {
19                 part, err := w.CreateFormFile("myfile", "my-file.txt")
20                 if err != nil {
21                         t.Fatalf("CreateFormFile: %v", err)
22                 }
23                 part.Write(fileContents)
24                 err = w.WriteField("key", "val")
25                 if err != nil {
26                         t.Fatalf("WriteField: %v", err)
27                 }
28                 part.Write([]byte("val"))
29                 err = w.Close()
30                 if err != nil {
31                         t.Fatalf("Close: %v", err)
32                 }
33                 s := b.String()
34                 if len(s) == 0 {
35                         t.Fatal("String: unexpected empty result")
36                 }
37                 if s[0] == '\r' || s[0] == '\n' {
38                         t.Fatal("String: unexpected newline")
39                 }
40         }
41
42         r := NewReader(&b, w.Boundary())
43
44         part, err := r.NextPart()
45         if err != nil {
46                 t.Fatalf("part 1: %v", err)
47         }
48         if g, e := part.FormName(), "myfile"; g != e {
49                 t.Errorf("part 1: want form name %q, got %q", e, g)
50         }
51         slurp, err := ioutil.ReadAll(part)
52         if err != nil {
53                 t.Fatalf("part 1: ReadAll: %v", err)
54         }
55         if e, g := string(fileContents), string(slurp); e != g {
56                 t.Errorf("part 1: want contents %q, got %q", e, g)
57         }
58
59         part, err = r.NextPart()
60         if err != nil {
61                 t.Fatalf("part 2: %v", err)
62         }
63         if g, e := part.FormName(), "key"; g != e {
64                 t.Errorf("part 2: want form name %q, got %q", e, g)
65         }
66         slurp, err = ioutil.ReadAll(part)
67         if err != nil {
68                 t.Fatalf("part 2: ReadAll: %v", err)
69         }
70         if e, g := "val", string(slurp); e != g {
71                 t.Errorf("part 2: want contents %q, got %q", e, g)
72         }
73
74         part, err = r.NextPart()
75         if part != nil || err == nil {
76                 t.Fatalf("expected end of parts; got %v, %v", part, err)
77         }
78 }