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 public static final String REQUIRED_CHARSETS = "org.apache.commons.io.CharsetsTest#getRequiredCharsetNames";
53
54
55
56
57
58
59 public static Set<String> availableCharsetsKeySet() {
60 return Charset.availableCharsets().keySet();
61 }
62
63
64
65
66
67
68 public static Collection<Charset> availableCharsetsValues() {
69 return Charset.availableCharsets().values();
70 }
71
72 static Stream<Arguments> charsetAliasProvider() {
73 return Charset.availableCharsets().entrySet().stream()
74 .flatMap(entry -> entry.getValue().aliases().stream().map(a -> Arguments.of(entry.getValue(), a)));
75 }
76
77
78
79
80
81
82 public static Set<String> getRequiredCharsetNames() {
83 return Charsets.requiredCharsets().keySet();
84 }
85
86 @ParameterizedTest
87 @MethodSource("charsetAliasProvider")
88 void testIsAlias(final Charset charset, final String charsetAlias) {
89 assertTrue(Charsets.isAlias(charset, charsetAlias));
90 assertTrue(Charsets.isAlias(charset, charsetAlias.toLowerCase()));
91 assertTrue(Charsets.isAlias(charset, charsetAlias.toUpperCase()));
92 assertTrue(Charsets.isAlias(charset, charset.name()));
93 assertFalse(Charsets.isAlias(charset, null));
94 }
95
96 @Test
97 void testIso8859_1() {
98 assertEquals("ISO-8859-1", Charsets.ISO_8859_1.name());
99 }
100
101 @ParameterizedTest
102 @MethodSource("availableCharsetsValues")
103 void testIsUTF8Charset(final Charset charset) {
104 assumeFalse(StandardCharsets.UTF_8.equals(charset));
105 charset.aliases().forEach(n -> assertFalse(Charsets.isUTF8(Charset.forName(n))));
106 }
107
108 void testIsUTF8CharsetUTF8() {
109 assertTrue(Charsets.isUTF8(StandardCharsets.UTF_8));
110 StandardCharsets.UTF_8.aliases().forEach(n -> assertTrue(Charsets.isUTF8(Charset.forName(n))));
111 }
112
113 @Test
114 void testRequiredCharsets() {
115 final SortedMap<String, Charset> requiredCharsets = Charsets.requiredCharsets();
116
117
118 assertEquals(requiredCharsets.get("US-ASCII").name(), "US-ASCII");
119 assertEquals(requiredCharsets.get("ISO-8859-1").name(), "ISO-8859-1");
120 assertEquals(requiredCharsets.get("UTF-8").name(), "UTF-8");
121 assertEquals(requiredCharsets.get("UTF-16").name(), "UTF-16");
122 assertEquals(requiredCharsets.get("UTF-16BE").name(), "UTF-16BE");
123 assertEquals(requiredCharsets.get("UTF-16LE").name(), "UTF-16LE");
124 }
125
126 @Test
127 void testToCharset_String() {
128 assertEquals(Charset.defaultCharset(), Charsets.toCharset((String) null));
129 assertEquals(Charset.defaultCharset(), Charsets.toCharset((Charset) null));
130 assertEquals(Charset.defaultCharset(), Charsets.toCharset(Charset.defaultCharset()));
131 assertEquals(StandardCharsets.UTF_8, Charsets.toCharset(StandardCharsets.UTF_8));
132 }
133
134 @Test
135 void testToCharsetDefault() {
136 assertEquals(Charset.defaultCharset(), Charsets.toCharsetDefault((String) null, null));
137 assertEquals(Charset.defaultCharset(), Charsets.toCharsetDefault(StringUtils.EMPTY, null));
138 assertEquals(Charset.defaultCharset(), Charsets.toCharsetDefault(".", null));
139 assertEquals(Charset.defaultCharset(), Charsets.toCharsetDefault(null, Charset.defaultCharset()));
140 assertEquals(Charset.defaultCharset(), Charsets.toCharsetDefault(Charset.defaultCharset().name(), Charset.defaultCharset()));
141 assertEquals(StandardCharsets.UTF_8, Charsets.toCharsetDefault(StandardCharsets.UTF_8.name(), Charset.defaultCharset()));
142 assertEquals(StandardCharsets.UTF_8, Charsets.toCharsetDefault(StandardCharsets.UTF_8.name(), null));
143 }
144
145 @Test
146 void testToCharsetWithStringCharset() {
147 assertNull(Charsets.toCharset((String) null, null));
148 assertEquals(Charset.defaultCharset(), Charsets.toCharset((String) null, Charset.defaultCharset()));
149 assertEquals(Charset.defaultCharset(), Charsets.toCharset((Charset) null, Charset.defaultCharset()));
150 assertNull(Charsets.toCharset((Charset) null, null));
151 assertEquals(Charset.defaultCharset(), Charsets.toCharset(Charset.defaultCharset(), Charset.defaultCharset()));
152 assertEquals(StandardCharsets.UTF_8, Charsets.toCharset(StandardCharsets.UTF_8, Charset.defaultCharset()));
153 assertEquals(StandardCharsets.UTF_8, Charsets.toCharset(StandardCharsets.UTF_8, null));
154 }
155
156 @Test
157 void testUsAscii() {
158 assertEquals(StandardCharsets.US_ASCII.name(), Charsets.US_ASCII.name());
159 }
160
161 @Test
162 void testUtf16() {
163 assertEquals(StandardCharsets.UTF_16.name(), Charsets.UTF_16.name());
164 }
165
166 @Test
167 void testUtf16Be() {
168 assertEquals(StandardCharsets.UTF_16BE.name(), Charsets.UTF_16BE.name());
169 }
170
171 @Test
172 void testUtf16Le() {
173 assertEquals(StandardCharsets.UTF_16LE.name(), Charsets.UTF_16LE.name());
174 }
175
176 @Test
177 void testUtf8() {
178 assertEquals(StandardCharsets.UTF_8.name(), Charsets.UTF_8.name());
179 }
180
181 }