From 26f3c950316f6eb9b153ff6a232c4a7fdd57a375 Mon Sep 17 00:00:00 2001 From: Lilleman auf Larv Date: Sun, 11 Oct 2026 14:11:46 +0200 Subject: [PATCH] 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 --- cmd/fejkdata/main_test.go | 2 +- data/{enus => en_US}/fs_test.go | 2 +- data/{geose => geo/SE}/fs_test.go | 2 +- data/{geous => geo/US}/fs_test.go | 2 +- data/{svse => sv_SE}/fs_test.go | 2 +- data_test.go | 4 ++-- imports_test.go | 20 +++++++++--------- shipped_test.go | 35 +++++++++++++++++++++++++------ 8 files changed, 46 insertions(+), 23 deletions(-) rename data/{enus => en_US}/fs_test.go (90%) rename data/{geose => geo/SE}/fs_test.go (90%) rename data/{geous => geo/US}/fs_test.go (90%) rename data/{svse => sv_SE}/fs_test.go (90%) diff --git a/cmd/fejkdata/main_test.go b/cmd/fejkdata/main_test.go index f4dc0af..7f6162e 100644 --- a/cmd/fejkdata/main_test.go +++ b/cmd/fejkdata/main_test.go @@ -21,7 +21,7 @@ func TestMain(m *testing.M) { if err != nil { 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() os.RemoveAll(tmp) os.Exit(code) diff --git a/data/enus/fs_test.go b/data/en_US/fs_test.go similarity index 90% rename from data/enus/fs_test.go rename to data/en_US/fs_test.go index 4475144..7873ba8 100644 --- a/data/enus/fs_test.go +++ b/data/en_US/fs_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/larvit/fejkdata" - "github.com/larvit/fejkdata/data/enus" + enus "github.com/larvit/fejkdata/data/en_US" ) func TestFSLoadsByItsManifest(t *testing.T) { diff --git a/data/geose/fs_test.go b/data/geo/SE/fs_test.go similarity index 90% rename from data/geose/fs_test.go rename to data/geo/SE/fs_test.go index 187af70..678be8a 100644 --- a/data/geose/fs_test.go +++ b/data/geo/SE/fs_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/larvit/fejkdata" - "github.com/larvit/fejkdata/data/geose" + geose "github.com/larvit/fejkdata/data/geo/SE" ) func TestFSLoadsByItsManifest(t *testing.T) { diff --git a/data/geous/fs_test.go b/data/geo/US/fs_test.go similarity index 90% rename from data/geous/fs_test.go rename to data/geo/US/fs_test.go index afcfe57..c60f3e9 100644 --- a/data/geous/fs_test.go +++ b/data/geo/US/fs_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/larvit/fejkdata" - "github.com/larvit/fejkdata/data/geous" + geous "github.com/larvit/fejkdata/data/geo/US" ) func TestFSLoadsByItsManifest(t *testing.T) { diff --git a/data/svse/fs_test.go b/data/sv_SE/fs_test.go similarity index 90% rename from data/svse/fs_test.go rename to data/sv_SE/fs_test.go index 81673ec..8e4854b 100644 --- a/data/svse/fs_test.go +++ b/data/sv_SE/fs_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/larvit/fejkdata" - "github.com/larvit/fejkdata/data/svse" + svse "github.com/larvit/fejkdata/data/sv_SE" ) func TestFSLoadsByItsManifest(t *testing.T) { diff --git a/data_test.go b/data_test.go index c21ac6e..6a8088e 100644 --- a/data_test.go +++ b/data_test.go @@ -379,7 +379,7 @@ func TestShippedAddressIsOneNamedPick(t *testing.T) { // one locality holds, the region empty for SE, whose address carries none. func geoPlaces(t *testing.T, country string) map[string]bool { 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 { t.Fatal(err) } @@ -468,7 +468,7 @@ func TestShippedTableCellsAreTrimmed(t *testing.T) { } // 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) { f := shipped(t, WithSeed(1)) for _, path := range []string{"sv_SE.person", "en_US.person", "sv_SE.address.locality"} { diff --git a/imports_test.go b/imports_test.go index 1429d95..1f7565c 100644 --- a/imports_test.go +++ b/imports_test.go @@ -31,12 +31,12 @@ func TestPackageImports(t *testing.T) { allowed := map[string][]string{ ".": {"internal/builtinfunc", "internal/datafiles", "internal/datatype", "internal/drawstate", "internal/grammar", "internal/invariant", "internal/jsonvalue", "internal/proven", "internal/rows"}, "cmd/fejkdata": {".", "data"}, - "data": {"data/enus", "data/geose", "data/geous", "data/misc", "data/svse"}, - "data/enus": nil, - "data/geose": nil, - "data/geous": nil, + "data": {"data/en_US", "data/geo/SE", "data/geo/US", "data/misc", "data/sv_SE"}, + "data/en_US": nil, + "data/geo/SE": nil, + "data/geo/US": nil, "data/misc": nil, - "data/svse": nil, + "data/sv_SE": nil, "internal/builtinfunc": {"internal/datatype", "internal/drawstate", "internal/grammar", "internal/invariant", "internal/proven"}, "internal/datafiles": {"internal/grammar", "internal/invariant", "internal/jsonvalue"}, "internal/datatype": nil, @@ -48,13 +48,13 @@ func TestPackageImports(t *testing.T) { "internal/rows": {"internal/drawstate", "internal/grammar", "internal/invariant"}, } 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"}, - "data/enus": {"."}, - "data/geose": {"."}, - "data/geous": {"."}, + "data/en_US": {"."}, + "data/geo/SE": {"."}, + "data/geo/US": {"."}, "data/misc": {"."}, - "data/svse": {"."}, + "data/sv_SE": {"."}, } seen := map[string]bool{} eachPackage(t, func(dir string, pkg *build.Package) { diff --git a/shipped_test.go b/shipped_test.go index 2eedcfd..6613eb9 100644 --- a/shipped_test.go +++ b/shipped_test.go @@ -17,11 +17,11 @@ import ( "testing/fstest" "github.com/larvit/fejkdata/data" - "github.com/larvit/fejkdata/data/enus" - "github.com/larvit/fejkdata/data/geose" - "github.com/larvit/fejkdata/data/geous" + enus "github.com/larvit/fejkdata/data/en_US" + geose "github.com/larvit/fejkdata/data/geo/SE" + geous "github.com/larvit/fejkdata/data/geo/US" "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" ) @@ -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 -// namespace in lower case without separators. +// namespace, a dot a slash. func shippedModules(t testing.TB) []shippedModule { 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"}} 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 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) { _, err := New(WithDataFS(fstest.MapFS{ ".fejkdata.json": {Data: []byte(`{"namespace": "my.data"}`)},