94 lines
2.4 KiB
Go
94 lines
2.4 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestLoadMissingUsesDefaults(t *testing.T) {
|
|
c, err := LoadFrom(filepath.Join(t.TempDir(), "tidak-ada.yaml"))
|
|
if err != nil {
|
|
t.Fatalf("file tidak ada harusnya bukan error: %v", err)
|
|
}
|
|
d := Default()
|
|
if c.UI.Language != d.UI.Language || c.UI.SoundVolume != d.UI.SoundVolume {
|
|
t.Fatalf("default salah: %+v", c.UI)
|
|
}
|
|
if c.StacksDir == "" {
|
|
t.Fatal("stacks_dir default kosong")
|
|
}
|
|
}
|
|
|
|
func TestSaveLoadRoundtrip(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "sub", "config.yaml")
|
|
in := Default()
|
|
in.UI.Language = "en"
|
|
in.UI.SoundVolume = 42
|
|
in.StacksDir = "/data/stacks"
|
|
|
|
if err := SaveTo(path, in); err != nil {
|
|
t.Fatalf("SaveTo: %v", err)
|
|
}
|
|
out, err := LoadFrom(path)
|
|
if err != nil {
|
|
t.Fatalf("LoadFrom: %v", err)
|
|
}
|
|
if out.UI.Language != "en" || out.UI.SoundVolume != 42 || out.StacksDir != "/data/stacks" {
|
|
t.Fatalf("roundtrip salah: %+v", out)
|
|
}
|
|
}
|
|
|
|
func TestPartialYamlKeepsDefaults(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "config.yaml")
|
|
os.WriteFile(path, []byte("ui:\n language: en\n"), 0o644)
|
|
|
|
c, err := LoadFrom(path)
|
|
if err != nil {
|
|
t.Fatalf("LoadFrom: %v", err)
|
|
}
|
|
if c.UI.Language != "en" {
|
|
t.Fatalf("language: %s", c.UI.Language)
|
|
}
|
|
if c.UI.SoundVolume != 70 || !c.UI.SoundEnabled || !c.UI.AnimationEnabled {
|
|
t.Fatalf("field lain harus default: %+v", c.UI)
|
|
}
|
|
}
|
|
|
|
func TestNormalizeInvalidValues(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "config.yaml")
|
|
os.WriteFile(path, []byte("ui:\n language: klingon\n sound_volume: 999\n"), 0o644)
|
|
|
|
c, err := LoadFrom(path)
|
|
if err != nil {
|
|
t.Fatalf("LoadFrom: %v", err)
|
|
}
|
|
if c.UI.Language != "id" {
|
|
t.Fatalf("language rusak harus fallback id: %s", c.UI.Language)
|
|
}
|
|
if c.UI.SoundVolume != 100 {
|
|
t.Fatalf("volume harus diklamp 100: %d", c.UI.SoundVolume)
|
|
}
|
|
}
|
|
|
|
func TestMalformedYamlIsError(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "config.yaml")
|
|
os.WriteFile(path, []byte("ui: [ini: rusak\n"), 0o644)
|
|
if _, err := LoadFrom(path); err == nil {
|
|
t.Fatal("yaml rusak harusnya error")
|
|
}
|
|
}
|
|
|
|
func TestExpandPath(t *testing.T) {
|
|
home, _ := os.UserHomeDir()
|
|
if got := ExpandPath("~/x"); got != filepath.Join(home, "x") {
|
|
t.Fatalf("~/x = %s", got)
|
|
}
|
|
if got := ExpandPath("~"); got != home {
|
|
t.Fatalf("~ = %s", got)
|
|
}
|
|
if got := ExpandPath("/abs/path"); got != "/abs/path" {
|
|
t.Fatalf("abs berubah: %s", got)
|
|
}
|
|
}
|