@@ -351,6 +351,35 @@ public void testValidCharacterReferenceDecimal()
351
351
*
352
352
* @throws java.lang.Exception if any.
353
353
*/
354
+ @ Test
355
+ public void testParserPosition ()
356
+ throws Exception
357
+ {
358
+ String input = "<?xml version=\" 1.0\" encoding=\" UTF-8\" ?><!-- A --> \n <!-- B --><test>\t nnn</test>\n <!-- C\n C -->" ;
359
+
360
+ MXParser parser = new MXParser ();
361
+ parser .setInput ( new StringReader ( input ) );
362
+
363
+ assertEquals ( XmlPullParser .PROCESSING_INSTRUCTION , parser .nextToken () );
364
+ assertPosition ( 1 , 39 , parser );
365
+ assertEquals ( XmlPullParser .COMMENT , parser .nextToken () );
366
+ assertPosition ( 1 , 49 , parser );
367
+ assertEquals ( XmlPullParser .IGNORABLE_WHITESPACE , parser .nextToken () );
368
+ assertPosition ( 2 , 3 , parser ); // end when next token starts
369
+ assertEquals ( XmlPullParser .COMMENT , parser .nextToken () );
370
+ assertPosition ( 2 , 12 , parser );
371
+ assertEquals ( XmlPullParser .START_TAG , parser .nextToken () );
372
+ assertPosition ( 2 , 18 , parser );
373
+ assertEquals ( XmlPullParser .TEXT , parser .nextToken () );
374
+ assertPosition ( 2 , 23 , parser ); // end when next token starts
375
+ assertEquals ( XmlPullParser .END_TAG , parser .nextToken () );
376
+ assertPosition ( 2 , 29 , parser );
377
+ assertEquals ( XmlPullParser .IGNORABLE_WHITESPACE , parser .nextToken () );
378
+ assertPosition ( 3 , 2 , parser ); // end when next token starts
379
+ assertEquals ( XmlPullParser .COMMENT , parser .nextToken () );
380
+ assertPosition ( 4 , 6 , parser );
381
+ }
382
+
354
383
@ Test
355
384
public void testProcessingInstruction ()
356
385
throws Exception
@@ -622,7 +651,7 @@ public void testMalformedProcessingInstructionNoClosingQuestionMark()
622
651
}
623
652
catch ( XmlPullParserException ex )
624
653
{
625
- assertTrue ( ex .getMessage ().contains ( "processing instruction started on line 1 and column 2 was not closed" ) );
654
+ assertTrue ( ex .getMessage ().contains ( "processing instruction started on line 1 and column 1 was not closed" ) );
626
655
}
627
656
}
628
657
@@ -655,7 +684,7 @@ public void testSubsequentMalformedProcessingInstructionNoClosingQuestionMark()
655
684
}
656
685
catch ( XmlPullParserException ex )
657
686
{
658
- assertTrue ( ex .getMessage ().contains ( "processing instruction started on line 1 and column 13 was not closed" ) );
687
+ assertTrue ( ex .getMessage ().contains ( "processing instruction started on line 1 and column 12 was not closed" ) );
659
688
}
660
689
}
661
690
@@ -898,4 +927,8 @@ public void testEncodingISO_8859_1_setInputStream()
898
927
}
899
928
}
900
929
930
+ private static void assertPosition (int row , int col , MXParser parser ) {
931
+ assertEquals ("Current line" , row , parser .getLineNumber ());
932
+ assertEquals ("Current column" , col , parser .getColumnNumber ());
933
+ }
901
934
}
0 commit comments