diff --git a/src/main/java/org/codehaus/plexus/util/xml/pull/MXParser.java b/src/main/java/org/codehaus/plexus/util/xml/pull/MXParser.java index 40a12a21..04ecbcfe 100644 --- a/src/main/java/org/codehaus/plexus/util/xml/pull/MXParser.java +++ b/src/main/java/org/codehaus/plexus/util/xml/pull/MXParser.java @@ -3096,7 +3096,7 @@ else if ( ch == '<' ) piTargetEnd = pos - 1; // [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l')) - if ( ( piTargetEnd - piTargetStart ) == 3 ) + if ( ( piTargetEnd - piTargetStart ) >= 3 ) { if ( ( buf[piTargetStart] == 'x' || buf[piTargetStart] == 'X' ) && ( buf[piTargetStart + 1] == 'm' || buf[piTargetStart + 1] == 'M' ) diff --git a/src/test/java/org/codehaus/plexus/util/xml/pull/IBMXML10Tests_Test_IBMXMLConformanceTestSuite_not_wftests_Test_IBMXMLConformanceTestSuite_Production24_Test.java b/src/test/java/org/codehaus/plexus/util/xml/pull/IBMXML10Tests_Test_IBMXMLConformanceTestSuite_not_wftests_Test_IBMXMLConformanceTestSuite_Production24_Test.java new file mode 100644 index 00000000..587083a5 --- /dev/null +++ b/src/test/java/org/codehaus/plexus/util/xml/pull/IBMXML10Tests_Test_IBMXMLConformanceTestSuite_not_wftests_Test_IBMXMLConformanceTestSuite_Production24_Test.java @@ -0,0 +1,271 @@ +package org.codehaus.plexus.util.xml.pull; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.io.Reader; + +import org.junit.Before; +import org.junit.Test; + +/** + * Test class that execute a particular set of tests associated to a TESCASES tag from the XML W3C Conformance Tests. + * TESCASES PROFILE:
IBM XML Conformance Test Suite - Production 24+ * XML test files base folder:
xmlconf/ibm/+ * + * @author Gabriel Belingueres + */ +public class IBMXML10Tests_Test_IBMXMLConformanceTestSuite_not_wftests_Test_IBMXMLConformanceTestSuite_Production24_Test +{ + + final static File testResourcesDir = new File( "src/test/resources/", "xmlconf/ibm/" ); + + MXParser parser; + + @Before + public void setUp() + { + parser = new MXParser(); + } + + /** + * Test ID:
ibm-not-wf-P24-ibm24n01.xml+ * Test URI:
not-wf/P24/ibm24n01.xml+ * Comment:
Tests VersionInfo with a required field missing. The VersionNum is missing in the VersionInfo in the XMLDecl.+ * Sections:
2.8+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P24_ibm24n01xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P24/ibm24n01.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests VersionInfo with a required field missing. The VersionNum is missing in the VersionInfo in the XMLDecl." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "expected apostrophe (') or quotation mark (\") after version and not ?" ) ); + } + } + + /** + * Test ID:
ibm-not-wf-P24-ibm24n02.xml+ * Test URI:
not-wf/P24/ibm24n02.xml+ * Comment:
Tests VersionInfo with a required field missing. The white space is missing between the key word "xml" and the VersionInfo in the XMLDecl.+ * Sections:
2.8+ * Version: + * + * @throws XmlPullParserException if there is a problem parsing the XML file + * @throws FileNotFoundException if the testing XML file is not found + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P24_ibm24n02xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P24/ibm24n02.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests VersionInfo with a required field missing. The white space is missing between the key word \"xml\" and the VersionInfo in the XMLDecl." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "expected v in version and not ?" ) ); + } + } + + /** + * Test ID:
ibm-not-wf-P24-ibm24n03.xml+ * Test URI:
not-wf/P24/ibm24n03.xml+ * Comment:
Tests VersionInfo with a required field missing. The "=" (equal sign) is missing between the key word "version" and the VersionNum.+ * Sections:
2.8+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P24_ibm24n03xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P24/ibm24n03.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests VersionInfo with a required field missing. The \"=\" (equal sign) is missing between the key word \"version\" and the VersionNum." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "expected equals sign (=) after version and not \\'" ) ); + } + } + + /** + * Test ID:
ibm-not-wf-P24-ibm24n04.xml+ * Test URI:
not-wf/P24/ibm24n04.xml+ * Comment:
Tests VersionInfo with wrong field ordering. The VersionNum occurs before "=" and "version".+ * Sections:
2.8+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P24_ibm24n04xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P24/ibm24n04.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests VersionInfo with wrong field ordering. The VersionNum occurs before \"=\" and \"version\"." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "expected v in version and not \\'" ) ); + } + } + + /** + * Test ID:
ibm-not-wf-P24-ibm24n05.xml+ * Test URI:
not-wf/P24/ibm24n05.xml+ * Comment:
Tests VersionInfo with wrong field ordering. The "=" occurs after "version" and the VersionNum.+ * Sections:
2.8+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P24_ibm24n05xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P24/ibm24n05.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests VersionInfo with wrong field ordering. The \"=\" occurs after \"version\" and the VersionNum." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "expected equals sign (=) after version and not \\'" ) ); + } + } + + /** + * Test ID:
ibm-not-wf-P24-ibm24n06.xml+ * Test URI:
not-wf/P24/ibm24n06.xml+ * Comment:
Tests VersionInfo with the wrong key word "Version".+ * Sections:
2.8+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P24_ibm24n06xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P24/ibm24n06.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests VersionInfo with the wrong key word \"Version\"." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "expected v in version and not V" ) ); + } + } + + /** + * Test ID:
ibm-not-wf-P24-ibm24n07.xml+ * Test URI:
not-wf/P24/ibm24n07.xml+ * Comment:
Tests VersionInfo with the wrong key word "versioN".+ * Sections:
2.8+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P24_ibm24n07xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P24/ibm24n07.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests VersionInfo with the wrong key word \"versioN\"." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "expected n in version and not N" ) ); + } + } + + /** + * Test ID:
ibm-not-wf-P24-ibm24n08.xml+ * Test URI:
not-wf/P24/ibm24n08.xml+ * Comment:
Tests VersionInfo with mismatched quotes around the VersionNum. version = '1.0" is used as the VersionInfo.+ * Sections:
2.8+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P24_ibm24n08xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P24/ibm24n08.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests VersionInfo with mismatched quotes around the VersionNum. version = '1.0\" is used as the VersionInfo." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "ibm-not-wf-P24-ibm24n09.xml + * Test URI:
not-wf/P24/ibm24n09.xml+ * Comment:
Tests VersionInfo with mismatched quotes around the VersionNum. The closing bracket for the VersionNum is missing.+ * Sections:
2.8+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P24_ibm24n09xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P24/ibm24n09.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests VersionInfo with mismatched quotes around the VersionNum. The closing bracket for the VersionNum is missing." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( " + +]> +