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