diff --git a/.golangci.yml b/.golangci.yml index 204c5c6..42c7640 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -577,7 +577,6 @@ linters-settings: # List of allowed modules. # Default: [] modules: # List of allowed modules - - github.com/pelletier/go-toml/v2 - github.com/stretchr/testify # - gopkg.in/yaml.v2 # List of allowed module domains. diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c17dd9..6515395 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,10 +2,6 @@ ## Unreleased -- Add support for TOML configuration files -- Use stdlib for tests instead of convey -- Update golangci-lint config - ## v0.2.0 (2021-12-19) - Added License @@ -13,5 +9,5 @@ - Added a Loadfiles function to load at once several config files ## v0.1.0 (2020-03-17) +- Initial varsion -- Initial varsion with support for JSON files diff --git a/adapters.go b/adapters.go deleted file mode 100644 index 363c1bd..0000000 --- a/adapters.go +++ /dev/null @@ -1,86 +0,0 @@ -package conf - -import ( - "encoding/json" - "fmt" - "strings" - - "github.com/pelletier/go-toml/v2" -) - -type filetype int - -const ( - typeInvalid filetype = iota - typeJSON - typeTOML -) - -func getType(filename string) filetype { - switch { - case strings.HasSuffix(filename, ".json"): - return typeJSON - case strings.HasSuffix(filename, ".toml"): - return typeTOML - default: - return typeInvalid - } -} - -func unmarshal(ft filetype, data []byte, v interface{}) error { - switch ft { - case typeJSON: - return unmarshalJSON(data, v) - case typeTOML: - return unmarshalTOML(data, v) - default: - return ErrUnsupportedFileType - } -} - -func marshal(ft filetype, v interface{}) ([]byte, error) { - switch ft { - case typeJSON: - return marshalJSON(v) - case typeTOML: - return marshalTOML(v) - default: - return nil, ErrUnsupportedFileType - } -} - -func unmarshalJSON(data []byte, v interface{}) error { - err := json.Unmarshal(data, v) - if err != nil { - return fmt.Errorf("cannot parse config file: %w", err) - } - - return nil -} - -func marshalJSON(v interface{}) ([]byte, error) { - data, err := json.MarshalIndent(v, "", " ") - if err != nil { - return nil, fmt.Errorf("cannot generate config content: %w", err) - } - - return data, nil -} - -func unmarshalTOML(data []byte, v interface{}) error { - err := toml.Unmarshal(data, v) - if err != nil { - return fmt.Errorf("cannot parse config file: %w", err) - } - - return nil -} - -func marshalTOML(v interface{}) ([]byte, error) { - data, err := toml.Marshal(v) - if err != nil { - return nil, fmt.Errorf("cannot generate config content: %w", err) - } - - return data, nil -} diff --git a/config.go b/config.go index 0a4fbbe..5aa8e1e 100644 --- a/config.go +++ b/config.go @@ -1,25 +1,15 @@ -// Package conf defines utils to simplify configuration management. -// -// It provides functions to load and save config files. -// -// Several formats are supported. The encoders/decoders are selected according -// to the extension of the paths passed to functions: -// -// - JSON: ".json" -// - TOML: ".toml" +// Package conf defines utils to simplify configuration +// management. package conf import ( + "encoding/json" "errors" "fmt" "os" "path/filepath" ) -// ErrUnsupportedFileType is returned when the type of the config file is not -// supported. -var ErrUnsupportedFileType = errors.New("unsupported config type") - // LoadFile reads the file at path, parses its json content and fills the struct // with the content of the file. func LoadFile(path string, data interface{}) error { @@ -31,7 +21,7 @@ func LoadFile(path string, data interface{}) error { // If a path does not exist, it is ignored. // // It returns an error only if the content of a file is invalid, i.e. it -// cannot be unmarshaled to the struct. +// cannot be unmarshaled by json. func LoadFiles(data interface{}, paths ...string) error { for _, p := range paths { err := read(p, data) @@ -88,13 +78,18 @@ func read(path string, data interface{}) error { return fmt.Errorf("cannot read config file: %w", err) } - return unmarshal(getType(path), content, data) + err = json.Unmarshal(content, &data) + if err != nil { + return fmt.Errorf("cannot parse config file: %w", err) + } + + return nil } func write(path string, data interface{}) error { - content, err := marshal(getType(path), data) + content, err := json.MarshalIndent(data, "", " ") if err != nil { - return err + return fmt.Errorf("cannot generate config content: %w", err) } err = os.WriteFile(path, content, 0o600) diff --git a/config_test.go b/config_test.go index 6ea067a..4c4c131 100644 --- a/config_test.go +++ b/config_test.go @@ -11,68 +11,6 @@ import ( "code.bcarlin.xyz/go/conf" ) -func TestJSONFiles(t *testing.T) { - t.Parallel() - - runTestSuite(t, "json") -} - -func TestTOMLFiles(t *testing.T) { - t.Parallel() - - runTestSuite(t, "toml") -} - -func TestUnknownFiles(t *testing.T) { - t.Parallel() - - t.Run("LoadFile", func(t *testing.T) { - t.Parallel() - - s := struct{}{} - - err := conf.LoadFile("test_data/valid.unknown", &s) - if assert.Error(t, err) { - assert.ErrorIs(t, err, conf.ErrUnsupportedFileType) - } - }) - - t.Run("SaveFile", func(t *testing.T) { - t.Parallel() - - s := struct{}{} - - err := conf.SaveFile("test.unknown", &s) - if assert.Error(t, err) { - assert.ErrorIs(t, err, conf.ErrUnsupportedFileType) - } - - assert.NoFileExists(t, "test.unknown") - }) - - t.Run("LoadAndUpdateFile", func(t *testing.T) { - t.Parallel() - - s := struct{}{} - - err := conf.LoadAndUpdateFile("test.unknown", &s) - if assert.Error(t, err) { - assert.ErrorIs(t, err, conf.ErrUnsupportedFileType) - } - - assert.NoFileExists(t, "test.unknown") - }) -} - -func runTestSuite(t *testing.T, ext string) { - t.Helper() - - testLoadFile(t, ext) - testLoadFiles(t, ext) - testSaveFile(t, ext) - testLoadAndUpdateFile(t, ext) -} - type testconf struct { inUpdate func() String string @@ -86,352 +24,374 @@ func (t testconf) Update() { } } -func testLoadFile(t *testing.T, ext string) { - t.Helper() +func TestLoadFile(t *testing.T) { + t.Parallel() - t.Run("LoadFile", func(t *testing.T) { + t.Run("with a valid file", func(t *testing.T) { t.Parallel() - t.Run("with a valid file", func(t *testing.T) { - t.Parallel() + c := testconf{ + String: "default string", + Int: 1, + Invariant: "should not change", + } - c := testconf{ - String: "default string", - Int: 1, - Invariant: "should not change", - } + file := "test_data/valid.json" - file := "test_data/valid." + ext + err := conf.LoadFile(file, &c) + require.NoError(t, err) - err := conf.LoadFile(file, &c) - require.NoError(t, err) + assert.Equal(t, "config string", c.String) + assert.Equal(t, 42, c.Int) + assert.Equal(t, "should not change", c.Invariant) + }) - assert.Equal(t, "config string", c.String) - assert.Equal(t, 42, c.Int) - assert.Equal(t, "should not change", c.Invariant) - }) + t.Run("with an invalid file", func(t *testing.T) { + t.Parallel() - t.Run("with an invalid file", func(t *testing.T) { - t.Parallel() + c := testconf{ + String: "default string", + Int: 1, + Invariant: "should not change", + } - c := testconf{ - String: "default string", - Int: 1, - Invariant: "should not change", - } + file := "test_data/invalid.json" - file := "test_data/invalid." + ext + err := conf.LoadFile(file, &c) + require.Error(t, err) - err := conf.LoadFile(file, &c) - require.Error(t, err) + assert.Equal(t, "default string", c.String) + assert.Equal(t, 1, c.Int) + assert.Equal(t, "should not change", c.Invariant) + }) - assert.Equal(t, "default string", c.String) - assert.Equal(t, 1, c.Int) - assert.Equal(t, "should not change", c.Invariant) - }) + t.Run("with a non existent file", func(t *testing.T) { + t.Parallel() - t.Run("with a non existent file", func(t *testing.T) { - t.Parallel() + c := testconf{ + String: "default string", + Int: 1, + Invariant: "should not change", + } - c := testconf{ - String: "default string", - Int: 1, - Invariant: "should not change", - } + file := "does-not-exist.conf" - file := "does-not-exist." + ext + err := conf.LoadFile(file, &c) + require.Error(t, err) - err := conf.LoadFile(file, &c) - require.Error(t, err) - - assert.Equal(t, "default string", c.String) - assert.Equal(t, 1, c.Int) - assert.Equal(t, "should not change", c.Invariant) - }) + assert.Equal(t, "default string", c.String) + assert.Equal(t, 1, c.Int) + assert.Equal(t, "should not change", c.Invariant) }) } -func testLoadFiles(t *testing.T, ext string) { - t.Helper() +func TestLoadFiles(t *testing.T) { + t.Parallel() - t.Run("LoadFiles", func(t *testing.T) { + t.Run("with two valid files with different options", func(t *testing.T) { t.Parallel() - t.Run("with two valid files with different options", func(t *testing.T) { - t.Parallel() + c := testconf{} + tmpDir := t.TempDir() - c := testconf{} - err := conf.LoadFiles(&c, "test_data/part1."+ext, "test_data/part2."+ext) - require.NoError(t, err) + content1 := []byte(`{"String": "foo"}`) + content2 := []byte(`{"Int": 42}`) + paths := []string{ + filepath.Join(tmpDir, "file1.json"), + filepath.Join(tmpDir, "file2.json"), + } - assert.Equal(t, "foo", c.String) - assert.Equal(t, 42, c.Int) - }) + err := os.WriteFile(paths[0], content1, 0o600) + require.NoError(t, err) + err = os.WriteFile(paths[1], content2, 0o600) + require.NoError(t, err) - t.Run("with two valid files with the same option", func(t *testing.T) { - t.Parallel() + err = conf.LoadFiles(&c, paths...) + require.NoError(t, err) - c := testconf{} + assert.Equal(t, "foo", c.String) + assert.Equal(t, 42, c.Int) + }) - err := conf.LoadFiles(&c, "test_data/same1."+ext, "test_data/same2."+ext) - require.NoError(t, err) + t.Run("with two valid files with the same option", func(t *testing.T) { + t.Parallel() - assert.Equal(t, "bar", c.String) - }) + c := testconf{} + tmpDir := t.TempDir() - t.Run("with one non-existing and one existing file", func(t *testing.T) { - t.Parallel() + content1 := []byte(`{"String": "foo"}`) + content2 := []byte(`{"String": "bar"}`) + paths := []string{ + filepath.Join(tmpDir, "file1.json"), + filepath.Join(tmpDir, "file2.json"), + } - c := testconf{} + err := os.WriteFile(paths[0], content1, 0o600) + require.NoError(t, err) + err = os.WriteFile(paths[1], content2, 0o600) + require.NoError(t, err) - err := conf.LoadFiles(&c, "does-not-exist."+ext, "test_data/valid."+ext) - require.NoError(t, err) + err = conf.LoadFiles(&c, paths...) + require.NoError(t, err) - assert.Equal(t, "config string", c.String) - }) + assert.Equal(t, "bar", c.String) + }) - t.Run("with one invalid and one valid file", func(t *testing.T) { - t.Parallel() + t.Run("with one non-existing and one existing file", func(t *testing.T) { + t.Parallel() - c := testconf{} + c := testconf{} + tmpDir := t.TempDir() - err := conf.LoadFiles(&c, "test_data/invalid."+ext, "test_data/valid."+ext) - require.Error(t, err) + content2 := []byte(`{"String": "bar"}`) + paths := []string{ + "does-not-exist.json", + filepath.Join(tmpDir, "file2.json"), + } - assert.Equal(t, "", c.String) - }) + err := os.WriteFile(paths[1], content2, 0o600) + require.NoError(t, err) + + err = conf.LoadFiles(&c, paths...) + require.NoError(t, err) + + assert.Equal(t, "bar", c.String) + }) + + t.Run("with one valid and one invalid file", func(t *testing.T) { + t.Parallel() + + c := testconf{} + tmpDir := t.TempDir() + + content1 := []byte(`{"`) + content2 := []byte(`{"String": "bar"}`) + paths := []string{ + filepath.Join(tmpDir, "file1.json"), + filepath.Join(tmpDir, "file2.json"), + } + + err := os.WriteFile(paths[0], content1, 0o600) + require.NoError(t, err) + err = os.WriteFile(paths[1], content2, 0o600) + require.NoError(t, err) + + err = conf.LoadFiles(&c, paths...) + require.Error(t, err) + + assert.Equal(t, "", c.String) }) } -func testSaveFile(t *testing.T, ext string) { - t.Helper() +func TestSaveFile(t *testing.T) { + t.Parallel() - t.Run("SaveFile", func(t *testing.T) { + t.Run("with a valid path", func(t *testing.T) { t.Parallel() - t.Run("with a valid path", func(t *testing.T) { - t.Parallel() + c := testconf{ + String: "default string", + Invariant: "should not change", + Int: 1, + } + tmpDir := t.TempDir() + file := filepath.Join(tmpDir, "test.conf") - c := testconf{ - String: "default string", - Invariant: "should not change", - Int: 1, - } - tmpDir := t.TempDir() - file := filepath.Join(tmpDir, "test."+ext) + err := conf.SaveFile(file, &c) + require.NoError(t, err) - err := conf.SaveFile(file, &c) - require.NoError(t, err) + assert.FileExists(t, file) - require.FileExists(t, file) + expected := "{\n \"String\": \"default string\",\n \"Invariant\": \"should not change\",\n \"Int\": 1\n}" + got, err := os.ReadFile(file) + require.NoError(t, err) + assert.Equal(t, expected, string(got)) + }) - expected, err := os.ReadFile("test_data/full." + ext) - require.NoError(t, err) - got, err := os.ReadFile(file) - require.NoError(t, err) + t.Run("with a valid path and invalid data", func(t *testing.T) { + t.Parallel() - assert.Equal(t, string(expected), string(got)) - }) + tmpDir := t.TempDir() + file := filepath.Join(tmpDir, "test.conf") - t.Run("with a valid path and invalid data", func(t *testing.T) { - t.Parallel() + err := conf.SaveFile(file, func() error { return nil }) + require.Error(t, err) - tmpDir := t.TempDir() - file := filepath.Join(tmpDir, "test."+ext) + assert.NoFileExists(t, file) + }) - err := conf.SaveFile(file, func() error { return nil }) - require.Error(t, err) + t.Run("with an invalid path", func(t *testing.T) { + t.Parallel() - assert.NoFileExists(t, file) - }) + c := testconf{ + String: "default string", + Invariant: "should not change", + Int: 1, + } + file := "cannot/write/here.conf" - t.Run("with an invalid path", func(t *testing.T) { - t.Parallel() + err := conf.SaveFile(file, &c) + require.Error(t, err) - c := testconf{ - String: "default string", - Invariant: "should not change", - Int: 1, - } - file := "cannot/write/here." + ext - - err := conf.SaveFile(file, &c) - require.Error(t, err) - - assert.NoFileExists(t, file) - }) + assert.NoFileExists(t, file) }) } -func testLoadAndUpdateFile(t *testing.T, ext string) { - t.Helper() +func TestLoadAndUpdateFile(t *testing.T) { + t.Parallel() - t.Run("LoadAndUpdateFile", func(t *testing.T) { + t.Run("when the target file does not exist", func(t *testing.T) { t.Parallel() - t.Run("when the target file does not exist", func(t *testing.T) { - t.Parallel() + updated := false + c := testconf{ + String: "default string", + Int: 1, + Invariant: "should not change", + inUpdate: func() { updated = true }, + } + tmpDir := t.TempDir() + file := filepath.Join(tmpDir, "test.conf") - updated := false - c := testconf{ - String: "default string", - Int: 1, - Invariant: "should not change", - inUpdate: func() { updated = true }, - } - tmpDir := t.TempDir() - file := filepath.Join(tmpDir, "does-not-exist."+ext) + err := conf.LoadAndUpdateFile(file, &c) + require.NoError(t, err) - err := conf.LoadAndUpdateFile(file, &c) - require.NoError(t, err) + var c2 testconf + err = conf.LoadFile(file, &c2) + require.NoError(t, err) + assert.Equal(t, c.String, c2.String) + assert.Equal(t, c.Int, c2.Int) + assert.Equal(t, c.Invariant, c2.Invariant) - require.FileExists(t, file) + assert.False(t, updated) + }) - var c2 testconf - err = conf.LoadFile(file, &c2) - require.NoError(t, err) - assert.Equal(t, c.String, c2.String) - assert.Equal(t, c.Int, c2.Int) - assert.Equal(t, c.Invariant, c2.Invariant) + t.Run("when the path cannot be written", func(t *testing.T) { + t.Parallel() - assert.False(t, updated) - }) + updated := false + c := testconf{ + String: "default string", + Int: 1, + Invariant: "should not change", + inUpdate: func() { updated = true }, + } + tmpDir := t.TempDir() + file := filepath.Join(tmpDir, "does-not-exist", "test.conf") - t.Run("when the path cannot be written", func(t *testing.T) { - t.Parallel() + err := conf.LoadAndUpdateFile(file, &c) + require.Error(t, err) - updated := false - c := testconf{ - String: "default string", - Int: 1, - Invariant: "should not change", - inUpdate: func() { updated = true }, - } - tmpDir := t.TempDir() - file := filepath.Join(tmpDir, "does-not-exist", "test."+ext) + assert.NoFileExists(t, file) - err := conf.LoadAndUpdateFile(file, &c) - require.Error(t, err) + assert.False(t, updated) + }) - assert.NoFileExists(t, file) + t.Run("when the config file is invalid", func(t *testing.T) { + t.Parallel() - assert.False(t, updated) - }) + updated := false + c := testconf{ + String: "default string", + Int: 1, + Invariant: "should not change", + inUpdate: func() { updated = true }, + } + tmpDir := t.TempDir() + file := filepath.Join(tmpDir, "test.conf") - t.Run("when the config file is invalid", func(t *testing.T) { - t.Parallel() + content := []byte(`String: not json`) + err := os.WriteFile(file, content, 0o644) + require.NoError(t, err) - updated := false - c := testconf{ - String: "default string", - Int: 1, - Invariant: "should not change", - inUpdate: func() { updated = true }, - } - tmpDir := t.TempDir() - file := filepath.Join(tmpDir, "test."+ext) + err = conf.LoadAndUpdateFile(file, &c) + require.Error(t, err) - content, err := os.ReadFile("test_data/invalid." + ext) - require.NoError(t, err) + assert.False(t, updated) + }) - err = os.WriteFile(file, content, 0o600) - require.NoError(t, err) + t.Run("when the config file is valid", func(t *testing.T) { + t.Parallel() - err = conf.LoadAndUpdateFile("test_data/invalid."+ext, &c) - require.Error(t, err) + updated := false + c := testconf{ + String: "default string", + Int: 1, + Invariant: "should not change", + inUpdate: func() { updated = true }, + } + tmpDir := t.TempDir() + file := filepath.Join(tmpDir, "test.conf") - assert.False(t, updated) - }) + content := []byte(`{"String": "config string", "Int": 42}`) + err := os.WriteFile(file, content, 0o644) + require.NoError(t, err) - t.Run("when the config file is valid", func(t *testing.T) { - t.Parallel() + err = conf.LoadAndUpdateFile(file, &c) + require.NoError(t, err) - updated := false - c := testconf{ - String: "default string", - Int: 1, - Invariant: "should not change", - inUpdate: func() { updated = true }, - } - tmpDir := t.TempDir() - file := filepath.Join(tmpDir, "test."+ext) + var c2 testconf + err = conf.LoadFile(file, &c2) + require.NoError(t, err) + assert.Equal(t, "config string", c2.String) + assert.Equal(t, 42, c2.Int) - content, err := os.ReadFile("test_data/valid." + ext) - require.NoError(t, err) + assert.True(t, updated) + }) - err = os.WriteFile(file, content, 0o600) - require.NoError(t, err) + t.Run("when the config file is missing options", func(t *testing.T) { + t.Parallel() - err = conf.LoadAndUpdateFile(file, &c) - require.NoError(t, err) + updated := false + c := testconf{ + String: "default string", + Int: 1, + Invariant: "should not change", + inUpdate: func() { updated = true }, + } + tmpDir := t.TempDir() + file := filepath.Join(tmpDir, "test.conf") - var c2 testconf - err = conf.LoadFile(file, &c2) - require.NoError(t, err) - assert.Equal(t, "config string", c2.String) - assert.Equal(t, 42, c2.Int) - assert.Equal(t, "should not change", c2.Invariant) + content := []byte(`{"String": "config string"}`) + err := os.WriteFile(file, content, 0o644) + require.NoError(t, err) - assert.True(t, updated) - }) + err = conf.LoadAndUpdateFile(file, &c) + require.NoError(t, err) - t.Run("when the config file is missing options", func(t *testing.T) { - t.Parallel() + newContent, err := os.ReadFile(file) + require.NoError(t, err) - updated := false - c := testconf{ - String: "default string", - Int: 1, - Invariant: "should not change", - inUpdate: func() { updated = true }, - } - tmpDir := t.TempDir() - file := filepath.Join(tmpDir, "test."+ext) + assert.Contains(t, string(newContent), "Int") //nolint:usestdlibvars // not the constant here + assert.Contains(t, string(newContent), "Invariant") - content, err := os.ReadFile("test_data/valid." + ext) - require.NoError(t, err) + assert.True(t, updated) + }) - err = os.WriteFile(file, content, 0o600) - require.NoError(t, err) + t.Run("when the config contains unknown options", func(t *testing.T) { + t.Parallel() - err = conf.LoadAndUpdateFile(file, &c) - require.NoError(t, err) + updated := false + c := testconf{ + String: "default string", + Int: 1, + Invariant: "should not change", + inUpdate: func() { updated = true }, + } + tmpDir := t.TempDir() + file := filepath.Join(tmpDir, "test.conf") - newContent, err := os.ReadFile(file) - require.NoError(t, err) + content := []byte(`{"String": "config string", "Foo": "blah"}`) + err := os.WriteFile(file, content, 0o644) + require.NoError(t, err) - assert.Contains(t, string(newContent), "Invariant") + err = conf.LoadAndUpdateFile(file, &c) + require.NoError(t, err) - assert.True(t, updated) - }) + newContent, err := os.ReadFile(file) + require.NoError(t, err) + assert.NotContains(t, string(newContent), "Foo") - t.Run("when the config contains unknown options", func(t *testing.T) { - t.Parallel() - - updated := false - c := testconf{ - String: "default string", - Int: 1, - Invariant: "should not change", - inUpdate: func() { updated = true }, - } - tmpDir := t.TempDir() - file := filepath.Join(tmpDir, "test."+ext) - - content, err := os.ReadFile("test_data/unknown." + ext) - require.NoError(t, err) - - err = os.WriteFile(file, content, 0o600) - require.NoError(t, err) - - err = conf.LoadAndUpdateFile(file, &c) - require.NoError(t, err) - - newContent, err := os.ReadFile(file) - require.NoError(t, err) - assert.NotContains(t, string(newContent), "Unknown") - - assert.True(t, updated) - }) + assert.True(t, updated) }) } diff --git a/go.mod b/go.mod index 737e6fe..776efb5 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,6 @@ require github.com/stretchr/testify v1.9.0 require ( github.com/davecgh/go-spew v1.1.1 // indirect - github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index d049134..8f0c6a1 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,6 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= -github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= diff --git a/test_data/full.json b/test_data/full.json deleted file mode 100644 index 6dfe37a..0000000 --- a/test_data/full.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "String": "default string", - "Invariant": "should not change", - "Int": 1 -} \ No newline at end of file diff --git a/test_data/full.toml b/test_data/full.toml deleted file mode 100644 index 837bd97..0000000 --- a/test_data/full.toml +++ /dev/null @@ -1,3 +0,0 @@ -String = 'default string' -Invariant = 'should not change' -Int = 1 diff --git a/test_data/invalid.toml b/test_data/invalid.toml deleted file mode 100644 index df4615f..0000000 --- a/test_data/invalid.toml +++ /dev/null @@ -1 +0,0 @@ -String: not toml diff --git a/test_data/part1.json b/test_data/part1.json deleted file mode 100644 index e1c09a4..0000000 --- a/test_data/part1.json +++ /dev/null @@ -1 +0,0 @@ -{"String": "foo"} diff --git a/test_data/part1.toml b/test_data/part1.toml deleted file mode 100644 index acec3a1..0000000 --- a/test_data/part1.toml +++ /dev/null @@ -1 +0,0 @@ -String = "foo" diff --git a/test_data/part2.json b/test_data/part2.json deleted file mode 100644 index da2d7a5..0000000 --- a/test_data/part2.json +++ /dev/null @@ -1 +0,0 @@ -{"Int": 42} diff --git a/test_data/part2.toml b/test_data/part2.toml deleted file mode 100644 index a002354..0000000 --- a/test_data/part2.toml +++ /dev/null @@ -1 +0,0 @@ -Int = 42 diff --git a/test_data/same1.json b/test_data/same1.json deleted file mode 100644 index e1c09a4..0000000 --- a/test_data/same1.json +++ /dev/null @@ -1 +0,0 @@ -{"String": "foo"} diff --git a/test_data/same1.toml b/test_data/same1.toml deleted file mode 100644 index acec3a1..0000000 --- a/test_data/same1.toml +++ /dev/null @@ -1 +0,0 @@ -String = "foo" diff --git a/test_data/same2.json b/test_data/same2.json deleted file mode 100644 index 17c710a..0000000 --- a/test_data/same2.json +++ /dev/null @@ -1 +0,0 @@ -{"String": "bar"} diff --git a/test_data/same2.toml b/test_data/same2.toml deleted file mode 100644 index 570e876..0000000 --- a/test_data/same2.toml +++ /dev/null @@ -1 +0,0 @@ -String = "bar" diff --git a/test_data/unknown.json b/test_data/unknown.json deleted file mode 100644 index 32ecd40..0000000 --- a/test_data/unknown.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "String": "config string", - "Int": 42, - "Unknown": "foo" -} diff --git a/test_data/unknown.toml b/test_data/unknown.toml deleted file mode 100644 index cbc6ca3..0000000 --- a/test_data/unknown.toml +++ /dev/null @@ -1,3 +0,0 @@ -String = "config string" -Int = 42 -Unknown = "foo" diff --git a/test_data/valid.toml b/test_data/valid.toml deleted file mode 100644 index 6028b6e..0000000 --- a/test_data/valid.toml +++ /dev/null @@ -1,2 +0,0 @@ -string = "config string" -int = 42 diff --git a/test_data/valid.unknown b/test_data/valid.unknown deleted file mode 100644 index db650bf..0000000 --- a/test_data/valid.unknown +++ /dev/null @@ -1 +0,0 @@ -String: not json