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 }