82 lines
2.0 KiB
Go
82 lines
2.0 KiB
Go
package app
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"log/slog"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
"unicode"
|
|
"unicode/utf8"
|
|
)
|
|
|
|
func TestOpenPersistentLoggerUsesExecutableLogDirectory(t *testing.T) {
|
|
root := t.TempDir()
|
|
executable := filepath.Join(root, "bd2client.exe")
|
|
logger, closer, logPath, err := OpenPersistentLogger(executable)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
logger.Info("test entry")
|
|
if err := closer.Close(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
wantPath := filepath.Join(root, "logs", clientLogName)
|
|
if logPath != wantPath {
|
|
t.Fatalf("log path=%q want=%q", logPath, wantPath)
|
|
}
|
|
data, err := os.ReadFile(logPath)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !bytes.Contains(data, []byte("test entry")) {
|
|
t.Fatalf("log does not contain test entry: %s", data)
|
|
}
|
|
}
|
|
|
|
func TestPersistentOperationalLogsUseEnglish(t *testing.T) {
|
|
var output bytes.Buffer
|
|
logger := slog.New(slog.NewTextHandler(&output, nil))
|
|
studio := NewStudio(Options{Logger: logger}, NativeHost{})
|
|
studio.Startup(context.Background())
|
|
_, _ = studio.Inspect(Request{GameDirectory: `Z:\missing`, UILanguage: "zh-CN"})
|
|
for len(output.Bytes()) > 0 {
|
|
r, size := utf8.DecodeRune(output.Bytes())
|
|
if unicode.Is(unicode.Han, r) {
|
|
t.Fatalf("operational log contains Han character %q: %s", r, output.String())
|
|
}
|
|
output.Next(size)
|
|
}
|
|
}
|
|
|
|
func TestRollingLogRetainsOneBackup(t *testing.T) {
|
|
root := t.TempDir()
|
|
path := filepath.Join(root, clientLogName)
|
|
backup := filepath.Join(root, clientLogBackupName)
|
|
writer, err := openRollingLog(path, backup, 8)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := writer.Write([]byte("first")); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := writer.Write([]byte("second")); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := writer.Close(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
active, err := os.ReadFile(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
previous, err := os.ReadFile(backup)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if string(active) != "second" || string(previous) != "first" {
|
|
t.Fatalf("active=%q backup=%q", active, previous)
|
|
}
|
|
}
|