1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
37
38
39
40 @SuppressWarnings("deprecation")
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
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
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
73 public void testWrite_byteArrayToOutputStream_nullStream() throws Exception {
74 assertThrows(NullPointerException.class, () -> IOUtils.write(inData, (OutputStream) null));
75 }
76
77 @Test
78 public void testWrite_byteArrayToWriter() throws Exception {
79 final ByteArrayOutputStream baout = new ByteArrayOutputStream();
80 @SuppressWarnings("resource")
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
93 public void testWrite_byteArrayToWriter_Encoding() throws Exception {
94 final ByteArrayOutputStream baout = new ByteArrayOutputStream();
95 @SuppressWarnings("resource")
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
109 public void testWrite_byteArrayToWriter_Encoding_nullData() throws Exception {
110 final ByteArrayOutputStream baout = new ByteArrayOutputStream();
111 @SuppressWarnings("resource")
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
123 public void testWrite_byteArrayToWriter_Encoding_nullEncoding() throws Exception {
124 final ByteArrayOutputStream baout = new ByteArrayOutputStream();
125 @SuppressWarnings("resource")
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
138 public void testWrite_byteArrayToWriter_Encoding_nullWriter() throws Exception {
139 assertThrows(NullPointerException.class, () -> IOUtils.write(inData, null, "UTF8"));
140 }
141
142 @Test
143 public void testWrite_byteArrayToWriter_nullData() throws Exception {
144 final ByteArrayOutputStream baout = new ByteArrayOutputStream();
145 @SuppressWarnings("resource")
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
157 public void testWrite_byteArrayToWriter_nullWriter() throws Exception {
158 assertThrows(NullPointerException.class, () -> IOUtils.write(inData, (Writer) null));
159 }
160
161 @Test
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
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
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
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
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
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
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
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")
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
261 public void testWrite_charArrayToWriter_Encoding_nullData() throws Exception {
262 final ByteArrayOutputStream baout = new ByteArrayOutputStream();
263 @SuppressWarnings("resource")
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
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
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
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
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
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
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
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
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
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")
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
380 public void testWrite_charSequenceToWriter_Encoding_nullData() throws Exception {
381 final ByteArrayOutputStream baout = new ByteArrayOutputStream();
382 @SuppressWarnings("resource")
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
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
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
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
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
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
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
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
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
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")
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
499 public void testWrite_stringToWriter_Encoding_nullData() throws Exception {
500 final ByteArrayOutputStream baout = new ByteArrayOutputStream();
501 @SuppressWarnings("resource")
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
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
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
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
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, StandardCharsets.US_ASCII.name());
562 out.off();
563 out.flush();
564
565 assertEquals(0, baout.size(), "Sizes differ");
566 }
567
568 @Test
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
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, StandardCharsets.US_ASCII.name());
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
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, StandardCharsets.US_ASCII.name()));
609 }
610
611 @Test
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
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
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
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")
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
669 public void testWriteLines_Writer_nullData() throws Exception {
670 final ByteArrayOutputStream baout = new ByteArrayOutputStream();
671 @SuppressWarnings("resource")
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
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")
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
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 }