// Copyright 2010 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 http

import (
	"bytes"
	"testing"
)

type respWriteTest struct {
	Resp Response
	Raw  string
}

var respWriteTests = []respWriteTest{
	// HTTP/1.0, identity coding; no trailer
	{
		Response{
			StatusCode:    503,
			ProtoMajor:    1,
			ProtoMinor:    0,
			RequestMethod: "GET",
			Header:        map[string][]string{},
			Body:          nopCloser{bytes.NewBufferString("abcdef")},
			ContentLength: 6,
		},

		"HTTP/1.0 503 Service Unavailable\r\n" +
			"Content-Length: 6\r\n\r\n" +
			"abcdef",
	},
	// Unchunked response without Content-Length.
	{
		Response{
			StatusCode:    200,
			ProtoMajor:    1,
			ProtoMinor:    0,
			RequestMethod: "GET",
			Header:        map[string][]string{},
			Body:          nopCloser{bytes.NewBufferString("abcdef")},
			ContentLength: -1,
		},
		"HTTP/1.0 200 OK\r\n" +
			"\r\n" +
			"abcdef",
	},
	// HTTP/1.1, chunked coding; empty trailer; close
	{
		Response{
			StatusCode:       200,
			ProtoMajor:       1,
			ProtoMinor:       1,
			RequestMethod:    "GET",
			Header:           map[string][]string{},
			Body:             nopCloser{bytes.NewBufferString("abcdef")},
			ContentLength:    6,
			TransferEncoding: []string{"chunked"},
			Close:            true,
		},

		"HTTP/1.1 200 OK\r\n" +
			"Connection: close\r\n" +
			"Transfer-Encoding: chunked\r\n\r\n" +
			"6\r\nabcdef\r\n0\r\n\r\n",
	},
}

func TestResponseWrite(t *testing.T) {
	for i := range respWriteTests {
		tt := &respWriteTests[i]
		var braw bytes.Buffer
		err := tt.Resp.Write(&braw)
		if err != nil {
			t.Errorf("error writing #%d: %s", i, err)
			continue
		}
		sraw := braw.String()
		if sraw != tt.Raw {
			t.Errorf("Test %d, expecting:\n%s\nGot:\n%s\n", i, tt.Raw, sraw)
			continue
		}
	}
}
