github.com/iotexproject/iotex-core@v1.14.1-rc1/ioctl/newcmd/contract/contractcompile_test.go (about) 1 // Copyright (c) 2022 IoTeX Foundation 2 // This source code is provided 'as is' and no warranties are given as to title or non-infringement, merchantability 3 // or fitness for purpose and, to the extent permitted by law, all liability for your use of the code is disclaimed. 4 // This source code is governed by Apache License 2.0 that can be found in the LICENSE file. 5 6 package contract 7 8 import ( 9 "os/exec" 10 "testing" 11 12 "github.com/golang/mock/gomock" 13 "github.com/pkg/errors" 14 "github.com/stretchr/testify/require" 15 16 "github.com/iotexproject/iotex-core/ioctl/config" 17 "github.com/iotexproject/iotex-core/ioctl/util" 18 "github.com/iotexproject/iotex-core/test/mock/mock_ioctlclient" 19 ) 20 21 func TestNewContractCompileCmd(t *testing.T) { 22 t.Skip("skip this test because it requires special solc version installed") 23 skipWithoutSolc(t) 24 require := require.New(t) 25 ctrl := gomock.NewController(t) 26 defer ctrl.Finish() 27 client := mock_ioctlclient.NewMockClient(ctrl) 28 29 client.EXPECT().SelectTranslation(gomock.Any()).Return("contract", config.English).AnyTimes() 30 client.EXPECT().SetEndpointWithFlag(gomock.Any()).AnyTimes() 31 client.EXPECT().SetInsecureWithFlag(gomock.Any()).AnyTimes() 32 33 t.Run("compile contract", func(t *testing.T) { 34 cmd := NewContractCompileCmd(client) 35 result, err := util.ExecuteCmd(cmd, "A", "../../../action/protocol/execution/testdata-london/array-return.sol") 36 require.NoError(err) 37 require.Contains(result, "array-return.sol:A") 38 }) 39 40 t.Run("failed to get source file(s)", func(t *testing.T) { 41 expectedErr := errors.New("failed to get source file(s)") 42 cmd := NewContractCompileCmd(client) 43 _, err := util.ExecuteCmd(cmd, "HelloWorld") 44 require.Contains(err.Error(), expectedErr.Error()) 45 }) 46 47 t.Run("failed to find out contract", func(t *testing.T) { 48 expectedErr := errors.New("failed to find out contract WrongContract") 49 cmd := NewContractCompileCmd(client) 50 _, err := util.ExecuteCmd(cmd, "WrongContract", "../../../action/protocol/execution/testdata-london/array-return.sol") 51 require.Contains(err.Error(), expectedErr.Error()) 52 }) 53 54 t.Run("failed to compile", func(t *testing.T) { 55 expectedErr := errors.New("failed to compile") 56 cmd := NewContractCompileCmd(client) 57 _, err := util.ExecuteCmd(cmd, "", "") 58 require.Contains(err.Error(), expectedErr.Error()) 59 }) 60 } 61 62 func skipWithoutSolc(t *testing.T) { 63 if _, err := exec.LookPath(_solCompiler); err != nil { 64 t.Skip(err) 65 } 66 }