cfg/cfg_test.go

97 lines
1.5 KiB
Go

package cfg
import (
"testing"
"github.com/matryer/is"
"go.jolheiser.com/nixfig"
)
type TestData struct {
Foo string
Baz bool
Bux int
Qux TestSubData
}
type TestSubData struct {
Honk string
Chonk int
Gonk bool
}
func TestEncoding(t *testing.T) {
final := TestData{
Foo: "bar",
Baz: true,
Bux: 10,
Qux: TestSubData{
Honk: "bonk",
Chonk: 50,
Gonk: false,
},
}
// Each decode-only [Encoding]
tt := []struct {
Name string
Input string
Encoding Encoding
}{
{
Name: "dhall",
Input: `
{
Foo = "bar"
, Baz = True
, Bux = 10
, Qux = {
Honk = "bonk"
, Chonk = 50
, Gonk = False
}
}
`,
Encoding: DHALL,
}, {
Name: "jsonnet",
Input: `
{
Foo: "bar",
Baz: true,
Bux: 10,
Qux: {
Honk: "bonk",
Chonk: 50,
Gonk: false,
}
}
`,
Encoding: JSONNET,
},
}
encoders := []Encoding{JSON, JSONC, YAML, TOML, KDL}
// Only test nix if it's available
if nixfig.Nix != "" {
encoders = append(encoders, NIX)
}
for _, tc := range tt {
t.Run(tc.Name, func(t *testing.T) {
assert := is.New(t)
var data TestData
err := tc.Encoding.Unmarshal([]byte(tc.Input), &data)
assert.NoErr(err) // Should be able to unmarshal
for _, e := range encoders {
out, err := e.Marshal(data)
assert.NoErr(err) // Should be able to marshal
err = e.Unmarshal(out, &data)
assert.NoErr(err) // Should be able to unmarshal
}
assert.Equal(data, final) // Final structs should be equal
})
}
}