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	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}