package main

import (
	"bytes"
	"errors"
	"io"
	"strings"
	"testing"
)

func TestRoundTrip(t *testing.T) {
	for _, s := range []string{"", "go", "网络", strings.Repeat("x", maxFrame)} {
		var b bytes.Buffer
		if err := writeFrame(&b, s); err != nil {
			t.Fatal(err)
		}
		got, err := readFrame(&b)
		if err != nil || got != s {
			t.Fatalf("got %q %v", got, err)
		}
	}
}
func TestTruncated(t *testing.T) {
	for _, b := range [][]byte{{0, 0}, {0, 0, 0, 2, 'x'}} {
		_, err := readFrame(bytes.NewReader(b))
		if !errors.Is(err, io.ErrUnexpectedEOF) {
			t.Fatalf("got %v", err)
		}
	}
}
func TestOversize(t *testing.T) {
	if err := writeFrame(io.Discard, strings.Repeat("x", maxFrame+1)); err == nil {
		t.Fatal("accepted oversize")
	}
}
func TestDemo(t *testing.T) {
	var out bytes.Buffer
	if err := run(&out); err != nil {
		t.Fatal(err)
	}
	t.Log("\n" + out.String())
}
