Test / test (push) Successful in 7m5s
Release / gates (push) Successful in 7m28s
Release / build (amd64, freebsd) (push) Successful in 2m52s
Release / build (amd64, linux) (push) Successful in 2m46s
Release / build (arm64, freebsd) (push) Successful in 2m22s
Release / build (arm64, linux) (push) Successful in 2m38s
Release / build (loong64, linux) (push) Successful in 2m7s
Release / build (riscv64, linux) (push) Successful in 2m17s
Release / release (push) Successful in 1m0s
Assisted-by: GLM 5.3
78 lines
1.9 KiB
Go
78 lines
1.9 KiB
Go
// 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)
|
|
}
|
|
}
|