Skip to content

Commit b14ed2e

Browse files
joehnignodet
authored andcommitted
Fix position on MXParser.
1 parent 667ce0e commit b14ed2e

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

src/main/java/org/codehaus/plexus/util/xml/pull/MXParser.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ private void reset()
464464
// System.out.println("reset() called");
465465
location = null;
466466
lineNumber = 1;
467-
columnNumber = 0;
467+
columnNumber = 1;
468468
seenRoot = false;
469469
reachedEnd = false;
470470
eventType = START_DOCUMENT;
@@ -3103,7 +3103,7 @@ else if ( !seenInnerTag )
31033103
{
31043104
// seenPITarget && !seenQ
31053105
throw new XmlPullParserException( "processing instruction started on line " + curLine
3106-
+ " and column " + curColumn + " was not closed", this, null );
3106+
+ " and column " + (curColumn -2) + " was not closed", this, null );
31073107
}
31083108
}
31093109
else if ( ch == '<' )

src/test/java/org/codehaus/plexus/util/xml/pull/MXParserTest.java

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,35 @@ public void testValidCharacterReferenceDecimal()
351351
*
352352
* @throws java.lang.Exception if any.
353353
*/
354+
@Test
355+
public void testParserPosition()
356+
throws Exception
357+
{
358+
String input = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!-- A --> \n <!-- B --><test>\tnnn</test>\n<!-- C\nC -->";
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+
354383
@Test
355384
public void testProcessingInstruction()
356385
throws Exception
@@ -622,7 +651,7 @@ public void testMalformedProcessingInstructionNoClosingQuestionMark()
622651
}
623652
catch ( XmlPullParserException ex )
624653
{
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" ) );
626655
}
627656
}
628657

@@ -655,7 +684,7 @@ public void testSubsequentMalformedProcessingInstructionNoClosingQuestionMark()
655684
}
656685
catch ( XmlPullParserException ex )
657686
{
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" ) );
659688
}
660689
}
661690

@@ -898,4 +927,8 @@ public void testEncodingISO_8859_1_setInputStream()
898927
}
899928
}
900929

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+
}
901934
}

0 commit comments

Comments
 (0)