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 fmt.Println(instructions.Accounts)
40 assert.Equal(t, 3, len(instructions.TokenIDs))
41
42 if debug {
43 fmt.Println(instructions)
44 for _, instruction := range instructions.Instructions {
45 fmt.Println(instruction.Raw())
46 }
47 }
48
49 assert.Equal(t, "User0 (1): 20", instructions.Instructions[7].Raw())
50 assert.Equal(t, "Type: Create&Deposit, From: User0, Amount: 20, TokenID: 1,\n", instructions.Instructions[7].String())
51 assert.Equal(t, "User0-User1 (1): 15 1", instructions.Instructions[9].Raw())
52 assert.Equal(t, "Type: Transfer, From: User0, To: User1, Amount: 15, Fee: 1, TokenID: 1,\n", instructions.Instructions[9].String())
53 assert.Equal(t, "A (1)E: 5", instructions.Instructions[11].Raw())
54 assert.Equal(t, "Type: ForceExit, From: A, Amount: 5, TokenID: 1,\n", instructions.Instructions[11].String())
55}
56
57func TestParseErrors(t *testing.T) {
58 s := "A (1):: 10"
59 parser := NewParser(strings.NewReader(s))
60 _, err := parser.Parse()
61 assert.Equal(t, "error parsing line 0: A(1):: 10, err: strconv.Atoi: parsing \":\": invalid syntax", err.Error())
62
63 s = "A (1): 10 20"
64 parser = NewParser(strings.NewReader(s))
65 _, err = parser.Parse()
66 assert.Equal(t, "error parsing line 1: 20, err: strconv.Atoi: parsing \"\": invalid syntax", err.Error())
67
68 s = "A B (1): 10"
69 parser = NewParser(strings.NewReader(s))
70 _, err = parser.Parse()
71 assert.Equal(t, "error parsing line 0: AB(1): 10, err: strconv.Atoi: parsing \"(\": invalid syntax", err.Error())
72
73 s = "A-B (1): 10 255"
74 parser = NewParser(strings.NewReader(s))
75 _, err = parser.Parse()
76 assert.Nil(t, err)
77 s = "A-B (1): 10 256"
78 parser = NewParser(strings.NewReader(s))
79 _, err = parser.Parse()
80 assert.Equal(t, "error parsing line 0: A-B(1):10256, err: Fee 256 can not be bigger than 255", err.Error())
81}