package addrs import ( "fmt" "testing" ) // TestUniqueKeyer aims to ensure that all of the types that have unique keys // will continue to meet the UniqueKeyer contract under future changes. // // If you add a new implementation of UniqueKey, consider adding a test case // for it here. func TestUniqueKeyer(t *testing.T) { tests := []UniqueKeyer{ CountAttr{Name: "index"}, ForEachAttr{Name: "key"}, TerraformAttr{Name: "workspace"}, PathAttr{Name: "module"}, InputVariable{Name: "foo"}, ModuleCall{Name: "foo"}, ModuleCallInstance{ Call: ModuleCall{Name: "foo"}, Key: StringKey("a"), }, ModuleCallOutput{ Call: ModuleCall{Name: "foo"}, Name: "bar", }, ModuleCallInstanceOutput{ Call: ModuleCallInstance{ Call: ModuleCall{Name: "foo"}, Key: StringKey("a"), }, Name: "bar", }, Resource{ Mode: ManagedResourceMode, Type: "foo", Name: "bar", }, ResourceInstance{ Resource: Resource{ Mode: ManagedResourceMode, Type: "foo", Name: "bar", }, Key: IntKey(1), }, RootModuleInstance, RootModuleInstance.Child("foo", NoKey), RootModuleInstance.ResourceInstance( DataResourceMode, "boop", "beep", NoKey, ), Self, } for _, test := range tests { t.Run(fmt.Sprintf("%s", test), func(t *testing.T) { a := test.UniqueKey() b := test.UniqueKey() // The following comparison will panic if the unique key is not // of a comparable type. if a != b { t.Fatalf("the two unique keys are not equal\na: %#v\b: %#v", a, b) } }) } }