package test import ( "fmt" "strings" "testing" "github.com/stretchr/testify/assert" ) var debug = false func TestParse(t *testing.T) { s := ` // deposits A (1): 10 A (2): 20 B (1): 5 // L2 transactions A-B (1): 6 1 B-C (1): 3 1 // set new batch, label does not affect > batch1 C-A (1): 3 1 A-B (2): 15 1 User0 (1): 20 User1 (3) : 20 User0-User1 (1): 15 1 User1-User0 (3): 15 1 // Exits A (1) E: 5 ` parser := NewParser(strings.NewReader(s)) instructions, err := parser.Parse() assert.Nil(t, err) assert.Equal(t, 13, len(instructions.Instructions)) // assert.Equal(t, 5, len(instructions.Accounts)) fmt.Println(instructions.Accounts) assert.Equal(t, 3, len(instructions.TokenIDs)) if debug { fmt.Println(instructions) for _, instruction := range instructions.Instructions { fmt.Println(instruction.Raw()) } } assert.Equal(t, TypeNewBatch, instructions.Instructions[5].Type) assert.Equal(t, "User0 (1): 20", instructions.Instructions[8].Raw()) assert.Equal(t, "Type: Create&Deposit, From: User0, Amount: 20, TokenID: 1,\n", instructions.Instructions[8].String()) assert.Equal(t, "User0-User1 (1): 15 1", instructions.Instructions[10].Raw()) assert.Equal(t, "Type: Transfer, From: User0, To: User1, Amount: 15, Fee: 1, TokenID: 1,\n", instructions.Instructions[10].String()) assert.Equal(t, "A (1)E: 5", instructions.Instructions[12].Raw()) assert.Equal(t, "Type: ForceExit, From: A, Amount: 5, TokenID: 1,\n", instructions.Instructions[12].String()) } func TestParseErrors(t *testing.T) { s := "A (1):: 10" parser := NewParser(strings.NewReader(s)) _, err := parser.Parse() assert.Equal(t, "error parsing line 0: A(1):: 10, err: strconv.Atoi: parsing \":\": invalid syntax", err.Error()) s = "A (1): 10 20" parser = NewParser(strings.NewReader(s)) _, err = parser.Parse() assert.Equal(t, "error parsing line 1: 20, err: strconv.Atoi: parsing \"\": invalid syntax", err.Error()) s = "A B (1): 10" parser = NewParser(strings.NewReader(s)) _, err = parser.Parse() assert.Equal(t, "error parsing line 0: AB(1): 10, err: strconv.Atoi: parsing \"(\": invalid syntax", err.Error()) s = "A-B (1): 10 255" parser = NewParser(strings.NewReader(s)) _, err = parser.Parse() assert.Nil(t, err) s = "A-B (1): 10 256" parser = NewParser(strings.NewReader(s)) _, err = parser.Parse() assert.Equal(t, "error parsing line 0: A-B(1):10256, err: Fee 256 can not be bigger than 255", err.Error()) }