1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.io;
19
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21 import static org.junit.jupiter.api.Assertions.assertFalse;
22 import static org.junit.jupiter.api.Assertions.assertNull;
23 import static org.junit.jupiter.api.Assertions.assertTrue;
24 import static org.junit.jupiter.api.Assumptions.assumeFalse;
25
26 import java.nio.charset.Charset;
27 import java.nio.charset.StandardCharsets;
28 import java.util.Collection;
29 import java.util.Set;
30 import java.util.SortedMap;
31 import java.util.stream.Stream;
32
33 import org.apache.commons.lang3.StringUtils;
34 import org.junit.jupiter.api.Test;
35 import org.junit.jupiter.params.ParameterizedTest;
36 import org.junit.jupiter.params.provider.Arguments;
37 import org.junit.jupiter.params.provider.MethodSource;
38
39
40
41
42 @SuppressWarnings("deprecation")
43 public class CharsetsTest {
44
45
46
47
48 public static final String AVAIL_CHARSETS = "org.apache.commons.io.CharsetsTest#availableCharsetsKeySet";
49
50
51
52
53 public static final String REQUIRED_CHARSETS = "org.apache.commons.io.CharsetsTest#getRequiredCharsetNames";
54
55
56
57
58
59
60 public static Set<String> availableCharsetsKeySet() {
61 return Charset.availableCharsets().keySet();
62 }
63
64
65
66
67
68
69 public static Collection<Charset> availableCharsetsValues() {
70 return Charset.availableCharsets().values();
71 }
72
73 static Stream<Arguments> charsetAliasProvider() {
74 return Charset.availableCharsets().entrySet().stream()
75 .flatMap(entry -> entry.getValue().aliases().stream().map(a -> Arguments.of(entry.getValue(), a)));
76 }
77
78
79
80
81
82
83 public static Set<String> getRequiredCharsetNames() {
84 return Charsets.requiredCharsets().keySet();
85 }
86
87 @ParameterizedTest
88 @MethodSource("charsetAliasProvider")
89 void testIsAlias(final Charset charset, final String charsetAlias) {
90 assertTrue(Charsets.isAlias(charset, charsetAlias));
91 assertTrue(Charsets.isAlias(charset, charsetAlias.toLowerCase()));
92 assertTrue(Charsets.isAlias(charset, charsetAlias.toUpperCase()));
93 assertTrue(Charsets.isAlias(charset, charset.name()));
94 assertFalse(Charsets.isAlias(charset, null));
95 }
96
97 @Test
98 void testIso8859_1() {
99 assertEquals("ISO-8859-1", Charsets.ISO_8859_1.name());
100 }
101
102 @ParameterizedTest
103 @MethodSource("availableCharsetsValues")
104 void testIsUTF8Charset(final Charset charset) {
105 assumeFalse(StandardCharsets.UTF_8.equals(charset));
106 charset.aliases().forEach(n -> assertFalse(Charsets.isUTF8(Charset.forName(n))));
107 }
108
109 void testIsUTF8CharsetUTF8() {
110 assertTrue(Charsets.isUTF8(StandardCharsets.UTF_8));
111 StandardCharsets.UTF_8.aliases().forEach(n -> assertTrue(Charsets.isUTF8(Charset.forName(n))));
112 }
113
114 @Test
115 void testRequiredCharsets() {
116 final SortedMap<String, Charset> requiredCharsets = Charsets.requiredCharsets();
117
118
119 assertEquals(requiredCharsets.get("US-ASCII").name(), "US-ASCII");
120 assertEquals(requiredCharsets.get("ISO-8859-1").name(), "ISO-8859-1");
121 assertEquals(requiredCharsets.get("UTF-8").name(), "UTF-8");
122 assertEquals(requiredCharsets.get("UTF-16").name(), "UTF-16");
123 assertEquals(requiredCharsets.get("UTF-16BE").name(), "UTF-16BE");
124 assertEquals(requiredCharsets.get("UTF-16LE").name(), "UTF-16LE");
125 }
126
127 @Test
128 void testToCharset_String() {
129 assertEquals(Charset.defaultCharset(), Charsets.toCharset((String) null));
130 assertEquals(Charset.defaultCharset(), Charsets.toCharset((Charset) null));
131 assertEquals(Charset.defaultCharset(), Charsets.toCharset(Charset.defaultCharset()));
132 assertEquals(StandardCharsets.UTF_8, Charsets.toCharset(StandardCharsets.UTF_8));
133 }
134
135 @Test
136 void testToCharsetDefault() {
137 assertEquals(Charset.defaultCharset(), Charsets.toCharsetDefault((String) null, null));
138 assertEquals(Charset.defaultCharset(), Charsets.toCharsetDefault(StringUtils.EMPTY, null));
139 assertEquals(Charset.defaultCharset(), Charsets.toCharsetDefault(".", null));
140 assertEquals(Charset.defaultCharset(), Charsets.toCharsetDefault(null, Charset.defaultCharset()));
141 assertEquals(Charset.defaultCharset(), Charsets.toCharsetDefault(Charset.defaultCharset().name(), Charset.defaultCharset()));
142 assertEquals(StandardCharsets.UTF_8, Charsets.toCharsetDefault(StandardCharsets.UTF_8.name(), Charset.defaultCharset()));
143 assertEquals(StandardCharsets.UTF_8, Charsets.toCharsetDefault(StandardCharsets.UTF_8.name(), null));
144 }
145
146 @Test
147 void testToCharsetWithStringCharset() {
148 assertNull(Charsets.toCharset((String) null, null));
149 assertEquals(Charset.defaultCharset(), Charsets.toCharset((String) null, Charset.defaultCharset()));
150 assertEquals(Charset.defaultCharset(), Charsets.toCharset((Charset) null, Charset.defaultCharset()));
151 assertNull(Charsets.toCharset((Charset) null, null));
152 assertEquals(Charset.defaultCharset(), Charsets.toCharset(Charset.defaultCharset(), Charset.defaultCharset()));
153 assertEquals(StandardCharsets.UTF_8, Charsets.toCharset(StandardCharsets.UTF_8, Charset.defaultCharset()));
154 assertEquals(StandardCharsets.UTF_8, Charsets.toCharset(StandardCharsets.UTF_8, null));
155 }
156
157 @Test
158 void testUsAscii() {
159 assertEquals(StandardCharsets.US_ASCII.name(), Charsets.US_ASCII.name());
160 }
161
162 @Test
163 void testUtf16() {
164 assertEquals(StandardCharsets.UTF_16.name(), Charsets.UTF_16.name());
165 }
166
167 @Test
168 void testUtf16Be() {
169 assertEquals(StandardCharsets.UTF_16BE.name(), Charsets.UTF_16BE.name());
170 }
171
172 @Test
173 void testUtf16Le() {
174 assertEquals(StandardCharsets.UTF_16LE.name(), Charsets.UTF_16LE.name());
175 }
176
177 @Test
178 void testUtf8() {
179 assertEquals(StandardCharsets.UTF_8.name(), Charsets.UTF_8.name());
180 }
181
182 }