aboutsummaryrefslogtreecommitdiff
path: root/internal/testutil/golden.go
diff options
context:
space:
mode:
authorᴜɴᴋɴᴡᴏɴ <u@gogs.io>2020-02-29 22:24:20 +0800
committerGitHub <noreply@github.com>2020-02-29 22:24:20 +0800
commit8796df8218aa306f1431c17233fbcc3e0811cc4e (patch)
tree07ba5f0e62ed68064143f029217c82c80f9b652c /internal/testutil/golden.go
parent17ae0ed3eef54d96bd179ff7fec0540cf3024748 (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.go63
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
+ }
+}