diff --git a/generator_test.go b/generator_test.go index 2b64c39..39e4519 100644 --- a/generator_test.go +++ b/generator_test.go @@ -6,10 +6,15 @@ import ( . "github.com/dave/jennifer/jen" "github.com/davecgh/go-spew/spew" - "github.com/stretchr/testify/require" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) +type jsonToSource struct { + from string + expected string +} + func Test_genTypeName(t *testing.T) { type jsonToSource struct { from string @@ -155,10 +160,6 @@ func Test_genTypeName(t *testing.T) { } func Test_genField(t *testing.T) { - type jsonToSource struct { - from string - expected string - } tests := []jsonToSource{ { @@ -186,6 +187,67 @@ func Test_genField(t *testing.T) { } } +func Test_genAccountField(t *testing.T) { + basicTest := `{ + "name": "authorityBefore", + "isMut": false, + "isSigner": true + }` + compositeTest := `{ + "name": "marketGroup", + "accounts": [ + { + "name": "marketMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "foo", + "isMut": true, + "isSigner": false + }, + { + "name": "subMarket", + "accounts": [ + { + "name": "subMarketMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "openOrders", + "isMut": true, + "isSigner": false + } + ] + } + ] + }` + + tests := []jsonToSource{ + { + basicTest, + "var thing struct {\n\tAuthorityBefore solanago.PublicKey\n}", + }, + { + compositeTest, + "var thing struct {\n\tMarketGroup struct {\n\t\tMarketMarket solanago.PublicKey\n\t\tFoo solanago.PublicKey\n\t\tSubMarket struct {\n\t\t\tSubMarketMarket solanago.PublicKey\n\t\t\tOpenOrders solanago.PublicKey\n\t\t}\n\t}\n}", + }, + } + { + for _, scenario := range tests { + var target IdlAccountItem + err := json.Unmarshal([]byte(scenario.from), &target) + require.NoError(t, err) + code := Var().Id("thing").Struct( + genAccountField(target), + ) + got := codeToString(code) + require.Equal(t, scenario.expected, got) + } + } +} + func Test_IdlAccountItemSlice_Walk(t *testing.T) { data := `[ {