Skip to content

Commit

Permalink
feature: CLI contract generateaci command with unittest. Output forma…
Browse files Browse the repository at this point in the history
…t could be improved
  • Loading branch information
randomshinichi committed Jul 26, 2019
1 parent ecf96d3 commit 70ba5f4
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 0 deletions.
25 changes: 25 additions & 0 deletions cmd/contract.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,31 @@ func decodeCalldataFunc(conn decodeCalldataer, args []string) (err error) {
return
}

var generateAciCmd = &cobra.Command{
Use: "generateaci FILENAME",
Short: "Generate ACI out of source code",
Long: ``,
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) (err error) {
compiler := newCompiler()
return generateAciFunc(compiler, args)
},
SilenceUsage: true,
}

func generateAciFunc(conn aeternity.GenerateACIer, args []string) (err error) {
source, err := readSource(args[0])
if err != nil {
return
}

aci, err := conn.GenerateACI(source)
if err != nil {
return
}
PrintObject("ACI", aci)
return nil
}
func readSource(path string) (s string, err error) {
file, err := os.Open(path)
if err != nil {
Expand Down
33 changes: 33 additions & 0 deletions cmd/contract_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,3 +179,36 @@ func Test_decodeCalldataFunc(t *testing.T) {
})
}
}

func Test_generateAciFunc(t *testing.T) {
// Write source file for Decode with source file test
tempdir, path := writeTestContractFile(t, contractSimpleStorage)
defer os.RemoveAll(tempdir)
type args struct {
conn aeternity.GenerateACIer
args []string
}
tests := []struct {
name string
args args
wantErr bool
}{
{
name: "Generate ACI from SimpleStorage",
args: args{
conn: &mockGenerateACIer{
aci: `{"encoded_aci":{"contract":{"functions":[{"arguments":[{"name":"value","type":"int"}],"name":"init","returns":"SimpleStorage.state","stateful":false}],"name":"SimpleStorage","state":{"record":[{"name":"data","type":"int"}]},"type_defs":[]}},"interface":"contract SimpleStorage =\n record state = {data : int}\n entrypoint init : (int) =\u003e SimpleStorage.state\n"}`,
},
args: []string{path},
},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if err := generateAciFunc(tt.args.conn, tt.args.args); (err != nil) != tt.wantErr {
t.Errorf("generateAciFunc() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
10 changes: 10 additions & 0 deletions cmd/mocks_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,3 +145,13 @@ func (m *mockdecodeCalldataer) DecodeCalldataBytecode(bytecode string, calldata
decodedCallData.UnmarshalBinary([]byte(m.decodedCalldata))
return decodedCallData, nil
}

type mockGenerateACIer struct {
aci string
}

func (m *mockGenerateACIer) GenerateACI(source string) (aci *compilermodels.ACI, err error) {
aci = &compilermodels.ACI{}
err = aci.UnmarshalBinary([]byte(m.aci))
return aci, err
}

0 comments on commit 70ba5f4

Please sign in to comment.