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