package globalref import ( "context" "path/filepath" "testing" "github.com/hashicorp/terraform/internal/addrs" "github.com/hashicorp/terraform/internal/configs/configload" "github.com/hashicorp/terraform/internal/configs/configschema" "github.com/hashicorp/terraform/internal/initwd" "github.com/hashicorp/terraform/internal/providers" "github.com/hashicorp/terraform/internal/registry" "github.com/zclconf/go-cty/cty" ) func testAnalyzer(t *testing.T, fixtureName string) *Analyzer { configDir := filepath.Join("testdata", fixtureName) loader, cleanup := configload.NewLoaderForTests(t) defer cleanup() inst := initwd.NewModuleInstaller(loader.ModulesDir(), registry.NewClient(nil, nil)) _, instDiags := inst.InstallModules(context.Background(), configDir, true, initwd.ModuleInstallHooksImpl{}) if instDiags.HasErrors() { t.Fatalf("unexpected module installation errors: %s", instDiags.Err().Error()) } if err := loader.RefreshModules(); err != nil { t.Fatalf("failed to refresh modules after install: %s", err) } cfg, loadDiags := loader.LoadConfig(configDir) if loadDiags.HasErrors() { t.Fatalf("unexpected configuration errors: %s", loadDiags.Error()) } resourceTypeSchema := &configschema.Block{ Attributes: map[string]*configschema.Attribute{ "string": {Type: cty.String, Optional: true}, "number": {Type: cty.Number, Optional: true}, "any": {Type: cty.DynamicPseudoType, Optional: true}, }, BlockTypes: map[string]*configschema.NestedBlock{ "single": { Nesting: configschema.NestingSingle, Block: configschema.Block{ Attributes: map[string]*configschema.Attribute{ "z": {Type: cty.String, Optional: true}, }, }, }, "group": { Nesting: configschema.NestingGroup, Block: configschema.Block{ Attributes: map[string]*configschema.Attribute{ "z": {Type: cty.String, Optional: true}, }, }, }, "list": { Nesting: configschema.NestingList, Block: configschema.Block{ Attributes: map[string]*configschema.Attribute{ "z": {Type: cty.String, Optional: true}, }, }, }, "map": { Nesting: configschema.NestingMap, Block: configschema.Block{ Attributes: map[string]*configschema.Attribute{ "z": {Type: cty.String, Optional: true}, }, }, }, "set": { Nesting: configschema.NestingSet, Block: configschema.Block{ Attributes: map[string]*configschema.Attribute{ "z": {Type: cty.String, Optional: true}, }, }, }, }, } schemas := map[addrs.Provider]*providers.Schemas{ addrs.MustParseProviderSourceString("hashicorp/test"): { ResourceTypes: map[string]*configschema.Block{ "test_thing": resourceTypeSchema, }, DataSources: map[string]*configschema.Block{ "test_thing": resourceTypeSchema, }, }, } return NewAnalyzer(cfg, schemas) }