Test that each shipped module sits in the folder its namespace spells, that a locale alone fails at its address naming the missing geo, and that a mounted root folder is named by its namespace

This commit is contained in:
2026-10-11 14:11:46 +02:00
committed by Lillem4n
parent cc1c3bbc7d
commit 26f3c95031
8 changed files with 46 additions and 23 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ func TestMain(m *testing.M) {
if err != nil { if err != nil {
panic(err) panic(err)
} }
svSE, enUS, misc = bareCopy(tmp, "svse"), bareCopy(tmp, "enus"), bareCopy(tmp, "misc") svSE, enUS, misc = bareCopy(tmp, "sv_SE"), bareCopy(tmp, "en_US"), bareCopy(tmp, "misc")
code := m.Run() code := m.Run()
os.RemoveAll(tmp) os.RemoveAll(tmp)
os.Exit(code) os.Exit(code)
@@ -5,7 +5,7 @@ import (
"testing" "testing"
"github.com/larvit/fejkdata" "github.com/larvit/fejkdata"
"github.com/larvit/fejkdata/data/enus" enus "github.com/larvit/fejkdata/data/en_US"
) )
func TestFSLoadsByItsManifest(t *testing.T) { func TestFSLoadsByItsManifest(t *testing.T) {
@@ -5,7 +5,7 @@ import (
"testing" "testing"
"github.com/larvit/fejkdata" "github.com/larvit/fejkdata"
"github.com/larvit/fejkdata/data/geose" geose "github.com/larvit/fejkdata/data/geo/SE"
) )
func TestFSLoadsByItsManifest(t *testing.T) { func TestFSLoadsByItsManifest(t *testing.T) {
@@ -5,7 +5,7 @@ import (
"testing" "testing"
"github.com/larvit/fejkdata" "github.com/larvit/fejkdata"
"github.com/larvit/fejkdata/data/geous" geous "github.com/larvit/fejkdata/data/geo/US"
) )
func TestFSLoadsByItsManifest(t *testing.T) { func TestFSLoadsByItsManifest(t *testing.T) {
@@ -5,7 +5,7 @@ import (
"testing" "testing"
"github.com/larvit/fejkdata" "github.com/larvit/fejkdata"
"github.com/larvit/fejkdata/data/svse" svse "github.com/larvit/fejkdata/data/sv_SE"
) )
func TestFSLoadsByItsManifest(t *testing.T) { func TestFSLoadsByItsManifest(t *testing.T) {
+2 -2
View File
@@ -379,7 +379,7 @@ func TestShippedAddressIsOneNamedPick(t *testing.T) {
// one locality holds, the region empty for SE, whose address carries none. // one locality holds, the region empty for SE, whose address carries none.
func geoPlaces(t *testing.T, country string) map[string]bool { func geoPlaces(t *testing.T, country string) map[string]bool {
rows := func(table string) [][]string { rows := func(table string) [][]string {
b, err := os.ReadFile("data/geo" + strings.ToLower(country) + "/" + table + ".tsv") b, err := os.ReadFile("data/geo/" + country + "/" + table + ".tsv")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@@ -468,7 +468,7 @@ func TestShippedTableCellsAreTrimmed(t *testing.T) {
} }
// TestShippedNamespacedTree loads every shipped module and reaches each locale through its // TestShippedNamespacedTree loads every shipped module and reaches each locale through its
// namespace: data/svse/person.json, mounted under sv_SE, is sv_SE.person. // namespace: data/sv_SE/person.json, mounted under sv_SE, is sv_SE.person.
func TestShippedNamespacedTree(t *testing.T) { func TestShippedNamespacedTree(t *testing.T) {
f := shipped(t, WithSeed(1)) f := shipped(t, WithSeed(1))
for _, path := range []string{"sv_SE.person", "en_US.person", "sv_SE.address.locality"} { for _, path := range []string{"sv_SE.person", "en_US.person", "sv_SE.address.locality"} {
+10 -10
View File
@@ -31,12 +31,12 @@ func TestPackageImports(t *testing.T) {
allowed := map[string][]string{ allowed := map[string][]string{
".": {"internal/builtinfunc", "internal/datafiles", "internal/datatype", "internal/drawstate", "internal/grammar", "internal/invariant", "internal/jsonvalue", "internal/proven", "internal/rows"}, ".": {"internal/builtinfunc", "internal/datafiles", "internal/datatype", "internal/drawstate", "internal/grammar", "internal/invariant", "internal/jsonvalue", "internal/proven", "internal/rows"},
"cmd/fejkdata": {".", "data"}, "cmd/fejkdata": {".", "data"},
"data": {"data/enus", "data/geose", "data/geous", "data/misc", "data/svse"}, "data": {"data/en_US", "data/geo/SE", "data/geo/US", "data/misc", "data/sv_SE"},
"data/enus": nil, "data/en_US": nil,
"data/geose": nil, "data/geo/SE": nil,
"data/geous": nil, "data/geo/US": nil,
"data/misc": nil, "data/misc": nil,
"data/svse": nil, "data/sv_SE": nil,
"internal/builtinfunc": {"internal/datatype", "internal/drawstate", "internal/grammar", "internal/invariant", "internal/proven"}, "internal/builtinfunc": {"internal/datatype", "internal/drawstate", "internal/grammar", "internal/invariant", "internal/proven"},
"internal/datafiles": {"internal/grammar", "internal/invariant", "internal/jsonvalue"}, "internal/datafiles": {"internal/grammar", "internal/invariant", "internal/jsonvalue"},
"internal/datatype": nil, "internal/datatype": nil,
@@ -48,13 +48,13 @@ func TestPackageImports(t *testing.T) {
"internal/rows": {"internal/drawstate", "internal/grammar", "internal/invariant"}, "internal/rows": {"internal/drawstate", "internal/grammar", "internal/invariant"},
} }
testsAlso := map[string][]string{ testsAlso := map[string][]string{
".": {"data", "data/enus", "data/geose", "data/geous", "data/misc", "data/svse"}, ".": {"data", "data/en_US", "data/geo/SE", "data/geo/US", "data/misc", "data/sv_SE"},
"cmd/fejkdata": {"internal/grammar"}, "cmd/fejkdata": {"internal/grammar"},
"data/enus": {"."}, "data/en_US": {"."},
"data/geose": {"."}, "data/geo/SE": {"."},
"data/geous": {"."}, "data/geo/US": {"."},
"data/misc": {"."}, "data/misc": {"."},
"data/svse": {"."}, "data/sv_SE": {"."},
} }
seen := map[string]bool{} seen := map[string]bool{}
eachPackage(t, func(dir string, pkg *build.Package) { eachPackage(t, func(dir string, pkg *build.Package) {
+29 -6
View File
@@ -17,11 +17,11 @@ import (
"testing/fstest" "testing/fstest"
"github.com/larvit/fejkdata/data" "github.com/larvit/fejkdata/data"
"github.com/larvit/fejkdata/data/enus" enus "github.com/larvit/fejkdata/data/en_US"
"github.com/larvit/fejkdata/data/geose" geose "github.com/larvit/fejkdata/data/geo/SE"
"github.com/larvit/fejkdata/data/geous" geous "github.com/larvit/fejkdata/data/geo/US"
"github.com/larvit/fejkdata/data/misc" "github.com/larvit/fejkdata/data/misc"
"github.com/larvit/fejkdata/data/svse" svse "github.com/larvit/fejkdata/data/sv_SE"
"github.com/larvit/fejkdata/internal/datafiles" "github.com/larvit/fejkdata/internal/datafiles"
) )
@@ -65,12 +65,12 @@ func (m shippedModule) whole(t testing.TB) fs.FS {
} }
// shippedModules is every module data.Modules lists, each beside its folder under data/: its // shippedModules is every module data.Modules lists, each beside its folder under data/: its
// namespace in lower case without separators. // namespace, a dot a slash.
func shippedModules(t testing.TB) []shippedModule { func shippedModules(t testing.TB) []shippedModule {
t.Helper() t.Helper()
out := []shippedModule{{fsys: enus.FS, namespace: "en_US"}, {fsys: geose.FS, namespace: "geo.SE"}, {fsys: geous.FS, namespace: "geo.US"}, {fsys: misc.FS, namespace: "misc"}, {fsys: svse.FS, namespace: "sv_SE"}} out := []shippedModule{{fsys: enus.FS, namespace: "en_US"}, {fsys: geose.FS, namespace: "geo.SE"}, {fsys: geous.FS, namespace: "geo.US"}, {fsys: misc.FS, namespace: "misc"}, {fsys: svse.FS, namespace: "sv_SE"}}
for i := range out { for i := range out {
out[i].dir = strings.ToLower(strings.NewReplacer(".", "", "_", "").Replace(out[i].namespace)) out[i].dir = strings.ReplaceAll(out[i].namespace, ".", "/")
} }
var listed []fs.FS var listed []fs.FS
for _, m := range out { for _, m := range out {
@@ -229,6 +229,29 @@ func TestEachShippedModuleRendersBesideTheModulesItReads(t *testing.T) {
} }
} }
func TestALocaleAloneFailsAtItsAddressNamingTheMissingGeo(t *testing.T) {
f, err := New(WithDataFS(svse.FS))
if err != nil {
t.Fatalf("New(WithDataFS(svse.FS)) = %v", err)
}
if _, err := f.Fake("sv_SE.address"); !errors.Is(err, ErrLoad) || !strings.Contains(err.Error(), `reference {/geo.SE.address}: no entry "geo"`) {
t.Errorf(`Fake("sv_SE.address") = %v, want a load error naming the missing geo`, err)
}
if got := fake(t, f, "sv_SE.person"); got == "" {
t.Error("sv_SE.person rendered empty, want the locale's other categories to load alone")
}
}
func TestAMountedModuleNamesItsRootFolderByItsNamespace(t *testing.T) {
_, err := New(WithDataFS(fstest.MapFS{
".fejkdata.json": {Data: []byte(`{"namespace": "my.data"}`)},
"t.json": {Data: []byte(`{"format":"{name}","rows":"t.tsv","key":"name"}`)},
}))
if err == nil || !strings.Contains(err.Error(), "not beside it in my.data") || strings.Contains(err.Error(), "(.)") {
t.Errorf("New = %v, want the root folder named by its namespace alone", err)
}
}
func TestAMountedModuleNamesItsFilesByItsNamespace(t *testing.T) { func TestAMountedModuleNamesItsFilesByItsNamespace(t *testing.T) {
_, err := New(WithDataFS(fstest.MapFS{ _, err := New(WithDataFS(fstest.MapFS{
".fejkdata.json": {Data: []byte(`{"namespace": "my.data"}`)}, ".fejkdata.json": {Data: []byte(`{"namespace": "my.data"}`)},