github.com/igggame/nebulas-go@v2.1.0+incompatible/nf/nvm/engine_nrc721_test.go (about)

     1  package nvm
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"io/ioutil"
     7  	"testing"
     8  
     9  	"github.com/nebulasio/go-nebulas/consensus/dpos"
    10  	"github.com/nebulasio/go-nebulas/core/state"
    11  	"github.com/nebulasio/go-nebulas/storage"
    12  	"github.com/stretchr/testify/assert"
    13  )
    14  
    15  func TestNRC721Contract(t *testing.T) {
    16  
    17  	tests := []struct {
    18  		name         string
    19  		contractPath string
    20  		sourceType   string
    21  		from         string
    22  		to           string
    23  		tokenID      string
    24  	}{
    25  		{"nrc721", "./test/NRC721BasicToken.js", "js",
    26  			"n1FkntVUMPAsESuCAAPK711omQk19JotBjM", "n1Kjom3J4KPsHKKzZ2xtt8Lc9W5pRDjeLcW", "1001",
    27  		},
    28  	}
    29  
    30  	for _, tt := range tests {
    31  		t.Run(tt.name, func(t *testing.T) {
    32  			data, err := ioutil.ReadFile(tt.contractPath)
    33  			assert.Nil(t, err, "contract path read error")
    34  
    35  			mem, _ := storage.NewMemoryStorage()
    36  			context, _ := state.NewWorldState(dpos.NewDpos(), mem)
    37  			assert.Nil(t, err)
    38  
    39  			// prepare the contract.
    40  			contract, _ := context.CreateContractAccount([]byte("account2"), nil, nil)
    41  			contract.AddBalance(newUint128FromIntWrapper(5))
    42  
    43  			// parepare env, block & transactions.
    44  			tx := mockNormalTransaction(tt.from, "n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC", "0")
    45  			ctx, err := NewContext(mockBlock(), tx, contract, context)
    46  
    47  			// execute.
    48  			engine := NewV8Engine(ctx)
    49  			engine.SetExecutionLimits(10000, 100000000)
    50  			args := fmt.Sprintf("[\"%s\"]", tt.name)
    51  			_, err = engine.DeployAndInit(string(data), tt.sourceType, args)
    52  			assert.Nil(t, err)
    53  			engine.Dispose()
    54  
    55  			// call name.
    56  			engine = NewV8Engine(ctx)
    57  			engine.SetExecutionLimits(10000, 100000000)
    58  			name, err := engine.Call(string(data), tt.sourceType, "name", "")
    59  			assert.Nil(t, err)
    60  			var nameStr string
    61  			err = json.Unmarshal([]byte(name), &nameStr)
    62  			assert.Nil(t, err)
    63  			assert.Equal(t, tt.name, nameStr)
    64  			engine.Dispose()
    65  
    66  			// call mint.
    67  			// engine = NewV8Engine(ctx)
    68  			// engine.SetExecutionLimits(10000, 100000000)
    69  			// mintArgs := fmt.Sprintf("[\"%s\", \"%s\"]", tt.from, tt.tokenID)
    70  			// result, err := engine.Call(string(data), tt.sourceType, "mint", mintArgs)
    71  			// assert.Nil(t, err)
    72  			// assert.Equal(t, "\"\"", result)
    73  			// engine.Dispose()
    74  
    75  			// // call approve.
    76  			// engine = NewV8Engine(ctx)
    77  			// engine.SetExecutionLimits(10000, 100000000)
    78  			// approveArgs := fmt.Sprintf("[\"%s\", \"%s\"]", tt.to, tt.tokenID)
    79  			// result, err = engine.Call(string(data), tt.sourceType, "approve", approveArgs)
    80  			// assert.Nil(t, err)
    81  			// assert.Equal(t, "\"\"", result)
    82  			// engine.Dispose()
    83  
    84  			// // parepare env, block & transactions.
    85  			// tx = mockNormalTransaction(tt.to, "n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC", "0")
    86  			// ctx, err = NewContext(mockBlock(), tx, contract, context)
    87  
    88  			// // call transferFrom.
    89  			// engine = NewV8Engine(ctx)
    90  			// engine.SetExecutionLimits(10000, 100000000)
    91  			// transferFromArgs := fmt.Sprintf("[\"%s\", \"%s\", \"%s\"]", tt.from, tt.to, tt.tokenID)
    92  			// result, err = engine.Call(string(data), tt.sourceType, "transferFrom", transferFromArgs)
    93  			// assert.Nil(t, err)
    94  			// assert.Equal(t, "\"\"", result)
    95  			// engine.Dispose()
    96  
    97  		})
    98  	}
    99  }