-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfunc_test.go
113 lines (102 loc) · 2.09 KB
/
func_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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package scan
import "testing"
func TestRepeat(t *testing.T) {
s := NewScannerFromString("", "12345")
tests := []struct {
val string
n int
}{
{"123", 3},
{"45", 3},
}
for _, test := range tests {
t.Run(test.val, func(t *testing.T) {
Repeat(s.Keep, test.n)
tok := s.Emit()
if tok.Val != test.val {
t.Errorf("\n have: %v \n want: %v", tok.Val, test.val)
}
})
}
}
func TestWhile(t *testing.T) {
s := NewScannerFromString("", " 123abc456")
tests := []struct {
val string
class Class
fn func()
}{
{"", IsSpace, s.Discard},
{"123", IsDigit, s.Keep},
{"abc", IsLetter, s.Keep},
{"456", Not(IsSpace), s.Keep},
}
for _, test := range tests {
t.Run(test.val, func(t *testing.T) {
While(s, test.class, test.fn)
tok := s.Emit()
if tok.Val != test.val {
t.Errorf("\n have: %v \n want: %v", tok.Val, test.val)
}
})
}
}
func TestQuote(t *testing.T) {
tests := []struct {
in string
want string
}{
{`abcd`, `"abcd"`},
{`ab"c"d`, `'ab"c"d'`},
{`ab'c'd`, `"ab'c'd"`},
{"ab`c`d", "\"ab`c`d\""},
{"a\"b\"'c'd", "`a\"b\"'c'd`"},
{"a\"b\"'c'`d`", "{!quote:a\"b\"'c'`d`}"},
{"ab\x00cd", `"ab{!ch:00}cd"`},
{"\u00a0", `"{!ch:a0}"`},
}
for _, test := range tests {
t.Run(test.in, func(t *testing.T) {
have := Quote(test.in)
if have != test.want {
t.Errorf("\n have: %v \n want: %v", have, test.want)
}
})
}
}
func TestWord(t *testing.T) {
tests := []struct {
in string
want string
}{
{`abcd`, `abcd`},
{` abcd`, `abcd`},
{" ab\ncd", `ab`},
}
for _, test := range tests {
t.Run(test.in, func(t *testing.T) {
s := NewScannerFromString("", test.in)
have := Word(s)
if have != test.want {
t.Errorf("\n have: %v \n want: %v", have, test.want)
}
})
}
}
func TestLine(t *testing.T) {
tests := []struct {
in string
want string
}{
{" abcd \n 1234", "abcd"},
}
for _, test := range tests {
t.Run(test.in, func(t *testing.T) {
s := NewScannerFromString("", test.in)
have := Line(s)
if have != test.want {
t.Errorf("\n have: %v \n want: %v", have, test.want)
}
})
}
}