Pin bare-reference independence and tighten the shared-draw comments
Tests / vet + fmt + tests (pull_request) Successful in 1m3s
Tests / vet + fmt + tests (pull_request) Successful in 1m3s
This commit is contained in:
@@ -274,8 +274,7 @@ func readField(s *session, t *template, held, shared *draws, a arm) string {
|
|||||||
}
|
}
|
||||||
return renderShared(s, t.fields[a.key], shared)
|
return renderShared(s, t.fields[a.key], shared)
|
||||||
}
|
}
|
||||||
// A reference names a shared source, so a record shares its draw across the
|
// A reference shares its draw across a record's columns; a sibling is per expansion.
|
||||||
// columns; a sibling field is drawn per expansion as always.
|
|
||||||
d := held
|
d := held
|
||||||
if isRef(a.key) && shared != nil {
|
if isRef(a.key) && shared != nil {
|
||||||
d = shared
|
d = shared
|
||||||
|
|||||||
@@ -200,6 +200,32 @@ func TestRecordSharesAReferenceIntoAColumnRepeat(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRecordBareReferenceStaysIndependent(t *testing.T) {
|
||||||
|
dir := writeData(t, map[string]string{
|
||||||
|
"currency": `[{"format":"{code}","code":"AUD"},{"format":"{code}","code":"EUR"}]`,
|
||||||
|
"order": `{"format":"","whole":"{/currency}","code":"{/currency.code}"}`,
|
||||||
|
})
|
||||||
|
f := newGenerator(t, dir, WithSeed(1))
|
||||||
|
sawMismatch := false
|
||||||
|
for i := 0; i < 100; i++ {
|
||||||
|
r, err := f.Record("order")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
m := map[string]string{}
|
||||||
|
for _, c := range r.Fields() {
|
||||||
|
m[c.Name] = c.Value
|
||||||
|
}
|
||||||
|
if m["whole"] != m["code"] {
|
||||||
|
sawMismatch = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !sawMismatch {
|
||||||
|
t.Fatal("a bare {/currency} column never disagreed with a tailed {/currency.code} column; a bare reference should draw independently")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestRecordSQLQuotesIdentifiers(t *testing.T) {
|
func TestRecordSQLQuotesIdentifiers(t *testing.T) {
|
||||||
dir := writeData(t, map[string]string{
|
dir := writeData(t, map[string]string{
|
||||||
"row": `{"format": "", "postal-code": "1", "street-number": "2"}`,
|
"row": `{"format": "", "postal-code": "1", "street-number": "2"}`,
|
||||||
|
|||||||
@@ -56,8 +56,7 @@ func render(s *session, n node) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// renderShared is render with a shared draw context: the draws a record shares
|
// renderShared is render with a shared draw context: the draws a record shares
|
||||||
// across its columns. A nil shared means a standalone render, where a reference
|
// across its columns; a nil shared is a standalone render.
|
||||||
// is drawn per expansion as it always has been.
|
|
||||||
func renderShared(s *session, n node, shared *draws) string {
|
func renderShared(s *session, n node, shared *draws) string {
|
||||||
switch n := n.(type) {
|
switch n := n.(type) {
|
||||||
case *choice:
|
case *choice:
|
||||||
|
|||||||
Reference in New Issue
Block a user