// Copyright IBM Corp. 2014, 2026 // SPDX-License-Identifier: BUSL-1.1 package configload import ( "os" "testing" "github.com/hashicorp/terraform/internal/configs" ) // NewLoaderForTests is a variant of NewLoader that is intended to be more // convenient for unit tests. // // The loader's modules directory is a separate temporary directory created // for each call. Along with the created loader, this function returns a // cleanup function that should be called before the test completes in order // to remove that temporary directory. // // In the case of any errors, t.Fatal (or similar) will be called to halt // execution of the test, so the calling test does not need to handle errors // itself. func NewLoaderForTests(t testing.TB, parserOpts ...configs.Option) (*Loader, func()) { t.Helper() modulesDir, err := os.MkdirTemp("", "tf-configs") if err != nil { t.Fatalf("failed to create temporary modules dir: %s", err) return nil, func() {} } cleanup := func() { os.RemoveAll(modulesDir) } loader, err := NewLoader(&Config{ ModulesDir: modulesDir, }) loader.parserOpts = append(loader.parserOpts, parserOpts...) if err != nil { cleanup() t.Fatalf("failed to create config loader: %s", err) return nil, func() {} } return loader, cleanup }