Files
pzmanager/internal/pzserver/logbuf_test.go
T
mrleo1nidandClaude Opus 5 27a2fd6386
CI / test (push) Successful in 20s
Release / release (push) Successful in 25s
Консоль не принимает команды у остановленного сервера
Поле ввода и кнопка «Отправить» были активны всегда, хотя команда уходит
в stdin процесса: у остановленного сервера его просто нет, и панель
отвечала ошибкой уже после отправки. Теперь консоль блокируется, а
подсказка объясняет, почему.

Заодно из вывода убираются управляющие последовательности терминала.
SteamCMD раскрашивает свои сообщения, и в браузере это выглядело как
«[0mWaiting for user info...[0mOK». Чистка стоит на общем пути записи в
буфер: через него идёт и вывод сервера, и SteamCMD, и сообщения панели.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-05 01:56:55 +03:00

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)
}
}