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 {
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)
@@ -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) {
@@ -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) {
@@ -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) {
@@ -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) {
+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.
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"} {
+10 -10
View File
@@ -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) {
+29 -6
View File
@@ -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"}`)},