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