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