arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
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}