Files

78 lines
1.9 KiB
Go
Raw Permalink Normal View History

2026-09-18 12:03:35 +02:00
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
// SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
package tomlfile
import (
"os"
"path/filepath"
"strings"
"testing"
"sourcedock.dev/petrbalvin/interpres/v2"
)
func TestWriteAndReload(t *testing.T) {
path := filepath.Join(t.TempDir(), "sub", "data.toml")
if err := Write(path, "users", []map[string]any{
{"username": "admin", "role": "admin"},
}); err != nil {
t.Fatalf("Write: %v", err)
}
info, err := os.Stat(path)
if err != nil {
t.Fatalf("stat: %v", err)
}
if info.Mode().Perm() != 0o600 {
t.Fatalf("mode = %v", info.Mode().Perm())
}
raw, err := os.ReadFile(path)
if err != nil {
t.Fatalf("read: %v", err)
}
if !strings.Contains(string(raw), "[[users]]") {
t.Fatalf("content = %s", raw)
}
parsed, err := interpres.ParseMap(raw)
if err != nil {
t.Fatalf("parse: %v", err)
}
tables := Tables(parsed["users"])
if len(tables) != 1 || tables[0]["username"] != "admin" {
t.Fatalf("tables = %v", tables)
}
}
func TestTablesShapes(t *testing.T) {
if Tables(nil) != nil {
t.Fatal("nil input should yield nil")
}
if got := Tables("nope"); got != nil {
t.Fatalf("got = %v", got)
}
fromAny := Tables([]any{map[string]any{"a": 1}, "skip"})
if len(fromAny) != 1 || fromAny[0]["a"] != 1 {
t.Fatalf("fromAny = %v", fromAny)
}
fromMaps := Tables([]map[string]any{{"b": 2}})
if len(fromMaps) != 1 || fromMaps[0]["b"] != 2 {
t.Fatalf("fromMaps = %v", fromMaps)
}
}
func TestStringsShapes(t *testing.T) {
if Strings(nil) != nil {
t.Fatal("nil input should yield nil")
}
if Strings(42) != nil {
t.Fatal("non-array input should yield nil")
}
got := Strings([]any{"a", 1, "b"})
if len(got) != 3 || got[0] != "a" || got[2] != "b" {
t.Fatalf("got = %v", got)
}
if direct := Strings([]string{"x"}); len(direct) != 1 || direct[0] != "x" {
t.Fatalf("direct = %v", direct)
}
}