hermez-node/test/lang_test.go
test/lang_test.goRaw
1package test
2
3import (
4 "fmt"
5 "strings"
6 "testing"
7
8 "github.com/stretchr/testify/assert"
9)
10
11var debug = false
12
13func TestParse(t *testing.T) {
14 s := `
15 // deposits
16 A (1): 10
17 A (2): 20
18 B (1): 5
19
20 // L2 transactions
21 A-B (1): 6 1
22 B-C (1): 3 1
23 C-A (1): 3 1
24 A-B (2): 15 1
25
26 User0 (1): 20
27 User1 (3) : 20
28 User0-User1 (1): 15 1
29 User1-User0 (3): 15 1
30
31 // Exits
32 A (1) E: 5
33 `
34 parser := NewParser(strings.NewReader(s))
35 instructions, err := parser.Parse()
36 assert.Nil(t, err)
37 assert.Equal(t, 12, len(instructions.Instructions))
38 assert.Equal(t, 5, len(instructions.Accounts))
39 assert.Equal(t, 3, len(instructions.TokenIDs))
40
41 if debug {
42 fmt.Println(instructions)
43 for _, instruction := range instructions.Instructions {
44 fmt.Println(instruction.Raw())
45 }
46 }
47
48 assert.Equal(t, "User0 (1): 20", instructions.Instructions[7].Raw())
49 assert.Equal(t, "Type: Create&Deposit, From: User0, Amount: 20, TokenID: 1,\n", instructions.Instructions[7].String())
50 assert.Equal(t, "User0-User1 (1): 15 1", instructions.Instructions[9].Raw())
51 assert.Equal(t, "Type: Transfer, From: User0, To: User1, Amount: 15, Fee: 1, TokenID: 1,\n", instructions.Instructions[9].String())
52 assert.Equal(t, "A (1)E: 5", instructions.Instructions[11].Raw())
53 assert.Equal(t, "Type: ForceExit, From: A, Amount: 5, TokenID: 1,\n", instructions.Instructions[11].String())
54}
55
56func TestParseErrors(t *testing.T) {
57 s := "A (1):: 10"
58 parser := NewParser(strings.NewReader(s))
59 _, err := parser.Parse()
60 assert.Equal(t, "error parsing line 0: A(1):: 10, err: strconv.Atoi: parsing \":\": invalid syntax", err.Error())
61
62 s = "A (1): 10 20"
63 parser = NewParser(strings.NewReader(s))
64 _, err = parser.Parse()
65 assert.Equal(t, "error parsing line 1: 20, err: strconv.Atoi: parsing \"\": invalid syntax", err.Error())
66
67 s = "A B (1): 10"
68 parser = NewParser(strings.NewReader(s))
69 _, err = parser.Parse()
70 assert.Equal(t, "error parsing line 0: AB(1): 10, err: strconv.Atoi: parsing \"(\": invalid syntax", err.Error())
71
72 s = "A-B (1): 10 255"
73 parser = NewParser(strings.NewReader(s))
74 _, err = parser.Parse()
75 assert.Nil(t, err)
76 s = "A-B (1): 10 256"
77 parser = NewParser(strings.NewReader(s))
78 _, err = parser.Parse()
79 assert.Equal(t, "error parsing line 0: A-B(1):10256, err: Fee 256 can not be bigger than 255", err.Error())
80}