@@ -106,20 +106,26 @@ def test_skip_to_peek(self):
106106 self .assertEqual ("c" , ps .current_peek )
107107 self .assertEqual (0 , ps .peek_offset )
108108 self .assertEqual (2 , ps .index )
109+ self .assertEqual (0 , ps .row_index )
110+ self .assertEqual (2 , ps .column_index )
109111
110112 ps .peek ()
111113
112114 self .assertEqual ("c" , ps .current_char )
113115 self .assertEqual ("d" , ps .current_peek )
114116 self .assertEqual (1 , ps .peek_offset )
115117 self .assertEqual (2 , ps .index )
118+ self .assertEqual (0 , ps .row_index )
119+ self .assertEqual (2 , ps .column_index )
116120
117121 ps .next ()
118122
119123 self .assertEqual ("d" , ps .current_char )
120124 self .assertEqual ("d" , ps .current_peek )
121125 self .assertEqual (0 , ps .peek_offset )
122126 self .assertEqual (3 , ps .index )
127+ self .assertEqual (0 , ps .row_index )
128+ self .assertEqual (3 , ps .column_index )
123129
124130 def test_reset_peek (self ):
125131 ps = ParserStream ("abcd" )
@@ -159,3 +165,113 @@ def test_reset_peek(self):
159165
160166 self .assertEqual ("d" , ps .peek ())
161167 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