Pārlūkot izejas kodu

chore: add more tests

kevin 2 gadi atpakaļ
vecāks
revīzija
eaac0ba8de
2 mainītis faili ar 14 papildinājumiem un 2 dzēšanām
  1. 3 1
      core/conf/config.go
  2. 11 1
      core/conf/config_test.go

+ 3 - 1
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)
 	}
 

+ 11 - 1
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) {