47 lines
1.3 KiB
Go
47 lines
1.3 KiB
Go
// Copyright (c) 2026 Storm Dragon
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
package prompt
|
|
|
|
import (
|
|
"git.stormux.org/storm/fenrir/internal/screen"
|
|
"testing"
|
|
)
|
|
|
|
func TestShellDetectorRequiresFreshCursorPrompt(t *testing.T) {
|
|
makeScreen := func(text string, cursor int) screen.Snapshot {
|
|
s := screen.Snapshot{Terminal: 1, Active: true, Rows: 3, Cols: 80, Y: cursor, Cells: make([]rune, 240)}
|
|
for i := range s.Cells {
|
|
s.Cells[i] = ' '
|
|
}
|
|
copy(s.Line(1), []rune(text))
|
|
return s
|
|
}
|
|
for _, text := range []string{"[Username@host directory] $", "Username@host:~$", "$", "#"} {
|
|
var detector ShellDetector
|
|
detector.Observe(makeScreen("application", 1))
|
|
s := makeScreen(text, 1)
|
|
s.Generation = 1
|
|
if !detector.Observe(s) {
|
|
t.Fatal("new shell prompt missed", text)
|
|
}
|
|
if detector.Observe(s) {
|
|
t.Fatal("unchanged prompt repeated", text)
|
|
}
|
|
}
|
|
for _, text := range []string{"Password:", "Confirm? [y/n]", "<Username> $", "<Username@host> $", "press any key to continue", "Worked for 2s • 1:00 PM"} {
|
|
var detector ShellDetector
|
|
detector.Observe(makeScreen("application", 1))
|
|
if detector.Observe(makeScreen(text, 1)) {
|
|
t.Fatal("non-shell prompt", text)
|
|
}
|
|
}
|
|
var detector ShellDetector
|
|
s := makeScreen("$", 0)
|
|
detector.Observe(s)
|
|
s.Y = 1
|
|
if detector.Observe(s) {
|
|
t.Fatal("old prompt became fresh after cursor motion")
|
|
}
|
|
}
|