~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/github.com/Azure/azure-sdk-for-go/core/http/httptest/recorder_test.go

  • Committer: Nicholas Skaggs
  • Date: 2016-10-24 20:56:05 UTC
  • Revision ID: nicholas.skaggs@canonical.com-20161024205605-z8lta0uvuhtxwzwl
Initi with beta15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2012 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 httptest
 
6
 
 
7
import (
 
8
        "fmt"
 
9
        "net/http"
 
10
        "testing"
 
11
)
 
12
 
 
13
func TestRecorder(t *testing.T) {
 
14
        type checkFunc func(*ResponseRecorder) error
 
15
        check := func(fns ...checkFunc) []checkFunc { return fns }
 
16
 
 
17
        hasStatus := func(wantCode int) checkFunc {
 
18
                return func(rec *ResponseRecorder) error {
 
19
                        if rec.Code != wantCode {
 
20
                                return fmt.Errorf("Status = %d; want %d", rec.Code, wantCode)
 
21
                        }
 
22
                        return nil
 
23
                }
 
24
        }
 
25
        hasContents := func(want string) checkFunc {
 
26
                return func(rec *ResponseRecorder) error {
 
27
                        if rec.Body.String() != want {
 
28
                                return fmt.Errorf("wrote = %q; want %q", rec.Body.String(), want)
 
29
                        }
 
30
                        return nil
 
31
                }
 
32
        }
 
33
        hasFlush := func(want bool) checkFunc {
 
34
                return func(rec *ResponseRecorder) error {
 
35
                        if rec.Flushed != want {
 
36
                                return fmt.Errorf("Flushed = %v; want %v", rec.Flushed, want)
 
37
                        }
 
38
                        return nil
 
39
                }
 
40
        }
 
41
 
 
42
        tests := []struct {
 
43
                name   string
 
44
                h      func(w http.ResponseWriter, r *http.Request)
 
45
                checks []checkFunc
 
46
        }{
 
47
                {
 
48
                        "200 default",
 
49
                        func(w http.ResponseWriter, r *http.Request) {},
 
50
                        check(hasStatus(200), hasContents("")),
 
51
                },
 
52
                {
 
53
                        "first code only",
 
54
                        func(w http.ResponseWriter, r *http.Request) {
 
55
                                w.WriteHeader(201)
 
56
                                w.WriteHeader(202)
 
57
                                w.Write([]byte("hi"))
 
58
                        },
 
59
                        check(hasStatus(201), hasContents("hi")),
 
60
                },
 
61
                {
 
62
                        "write sends 200",
 
63
                        func(w http.ResponseWriter, r *http.Request) {
 
64
                                w.Write([]byte("hi first"))
 
65
                                w.WriteHeader(201)
 
66
                                w.WriteHeader(202)
 
67
                        },
 
68
                        check(hasStatus(200), hasContents("hi first"), hasFlush(false)),
 
69
                },
 
70
                {
 
71
                        "flush",
 
72
                        func(w http.ResponseWriter, r *http.Request) {
 
73
                                w.(http.Flusher).Flush() // also sends a 200
 
74
                                w.WriteHeader(201)
 
75
                        },
 
76
                        check(hasStatus(200), hasFlush(true)),
 
77
                },
 
78
        }
 
79
        r, _ := http.NewRequest("GET", "http://foo.com/", nil)
 
80
        for _, tt := range tests {
 
81
                h := http.HandlerFunc(tt.h)
 
82
                rec := NewRecorder()
 
83
                h.ServeHTTP(rec, r)
 
84
                for _, check := range tt.checks {
 
85
                        if err := check(rec); err != nil {
 
86
                                t.Errorf("%s: %v", tt.name, err)
 
87
                        }
 
88
                }
 
89
        }
 
90
}