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.apache.juneau.commons.utils.IoUtils.*;
20  import static org.junit.jupiter.api.Assertions.*;
21  
22  import java.io.*;
23  import java.nio.charset.*;
24  import java.nio.file.*;
25  import java.util.*;
26  
27  import org.apache.juneau.*;
28  import org.junit.jupiter.api.*;
29  
30  class FileReaderBuilder_Test extends TestBase {
31  
32  	private static final Path PATH = Paths.get("src/test/resources/files/Test3.properties");
33  
34  	//====================================================================================================
35  	// create() tests
36  	//====================================================================================================
37  	@Test void a01_create() {
38  		var builder = FileReaderBuilder.create();
39  		assertNotNull(builder);
40  	}
41  
42  	@Test void a02_createWithFile() {
43  		var file = PATH.toFile();
44  		var builder = FileReaderBuilder.create(file);
45  		assertNotNull(builder);
46  	}
47  
48  	//====================================================================================================
49  	// build() tests
50  	//====================================================================================================
51  	@Test void b01_build() throws IOException {
52  		var file = PATH.toFile();
53  		var reader = FileReaderBuilder.create(file).build();
54  		assertNotNull(reader);
55  		var p = new Properties();
56  		p.load(new StringReader(read(reader, Files.size(PATH))));
57  		assertEquals("files/Test3.properties", p.get("file"));
58  		reader.close();
59  	}
60  
61  	@Test void b02_build_noFile() {
62  		assertThrows(IllegalArgumentException.class, () -> {
63  			FileReaderBuilder.create().build();
64  		});
65  	}
66  
67  	@Test void b03_build_fileNotFound() {
68  		assertThrows(FileNotFoundException.class, () -> {
69  			FileReaderBuilder.create(new File("nonexistent.txt")).build();
70  		});
71  	}
72  
73  	//====================================================================================================
74  	// allowNoFile() tests
75  	//====================================================================================================
76  	@Test void c01_allowNoFile_noFile() throws IOException {
77  		var reader = FileReaderBuilder.create().allowNoFile().build();
78  		assertNotNull(reader);
79  		var content = read(reader, 0);
80  		assertEquals("", content);
81  		reader.close();
82  	}
83  
84  	@Test void c02_allowNoFile_nonexistentFile() throws IOException {
85  		var reader = FileReaderBuilder.create()
86  			.file("nonexistent.txt")
87  			.allowNoFile()
88  			.build();
89  		assertNotNull(reader);
90  		var content = read(reader, 0);
91  		assertEquals("", content);
92  		reader.close();
93  	}
94  
95  	@Test void c03_allowNoFile_existingFile() throws IOException {
96  		var file = PATH.toFile();
97  		var reader = FileReaderBuilder.create(file)
98  			.allowNoFile()
99  			.build();
100 		assertNotNull(reader);
101 		var p = new Properties();
102 		p.load(new StringReader(read(reader, Files.size(PATH))));
103 		assertEquals("files/Test3.properties", p.get("file"));
104 		reader.close();
105 	}
106 
107 	//====================================================================================================
108 	// charset(Charset) tests
109 	//====================================================================================================
110 	@Test void d01_charsetCharset() throws IOException {
111 		var file = PATH.toFile();
112 		var reader = FileReaderBuilder.create(file)
113 			.charset(StandardCharsets.UTF_8)
114 			.build();
115 		assertNotNull(reader);
116 		var p = new Properties();
117 		p.load(new StringReader(read(reader, Files.size(PATH))));
118 		assertEquals("files/Test3.properties", p.get("file"));
119 		reader.close();
120 	}
121 
122 	@Test void d02_charsetCharset_null() throws IOException {
123 		var file = PATH.toFile();
124 		var reader = FileReaderBuilder.create(file)
125 			.charset((Charset)null)
126 			.build();
127 		assertNotNull(reader);
128 		var p = new Properties();
129 		p.load(new StringReader(read(reader, Files.size(PATH))));
130 		assertEquals("files/Test3.properties", p.get("file"));
131 		reader.close();
132 	}
133 
134 	@Test void d03_charsetCharset_iso8859_1() throws IOException {
135 		var file = PATH.toFile();
136 		var reader = FileReaderBuilder.create(file)
137 			.charset(StandardCharsets.ISO_8859_1)
138 			.build();
139 		assertNotNull(reader);
140 		var p = new Properties();
141 		p.load(new StringReader(read(reader, Files.size(PATH))));
142 		assertEquals("files/Test3.properties", p.get("file"));
143 		reader.close();
144 	}
145 
146 	//====================================================================================================
147 	// charset(String) tests
148 	//====================================================================================================
149 	@Test void e01_charsetString() throws IOException {
150 		var file = PATH.toFile();
151 		var reader = FileReaderBuilder.create(file)
152 			.charset("UTF-8")
153 			.build();
154 		assertNotNull(reader);
155 		var p = new Properties();
156 		p.load(new StringReader(read(reader, Files.size(PATH))));
157 		assertEquals("files/Test3.properties", p.get("file"));
158 		reader.close();
159 	}
160 
161 	@Test void e02_charsetString_null() {
162 		assertThrows(IllegalArgumentException.class, () -> {
163 			FileReaderBuilder.create(PATH.toFile())
164 				.charset((String)null)
165 				.build();
166 		});
167 	}
168 
169 	@Test void e03_charsetString_invalid() {
170 		assertThrows(UnsupportedCharsetException.class, () -> {
171 			FileReaderBuilder.create(PATH.toFile())
172 				.charset("INVALID-CHARSET-NAME")
173 				.build();
174 		});
175 	}
176 
177 	//====================================================================================================
178 	// file() tests
179 	//====================================================================================================
180 	@Test void f01_fileFile() throws IOException {
181 		var file = PATH.toFile();
182 		var reader = FileReaderBuilder.create()
183 			.file(file)
184 			.build();
185 		assertNotNull(reader);
186 		var p = new Properties();
187 		p.load(new StringReader(read(reader, Files.size(PATH))));
188 		assertEquals("files/Test3.properties", p.get("file"));
189 		reader.close();
190 	}
191 
192 	@Test void f02_fileString() throws IOException {
193 		var reader = FileReaderBuilder.create()
194 			.file(PATH.toString())
195 			.build();
196 		assertNotNull(reader);
197 		var p = new Properties();
198 		p.load(new StringReader(read(reader, Files.size(PATH))));
199 		assertEquals("files/Test3.properties", p.get("file"));
200 		reader.close();
201 	}
202 
203 	//====================================================================================================
204 	// Chaining tests
205 	//====================================================================================================
206 	@Test void g01_chaining() throws IOException {
207 		var reader = FileReaderBuilder.create()
208 			.file(PATH.toFile())
209 			.charset(StandardCharsets.UTF_8)
210 			.allowNoFile()
211 			.build();
212 		assertNotNull(reader);
213 		var p = new Properties();
214 		p.load(new StringReader(read(reader, Files.size(PATH))));
215 		assertEquals("files/Test3.properties", p.get("file"));
216 		reader.close();
217 	}
218 }
219