diff options
author | wxiaoguang <wxiaoguang@gmail.com> | 2023-04-07 22:39:08 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-07 09:39:08 -0500 |
commit | 36c0840cf1696912b1872cfa4ebc4b241dabd693 (patch) | |
tree | c3951e2bb0f1723043bd7fdcec0ab50c19d6ef3e /modules/templates/util_test.go | |
parent | 5b89670a318e52e271f65d96bfe1116d85d20988 (diff) | |
download | gitea-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.go | 43 |
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) + } +} |