|
1 | 1 | /* |
2 | 2 | * Copyright (C) 2004, 2005 Joe Walnes. |
3 | | - * Copyright (C) 2006, 2007, 2008, 2013, 2018 XStream Committers. |
| 3 | + * Copyright (C) 2006, 2007, 2008, 2013, 2018, 2023 XStream Committers. |
4 | 4 | * All rights reserved. |
5 | 5 | * |
6 | 6 | * The software in this package is published under the terms of the BSD |
@@ -168,6 +168,24 @@ public void testThrowsForNullInXml1_1Mode() { |
168 | 168 | } |
169 | 169 | } |
170 | 170 |
|
| 171 | + public void testReplacesNullInXml1_0ReplacementMode() { |
| 172 | + writer = new PrettyPrintWriter(buffer, PrettyPrintWriter.XML_1_0_REPLACEMENT); |
| 173 | + writer.startNode("tag"); |
| 174 | + writer.setValue("\u0000"); |
| 175 | + writer.endNode(); |
| 176 | + |
| 177 | + assertXmlProducedIs("<tag>�</tag>"); |
| 178 | + } |
| 179 | + |
| 180 | + public void testReplacesNullInXml1_1ReplacementMode() { |
| 181 | + writer = new PrettyPrintWriter(buffer, PrettyPrintWriter.XML_1_1_REPLACEMENT); |
| 182 | + writer.startNode("tag"); |
| 183 | + writer.setValue("\u0000"); |
| 184 | + writer.endNode(); |
| 185 | + |
| 186 | + assertXmlProducedIs("<tag>�</tag>"); |
| 187 | + } |
| 188 | + |
171 | 189 | public void testSupportsOnlyValidControlCharactersInXml1_0Mode() { |
172 | 190 | writer = new PrettyPrintWriter(buffer, PrettyPrintWriter.XML_1_0); |
173 | 191 | writer.startNode("tag"); |
@@ -237,6 +255,65 @@ public void testSupportsOnlyValidControlCharactersInXml1_1Mode() { |
237 | 255 | + "˜™š›œžŸ</tag>"); |
238 | 256 | } |
239 | 257 |
|
| 258 | + public void testReplacesInvalidControlCharactersInXml1_0ReplacementMode() { |
| 259 | + writer = new PrettyPrintWriter(buffer, PrettyPrintWriter.XML_1_0_REPLACEMENT); |
| 260 | + writer.startNode("tag"); |
| 261 | + final String ctrl = "" |
| 262 | + + "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007" |
| 263 | + + "\u0008\u0009\n\u000b\u000c\r\u000e\u000f" |
| 264 | + + "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017" |
| 265 | + + "\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f" |
| 266 | + + "\u007f" |
| 267 | + + "\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087" |
| 268 | + + "\u0088\u0089\u008a\u008b\u008c\u008d\u008e\u008f" |
| 269 | + + "\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097" |
| 270 | + + "\u0098\u0099\u009a\u009b\u009c\u009d\u009e\u009f" |
| 271 | + + ""; |
| 272 | + for (int i = 0; i < ctrl.length(); i++) { |
| 273 | + final char c = ctrl.charAt(i); |
| 274 | + writer.setValue(new Character(c).toString()); |
| 275 | + } |
| 276 | + writer.endNode(); |
| 277 | + |
| 278 | + assertXmlProducedIs("<tag>��������" |
| 279 | + + "�\t\n��
��" |
| 280 | + + "��������" |
| 281 | + + "��������" |
| 282 | + + "" |
| 283 | + + "€‚ƒ„…†‡" |
| 284 | + + "ˆ‰Š‹ŒŽ" |
| 285 | + + "‘’“”•–—" |
| 286 | + + "˜™š›œžŸ</tag>"); } |
| 287 | + |
| 288 | + public void testReplacesInvalidControlCharactersInXml1_1ReplacementMode() { |
| 289 | + writer = new PrettyPrintWriter(buffer, PrettyPrintWriter.XML_1_1_REPLACEMENT); |
| 290 | + writer.startNode("tag"); |
| 291 | + final String ctrl = "" |
| 292 | + + "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007" |
| 293 | + + "\u0008\u0009\n\u000b\u000c\r\u000e\u000f" |
| 294 | + + "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017" |
| 295 | + + "\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f" |
| 296 | + + "\u007f" |
| 297 | + + "\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087" |
| 298 | + + "\u0088\u0089\u008a\u008b\u008c\u008d\u008e\u008f" |
| 299 | + + "\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097" |
| 300 | + + "\u0098\u0099\u009a\u009b\u009c\u009d\u009e\u009f" |
| 301 | + + ""; |
| 302 | + for (int i = 0; i < ctrl.length(); i++) { |
| 303 | + final char c = ctrl.charAt(i); |
| 304 | + writer.setValue(new Character(c).toString()); |
| 305 | + } |
| 306 | + writer.endNode(); |
| 307 | + assertXmlProducedIs("<tag>�" |
| 308 | + + "\t\n
" |
| 309 | + + "" |
| 310 | + + "" |
| 311 | + + "€‚ƒ„…†‡" |
| 312 | + + "ˆ‰Š‹ŒŽ" |
| 313 | + + "‘’“”•–—" |
| 314 | + + "˜™š›œžŸ</tag>"); |
| 315 | + } |
| 316 | + |
240 | 317 | public void testSupportsInvalidUnicodeCharacterslInQuirksMode() { |
241 | 318 | writer = new PrettyPrintWriter(buffer, PrettyPrintWriter.XML_QUIRKS); |
242 | 319 | writer.startNode("tag"); |
@@ -295,6 +372,30 @@ public void testThrowsForInvalidUnicodeCharacterslInXml1_1Mode() { |
295 | 372 | assertXmlProducedIs("<tag>퟿\ue000\ufffd</tag>"); |
296 | 373 | } |
297 | 374 |
|
| 375 | + public void testReplacesInvalidUnicodeCharactersInXml1_0ReplacementMode() { |
| 376 | + writer = new PrettyPrintWriter(buffer, PrettyPrintWriter.XML_1_0_REPLACEMENT); |
| 377 | + writer.startNode("tag"); |
| 378 | + final String ctrl = "\ud7ff\ud800\udfff\ue000\ufffd\ufffe\uffff"; |
| 379 | + for (int i = 0; i < ctrl.length(); i++) { |
| 380 | + final char c = ctrl.charAt(i); |
| 381 | + writer.setValue(new Character(c).toString()); |
| 382 | + } |
| 383 | + writer.endNode(); |
| 384 | + assertXmlProducedIs("<tag>퟿��\ue000\ufffd��</tag>"); |
| 385 | + } |
| 386 | + |
| 387 | + public void testReplacesInvalidUnicodeCharactersInXml1_1ReplacementMode() { |
| 388 | + writer = new PrettyPrintWriter(buffer, PrettyPrintWriter.XML_1_1_REPLACEMENT); |
| 389 | + writer.startNode("tag"); |
| 390 | + final String ctrl = "\ud7ff\ud800\udfff\ue000\ufffd\ufffe\uffff"; |
| 391 | + for (int i = 0; i < ctrl.length(); i++) { |
| 392 | + final char c = ctrl.charAt(i); |
| 393 | + writer.setValue(new Character(c).toString()); |
| 394 | + } |
| 395 | + writer.endNode(); |
| 396 | + assertXmlProducedIs("<tag>퟿��\ue000\ufffd��</tag>"); |
| 397 | + } |
| 398 | + |
298 | 399 | private String replace(final String in, final char what, final String with) { |
299 | 400 | final int pos = in.indexOf(what); |
300 | 401 | if (pos == -1) { |
|
0 commit comments