-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathscanner_test.go
48 lines (37 loc) · 1.41 KB
/
scanner_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package expr
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestSkipWhitespaces(t *testing.T) {
scan := NewScanner([]byte(" \r\n && 1&2 ||"))
scan.(*scanner).skipWhitespaces()
assert.Equal(t, 5, scan.(*scanner).bp, "TestSkipWhitespaces failed")
}
func TestNextToken(t *testing.T) {
scan := NewScanner([]byte(" \r\n && 1&2 || 1 "))
scan.AddSymbol([]byte("&&"), 2)
scan.AddSymbol([]byte("||"), 3)
assert.Equal(t, "", string(scan.ScanString()), "TestNextToken failed")
scan.NextToken()
assert.Equal(t, 2, scan.Token(), "TestNextToken failed")
assert.Equal(t, "", string(scan.ScanString()), "TestNextToken failed")
scan.NextToken()
assert.Equal(t, 3, scan.Token(), "TestNextToken failed")
assert.Equal(t, "1&2", string(scan.ScanString()), "TestNextToken failed")
scan.NextToken()
assert.Equal(t, TokenEOI, scan.Token(), "TestNextToken failed")
assert.Equal(t, "1", string(scan.ScanString()), "TestNextToken failed")
}
func TestNextTokenWithGap(t *testing.T) {
scan := NewScanner([]byte("1 >==2 "))
scan.AddSymbol([]byte(">"), 2)
scan.AddSymbol([]byte(">="), 3)
scan.AddSymbol([]byte("="), 4)
scan.NextToken()
assert.Equal(t, 3, scan.Token(), "TestNextToken failed")
assert.Equal(t, "1", string(scan.ScanString()), "TestNextToken failed")
scan.NextToken()
assert.Equal(t, 4, scan.Token(), "TestNextToken failed")
assert.Equal(t, "", string(scan.ScanString()), "TestNextToken failed")
}