package mapstructure

import (
	"reflect"
	"testing"
)

func TestDecode_Ptr(t *testing.T) {
	t.Parallel()

	type G struct {
		Id   int
		Name string
	}

	type X struct {
		Id   int
		Name int
	}

	type AG struct {
		List []*G
	}

	type AX struct {
		List []*X
	}

	g2 := &AG{
		List: []*G{
			{
				Id:   11,
				Name: "gg",
			},
		},
	}
	x2 := AX{}

	// 报错但还是会转换成功,转换后值为目标类型的 0 值
	err := Decode(g2, &x2)

	res := AX{
		List: []*X{
			{
				Id:   11,
				Name: 0, // 这个类型的 0 值
			},
		},
	}

	if err == nil {
		t.Errorf("Decode_Ptr err should not be 'nil': %#v", err)
	}

	if !reflect.DeepEqual(res, x2) {
		t.Errorf("result should be %#v: got %#v", res, x2)
	}
}