|
17 | 17 | */
|
18 | 18 |
|
19 | 19 | import static org.junit.Assert.assertEquals;
|
| 20 | +import static org.junit.Assert.assertTrue; |
| 21 | +import static org.junit.Assert.fail; |
20 | 22 |
|
21 | 23 | import java.io.IOException;
|
22 | 24 | import java.io.StringReader;
|
@@ -156,6 +158,133 @@ public void testUnicodeEntities()
|
156 | 158 | assertEquals( XmlPullParser.END_TAG, parser.nextToken() );
|
157 | 159 | }
|
158 | 160 |
|
| 161 | + @Test |
| 162 | + public void testInvalidCharacterReferenceHexa() |
| 163 | + throws Exception |
| 164 | + { |
| 165 | + MXParser parser = new MXParser(); |
| 166 | + String input = "<root>�</root>"; |
| 167 | + parser.setInput( new StringReader( input ) ); |
| 168 | + |
| 169 | + try |
| 170 | + { |
| 171 | + assertEquals( XmlPullParser.START_TAG, parser.nextToken() ); |
| 172 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 173 | + fail( "Should fail since � is an illegal character reference" ); |
| 174 | + } |
| 175 | + catch ( XmlPullParserException e ) |
| 176 | + { |
| 177 | + assertTrue( e.getMessage().contains( "character reference (with hex value 110000) is invalid" ) ); |
| 178 | + } |
| 179 | + } |
| 180 | + |
| 181 | + @Test |
| 182 | + public void testValidCharacterReferenceHexa() |
| 183 | + throws Exception |
| 184 | + { |
| 185 | + MXParser parser = new MXParser(); |
| 186 | + String input = "<root>	

 Ȁ퟿ᄁ�𐀀􏿽</root>"; |
| 187 | + parser.setInput( new StringReader( input ) ); |
| 188 | + |
| 189 | + try |
| 190 | + { |
| 191 | + assertEquals( XmlPullParser.START_TAG, parser.nextToken() ); |
| 192 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 193 | + assertEquals( 0x9, parser.getText().codePointAt( 0 ) ); |
| 194 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 195 | + assertEquals( 0xA, parser.getText().codePointAt( 0 ) ); |
| 196 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 197 | + assertEquals( 0xD, parser.getText().codePointAt( 0 ) ); |
| 198 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 199 | + assertEquals( 0x20, parser.getText().codePointAt( 0 ) ); |
| 200 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 201 | + assertEquals( 0x200, parser.getText().codePointAt( 0 ) ); |
| 202 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 203 | + assertEquals( 0xD7FF, parser.getText().codePointAt( 0 ) ); |
| 204 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 205 | + assertEquals( 0xE000, parser.getText().codePointAt( 0 ) ); |
| 206 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 207 | + assertEquals( 0xFFA2, parser.getText().codePointAt( 0 ) ); |
| 208 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 209 | + assertEquals( 0xFFFD, parser.getText().codePointAt( 0 ) ); |
| 210 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 211 | + assertEquals( 0x10000, parser.getText().codePointAt( 0 ) ); |
| 212 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 213 | + assertEquals( 0x10FFFD, parser.getText().codePointAt( 0 ) ); |
| 214 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 215 | + assertEquals( 0x10FFFF, parser.getText().codePointAt( 0 ) ); |
| 216 | + assertEquals( XmlPullParser.END_TAG, parser.nextToken() ); |
| 217 | + } |
| 218 | + catch ( XmlPullParserException e ) |
| 219 | + { |
| 220 | + fail( "Should success since the input represents all legal character references" ); |
| 221 | + } |
| 222 | + } |
| 223 | + |
| 224 | + @Test |
| 225 | + public void testInvalidCharacterReferenceDecimal() |
| 226 | + throws Exception |
| 227 | + { |
| 228 | + MXParser parser = new MXParser(); |
| 229 | + String input = "<root>�</root>"; |
| 230 | + parser.setInput( new StringReader( input ) ); |
| 231 | + |
| 232 | + try |
| 233 | + { |
| 234 | + assertEquals( XmlPullParser.START_TAG, parser.nextToken() ); |
| 235 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 236 | + fail( "Should fail since � is an illegal character reference" ); |
| 237 | + } |
| 238 | + catch ( XmlPullParserException e ) |
| 239 | + { |
| 240 | + assertTrue( e.getMessage().contains( "character reference (with decimal value 1114112) is invalid" ) ); |
| 241 | + } |
| 242 | + } |
| 243 | + |
| 244 | + @Test |
| 245 | + public void testValidCharacterReferenceDecimal() |
| 246 | + throws Exception |
| 247 | + { |
| 248 | + MXParser parser = new MXParser(); |
| 249 | + String input = |
| 250 | + "<root>	  Ȁ퟿ᄁ�𐀀􏿽</root>"; |
| 251 | + parser.setInput( new StringReader( input ) ); |
| 252 | + |
| 253 | + try |
| 254 | + { |
| 255 | + assertEquals( XmlPullParser.START_TAG, parser.nextToken() ); |
| 256 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 257 | + assertEquals( 9, parser.getText().codePointAt( 0 ) ); |
| 258 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 259 | + assertEquals( 10, parser.getText().codePointAt( 0 ) ); |
| 260 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 261 | + assertEquals( 13, parser.getText().codePointAt( 0 ) ); |
| 262 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 263 | + assertEquals( 32, parser.getText().codePointAt( 0 ) ); |
| 264 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 265 | + assertEquals( 512, parser.getText().codePointAt( 0 ) ); |
| 266 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 267 | + assertEquals( 55295, parser.getText().codePointAt( 0 ) ); |
| 268 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 269 | + assertEquals( 57344, parser.getText().codePointAt( 0 ) ); |
| 270 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 271 | + assertEquals( 65442, parser.getText().codePointAt( 0 ) ); |
| 272 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 273 | + assertEquals( 65533, parser.getText().codePointAt( 0 ) ); |
| 274 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 275 | + assertEquals( 65536, parser.getText().codePointAt( 0 ) ); |
| 276 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 277 | + assertEquals( 1114109, parser.getText().codePointAt( 0 ) ); |
| 278 | + assertEquals( XmlPullParser.ENTITY_REF, parser.nextToken() ); |
| 279 | + assertEquals( 1114111, parser.getText().codePointAt( 0 ) ); |
| 280 | + assertEquals( XmlPullParser.END_TAG, parser.nextToken() ); |
| 281 | + } |
| 282 | + catch ( XmlPullParserException e ) |
| 283 | + { |
| 284 | + fail( "Should success since the input represents all legal character references" ); |
| 285 | + } |
| 286 | + } |
| 287 | + |
159 | 288 | @Test
|
160 | 289 | public void testProcessingInstruction()
|
161 | 290 | throws Exception
|
|
0 commit comments