From cf3c65f0ccedc74488c2d75bf1906e4e8e05e3c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valentin=20Trinqu=C3=A9?= Date: Thu, 11 Aug 2022 00:41:37 +0200 Subject: [PATCH] Fix registration of exposed fields (#1727) --- v2/internal/binding/binding.go | 5 ++--- v2/internal/binding/generate_test.go | 33 +++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/v2/internal/binding/binding.go b/v2/internal/binding/binding.go index 132f4c4a2..ca4b3a4ee 100755 --- a/v2/internal/binding/binding.go +++ b/v2/internal/binding/binding.go @@ -156,7 +156,7 @@ func (b *Bindings) AddStructToGenerateTS(packageName string, structName string, } kind := field.Type.Kind() if kind == reflect.Struct { - if field.PkgPath == "" { + if !field.IsExported() { continue } fqname := field.Type.String() @@ -168,7 +168,7 @@ func (b *Bindings) AddStructToGenerateTS(packageName string, structName string, b.AddStructToGenerateTS(pName, sName, s) } } else if kind == reflect.Ptr && field.Type.Elem().Kind() == reflect.Struct { - if field.PkgPath == "" { + if !field.IsExported() { continue } fqname := field.Type.String() @@ -182,7 +182,6 @@ func (b *Bindings) AddStructToGenerateTS(packageName string, structName string, } } } - } func (b *Bindings) getAllStructNames() *slicer.StringSlicer { diff --git a/v2/internal/binding/generate_test.go b/v2/internal/binding/generate_test.go index 23119f868..ea19fe889 100644 --- a/v2/internal/binding/generate_test.go +++ b/v2/internal/binding/generate_test.go @@ -1,10 +1,41 @@ package binding import ( - "github.com/leaanthony/slicer" "testing" + + "github.com/leaanthony/slicer" + "github.com/stretchr/testify/assert" + "github.com/wailsapp/wails/v2/internal/logger" ) +type BindForTest struct { +} + +func (b *BindForTest) GetA() A { + return A{} +} + +type A struct { + B B `json:"B"` +} + +type B struct { + Name string `json:"name"` +} + +func TestNestedStruct(t *testing.T) { + bind := &BindForTest{} + testBindings := NewBindings(logger.New(nil), []interface{}{bind}, []interface{}{}) + + namesStrSlicer := testBindings.getAllStructNames() + names := []string{} + namesStrSlicer.Each(func(s string) { + names = append(names, s) + }) + assert.Contains(t, names, "binding.A") + assert.Contains(t, names, "binding.B") +} + func Test_goTypeToJSDocType(t *testing.T) { tests := []struct {