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
24 // set new batch, label does not affect
25 > batch1
26
27 C-A (1): 3 1
28 A-B (2): 15 1
29
30 User0 (1): 20
31 User1 (3) : 20
32 User0-User1 (1): 15 1
33 User1-User0 (3): 15 1
34
35 // Exits
36 A (1) E: 5
37 `
38 parser := NewParser(strings.NewReader(s))
39 instructions, err := parser.Parse()
40 assert.Nil(t, err)
41 assert.Equal(t, 13, len(instructions.Instructions))
42 // assert.Equal(t, 5, len(instructions.Accounts))
43 fmt.Println(instructions.Accounts)
44 assert.Equal(t, 3, len(instructions.TokenIDs))
45
46 if debug {
47 fmt.Println(instructions)
48 for _, instruction := range instructions.Instructions {
49 fmt.Println(instruction.Raw())
50 }
51 }
52
53 assert.Equal(t, TypeNewBatch, instructions.Instructions[5].Type)
54 assert.Equal(t, "User0 (1): 20", instructions.Instructions[8].Raw())
55 assert.Equal(t, "Type: Create&Deposit, From: User0, Amount: 20, TokenID: 1,\n", instructions.Instructions[8].String())
56 assert.Equal(t, "User0-User1 (1): 15 1", instructions.Instructions[10].Raw())
57 assert.Equal(t, "Type: Transfer, From: User0, To: User1, Amount: 15, Fee: 1, TokenID: 1,\n", instructions.Instructions[10].String())
58 assert.Equal(t, "A (1)E: 5", instructions.Instructions[12].Raw())
59 assert.Equal(t, "Type: ForceExit, From: A, Amount: 5, TokenID: 1,\n", instructions.Instructions[12].String())
60}
61
62func TestParseErrors(t *testing.T) {
63 s := "A (1):: 10"
64 parser := NewParser(strings.NewReader(s))
65 _, err := parser.Parse()
66 assert.Equal(t, "error parsing line 0: A(1):: 10, err: strconv.Atoi: parsing \":\": invalid syntax", err.Error())
67
68 s = "A (1): 10 20"
69 parser = NewParser(strings.NewReader(s))
70 _, err = parser.Parse()
71 assert.Equal(t, "error parsing line 1: 20, err: strconv.Atoi: parsing \"\": invalid syntax", err.Error())
72
73 s = "A B (1): 10"
74 parser = NewParser(strings.NewReader(s))
75 _, err = parser.Parse()
76 assert.Equal(t, "error parsing line 0: AB(1): 10, err: strconv.Atoi: parsing \"(\": invalid syntax", err.Error())
77
78 s = "A-B (1): 10 255"
79 parser = NewParser(strings.NewReader(s))
80 _, err = parser.Parse()
81 assert.Nil(t, err)
82 s = "A-B (1): 10 256"
83 parser = NewParser(strings.NewReader(s))
84 _, err = parser.Parse()
85 assert.Equal(t, "error parsing line 0: A-B(1):10256, err: Fee 256 can not be bigger than 255", err.Error())
86}