Replace Python launcher with native Go UI

This commit is contained in:
Storm Dragon
2026-09-03 11:43:21 -04:00
parent 0d4daeb45a
commit afd4148e9a
14 changed files with 2428 additions and 961 deletions
+82
View File
@@ -0,0 +1,82 @@
package main
import (
"archive/tar"
"compress/gzip"
"io"
"os"
"path/filepath"
"reflect"
"testing"
)
func TestLoggingPreferenceRoundTrip(t *testing.T) {
path := filepath.Join(t.TempDir(), "config", "logging.conf")
if load_logging_pref(path) {
t.Fatal("missing logging preference must default to disabled")
}
if err := save_logging_pref(path, true); err != nil {
t.Fatal(err)
}
if !load_logging_pref(path) {
t.Fatal("saved logging preference was not loaded")
}
info, err := os.Stat(path)
if err != nil {
t.Fatal(err)
}
if info.Mode().Perm() != 0600 {
t.Fatalf("logging preference mode = %o; want 600", info.Mode().Perm())
}
}
func TestCreateLogArchiveIncludesOnlyRegularLogFiles(t *testing.T) {
root := t.TempDir()
logDir := filepath.Join(root, "logs")
cacheDir := filepath.Join(root, "cache")
if err := os.MkdirAll(logDir, 0700); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(filepath.Join(logDir, "first.log"), []byte("first\n"), 0600); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(filepath.Join(logDir, "ignore.txt"), []byte("ignore\n"), 0600); err != nil {
t.Fatal(err)
}
archivePath, err := create_log_archive(logDir, cacheDir)
if err != nil {
t.Fatal(err)
}
defer os.Remove(archivePath)
file, err := os.Open(archivePath)
if err != nil {
t.Fatal(err)
}
defer file.Close()
gzipReader, err := gzip.NewReader(file)
if err != nil {
t.Fatal(err)
}
defer gzipReader.Close()
tarReader := tar.NewReader(gzipReader)
names := []string{}
contents := ""
for {
header, err := tarReader.Next()
if err == io.EOF {
break
}
if err != nil {
t.Fatal(err)
}
names = append(names, header.Name)
data, err := io.ReadAll(tarReader)
if err != nil {
t.Fatal(err)
}
contents += string(data)
}
if !reflect.DeepEqual(names, []string{"first.log"}) || contents != "first\n" {
t.Fatalf("archive contains names %v and data %q", names, contents)
}
}