Skip to content
Merged
6,045 changes: 0 additions & 6,045 deletions internal/framework/flex/auto_expand_test.go

This file was deleted.

5,512 changes: 0 additions & 5,512 deletions internal/framework/flex/auto_flatten_test.go

This file was deleted.

149 changes: 149 additions & 0 deletions internal/framework/flex/autoflex_args_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0

package flex

// Tests AutoFlex's Expand/Flatten of args to validate top-level argument shape (nil/typed-nil,
// pointer-ness, struct↔non-struct). They intentionally do not assert logging; only diagnostic codes.

import (
"testing"
)

type emptyStruct struct{}

func TestExpandArgs_nilAndPointers(t *testing.T) {
t.Parallel()

var (
typedNilSource *emptyStruct
typedNilTarget *emptyStruct
)

testCases := autoFlexTestCases{
"nil Source": {
Target: &emptyStruct{},
ExpectedDiags: diagAFNil(diagExpandingSourceIsNil),
},
"typed nil Source": {
Source: typedNilSource,
Target: &emptyStruct{},
ExpectedDiags: diagAFNil(diagExpandingSourceIsNil), // FIXME: Should give the actual type
},
"nil Target": {
Source: emptyStruct{},
ExpectedDiags: diagAFNil(diagConvertingTargetIsNil),
},
"typed nil Target": {
Source: emptyStruct{},
Target: typedNilTarget,
ExpectedDiags: diagAF[*emptyStruct](diagConvertingTargetIsNil),
},
"non-pointer Target": {
Source: emptyStruct{},
Target: 0,
ExpectedDiags: diagAF[int](diagConvertingTargetIsNotPointer),
},
}

runAutoExpandTestCases(t, testCases, runChecks{CompareDiags: true, CompareTarget: true})
}

func TestExpandArgs_shapeCompatibility(t *testing.T) {
t.Parallel()

testString := "test"

testCases := autoFlexTestCases{
"non-struct Source struct Target": {
Source: testString,
Target: &emptyStruct{},
ExpectedDiags: diagAF[string](diagExpandingSourceDoesNotImplementAttrValue),
},
"struct Source non-struct Target": {
Source: emptyStruct{},
Target: &testString,
ExpectedDiags: diagAF[emptyStruct](diagExpandingSourceDoesNotImplementAttrValue),
},
"empty struct Source and Target": {
Source: emptyStruct{},
Target: &emptyStruct{},
WantTarget: &emptyStruct{},
},
"empty struct pointer Source and Target": {
Source: &emptyStruct{},
Target: &emptyStruct{},
WantTarget: &emptyStruct{},
},
}

runAutoExpandTestCases(t, testCases, runChecks{CompareDiags: true, CompareTarget: true})
}

func TestFlattenArgs_nilAndPointers(t *testing.T) {
t.Parallel()

var (
typedNilSource *emptyStruct
typedNilTarget *emptyStruct
)

testCases := autoFlexTestCases{
"nil Source": {
Target: &emptyStruct{},
ExpectedDiags: diagAFNil(diagFlatteningSourceIsNil),
},
"typed nil Source": {
Source: typedNilSource,
Target: &emptyStruct{},
ExpectedDiags: diagAF[*emptyStruct](diagFlatteningSourceIsNil),
},
"nil Target": {
Source: emptyStruct{},
ExpectedDiags: diagAFNil(diagConvertingTargetIsNil),
},
"typed nil Target": {
Source: emptyStruct{},
Target: typedNilTarget,
ExpectedDiags: diagAF[*emptyStruct](diagConvertingTargetIsNil),
},
"non-pointer Target": {
Source: emptyStruct{},
Target: 0,
ExpectedDiags: diagAF[int](diagConvertingTargetIsNotPointer),
},
}

runAutoFlattenTestCases(t, testCases, runChecks{CompareDiags: true, CompareTarget: true})
}

func TestFlattenArgs_shapeCompatibility(t *testing.T) {
t.Parallel()

testString := "test"

testCases := autoFlexTestCases{
"non-struct Source struct Target": {
Source: testString,
Target: &emptyStruct{},
ExpectedDiags: diagAF[emptyStruct](diagFlatteningTargetDoesNotImplementAttrValue),
},
"struct Source non-struct Target": {
Source: emptyStruct{},
Target: &testString,
ExpectedDiags: diagAF[string](diagFlatteningTargetDoesNotImplementAttrValue),
},
"empty struct Source and Target": {
Source: emptyStruct{},
Target: &emptyStruct{},
WantTarget: &emptyStruct{},
},
"empty struct pointer Source and Target": {
Source: &emptyStruct{},
Target: &emptyStruct{},
WantTarget: &emptyStruct{},
},
}

runAutoFlattenTestCases(t, testCases, runChecks{CompareDiags: true, CompareTarget: true})
}
Loading
Loading