aboutsummaryrefslogtreecommitdiffstats
path: root/modules/templates/util_test.go
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2023-04-07 22:39:08 +0800
committerGitHub <noreply@github.com>2023-04-07 09:39:08 -0500
commit36c0840cf1696912b1872cfa4ebc4b241dabd693 (patch)
treec3951e2bb0f1723043bd7fdcec0ab50c19d6ef3e /modules/templates/util_test.go
parent5b89670a318e52e271f65d96bfe1116d85d20988 (diff)
downloadgitea-36c0840cf1696912b1872cfa4ebc4b241dabd693.tar.gz
gitea-36c0840cf1696912b1872cfa4ebc4b241dabd693.zip
Merge template functions "dict/Dict/mergeinto" (#23932)
One of the steps in #23328 Before there were 3 different but similar functions: dict/Dict/mergeinto The code was just copied & pasted, no test. This PR defines a new stable `dict` function, it covers all the 3 old functions behaviors, only +160 -171 Future developers do not need to think about or guess the different dict functions, just use one: `dict` Why use `dict` but not `Dict`? Because there are far more `dict` than `Dict` in code already ......
Diffstat (limited to 'modules/templates/util_test.go')
-rw-r--r--modules/templates/util_test.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/modules/templates/util_test.go b/modules/templates/util_test.go
new file mode 100644
index 0000000000..dfa691c5e2
--- /dev/null
+++ b/modules/templates/util_test.go
@@ -0,0 +1,43 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package templates
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestDict(t *testing.T) {
+ type M map[string]any
+ cases := []struct {
+ args []any
+ want map[string]any
+ }{
+ {[]any{"a", 1, "b", 2}, M{"a": 1, "b": 2}},
+ {[]any{".", M{"base": 1}, "b", 2}, M{"base": 1, "b": 2}},
+ {[]any{"a", 1, ".", M{"extra": 2}}, M{"a": 1, "extra": 2}},
+ {[]any{"a", 1, ".", map[string]int{"int": 2}}, M{"a": 1, "int": 2}},
+ {[]any{".", nil, "b", 2}, M{"b": 2}},
+ }
+
+ for _, c := range cases {
+ got, err := dict(c.args...)
+ if assert.NoError(t, err) {
+ assert.EqualValues(t, c.want, got)
+ }
+ }
+
+ bads := []struct {
+ args []any
+ }{
+ {[]any{"a", 1, "b"}},
+ {[]any{1}},
+ {[]any{struct{}{}}},
+ }
+ for _, c := range bads {
+ _, err := dict(c.args...)
+ assert.Error(t, err)
+ }
+}