1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.mail2.jakarta.util;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertNull;
21
22 import org.junit.jupiter.api.Test;
23
24 import jakarta.mail.internet.InternetAddress;
25
26 public class IDNEmailAddressConverterTest {
27
28 private static final String AUSTRIAN_IDN_EMAIL_ADDRESS = "noreply@d\u00F6m\u00E4in.example";
29 private static final String CZECH_IDN_EMAIL_ADDRESS = "noreply@\u010Desk\u00E1republika.icom.museum";
30 private static final String RUSSIAN_IDN_EMAIL_ADDRESS = "noreply@\u0440\u043E\u0441\u0441\u0438\u044F.\u0438\u043A\u043E\u043C.museum";
31
32 private static final String GERMAN_IDN_EMAIL_NAME = "noreply@d\u00F6m\u00E4in.example";
33
34 private static final String[] IDN_EMAIL_ADDRESSES = { AUSTRIAN_IDN_EMAIL_ADDRESS, CZECH_IDN_EMAIL_ADDRESS, RUSSIAN_IDN_EMAIL_ADDRESS };
35
36 private final IDNEmailAddressConverter idnEmailConverter = new IDNEmailAddressConverter();
37
38 @Test
39 public void testConvertInvalidEmailAddressToAscii() {
40 assertNull(idnEmailConverter.toASCII(null));
41 assertEquals("", idnEmailConverter.toASCII(""));
42 assertEquals("@", idnEmailConverter.toASCII("@"));
43 assertEquals("@@", idnEmailConverter.toASCII("@@"));
44 assertEquals("foo", idnEmailConverter.toASCII("foo"));
45 assertEquals("foo@", idnEmailConverter.toASCII("foo@"));
46 assertEquals("@badhost.com", idnEmailConverter.toASCII("@badhost.com"));
47 }
48
49 @Test
50 public void testIDNEmailAddressToAsciiConversion() {
51 assertEquals("noreply@xn--dmin-moa0i.example", idnEmailConverter.toASCII(AUSTRIAN_IDN_EMAIL_ADDRESS));
52 assertEquals("noreply@xn--h1alffa9f.xn--h1aegh.museum", idnEmailConverter.toASCII(RUSSIAN_IDN_EMAIL_ADDRESS));
53 }
54
55 @Test
56 public void testInternetAddressToAsciiConversion() throws Exception {
57 final InternetAddress address = new InternetAddress(idnEmailConverter.toASCII(AUSTRIAN_IDN_EMAIL_ADDRESS));
58 assertEquals(AUSTRIAN_IDN_EMAIL_ADDRESS, idnEmailConverter.toUnicode(address));
59
60 final InternetAddress addressWithPersonalName = new InternetAddress(idnEmailConverter.toASCII(AUSTRIAN_IDN_EMAIL_ADDRESS), GERMAN_IDN_EMAIL_NAME);
61 assertEquals(AUSTRIAN_IDN_EMAIL_ADDRESS, idnEmailConverter.toUnicode(addressWithPersonalName));
62 }
63
64 @Test
65 public void testMultipleIDNEmailAddressToAsciiConversion() {
66 assertEquals("noreply@xn--dmin-moa0i.example", idnEmailConverter.toASCII(idnEmailConverter.toASCII(AUSTRIAN_IDN_EMAIL_ADDRESS)));
67 }
68
69 @Test
70 public void testNonIDNEmailAddressToAsciiConversion() {
71 assertEquals("me@home.com", idnEmailConverter.toASCII("me@home.com"));
72 }
73
74 @Test
75 public void testRoundTripConversionOfIDNEmailAddress() {
76 for (final String email : IDN_EMAIL_ADDRESSES) {
77 assertEquals(email, idnEmailConverter.toUnicode(idnEmailConverter.toASCII(email)));
78 }
79 }
80
81 }