stario/pipe_test.go
starainrt c8facb5a03
stario: 提升 Go 1.20 基线与交互/队列稳定性
- 提升 go.mod 基线到 Go 1.20,并补齐对应测试
  - 修正 Passwd / PasswdResponseSignal 语义,Ctrl+C 默认退出当前流程
  - 优化 raw terminal redraw、Restore 与 StopUntil 的边界行为
  - 新增 StarPipe、FrameReader/FrameWriter、ReadFullContext/WriteFullContext/CopyContext、IsTerminal/ReadPasswordContext
  - 收口 StarQueue / StarBuffer 语义,删除 EndWrite,统一 Close / Abort 行为
  - 补齐 signal、timeout、queue、terminal、pipe、buffer 的回归测试与 race 覆盖
2026-04-15 14:35:19 +08:00

54 lines
1.2 KiB
Go

package stario
import (
"bytes"
"errors"
"io"
"testing"
)
func TestStarPipeRoundTrip(t *testing.T) {
reader, writer, err := NewStarPipe(16)
if err != nil {
t.Fatal(err)
}
want := []byte("hello world")
go func() {
_, _ = writer.Write(want)
_ = writer.Close()
}()
got, err := io.ReadAll(reader)
if err != nil {
t.Fatalf("ReadAll failed: %v", err)
}
if !bytes.Equal(got, want) {
t.Fatalf("unexpected payload: got %q want %q", got, want)
}
}
func TestStarPipeReaderCloseAbortsWriter(t *testing.T) {
reader, writer, err := NewStarPipe(4)
if err != nil {
t.Fatal(err)
}
if err := reader.Close(); err != nil {
t.Fatal(err)
}
if _, err := writer.Write([]byte("x")); !errors.Is(err, ErrStarBufferClosed) {
t.Fatalf("unexpected writer error after reader close: %v", err)
}
}
func TestStarPipeNilEndsReportClosedPipe(t *testing.T) {
var reader *StarPipeReader
var writer *StarPipeWriter
if _, err := reader.Read(make([]byte, 1)); !errors.Is(err, io.ErrClosedPipe) {
t.Fatalf("unexpected nil reader error: %v", err)
}
if _, err := writer.Write([]byte("x")); !errors.Is(err, io.ErrClosedPipe) {
t.Fatalf("unexpected nil writer error: %v", err)
}
}