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