Поле ввода и кнопка «Отправить» были активны всегда, хотя команда уходит в stdin процесса: у остановленного сервера его просто нет, и панель отвечала ошибкой уже после отправки. Теперь консоль блокируется, а подсказка объясняет, почему. Заодно из вывода убираются управляющие последовательности терминала. SteamCMD раскрашивает свои сообщения, и в браузере это выглядело как «[0mWaiting for user info...[0mOK». Чистка стоит на общем пути записи в буфер: через него идёт и вывод сервера, и SteamCMD, и сообщения панели. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
42 lines
1.9 KiB
Go
42 lines
1.9 KiB
Go
package pzserver
|
|
|
|
import "testing"
|
|
|
|
// TestStripANSI берёт строки ровно в том виде, в каком их печатает SteamCMD:
|
|
// в браузере коды раскраски превращались в мусор вроде "[0mOK".
|
|
func TestStripANSI(t *testing.T) {
|
|
cases := map[string]string{
|
|
"\x1b[0mConnecting anonymously to Steam Public...\x1b[0mOK": "Connecting anonymously to Steam Public...OK",
|
|
"\x1b[0m Update state (0x3) reconfiguring, progress: 0.00": " Update state (0x3) reconfiguring, progress: 0.00",
|
|
"\x1b[1;32mSuccess!\x1b[0m": "Success!",
|
|
// Перемещение курсора и очистка строки — тоже CSI.
|
|
"\x1b[2K\x1b[1GЗагрузка": "Загрузка",
|
|
// Обычные строки не должны меняться.
|
|
"[----] Installing update...": "[----] Installing update...",
|
|
"Steam Console Client (c) Valve": "Steam Console Client (c) Valve",
|
|
"Мир сохранён, игроков онлайн: 3": "Мир сохранён, игроков онлайн: 3",
|
|
"": "",
|
|
}
|
|
|
|
for input, want := range cases {
|
|
if got := stripANSI(input); got != want {
|
|
t.Errorf("stripANSI(%q) = %q, ожидалось %q", input, got, want)
|
|
}
|
|
}
|
|
}
|
|
|
|
// TestAppendStripsANSI проверяет, что чистка стоит на общем пути: через буфер
|
|
// идёт и вывод сервера, и SteamCMD, и сообщения самой панели.
|
|
func TestAppendStripsANSI(t *testing.T) {
|
|
buf := newLogBuffer(10)
|
|
buf.append(LogLine{Stream: "task", Text: "\x1b[0mWaiting for user info...\x1b[0mOK"})
|
|
|
|
lines := buf.since(0)
|
|
if len(lines) != 1 {
|
|
t.Fatalf("строк в буфере: %d", len(lines))
|
|
}
|
|
if lines[0].Text != "Waiting for user info...OK" {
|
|
t.Errorf("в буфер попала строка с кодами: %q", lines[0].Text)
|
|
}
|
|
}
|