View Javadoc
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.juneau.commons.io;
18  
19  import static org.junit.jupiter.api.Assertions.*;
20  
21  import java.io.*;
22  
23  import org.apache.juneau.*;
24  import org.junit.jupiter.api.*;
25  
26  class NoCloseWriter_Test extends TestBase {
27  
28  	//====================================================================================================
29  	// Basic write tests
30  	//====================================================================================================
31  	@Test void a01_writeInt() throws IOException {
32  		var sw = new StringWriter();
33  		var wrapper = new NoCloseWriter(sw);
34  		wrapper.write(65); // 'A'
35  		wrapper.write(66); // 'B'
36  		assertEquals("AB", sw.toString());
37  	}
38  
39  	@Test void a02_writeString() throws IOException {
40  		var sw = new StringWriter();
41  		var wrapper = new NoCloseWriter(sw);
42  		wrapper.write("test");
43  		assertEquals("test", sw.toString());
44  	}
45  
46  	@Test void a03_writeStringWithOffset() throws IOException {
47  		var sw = new StringWriter();
48  		var wrapper = new NoCloseWriter(sw);
49  		wrapper.write("hello", 1, 3);
50  		assertEquals("ell", sw.toString());
51  	}
52  
53  	@Test void a04_writeCharArray() throws IOException {
54  		var sw = new StringWriter();
55  		var wrapper = new NoCloseWriter(sw);
56  		wrapper.write("test".toCharArray());
57  		assertEquals("test", sw.toString());
58  	}
59  
60  	@Test void a05_writeCharArrayWithOffset() throws IOException {
61  		var sw = new StringWriter();
62  		var wrapper = new NoCloseWriter(sw);
63  		wrapper.write("hello".toCharArray(), 1, 3);
64  		assertEquals("ell", sw.toString());
65  	}
66  
67  	//====================================================================================================
68  	// append() tests
69  	//====================================================================================================
70  	@Test void b01_appendChar() throws IOException {
71  		var sw = new StringWriter();
72  		var wrapper = new NoCloseWriter(sw);
73  		var result = wrapper.append('a');
74  		assertSame(sw, result); // Returns the underlying writer
75  		wrapper.append('b');
76  		assertEquals("ab", sw.toString());
77  	}
78  
79  	@Test void b02_appendCharSequence() throws IOException {
80  		var sw = new StringWriter();
81  		var wrapper = new NoCloseWriter(sw);
82  		var result = wrapper.append("test");
83  		assertSame(sw, result); // Returns the underlying writer
84  		assertEquals("test", sw.toString());
85  	}
86  
87  	@Test void b03_appendCharSequenceWithRange() throws IOException {
88  		var sw = new StringWriter();
89  		var wrapper = new NoCloseWriter(sw);
90  		var result = wrapper.append("hello", 1, 4);
91  		assertSame(sw, result); // Returns the underlying writer
92  		assertEquals("ell", sw.toString());
93  	}
94  
95  	@Test void b04_appendNull() throws IOException {
96  		var sw = new StringWriter();
97  		var wrapper = new NoCloseWriter(sw);
98  		wrapper.append((CharSequence)null);
99  		assertEquals("null", sw.toString());
100 	}
101 
102 	//====================================================================================================
103 	// flush() tests
104 	//====================================================================================================
105 	@Test void c01_flush() throws IOException {
106 		var sw = new StringWriter();
107 		var wrapper = new NoCloseWriter(sw);
108 		wrapper.write("test");
109 		wrapper.flush(); // Should not throw
110 		assertEquals("test", sw.toString());
111 	}
112 
113 	@Test void c02_flush_multipleTimes() throws IOException {
114 		var sw = new StringWriter();
115 		var wrapper = new NoCloseWriter(sw);
116 		wrapper.flush();
117 		wrapper.flush();
118 		wrapper.flush();
119 		// Should not throw
120 	}
121 
122 	//====================================================================================================
123 	// close() tests - should not actually close
124 	//====================================================================================================
125 	@Test void d01_close_doesNotClose() throws IOException {
126 		var sw = new StringWriter();
127 		var wrapper = new NoCloseWriter(sw);
128 		wrapper.write("test");
129 		wrapper.close(); // Should flush but not close
130 		// Should still be able to write after close
131 		wrapper.write("more");
132 		assertEquals("testmore", sw.toString());
133 	}
134 
135 	@Test void d02_close_flushes() throws IOException {
136 		var sw = new StringWriter();
137 		var wrapper = new NoCloseWriter(sw);
138 		wrapper.write("test");
139 		wrapper.close();
140 		// Content should be flushed
141 		assertEquals("test", sw.toString());
142 	}
143 
144 	@Test void d03_close_multipleTimes() throws IOException {
145 		var sw = new StringWriter();
146 		var wrapper = new NoCloseWriter(sw);
147 		wrapper.close();
148 		wrapper.close();
149 		wrapper.close();
150 		// Should not throw
151 	}
152 
153 	//====================================================================================================
154 	// toString() tests
155 	//====================================================================================================
156 	@Test void e01_toString() {
157 		var sw = new StringWriter();
158 		sw.write("test");
159 		var wrapper = new NoCloseWriter(sw);
160 		assertEquals("test", wrapper.toString());
161 	}
162 
163 	//====================================================================================================
164 	// Integration tests
165 	//====================================================================================================
166 	@Test void f01_combinedOperations() throws IOException {
167 		var sw = new StringWriter();
168 		var wrapper = new NoCloseWriter(sw);
169 		wrapper.write('H');
170 		wrapper.write("ello");
171 		wrapper.append(' ');
172 		wrapper.append("World");
173 		wrapper.write("!", 0, 1);
174 		wrapper.flush();
175 		wrapper.close();
176 		wrapper.write('!');
177 		assertEquals("Hello World!!", sw.toString());
178 	}
179 }
180