|  | 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) | 
|  | } | 
|  | }) | 
|  | } | 
|  | } |