nixbuild/util_test.go
Ophestra d3a8aed237
exec: replace global state with interface
This is cleaner, and finally enables writing tests for the nix invoking functions.
2025-07-17 16:53:00 +09:00

47 lines
1.2 KiB
Go

package nixbuild_test
import (
"encoding/json"
"slices"
"strings"
"testing"
"git.gensokyo.uk/yonah/nixbuild"
)
func TestCollectFromDerivations(t *testing.T) {
testCases := []struct {
name string
}{
{"getchoo atlas"},
{"getchoo glados"},
{"pluiedev pappardelle"},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
var derivations nixbuild.DerivationMap
if err := json.Unmarshal(drvShow[tc.name], &derivations); err != nil {
t.Fatalf("cannot unmarshal test data: %v", err)
}
got := nixbuild.CollectFromDerivations(derivations)
want := collectWant[tc.name]
if !slices.Equal(got, want) {
t.Errorf("CollectFromDerivations:\n%s, want\n%s",
strings.Join(got, "\n"), strings.Join(want, "\n"))
}
})
}
t.Run("edge cases", func(t *testing.T) {
// this exclusively tests edge cases for nil values and buffer growing, so the data doesn't have to make sense
want := []string{"", "big"}
got := nixbuild.CollectFromDerivations(nixbuild.DerivationMap{
"nil": nil,
"big": &nixbuild.Derivation{InputSources: make([]string, 1<<18)},
})
if !slices.Equal(got, want) {
t.Errorf("CollectFromDerivations: %#v, want %#v", got, want)
}
})
}