v2 / vlib / strings / textscanner / textscanner_test.v
216 lines · 194 sloc · 4.15 KB · c7ee45fc6465125b3504d106337857bc9553c75f
Raw
1import strings.textscanner
2
3fn test_remaining() {
4 mut s := textscanner.new('abc')
5 assert s.remaining() == 3
6 s.next()
7 s.next()
8 assert s.remaining() == 1
9 s.next()
10 assert s.remaining() == 0
11 s.next()
12 s.next()
13 assert s.remaining() == 0
14 s.reset()
15 assert s.remaining() == 3
16}
17
18fn test_next() {
19 mut s := textscanner.new('abc')
20 assert s.next() == `a`
21 assert s.next() == `b`
22 assert s.next() == `c`
23 assert s.next() == -1
24 assert s.next() == -1
25 assert s.next() == -1
26}
27
28fn test_skip() {
29 mut s := textscanner.new('abc')
30 assert s.next() == `a`
31 s.skip()
32 assert s.next() == `c`
33 assert s.next() == -1
34
35 s.reset()
36 assert s.peek() == `a`
37 s.skip()
38 assert s.peek() == `b`
39 s.skip()
40 assert s.peek() == `c`
41 s.skip()
42 assert s.peek() == -1
43}
44
45fn test_skip_n() {
46 mut s := textscanner.new('abc')
47 s.skip_n(2)
48 assert s.next() == `c`
49 assert s.next() == -1
50
51 s.reset()
52 assert s.peek() == `a`
53 s.skip_n(2)
54 assert s.peek() == `c`
55 s.skip_n(2)
56 assert s.peek() == -1
57
58 s.reset()
59 assert s.peek() == `a`
60 s.skip_n(3)
61 assert s.peek() == -1
62
63 s.reset()
64 assert s.peek() == `a`
65 s.skip_n(4)
66 assert s.peek() == -1
67}
68
69fn test_peek() {
70 mut s := textscanner.new('abc')
71 assert s.peek() == `a`
72 assert s.peek() == `a`
73 assert s.peek() == `a`
74
75 assert s.next() == `a`
76 assert s.next() == `b`
77 assert s.next() == `c`
78 assert s.next() == -1
79}
80
81fn test_peek_n() {
82 mut s := textscanner.new('abc')
83 assert s.peek_n(0) == `a`
84 assert s.peek_n(1) == `b`
85 assert s.peek_n(2) == `c`
86 assert s.peek_n(3) == -1
87 assert s.peek_n(4) == -1
88
89 assert s.next() == `a`
90 assert s.next() == `b`
91 assert s.next() == `c`
92 assert s.next() == -1
93}
94
95fn test_back() {
96 mut s := textscanner.new('abc')
97 assert s.next() == `a`
98 s.back()
99 assert s.next() == `a`
100 assert s.next() == `b`
101 s.back()
102 assert s.next() == `b`
103 assert s.next() == `c`
104 assert s.next() == -1
105}
106
107fn test_back_n() {
108 mut s := textscanner.new('abc')
109 assert s.next() == `a`
110 s.back_n(10)
111 assert s.next() == `a`
112 assert s.next() == `b`
113 assert s.next() == `c`
114 s.back_n(2)
115 assert s.next() == `b`
116}
117
118fn test_peek_back() {
119 mut s := textscanner.new('abc')
120 assert s.next() == `a`
121 assert s.next() == `b`
122 // check that calling .peek_back() multiple times
123 // does not change the state:
124 assert s.peek_back() == `a`
125 assert s.peek_back() == `a`
126 assert s.peek_back() == `a`
127 // advance, then peek_back again:
128 assert s.next() == `c`
129 assert s.peek_back() == `b`
130 // peeking before the start:
131 s.reset()
132 assert s.peek_back() == -1
133 // peeking right at the end:
134 s.goto_end()
135 assert s.peek_back() == `b`
136}
137
138fn test_peek_back_n() {
139 mut s := textscanner.new('abc')
140 s.goto_end()
141 assert s.peek_back_n(0) == `c`
142 assert s.peek_back_n(1) == `b`
143 assert s.peek_back_n(2) == `a`
144 assert s.peek_back_n(3) == -1
145 assert s.peek_back_n(4) == -1
146}
147
148fn test_reset() {
149 mut s := textscanner.new('abc')
150 assert s.next() == `a`
151 s.next()
152 s.next()
153 assert s.next() == -1
154 s.reset()
155 assert s.next() == `a`
156}
157
158fn test_current() {
159 mut s := textscanner.new('abc')
160 assert s.current() == -1
161 assert s.next() == `a`
162 assert s.current() == `a`
163 assert s.current() == `a`
164 assert s.peek_back() == -1
165 assert s.next() == `b`
166 assert s.current() == `b`
167 assert s.current() == `b`
168 assert s.peek_back() == `a`
169 assert s.next() == `c`
170 assert s.current() == `c`
171 assert s.next() == -1
172 assert s.current() == `c`
173 assert s.next() == -1
174 assert s.current() == `c`
175 s.reset()
176 assert s.current() == -1
177 assert s.next() == `a`
178 assert s.current() == `a`
179}
180
181fn test_goto_end() {
182 mut s := textscanner.new('abc')
183 s.goto_end()
184 assert s.current() == `c`
185}
186
187fn test_skip_whitespace() {
188 mut s := textscanner.new('abc d \n xyz')
189 assert s.current() == -1
190 assert s.next() == `a`
191 assert s.next() == `b`
192 assert s.next() == `c`
193 s.skip_whitespace()
194 assert s.next() == `d`
195 s.skip_whitespace()
196 assert s.next() == `x`
197 assert s.next() == `y`
198 assert s.next() == `z`
199}
200
201fn test_peek_u8() {
202 mut s := textscanner.new('abc')
203 assert s.peek_u8() == `a`
204 assert !s.peek_u8().is_digit()
205 assert s.next() == `a`
206 assert s.peek_u8() == `b`
207}
208
209fn test_peek_n_u8() {
210 mut s := textscanner.new('abc')
211 assert s.peek_n_u8(0) == `a`
212 assert s.peek_n_u8(1) == `b`
213 assert s.peek_n_u8(2) == `c`
214 assert s.peek_n_u8(3) == 0
215 assert s.peek_n_u8(4) == 0
216}
217