@@ -106,20 +106,26 @@ def test_skip_to_peek(self):
106
106
self .assertEqual ("c" , ps .current_peek )
107
107
self .assertEqual (0 , ps .peek_offset )
108
108
self .assertEqual (2 , ps .index )
109
+ self .assertEqual (0 , ps .row_index )
110
+ self .assertEqual (2 , ps .column_index )
109
111
110
112
ps .peek ()
111
113
112
114
self .assertEqual ("c" , ps .current_char )
113
115
self .assertEqual ("d" , ps .current_peek )
114
116
self .assertEqual (1 , ps .peek_offset )
115
117
self .assertEqual (2 , ps .index )
118
+ self .assertEqual (0 , ps .row_index )
119
+ self .assertEqual (2 , ps .column_index )
116
120
117
121
ps .next ()
118
122
119
123
self .assertEqual ("d" , ps .current_char )
120
124
self .assertEqual ("d" , ps .current_peek )
121
125
self .assertEqual (0 , ps .peek_offset )
122
126
self .assertEqual (3 , ps .index )
127
+ self .assertEqual (0 , ps .row_index )
128
+ self .assertEqual (3 , ps .column_index )
123
129
124
130
def test_reset_peek (self ):
125
131
ps = ParserStream ("abcd" )
@@ -159,3 +165,113 @@ def test_reset_peek(self):
159
165
160
166
self .assertEqual ("d" , ps .peek ())
161
167
self .assertEqual (None , ps .peek ())
168
+
169
+ def test_next_with_newline (self ):
170
+ ps = ParserStream ("ab\n cd\r \n ef" )
171
+
172
+ self .assertEqual ("a" , ps .current_char )
173
+ self .assertEqual (0 , ps .index )
174
+ self .assertEqual (0 , ps .row_index )
175
+ self .assertEqual (0 , ps .column_index )
176
+
177
+ self .assertEqual ("b" , ps .next ())
178
+ self .assertEqual ("b" , ps .current_char )
179
+ self .assertEqual (1 , ps .index )
180
+ self .assertEqual (0 , ps .row_index )
181
+ self .assertEqual (1 , ps .column_index )
182
+
183
+
184
+ self .assertEqual ("\n " , ps .next ())
185
+ self .assertEqual ("\n " , ps .current_char )
186
+ self .assertEqual (2 , ps .index )
187
+ self .assertEqual (0 , ps .row_index )
188
+ self .assertEqual (2 , ps .column_index )
189
+
190
+ self .assertEqual ("c" , ps .next ())
191
+ self .assertEqual ("c" , ps .current_char )
192
+ self .assertEqual (3 , ps .index )
193
+ self .assertEqual (1 , ps .row_index )
194
+ self .assertEqual (0 , ps .column_index )
195
+
196
+ self .assertEqual ("d" , ps .next ())
197
+ self .assertEqual ("d" , ps .current_char )
198
+ self .assertEqual (4 , ps .index )
199
+ self .assertEqual (1 , ps .row_index )
200
+ self .assertEqual (1 , ps .column_index )
201
+
202
+ self .assertEqual ("\r " , ps .next ())
203
+ self .assertEqual ("\n " , ps .current_char )
204
+ self .assertEqual (5 , ps .index )
205
+ self .assertEqual (1 , ps .row_index )
206
+ self .assertEqual (2 , ps .column_index )
207
+
208
+ self .assertEqual ("e" , ps .next ())
209
+ self .assertEqual ("e" , ps .current_char )
210
+ self .assertEqual (7 , ps .index )
211
+ self .assertEqual (2 , ps .row_index )
212
+ self .assertEqual (0 , ps .column_index )
213
+
214
+ self .assertEqual ("f" , ps .next ())
215
+ self .assertEqual ("f" , ps .current_char )
216
+ self .assertEqual (8 , ps .index )
217
+ self .assertEqual (2 , ps .row_index )
218
+ self .assertEqual (1 , ps .column_index )
219
+
220
+ self .assertEqual (None , ps .next ())
221
+ self .assertEqual (None , ps .current_char )
222
+ self .assertEqual (9 , ps .index )
223
+ self .assertEqual (2 , ps .row_index )
224
+ self .assertEqual (2 , ps .column_index )
225
+
226
+ def test_skip_to_peek_with_newlines (self ):
227
+ ps = ParserStream ("ab\n cd\r \n ef" )
228
+
229
+ ps .peek ()
230
+ ps .peek ()
231
+ ps .peek ()
232
+
233
+ ps .skip_to_peek ()
234
+
235
+ self .assertEqual ("c" , ps .current_char )
236
+ self .assertEqual ("c" , ps .current_peek )
237
+ self .assertEqual (0 , ps .peek_offset )
238
+ self .assertEqual (3 , ps .index )
239
+ self .assertEqual (1 , ps .row_index )
240
+ self .assertEqual (0 , ps .column_index )
241
+
242
+ ps .peek ()
243
+
244
+ self .assertEqual ("c" , ps .current_char )
245
+ self .assertEqual ("d" , ps .current_peek )
246
+ self .assertEqual (1 , ps .peek_offset )
247
+ self .assertEqual (3 , ps .index )
248
+ self .assertEqual (1 , ps .row_index )
249
+ self .assertEqual (0 , ps .column_index )
250
+
251
+ ps .next ()
252
+
253
+ self .assertEqual ("d" , ps .current_char )
254
+ self .assertEqual ("d" , ps .current_peek )
255
+ self .assertEqual (0 , ps .peek_offset )
256
+ self .assertEqual (4 , ps .index )
257
+ self .assertEqual (1 , ps .row_index )
258
+ self .assertEqual (1 , ps .column_index )
259
+
260
+ ps .peek ()
261
+ ps .peek ()
262
+
263
+ self .assertEqual ("d" , ps .current_char )
264
+ self .assertEqual ("e" , ps .current_peek )
265
+ self .assertEqual (3 , ps .peek_offset )
266
+ self .assertEqual (4 , ps .index )
267
+ self .assertEqual (1 , ps .row_index )
268
+ self .assertEqual (1 , ps .column_index )
269
+
270
+ ps .skip_to_peek ()
271
+
272
+ self .assertEqual ("e" , ps .current_char )
273
+ self .assertEqual ("e" , ps .current_peek )
274
+ self .assertEqual (0 , ps .peek_offset )
275
+ self .assertEqual (7 , ps .index )
276
+ self .assertEqual (2 , ps .row_index )
277
+ self .assertEqual (0 , ps .column_index )
0 commit comments