package fejkdata import "testing" func TestTransforms(t *testing.T) { f := engine(1) for src, want := range map[string]string{ `{"format":"{uppercase(x)}|{lowercase(x)}|{ascii(x)}","x":"Åsa Ödegård-Nuñez"}`: "ÅSA ÖDEGÅRD-NUÑEZ|åsa ödegård-nuñez|Asa Odegard-Nunez", `{"format":"{lowercase(ascii(x))}","x":"Åsa"}`: "asa", `{"format":"{ascii(x)}","x":"Ærø ß 日本"}`: "AEro ss ", } { if got := mustRender(t, f, src); got != want { t.Errorf("render(%s) = %q, want %q", src, got, want) } } } func TestTransformReadsTheNamedDraw(t *testing.T) { f := engine(2) src := `{"format":"{p as q}{q.first}={lowercase(q.first)}","p":[{"format":"{first}","first":"Anna"},{"format":"{first}","first":"Bo"}]}` for i := 0; i < 50; i++ { if got := mustRender(t, f, src); got != "Anna=anna" && got != "Bo=bo" { t.Fatalf("render = %q, want the transform over the same draw", got) } } } func TestTransformOverAReference(t *testing.T) { dir := writeData(t, map[string]string{ "person": `[{"format":"{first} {last}","first":"Åsa","last":"Öberg"},{"format":"{first} {last}","first":"Bo","last":"Ek","born":"1990"}]`, "email": `"{/person as p}{p.first} {p.last} <{lowercase(ascii(p.first))}.{lowercase(ascii(p.last))}@example.com>"`, }) f := newGenerator(t, dir, WithSeed(5)) for i := 0; i < 50; i++ { if got := fake(t, f, "email"); got != "Åsa Öberg " && got != "Bo Ek " { t.Fatalf("email = %q, want a record from one draw", got) } } } func TestTransformArgs(t *testing.T) { f := newGenerator(t, writeData(t, map[string]string{"x": `"v"`})) for _, bad := range []string{ `{"format":"{lowercase()}","x":"v"}`, `{"format":"{lowercase(nope)}","x":"v"}`, `{"format":"{ascii(x,y)}","x":"v","y":"w"}`, `{"format":"{lowercase(hex(2))}","x":"v"}`, } { if _, err := f.NewTemplate(bad); err == nil { t.Errorf("NewTemplate(%s) = nil error, want it rejected", bad) } } } func TestAsciiKeepsDEL(t *testing.T) { if got := mustRender(t, engine(1), `{"format":"{ascii(x)}","x":"a\u007fb"}`); got != "a\u007fb" { t.Errorf("ascii over DEL = %q, want it kept: DEL is ASCII", got) } }