1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.commons.io; 18 19 import static org.junit.jupiter.api.Assertions.assertArrayEquals; 20 import static org.junit.jupiter.api.Assertions.assertEquals; 21 import static org.junit.jupiter.api.Assertions.assertThrows; 22 23 import java.io.OutputStream; 24 import java.io.OutputStreamWriter; 25 import java.io.Writer; 26 import java.nio.charset.StandardCharsets; 27 import java.util.Arrays; 28 import java.util.List; 29 30 import org.apache.commons.io.output.ByteArrayOutputStream; 31 import org.apache.commons.io.test.TestUtils; 32 import org.apache.commons.io.test.ThrowOnFlushAndCloseOutputStream; 33 import org.junit.jupiter.api.Test; 34 35 /** 36 * Tests IOUtils write methods. 37 * 38 * @see IOUtils 39 */ 40 @SuppressWarnings("deprecation") // includes tests for deprecated methods 41 public class IOUtilsWriteTest { 42 43 private static final int FILE_SIZE = 1024 * 4 + 1; 44 45 private final byte[] inData = TestUtils.generateTestData(FILE_SIZE); 46 47 @Test testWrite_byteArrayToOutputStream()48 public void testWrite_byteArrayToOutputStream() throws Exception { 49 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 50 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 51 52 IOUtils.write(inData, out); 53 out.off(); 54 out.flush(); 55 56 assertEquals(inData.length, baout.size(), "Sizes differ"); 57 assertArrayEquals(inData, baout.toByteArray(), "Content differs"); 58 } 59 60 @Test testWrite_byteArrayToOutputStream_nullData()61 public void testWrite_byteArrayToOutputStream_nullData() throws Exception { 62 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 63 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 64 65 IOUtils.write((byte[]) null, out); 66 out.off(); 67 out.flush(); 68 69 assertEquals(0, baout.size(), "Sizes differ"); 70 } 71 72 @Test testWrite_byteArrayToOutputStream_nullStream()73 public void testWrite_byteArrayToOutputStream_nullStream() throws Exception { 74 assertThrows(NullPointerException.class, () -> IOUtils.write(inData, (OutputStream) null)); 75 } 76 77 @Test testWrite_byteArrayToWriter()78 public void testWrite_byteArrayToWriter() throws Exception { 79 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 80 @SuppressWarnings("resource") // deliberately not closed 81 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 82 final Writer writer = new OutputStreamWriter(baout, StandardCharsets.US_ASCII); 83 84 IOUtils.write(inData, writer); 85 out.off(); 86 writer.flush(); 87 88 assertEquals(inData.length, baout.size(), "Sizes differ"); 89 assertArrayEquals(inData, baout.toByteArray(), "Content differs"); 90 } 91 92 @Test testWrite_byteArrayToWriter_Encoding()93 public void testWrite_byteArrayToWriter_Encoding() throws Exception { 94 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 95 @SuppressWarnings("resource") // deliberately not closed 96 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 97 final Writer writer = new OutputStreamWriter(baout, StandardCharsets.US_ASCII); 98 99 IOUtils.write(inData, writer, "UTF8"); 100 out.off(); 101 writer.flush(); 102 103 byte[] bytes = baout.toByteArray(); 104 bytes = new String(bytes, StandardCharsets.UTF_8).getBytes(StandardCharsets.US_ASCII); 105 assertArrayEquals(inData, bytes, "Content differs"); 106 } 107 108 @Test testWrite_byteArrayToWriter_Encoding_nullData()109 public void testWrite_byteArrayToWriter_Encoding_nullData() throws Exception { 110 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 111 @SuppressWarnings("resource") // deliberately not closed 112 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 113 final Writer writer = new OutputStreamWriter(baout, StandardCharsets.US_ASCII); 114 115 IOUtils.write(null, writer, "UTF8"); 116 out.off(); 117 writer.flush(); 118 119 assertEquals(0, baout.size(), "Sizes differ"); 120 } 121 122 @Test testWrite_byteArrayToWriter_Encoding_nullEncoding()123 public void testWrite_byteArrayToWriter_Encoding_nullEncoding() throws Exception { 124 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 125 @SuppressWarnings("resource") // deliberately not closed 126 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 127 final Writer writer = new OutputStreamWriter(baout, StandardCharsets.US_ASCII); 128 129 IOUtils.write(inData, writer, (String) null); 130 out.off(); 131 writer.flush(); 132 133 assertEquals(inData.length, baout.size(), "Sizes differ"); 134 assertArrayEquals(inData, baout.toByteArray(), "Content differs"); 135 } 136 137 @Test testWrite_byteArrayToWriter_Encoding_nullWriter()138 public void testWrite_byteArrayToWriter_Encoding_nullWriter() throws Exception { 139 assertThrows(NullPointerException.class, () -> IOUtils.write(inData, null, "UTF8")); 140 } 141 142 @Test testWrite_byteArrayToWriter_nullData()143 public void testWrite_byteArrayToWriter_nullData() throws Exception { 144 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 145 @SuppressWarnings("resource") // deliberately not closed 146 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 147 final Writer writer = new OutputStreamWriter(baout, StandardCharsets.US_ASCII); 148 149 IOUtils.write((byte[]) null, writer); 150 out.off(); 151 writer.flush(); 152 153 assertEquals(0, baout.size(), "Sizes differ"); 154 } 155 156 @Test testWrite_byteArrayToWriter_nullWriter()157 public void testWrite_byteArrayToWriter_nullWriter() throws Exception { 158 assertThrows(NullPointerException.class, () -> IOUtils.write(inData, (Writer) null)); 159 } 160 161 @Test testWrite_charArrayToOutputStream()162 public void testWrite_charArrayToOutputStream() throws Exception { 163 final String str = new String(inData, StandardCharsets.US_ASCII); 164 165 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 166 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 167 168 IOUtils.write(str.toCharArray(), out); 169 out.off(); 170 out.flush(); 171 172 assertEquals(inData.length, baout.size(), "Sizes differ"); 173 assertArrayEquals(inData, baout.toByteArray(), "Content differs"); 174 } 175 176 @Test testWrite_charArrayToOutputStream_Encoding()177 public void testWrite_charArrayToOutputStream_Encoding() throws Exception { 178 final String str = new String(inData, StandardCharsets.US_ASCII); 179 180 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 181 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 182 183 IOUtils.write(str.toCharArray(), out, "UTF16"); 184 out.off(); 185 out.flush(); 186 187 byte[] bytes = baout.toByteArray(); 188 bytes = new String(bytes, StandardCharsets.UTF_16).getBytes(StandardCharsets.US_ASCII); 189 assertArrayEquals(inData, bytes, "Content differs"); 190 } 191 192 @Test testWrite_charArrayToOutputStream_Encoding_nullData()193 public void testWrite_charArrayToOutputStream_Encoding_nullData() throws Exception { 194 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 195 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 196 197 IOUtils.write((char[]) null, out); 198 out.off(); 199 out.flush(); 200 201 assertEquals(0, baout.size(), "Sizes differ"); 202 } 203 204 @Test testWrite_charArrayToOutputStream_Encoding_nullStream()205 public void testWrite_charArrayToOutputStream_Encoding_nullStream() throws Exception { 206 final String str = new String(inData, StandardCharsets.US_ASCII); 207 assertThrows(NullPointerException.class, () -> IOUtils.write(str.toCharArray(), (OutputStream) null)); 208 } 209 210 @Test testWrite_charArrayToOutputStream_nullData()211 public void testWrite_charArrayToOutputStream_nullData() throws Exception { 212 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 213 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 214 215 IOUtils.write((char[]) null, out); 216 out.off(); 217 out.flush(); 218 219 assertEquals(0, baout.size(), "Sizes differ"); 220 } 221 222 @Test testWrite_charArrayToOutputStream_nullEncoding()223 public void testWrite_charArrayToOutputStream_nullEncoding() throws Exception { 224 final String str = new String(inData, StandardCharsets.US_ASCII); 225 226 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 227 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 228 229 IOUtils.write(str.toCharArray(), out, (String) null); 230 out.off(); 231 out.flush(); 232 233 assertEquals(inData.length, baout.size(), "Sizes differ"); 234 assertArrayEquals(inData, baout.toByteArray(), "Content differs"); 235 } 236 237 @Test testWrite_charArrayToOutputStream_nullStream()238 public void testWrite_charArrayToOutputStream_nullStream() throws Exception { 239 final String str = new String(inData, StandardCharsets.US_ASCII); 240 assertThrows(NullPointerException.class, () -> IOUtils.write(str.toCharArray(), (OutputStream) null)); 241 } 242 243 @Test testWrite_charArrayToWriter()244 public void testWrite_charArrayToWriter() throws Exception { 245 final String str = new String(inData, StandardCharsets.US_ASCII); 246 247 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 248 @SuppressWarnings("resource") // deliberately not closed 249 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 250 final Writer writer = new OutputStreamWriter(baout, StandardCharsets.US_ASCII); 251 252 IOUtils.write(str.toCharArray(), writer); 253 out.off(); 254 writer.flush(); 255 256 assertEquals(inData.length, baout.size(), "Sizes differ"); 257 assertArrayEquals(inData, baout.toByteArray(), "Content differs"); 258 } 259 260 @Test testWrite_charArrayToWriter_Encoding_nullData()261 public void testWrite_charArrayToWriter_Encoding_nullData() throws Exception { 262 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 263 @SuppressWarnings("resource") // deliberately not closed 264 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 265 final Writer writer = new OutputStreamWriter(baout, StandardCharsets.US_ASCII); 266 267 IOUtils.write((char[]) null, writer); 268 out.off(); 269 writer.flush(); 270 271 assertEquals(0, baout.size(), "Sizes differ"); 272 } 273 274 @Test testWrite_charArrayToWriter_Encoding_nullStream()275 public void testWrite_charArrayToWriter_Encoding_nullStream() throws Exception { 276 final String str = new String(inData, StandardCharsets.US_ASCII); 277 assertThrows(NullPointerException.class, () -> IOUtils.write(str.toCharArray(), (Writer) null)); 278 } 279 280 @Test testWrite_charSequenceToOutputStream()281 public void testWrite_charSequenceToOutputStream() throws Exception { 282 final CharSequence csq = new StringBuilder(new String(inData, StandardCharsets.US_ASCII)); 283 284 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 285 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 286 287 IOUtils.write(csq, out); 288 out.off(); 289 out.flush(); 290 291 assertEquals(inData.length, baout.size(), "Sizes differ"); 292 assertArrayEquals(inData, baout.toByteArray(), "Content differs"); 293 } 294 295 @Test testWrite_charSequenceToOutputStream_Encoding()296 public void testWrite_charSequenceToOutputStream_Encoding() throws Exception { 297 final CharSequence csq = new StringBuilder(new String(inData, StandardCharsets.US_ASCII)); 298 299 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 300 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 301 302 IOUtils.write(csq, out, "UTF16"); 303 out.off(); 304 out.flush(); 305 306 byte[] bytes = baout.toByteArray(); 307 bytes = new String(bytes, StandardCharsets.UTF_16).getBytes(StandardCharsets.US_ASCII); 308 assertArrayEquals(inData, bytes, "Content differs"); 309 } 310 311 @Test testWrite_charSequenceToOutputStream_Encoding_nullData()312 public void testWrite_charSequenceToOutputStream_Encoding_nullData() throws Exception { 313 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 314 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 315 316 IOUtils.write((CharSequence) null, out); 317 out.off(); 318 out.flush(); 319 320 assertEquals(0, baout.size(), "Sizes differ"); 321 } 322 323 @Test testWrite_charSequenceToOutputStream_Encoding_nullStream()324 public void testWrite_charSequenceToOutputStream_Encoding_nullStream() throws Exception { 325 final CharSequence csq = new StringBuilder(new String(inData, StandardCharsets.US_ASCII)); 326 assertThrows(NullPointerException.class, () -> IOUtils.write(csq, (OutputStream) null)); 327 } 328 329 @Test testWrite_charSequenceToOutputStream_nullData()330 public void testWrite_charSequenceToOutputStream_nullData() throws Exception { 331 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 332 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 333 334 IOUtils.write((CharSequence) null, out); 335 out.off(); 336 out.flush(); 337 338 assertEquals(0, baout.size(), "Sizes differ"); 339 } 340 341 @Test testWrite_charSequenceToOutputStream_nullEncoding()342 public void testWrite_charSequenceToOutputStream_nullEncoding() throws Exception { 343 final CharSequence csq = new StringBuilder(new String(inData, StandardCharsets.US_ASCII)); 344 345 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 346 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 347 348 IOUtils.write(csq, out, (String) null); 349 out.off(); 350 out.flush(); 351 352 assertEquals(inData.length, baout.size(), "Sizes differ"); 353 assertArrayEquals(inData, baout.toByteArray(), "Content differs"); 354 } 355 356 @Test testWrite_charSequenceToOutputStream_nullStream()357 public void testWrite_charSequenceToOutputStream_nullStream() throws Exception { 358 final CharSequence csq = new StringBuilder(new String(inData, StandardCharsets.US_ASCII)); 359 assertThrows(NullPointerException.class, () -> IOUtils.write(csq, (OutputStream) null)); 360 } 361 362 @Test testWrite_charSequenceToWriter()363 public void testWrite_charSequenceToWriter() throws Exception { 364 final CharSequence csq = new StringBuilder(new String(inData, StandardCharsets.US_ASCII)); 365 366 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 367 @SuppressWarnings("resource") // deliberately not closed 368 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 369 final Writer writer = new OutputStreamWriter(baout, StandardCharsets.US_ASCII); 370 371 IOUtils.write(csq, writer); 372 out.off(); 373 writer.flush(); 374 375 assertEquals(inData.length, baout.size(), "Sizes differ"); 376 assertArrayEquals(inData, baout.toByteArray(), "Content differs"); 377 } 378 379 @Test testWrite_charSequenceToWriter_Encoding_nullData()380 public void testWrite_charSequenceToWriter_Encoding_nullData() throws Exception { 381 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 382 @SuppressWarnings("resource") // deliberately not closed 383 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 384 final Writer writer = new OutputStreamWriter(baout, StandardCharsets.US_ASCII); 385 386 IOUtils.write((CharSequence) null, writer); 387 out.off(); 388 writer.flush(); 389 390 assertEquals(0, baout.size(), "Sizes differ"); 391 } 392 393 @Test testWrite_charSequenceToWriter_Encoding_nullStream()394 public void testWrite_charSequenceToWriter_Encoding_nullStream() throws Exception { 395 final CharSequence csq = new StringBuilder(new String(inData, StandardCharsets.US_ASCII)); 396 assertThrows(NullPointerException.class, () -> IOUtils.write(csq, (Writer) null)); 397 } 398 399 @Test testWrite_stringToOutputStream()400 public void testWrite_stringToOutputStream() throws Exception { 401 final String str = new String(inData, StandardCharsets.US_ASCII); 402 403 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 404 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 405 406 IOUtils.write(str, out); 407 out.off(); 408 out.flush(); 409 410 assertEquals(inData.length, baout.size(), "Sizes differ"); 411 assertArrayEquals(inData, baout.toByteArray(), "Content differs"); 412 } 413 414 @Test testWrite_stringToOutputStream_Encoding()415 public void testWrite_stringToOutputStream_Encoding() throws Exception { 416 final String str = new String(inData, StandardCharsets.US_ASCII); 417 418 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 419 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 420 421 IOUtils.write(str, out, "UTF16"); 422 out.off(); 423 out.flush(); 424 425 byte[] bytes = baout.toByteArray(); 426 bytes = new String(bytes, StandardCharsets.UTF_16).getBytes(StandardCharsets.US_ASCII); 427 assertArrayEquals(inData, bytes, "Content differs"); 428 } 429 430 @Test testWrite_stringToOutputStream_Encoding_nullData()431 public void testWrite_stringToOutputStream_Encoding_nullData() throws Exception { 432 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 433 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 434 435 IOUtils.write((String) null, out); 436 out.off(); 437 out.flush(); 438 439 assertEquals(0, baout.size(), "Sizes differ"); 440 } 441 442 @Test testWrite_stringToOutputStream_Encoding_nullStream()443 public void testWrite_stringToOutputStream_Encoding_nullStream() throws Exception { 444 final String str = new String(inData, StandardCharsets.US_ASCII); 445 assertThrows(NullPointerException.class, () -> IOUtils.write(str, (OutputStream) null)); 446 } 447 448 @Test testWrite_stringToOutputStream_nullData()449 public void testWrite_stringToOutputStream_nullData() throws Exception { 450 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 451 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 452 453 IOUtils.write((String) null, out); 454 out.off(); 455 out.flush(); 456 457 assertEquals(0, baout.size(), "Sizes differ"); 458 } 459 460 @Test testWrite_stringToOutputStream_nullEncoding()461 public void testWrite_stringToOutputStream_nullEncoding() throws Exception { 462 final String str = new String(inData, StandardCharsets.US_ASCII); 463 464 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 465 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 466 467 IOUtils.write(str, out, (String) null); 468 out.off(); 469 out.flush(); 470 471 assertEquals(inData.length, baout.size(), "Sizes differ"); 472 assertArrayEquals(inData, baout.toByteArray(), "Content differs"); 473 } 474 475 @Test testWrite_stringToOutputStream_nullStream()476 public void testWrite_stringToOutputStream_nullStream() throws Exception { 477 final String str = new String(inData, StandardCharsets.US_ASCII); 478 assertThrows(NullPointerException.class, () -> IOUtils.write(str, (OutputStream) null)); 479 } 480 481 @Test testWrite_stringToWriter()482 public void testWrite_stringToWriter() throws Exception { 483 final String str = new String(inData, StandardCharsets.US_ASCII); 484 485 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 486 @SuppressWarnings("resource") // deliberately not closed 487 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 488 final Writer writer = new OutputStreamWriter(baout, StandardCharsets.US_ASCII); 489 490 IOUtils.write(str, writer); 491 out.off(); 492 writer.flush(); 493 494 assertEquals(inData.length, baout.size(), "Sizes differ"); 495 assertArrayEquals(inData, baout.toByteArray(), "Content differs"); 496 } 497 498 @Test testWrite_stringToWriter_Encoding_nullData()499 public void testWrite_stringToWriter_Encoding_nullData() throws Exception { 500 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 501 @SuppressWarnings("resource") // deliberately not closed 502 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 503 final Writer writer = new OutputStreamWriter(baout, StandardCharsets.US_ASCII); 504 505 IOUtils.write((String) null, writer); 506 out.off(); 507 writer.flush(); 508 509 assertEquals(0, baout.size(), "Sizes differ"); 510 } 511 512 @Test testWrite_stringToWriter_Encoding_nullStream()513 public void testWrite_stringToWriter_Encoding_nullStream() throws Exception { 514 final String str = new String(inData, StandardCharsets.US_ASCII); 515 assertThrows(NullPointerException.class, () -> IOUtils.write(str, (Writer) null)); 516 } 517 518 @Test testWriteLines_OutputStream()519 public void testWriteLines_OutputStream() throws Exception { 520 final Object[] data = { 521 "hello", new StringBuffer("world"), "", "this is", null, "some text"}; 522 final List<Object> list = Arrays.asList(data); 523 524 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 525 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, false, true); 526 527 IOUtils.writeLines(list, "*", out); 528 529 out.off(); 530 out.flush(); 531 532 final String expected = "hello*world**this is**some text*"; 533 final String actual = baout.toString(); 534 assertEquals(expected, actual); 535 } 536 537 @Test testWriteLines_OutputStream_Encoding()538 public void testWriteLines_OutputStream_Encoding() throws Exception { 539 final Object[] data = { 540 "hello\u8364", new StringBuffer("world"), "", "this is", null, "some text"}; 541 final List<Object> list = Arrays.asList(data); 542 543 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 544 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, false, true); 545 546 IOUtils.writeLines(list, "*", out, StandardCharsets.UTF_8.name()); 547 548 out.off(); 549 out.flush(); 550 551 final String expected = "hello\u8364*world**this is**some text*"; 552 final String actual = baout.toString(StandardCharsets.UTF_8.name()); 553 assertEquals(expected, actual); 554 } 555 556 @Test testWriteLines_OutputStream_Encoding_nullData()557 public void testWriteLines_OutputStream_Encoding_nullData() throws Exception { 558 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 559 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, false, true); 560 561 IOUtils.writeLines(null, "*", out, "US-ASCII"); 562 out.off(); 563 out.flush(); 564 565 assertEquals(0, baout.size(), "Sizes differ"); 566 } 567 568 @Test testWriteLines_OutputStream_Encoding_nullEncoding()569 public void testWriteLines_OutputStream_Encoding_nullEncoding() throws Exception { 570 final Object[] data = { 571 "hello", new StringBuffer("world"), "", "this is", null, "some text"}; 572 final List<Object> list = Arrays.asList(data); 573 574 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 575 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, false, true); 576 577 IOUtils.writeLines(list, "*", out, (String) null); 578 579 out.off(); 580 out.flush(); 581 582 final String expected = "hello*world**this is**some text*"; 583 final String actual = baout.toString(); 584 assertEquals(expected, actual); 585 } 586 587 @Test testWriteLines_OutputStream_Encoding_nullSeparator()588 public void testWriteLines_OutputStream_Encoding_nullSeparator() throws Exception { 589 final Object[] data = {"hello", "world"}; 590 final List<Object> list = Arrays.asList(data); 591 592 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 593 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, false, true); 594 595 IOUtils.writeLines(list, null, out, "US-ASCII"); 596 out.off(); 597 out.flush(); 598 599 final String expected = "hello" + System.lineSeparator() + "world" + System.lineSeparator(); 600 final String actual = baout.toString(); 601 assertEquals(expected, actual); 602 } 603 604 @Test testWriteLines_OutputStream_Encoding_nullStream()605 public void testWriteLines_OutputStream_Encoding_nullStream() throws Exception { 606 final Object[] data = {"hello", "world"}; 607 final List<Object> list = Arrays.asList(data); 608 assertThrows(NullPointerException.class, () -> IOUtils.writeLines(list, "*", null, "US-ASCII")); 609 } 610 611 @Test testWriteLines_OutputStream_nullData()612 public void testWriteLines_OutputStream_nullData() throws Exception { 613 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 614 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, false, true); 615 616 IOUtils.writeLines(null, "*", out); 617 out.off(); 618 out.flush(); 619 620 assertEquals(0, baout.size(), "Sizes differ"); 621 } 622 623 @Test testWriteLines_OutputStream_nullSeparator()624 public void testWriteLines_OutputStream_nullSeparator() throws Exception { 625 final Object[] data = {"hello", "world"}; 626 final List<Object> list = Arrays.asList(data); 627 628 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 629 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, false, true); 630 631 IOUtils.writeLines(list, null, out); 632 out.off(); 633 out.flush(); 634 635 final String expected = "hello" + System.lineSeparator() + "world" + System.lineSeparator(); 636 final String actual = baout.toString(); 637 assertEquals(expected, actual); 638 } 639 640 @Test testWriteLines_OutputStream_nullStream()641 public void testWriteLines_OutputStream_nullStream() throws Exception { 642 final Object[] data = {"hello", "world"}; 643 final List<Object> list = Arrays.asList(data); 644 assertThrows(NullPointerException.class, () -> IOUtils.writeLines(list, "*", (OutputStream) null)); 645 } 646 647 @Test testWriteLines_Writer()648 public void testWriteLines_Writer() throws Exception { 649 final Object[] data = { 650 "hello", new StringBuffer("world"), "", "this is", null, "some text"}; 651 final List<Object> list = Arrays.asList(data); 652 653 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 654 @SuppressWarnings("resource") // deliberately not closed 655 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 656 final Writer writer = new OutputStreamWriter(baout, StandardCharsets.US_ASCII); 657 658 IOUtils.writeLines(list, "*", writer); 659 660 out.off(); 661 writer.flush(); 662 663 final String expected = "hello*world**this is**some text*"; 664 final String actual = baout.toString(); 665 assertEquals(expected, actual); 666 } 667 668 @Test testWriteLines_Writer_nullData()669 public void testWriteLines_Writer_nullData() throws Exception { 670 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 671 @SuppressWarnings("resource") // deliberately not closed 672 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 673 final Writer writer = new OutputStreamWriter(baout, StandardCharsets.US_ASCII); 674 675 IOUtils.writeLines(null, "*", writer); 676 out.off(); 677 writer.flush(); 678 679 assertEquals(0, baout.size(), "Sizes differ"); 680 } 681 682 @Test testWriteLines_Writer_nullSeparator()683 public void testWriteLines_Writer_nullSeparator() throws Exception { 684 final Object[] data = {"hello", "world"}; 685 final List<Object> list = Arrays.asList(data); 686 687 final ByteArrayOutputStream baout = new ByteArrayOutputStream(); 688 @SuppressWarnings("resource") // deliberately not closed 689 final ThrowOnFlushAndCloseOutputStream out = new ThrowOnFlushAndCloseOutputStream(baout, true, true); 690 final Writer writer = new OutputStreamWriter(baout, StandardCharsets.US_ASCII); 691 692 IOUtils.writeLines(list, null, writer); 693 out.off(); 694 writer.flush(); 695 696 final String expected = "hello" + System.lineSeparator() + "world" + System.lineSeparator(); 697 final String actual = baout.toString(); 698 assertEquals(expected, actual); 699 } 700 701 @Test testWriteLines_Writer_nullStream()702 public void testWriteLines_Writer_nullStream() throws Exception { 703 final Object[] data = {"hello", "world"}; 704 final List<Object> list = Arrays.asList(data); 705 assertThrows(NullPointerException.class, () -> IOUtils.writeLines(list, "*", (Writer) null)); 706 } 707 708 } 709