From 9bfa63d9951ac1ec14cb07832f23d9e63daae492 Mon Sep 17 00:00:00 2001 From: kevin Date: Thu, 2 Mar 2023 09:57:18 +0800 Subject: [PATCH] chore: add more tests --- core/conf/config.go | 4 +++- core/conf/config_test.go | 12 +++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/core/conf/config.go b/core/conf/config.go index 26aba78e..2bd2a336 100644 --- a/core/conf/config.go +++ b/core/conf/config.go @@ -177,6 +177,8 @@ func buildFieldsInfo(tp reflect.Type) (*fieldInfo, error) { return buildStructFieldsInfo(tp) case reflect.Array, reflect.Slice: return buildFieldsInfo(mapping.Deref(tp.Elem())) + case reflect.Chan, reflect.Func: + return nil, fmt.Errorf("unsupported type: %s", tp.Kind()) default: return &fieldInfo{ children: make(map[string]*fieldInfo), @@ -243,7 +245,7 @@ func buildStructFieldsInfo(tp reflect.Type) (*fieldInfo, error) { } func mergeFields(prev *fieldInfo, key string, children map[string]*fieldInfo) error { - if len(children) == 0 { + if len(prev.children) == 0 || len(children) == 0 { return newDupKeyError(key) } diff --git a/core/conf/config_test.go b/core/conf/config_test.go index 1d4e0247..7ab3689f 100644 --- a/core/conf/config_test.go +++ b/core/conf/config_test.go @@ -1007,9 +1007,19 @@ func TestLoadNamedFieldOverwritten(t *testing.T) { ) var c Config - input := []byte(`{"Val": {"Elem": {"Key": {"Value": "Value"}}}}`) + input := []byte(`{"Val": {"Elem": "Value"}}`) assert.ErrorAs(t, LoadFromJsonBytes(input, &c), &dupErr) }) + + t.Run("overwritten named struct", func(t *testing.T) { + type Config struct { + Val chan int + } + + var c Config + input := []byte(`{"Val": 1}`) + assert.Error(t, LoadFromJsonBytes(input, &c)) + }) } func createTempFile(ext, text string) (string, error) {