mirror of
https://github.com/opentffoundation/opentf.git
synced 2025-12-19 17:59:05 -05:00
98 lines
2.3 KiB
Go
98 lines
2.3 KiB
Go
// Copyright (c) The OpenTofu Authors
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
// Copyright (c) 2023 HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package jsonentities
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
"github.com/zclconf/go-cty/cty/function"
|
|
"github.com/zclconf/go-cty/cty/function/stdlib"
|
|
)
|
|
|
|
func TestDescribeFunction(t *testing.T) {
|
|
// NOTE: This test case is referring to some real functions in other
|
|
// packages. and so if those functions change signature later it will
|
|
// probably make some cases here fail. If that is the cause of the failure,
|
|
// it's fine to update the test here to match rather than to revert the
|
|
// change to the function signature, as long as the change to the
|
|
// function signature is otherwise within the bounds of our compatibility
|
|
// promises.
|
|
|
|
tests := map[string]struct {
|
|
Function function.Function
|
|
Want *Function
|
|
}{
|
|
"upper": {
|
|
Function: stdlib.UpperFunc,
|
|
Want: &Function{
|
|
Name: "upper",
|
|
Params: []FunctionParam{
|
|
{
|
|
Name: "str",
|
|
Type: json.RawMessage(`"string"`),
|
|
},
|
|
},
|
|
ReturnType: json.RawMessage(`"string"`),
|
|
},
|
|
},
|
|
"coalesce": {
|
|
Function: stdlib.CoalesceFunc,
|
|
Want: &Function{
|
|
Name: "coalesce",
|
|
Params: []FunctionParam{},
|
|
VariadicParam: &FunctionParam{
|
|
Name: "vals",
|
|
Type: json.RawMessage(`"dynamic"`),
|
|
},
|
|
ReturnType: json.RawMessage(`"dynamic"`),
|
|
},
|
|
},
|
|
"join": {
|
|
Function: stdlib.JoinFunc,
|
|
Want: &Function{
|
|
Name: "join",
|
|
Params: []FunctionParam{
|
|
{
|
|
Name: "separator",
|
|
Type: json.RawMessage(`"string"`),
|
|
},
|
|
},
|
|
VariadicParam: &FunctionParam{
|
|
Name: "lists",
|
|
Type: json.RawMessage(`["list","string"]`),
|
|
},
|
|
ReturnType: json.RawMessage(`"string"`),
|
|
},
|
|
},
|
|
"jsonencode": {
|
|
Function: stdlib.JSONEncodeFunc,
|
|
Want: &Function{
|
|
Name: "jsonencode",
|
|
Params: []FunctionParam{
|
|
{
|
|
Name: "val",
|
|
Type: json.RawMessage(`"dynamic"`),
|
|
},
|
|
},
|
|
ReturnType: json.RawMessage(`"string"`),
|
|
},
|
|
},
|
|
}
|
|
|
|
for name, test := range tests {
|
|
t.Run(name, func(t *testing.T) {
|
|
got := DescribeFunction(name, test.Function)
|
|
want := test.Want
|
|
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Errorf("wrong result\n%s", diff)
|
|
}
|
|
})
|
|
}
|
|
}
|