// Copyright 2019 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 iotest

import (
	"bytes"
	"testing"
)

var truncateWriterTests = []struct {
	in    string
	want  string
	trunc int64
	n     int
}{
	{"hello", "", -1, 5},
	{"world", "", 0, 5},
	{"abcde", "abc", 3, 5},
	{"edcba", "edcba", 7, 5},
}

func TestTruncateWriter(t *testing.T) {
	for _, tt := range truncateWriterTests {
		buf := new(bytes.Buffer)
		tw := TruncateWriter(buf, tt.trunc)
		n, err := tw.Write([]byte(tt.in))
		if err != nil {
			t.Errorf("Unexpected error %v for\n\t%+v", err, tt)
		}
		if g, w := buf.String(), tt.want; g != w {
			t.Errorf("got %q, expected %q", g, w)
		}
		if g, w := n, tt.n; g != w {
			t.Errorf("read %d bytes, but expected to have read %d bytes for\n\t%+v", g, w, tt)
		}
	}
}
