1979cb4c56
It no longer produces diagnostics, since that's redundant with the diagnostics that Decode itself will produce, and it wasn't going to be complete anyway due to our use of partial decoding and our inability to thread through nested specs in child blocks.
109 lines
1.9 KiB
Go
109 lines
1.9 KiB
Go
package zcldec
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/zclconf/go-zcl/zcl"
|
|
"github.com/zclconf/go-zcl/zcl/zclsyntax"
|
|
)
|
|
|
|
func TestVariables(t *testing.T) {
|
|
tests := []struct {
|
|
config string
|
|
spec Spec
|
|
want []zcl.Traversal
|
|
}{
|
|
{
|
|
``,
|
|
&ObjectSpec{},
|
|
nil,
|
|
},
|
|
{
|
|
`a = foo`,
|
|
&ObjectSpec{},
|
|
nil, // "a" is not actually used, so "foo" is not required
|
|
},
|
|
{
|
|
`a = foo`,
|
|
&AttrSpec{
|
|
Name: "a",
|
|
},
|
|
[]zcl.Traversal{
|
|
{
|
|
zcl.TraverseRoot{
|
|
Name: "foo",
|
|
SrcRange: zcl.Range{
|
|
Start: zcl.Pos{Line: 1, Column: 5, Byte: 4},
|
|
End: zcl.Pos{Line: 1, Column: 8, Byte: 7},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
`a = foo`,
|
|
&ObjectSpec{
|
|
"a": &AttrSpec{
|
|
Name: "a",
|
|
},
|
|
},
|
|
[]zcl.Traversal{
|
|
{
|
|
zcl.TraverseRoot{
|
|
Name: "foo",
|
|
SrcRange: zcl.Range{
|
|
Start: zcl.Pos{Line: 1, Column: 5, Byte: 4},
|
|
End: zcl.Pos{Line: 1, Column: 8, Byte: 7},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
`
|
|
b {
|
|
a = foo
|
|
}`,
|
|
&BlockSpec{
|
|
TypeName: "b",
|
|
Nested: &AttrSpec{
|
|
Name: "a",
|
|
},
|
|
},
|
|
[]zcl.Traversal{
|
|
{
|
|
zcl.TraverseRoot{
|
|
Name: "foo",
|
|
SrcRange: zcl.Range{
|
|
Start: zcl.Pos{Line: 3, Column: 7, Byte: 11},
|
|
End: zcl.Pos{Line: 3, Column: 10, Byte: 14},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
for i, test := range tests {
|
|
t.Run(fmt.Sprintf("%02d-%s", i, test.config), func(t *testing.T) {
|
|
file, diags := zclsyntax.ParseConfig([]byte(test.config), "", zcl.Pos{Line: 1, Column: 1, Byte: 0})
|
|
if len(diags) != 0 {
|
|
t.Errorf("wrong number of diagnostics from ParseConfig %d; want %d", len(diags), 0)
|
|
for _, diag := range diags {
|
|
t.Logf(" - %s", diag.Error())
|
|
}
|
|
}
|
|
body := file.Body
|
|
|
|
got := Variables(body, test.spec)
|
|
|
|
if !reflect.DeepEqual(got, test.want) {
|
|
t.Errorf("wrong result\ngot: %#v\nwant: %#v", got, test.want)
|
|
}
|
|
})
|
|
}
|
|
|
|
}
|