package protocol import "testing" func TestLoopbackUsesFramePayload(t *testing.T) { client, daemon := NewLoopbackPair() defer client.Close() defer daemon.Close() sent, err := NewFrame(FrameInput, Input{PaneID: "p_123456", Bytes: []byte("hello")}) if err != nil { t.Fatalf("NewFrame: %v", err) } if err := client.Send(sent); err != nil { t.Fatalf("Send: %v", err) } got, err := daemon.Recv() if err != nil { t.Fatalf("Recv: %v", err) } if got.Type != FrameInput { t.Fatalf("type = %q, want %q", got.Type, FrameInput) } payload, err := Decode[Input](got) if err != nil { t.Fatalf("Decode: %v", err) } if payload.PaneID != "p_123456" || string(payload.Bytes) != "hello" { t.Fatalf("payload = %#v", payload) } } func TestLoopbackCopiesPayloadOnSend(t *testing.T) { client, daemon := NewLoopbackPair() defer client.Close() defer daemon.Close() f := Frame{Type: FramePaneChunk, Payload: []byte(`{"pane_id":"p","bytes":"aGVsbG8="}`)} if err := client.Send(f); err != nil { t.Fatalf("Send: %v", err) } f.Payload[0] = 'x' got, err := daemon.Recv() if err != nil { t.Fatalf("Recv: %v", err) } if got.Payload[0] != '{' { t.Fatalf("payload was retained instead of copied: %q", string(got.Payload)) } }