diff options
author | ᴜɴᴋɴᴡᴏɴ <u@gogs.io> | 2020-02-29 22:24:20 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-29 22:24:20 +0800 |
commit | 8796df8218aa306f1431c17233fbcc3e0811cc4e (patch) | |
tree | 07ba5f0e62ed68064143f029217c82c80f9b652c /internal/testutil/golden.go | |
parent | 17ae0ed3eef54d96bd179ff7fec0540cf3024748 (diff) |
conf: add unit tests (#5954)
* conf: add tests for utils.go
* conf: add tests for static.go
* mock os/exec
* Run tests on Windows
* appveyor: fix gcc not found
* computed: add unit tests
* log: add unit tests
* log: fix tests on Windows
* conf: add some tests
* Finish adding tests
* Cover more cases
* Add tests for testutil
* Add more tests
Diffstat (limited to 'internal/testutil/golden.go')
-rw-r--r-- | internal/testutil/golden.go | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/internal/testutil/golden.go b/internal/testutil/golden.go new file mode 100644 index 00000000..fa584d1b --- /dev/null +++ b/internal/testutil/golden.go @@ -0,0 +1,63 @@ +// Copyright 2020 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package testutil + +import ( + "encoding/json" + "flag" + "io/ioutil" + "regexp" + "testing" + + "github.com/stretchr/testify/assert" +) + +var updateRegex = flag.String("update", "", "Update testdata of tests matching the given regex") + +// Update returns true if update regex mathces given test name. +func Update(name string) bool { + if updateRegex == nil || *updateRegex == "" { + return false + } + return regexp.MustCompile(*updateRegex).MatchString(name) +} + +// AssertGolden compares what's got and what's in the golden file. It updates +// the golden file on-demand. +func AssertGolden(t testing.TB, path string, update bool, got interface{}) { + t.Helper() + + data := marshal(t, got) + + if update { + if err := ioutil.WriteFile(path, data, 0640); err != nil { + t.Fatalf("update golden file %q: %s", path, err) + } + } + + golden, err := ioutil.ReadFile(path) + if err != nil { + t.Fatalf("read golden file %q: %s", path, err) + } + + assert.Equal(t, string(golden), string(data)) +} + +func marshal(t testing.TB, v interface{}) []byte { + t.Helper() + + switch v2 := v.(type) { + case string: + return []byte(v2) + case []byte: + return v2 + default: + data, err := json.MarshalIndent(v, "", " ") + if err != nil { + t.Fatal(err) + } + return data + } +} |