package configs import ( "fmt" "io/ioutil" "path/filepath" "testing" ) // TestParseLoadConfigDirSuccess is a simple test that just verifies that // a number of test configuration directories (in testdata/valid-modules) // can be parsed without raising any diagnostics. // // It also re-tests the individual files in testdata/valid-files as if // they were single-file modules, to ensure that they can be bundled into // modules correctly. // // This test does not verify that reading these modules produces the correct // module element contents. More detailed assertions may be made on some subset // of these configuration files in other tests. func TestParserLoadConfigDirSuccess(t *testing.T) { dirs, err := ioutil.ReadDir("testdata/valid-modules") if err != nil { t.Fatal(err) } for _, info := range dirs { name := info.Name() t.Run(name, func(t *testing.T) { parser := NewParser(nil) path := filepath.Join("testdata/valid-modules", name) mod, diags := parser.LoadConfigDir(path) if len(diags) != 0 { t.Errorf("unexpected diagnostics") for _, diag := range diags { t.Logf("- %s", diag) } } if mod.SourceDir != path { t.Errorf("wrong SourceDir value %q; want %s", mod.SourceDir, path) } }) } // The individual files in testdata/valid-files should also work // when loaded as modules. files, err := ioutil.ReadDir("testdata/valid-files") if err != nil { t.Fatal(err) } for _, info := range files { name := info.Name() t.Run(fmt.Sprintf("%s as module", name), func(t *testing.T) { src, err := ioutil.ReadFile(filepath.Join("testdata/valid-files", name)) if err != nil { t.Fatal(err) } parser := testParser(map[string]string{ "mod/" + name: string(src), }) _, diags := parser.LoadConfigDir("mod") if diags.HasErrors() { t.Errorf("unexpected error diagnostics") for _, diag := range diags { t.Logf("- %s", diag) } } }) } } // TestParseLoadConfigDirFailure is a simple test that just verifies that // a number of test configuration directories (in testdata/invalid-modules) // produce diagnostics when parsed. // // It also re-tests the individual files in testdata/invalid-files as if // they were single-file modules, to ensure that their errors are still // detected when loading as part of a module. // // This test does not verify that reading these modules produces any // diagnostics in particular. More detailed assertions may be made on some subset // of these configuration files in other tests. func TestParserLoadConfigDirFailure(t *testing.T) { dirs, err := ioutil.ReadDir("testdata/invalid-modules") if err != nil { t.Fatal(err) } for _, info := range dirs { name := info.Name() t.Run(name, func(t *testing.T) { parser := NewParser(nil) path := filepath.Join("testdata/invalid-modules", name) _, diags := parser.LoadConfigDir(path) if !diags.HasErrors() { t.Errorf("no errors; want at least one") for _, diag := range diags { t.Logf("- %s", diag) } } }) } // The individual files in testdata/valid-files should also work // when loaded as modules. files, err := ioutil.ReadDir("testdata/invalid-files") if err != nil { t.Fatal(err) } for _, info := range files { name := info.Name() t.Run(fmt.Sprintf("%s as module", name), func(t *testing.T) { src, err := ioutil.ReadFile(filepath.Join("testdata/invalid-files", name)) if err != nil { t.Fatal(err) } parser := testParser(map[string]string{ "mod/" + name: string(src), }) _, diags := parser.LoadConfigDir("mod") if !diags.HasErrors() { t.Errorf("no errors; want at least one") for _, diag := range diags { t.Logf("- %s", diag) } } }) } } func TestIsEmptyDir(t *testing.T) { val, err := IsEmptyDir(filepath.Join("testdata", "valid-files")) if err != nil { t.Fatalf("err: %s", err) } if val { t.Fatal("should not be empty") } } func TestIsEmptyDir_noExist(t *testing.T) { val, err := IsEmptyDir(filepath.Join("testdata", "nopenopenope")) if err != nil { t.Fatalf("err: %s", err) } if !val { t.Fatal("should be empty") } } func TestIsEmptyDir_noConfigs(t *testing.T) { val, err := IsEmptyDir(filepath.Join("testdata", "dir-empty")) if err != nil { t.Fatalf("err: %s", err) } if !val { t.Fatal("should be empty") } }