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 A (1): 10
16 A (2): 20
17 B (1): 5
18 A-B (1): 6
19 B-C (1): 3
20 C-A (1): 3
21 A-B (2): 15
22 User0 (1): 20
23 User1 (3) : 20
24 User0-User1 (1): 15
25 User1-User0 (3): 15
26 `
27 parser := NewParser(strings.NewReader(s))
28 instructions, err := parser.Parse()
29 assert.Nil(t, err)
30 assert.Equal(t, 11, len(instructions.Instructions))
31 assert.Equal(t, 5, len(instructions.Accounts))
32 assert.Equal(t, 3, len(instructions.TokenIDs))
33
34 if debug {
35 fmt.Println(instructions)
36 for _, instruction := range instructions.Instructions {
37 fmt.Println(instruction.Raw())
38 }
39 }
40
41 assert.Equal(t, "User0 (1): 20", instructions.Instructions[7].Raw())
42 assert.Equal(t, "Type: Deposit, From: User0, Amount: 20, TokenID: 1,\n", instructions.Instructions[7].String())
43 assert.Equal(t, "User0-User1 (1): 15", instructions.Instructions[9].Raw())
44 assert.Equal(t, "Type: Transfer, From: User0, To: User1, Amount: 15, TokenID: 1,\n", instructions.Instructions[9].String())
45}
46
47func TestParseErrors(t *testing.T) {
48 s := "A (1):: 10"
49 parser := NewParser(strings.NewReader(s))
50 _, err := parser.Parse()
51 assert.Equal(t, "error parsing line 0: A(1):: 10, err: strconv.Atoi: parsing \":\": invalid syntax", err.Error())
52
53 s = "A (1): 10 20"
54 parser = NewParser(strings.NewReader(s))
55 _, err = parser.Parse()
56 assert.Equal(t, "error parsing line 1: 20, err: strconv.Atoi: parsing \"\": invalid syntax", err.Error())
57
58 s = "A B (1): 10"
59 parser = NewParser(strings.NewReader(s))
60 _, err = parser.Parse()
61 assert.Equal(t, "error parsing line 0: AB(1): 10, err: strconv.Atoi: parsing \"(\": invalid syntax", err.Error())
62}