feat: convert attachments to text on delete (#1863)
Co-authored-by: Dax Raad <d@ironbay.co> Co-authored-by: Dax <mail@thdxr.com>
This commit is contained in:
committed by
opencode
parent
036b24791d
commit
a4c14dbb2d
75
packages/tui/internal/components/textarea/textarea_test.go
Normal file
75
packages/tui/internal/components/textarea/textarea_test.go
Normal file
@@ -0,0 +1,75 @@
|
||||
package textarea
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/sst/opencode/internal/attachment"
|
||||
)
|
||||
|
||||
func TestRemoveAttachmentAtCursor_ConvertsToText_WhenCursorAfterAttachment(t *testing.T) {
|
||||
m := New()
|
||||
m.InsertString("a ")
|
||||
att := &attachment.Attachment{ID: "1", Display: "@file.txt"}
|
||||
m.InsertAttachment(att)
|
||||
m.InsertString(" b")
|
||||
|
||||
// Position cursor immediately after the attachment (index 3: 'a',' ',att,' ', 'b')
|
||||
m.SetCursorColumn(3)
|
||||
|
||||
if ok := m.removeAttachmentAtCursor(); !ok {
|
||||
t.Fatalf("expected removal to occur")
|
||||
}
|
||||
got := m.Value()
|
||||
want := "a @file.txt b"
|
||||
if got != want {
|
||||
t.Fatalf("expected %q, got %q", want, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRemoveAttachmentAtCursor_ConvertsToText_WhenCursorOnAttachment(t *testing.T) {
|
||||
m := New()
|
||||
m.InsertString("x ")
|
||||
att := &attachment.Attachment{ID: "2", Display: "@img.png"}
|
||||
m.InsertAttachment(att)
|
||||
m.InsertString(" y")
|
||||
|
||||
// Position cursor on the attachment token (index 2: 'x',' ',att,' ', 'y')
|
||||
m.SetCursorColumn(2)
|
||||
|
||||
if ok := m.removeAttachmentAtCursor(); !ok {
|
||||
t.Fatalf("expected removal to occur")
|
||||
}
|
||||
got := m.Value()
|
||||
want := "x @img.png y"
|
||||
if got != want {
|
||||
t.Fatalf("expected %q, got %q", want, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRemoveAttachmentAtCursor_StartOfLine(t *testing.T) {
|
||||
m := New()
|
||||
att := &attachment.Attachment{ID: "3", Display: "@a.txt"}
|
||||
m.InsertAttachment(att)
|
||||
m.InsertString(" tail")
|
||||
|
||||
// Position cursor immediately after the attachment at start of line (index 1)
|
||||
m.SetCursorColumn(1)
|
||||
if ok := m.removeAttachmentAtCursor(); !ok {
|
||||
t.Fatalf("expected removal to occur at start of line")
|
||||
}
|
||||
if got := m.Value(); got != "@a.txt tail" {
|
||||
t.Fatalf("unexpected value: %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRemoveAttachmentAtCursor_NoAttachment_NoChange(t *testing.T) {
|
||||
m := New()
|
||||
m.InsertString("hello world")
|
||||
col := m.CursorColumn()
|
||||
if ok := m.removeAttachmentAtCursor(); ok {
|
||||
t.Fatalf("did not expect removal to occur")
|
||||
}
|
||||
if m.Value() != "hello world" || m.CursorColumn() != col {
|
||||
t.Fatalf("value or cursor unexpectedly changed")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user