Resolve architect findings: gate [ on json.Valid, fix the root-relative README claim, test isTemplate
Tests / vet + fmt + tests (pull_request) Failing after 16s
Tests / vet + fmt + tests (pull_request) Failing after 16s
This commit is contained in:
@@ -9,6 +9,7 @@ package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
@@ -243,13 +244,14 @@ func (in invocation) write(f *fejkdata.Generator, w io.Writer) error {
|
||||
}
|
||||
|
||||
// isTemplate reports whether an argument is an inline template rather than a
|
||||
// path: a JSON object or array, or a format string carrying a { token. A path can
|
||||
// never contain a brace, so the two never collide.
|
||||
// path: a format string carrying a { token (a path can never contain a brace),
|
||||
// or a JSON object or array. A [ can begin a real category name, so a [
|
||||
// counts as a template only when the whole argument is valid JSON.
|
||||
func isTemplate(arg string) bool {
|
||||
if strings.ContainsRune(arg, '{') {
|
||||
return true
|
||||
}
|
||||
return strings.HasPrefix(arg, "[")
|
||||
return strings.HasPrefix(arg, "[") && json.Valid([]byte(arg))
|
||||
}
|
||||
|
||||
// renderArg renders one positional argument: an inline template, or a path.
|
||||
|
||||
@@ -301,6 +301,23 @@ func TestRunShippedDataByDefault(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsTemplate(t *testing.T) {
|
||||
for arg, want := range map[string]bool{
|
||||
"sv_SE.person": false,
|
||||
"person.last": false,
|
||||
"[abc]": false, // a [ can open a real category name; not JSON
|
||||
"[abc].field": false,
|
||||
"name: {x}": true, // a { token: a path can never carry a brace
|
||||
`{"format":"x"}`: true,
|
||||
`["a","b"]`: true, // a JSON array carries no brace
|
||||
`[1, 2]`: true,
|
||||
} {
|
||||
if got := isTemplate(arg); got != want {
|
||||
t.Errorf("isTemplate(%q) = %v, want %v", arg, got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestRunInlineTemplate(t *testing.T) {
|
||||
code, out, errb := runOut("--seed", "1", "name: {/sv_SE.person.last}")
|
||||
if code != 0 || !strings.HasPrefix(out, "name: ") || strings.Contains(out, "{") {
|
||||
|
||||
Reference in New Issue
Block a user