/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package javax.mail.internet; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Properties; import javax.mail.Session; import junit.framework.TestCase; /** * @version $Rev$ $Date$ */ public class InternetAddressTest extends TestCase { private InternetAddress address; public void testQuotedLiterals() throws Exception { parseHeaderTest("\"Foo\t\n\\\\\\\"\" <foo@apache.org>", true, "foo@apache.org", "Foo\t\n\\\"", "\"Foo\t\n\\\\\\\"\" <foo@apache.org>", false); parseHeaderTest("<\"@,:;<>.[]()\"@apache.org>", true, "\"@,:;<>.[]()\"@apache.org", null, "<\"@,:;<>.[]()\"@apache.org>", false); parseHeaderTest("<\"\\F\\o\\o\"@apache.org>", true, "\"Foo\"@apache.org", null, "<\"Foo\"@apache.org>", false); parseHeaderErrorTest("\"Foo <foo@apache.org>", true); parseHeaderErrorTest("\"Foo\r\" <foo@apache.org>", true); } public void testDomainLiterals() throws Exception { parseHeaderTest("<foo@[apache].org>", true, "foo@[apache].org", null, "<foo@[apache].org>", false); parseHeaderTest("<foo@[@()<>.,:;\"\\\\].org>", true, "foo@[@()<>.,:;\"\\\\].org", null, "<foo@[@()<>.,:;\"\\\\].org>", false); parseHeaderTest("<foo@[\\[\\]].org>", true, "foo@[\\[\\]].org", null, "<foo@[\\[\\]].org>", false); parseHeaderErrorTest("<foo@[[].org>", true); parseHeaderErrorTest("<foo@[foo.org>", true); parseHeaderErrorTest("<foo@[\r].org>", true); } public void testComments() throws Exception { parseHeaderTest("Foo Bar (Fred) <foo@apache.org>", true, "foo@apache.org", "Foo Bar (Fred)", "\"Foo Bar (Fred)\" <foo@apache.org>", false); parseHeaderTest("(Fred) foo@apache.org", true, "foo@apache.org", "Fred", "Fred <foo@apache.org>", false); parseHeaderTest("(\\(Fred\\)) foo@apache.org", true, "foo@apache.org", "(Fred)", "\"(Fred)\" <foo@apache.org>", false); parseHeaderTest("(Fred (Jones)) foo@apache.org", true, "foo@apache.org", "Fred (Jones)", "\"Fred (Jones)\" <foo@apache.org>", false); parseHeaderErrorTest("(Fred foo@apache.org", true); parseHeaderErrorTest("(Fred\r) foo@apache.org", true); } public void testParseHeader() throws Exception { parseHeaderTest("<@apache.org,@apache.net:foo@apache.org>", false, "@apache.org,@apache.net:foo@apache.org", null, "<@apache.org,@apache.net:foo@apache.org>", false); parseHeaderTest("<@apache.org:foo@apache.org>", false, "@apache.org:foo@apache.org", null, "<@apache.org:foo@apache.org>", false); parseHeaderTest("Foo Bar:;", false, "Foo Bar:;", null, "Foo Bar:;", true); parseHeaderTest("\"\\\"Foo Bar\" <foo.bar@apache.org>", false, "foo.bar@apache.org", "\"Foo Bar", "\"\\\"Foo Bar\" <foo.bar@apache.org>", false); parseHeaderTest("\"Foo Bar\" <foo.bar@apache.org>", false, "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); parseHeaderTest("(Foo) (Bar) foo.bar@apache.org", false, "foo.bar@apache.org", "Foo", "Foo <foo.bar@apache.org>", false); parseHeaderTest("<foo@apache.org>", false, "foo@apache.org", null, "foo@apache.org", false); parseHeaderTest("Foo Bar <foo.bar@apache.org>", false, "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); parseHeaderTest("foo", false, "foo", null, "foo", false); parseHeaderTest("\"foo\"", false, "\"foo\"", null, "<\"foo\">", false); parseHeaderTest("foo@apache.org", false, "foo@apache.org", null, "foo@apache.org", false); parseHeaderTest("\"foo\"@apache.org", false, "\"foo\"@apache.org", null, "<\"foo\"@apache.org>", false); parseHeaderTest("foo@[apache].org", false, "foo@[apache].org", null, "<foo@[apache].org>", false); parseHeaderTest("foo@[apache].[org]", false, "foo@[apache].[org]", null, "<foo@[apache].[org]>", false); parseHeaderTest("foo.bar@apache.org", false, "foo.bar@apache.org", null, "foo.bar@apache.org", false); parseHeaderTest("(Foo Bar) <foo.bar@apache.org>", false, "foo.bar@apache.org", null, "foo.bar@apache.org", false); parseHeaderTest("(Foo) (Bar) <foo.bar@apache.org>", false, "foo.bar@apache.org", null, "foo.bar@apache.org", false); parseHeaderTest("\"Foo\" Bar <foo.bar@apache.org>", false, "foo.bar@apache.org", "\"Foo\" Bar", "\"\\\"Foo\\\" Bar\" <foo.bar@apache.org>", false); parseHeaderTest("(Foo Bar) foo.bar@apache.org", false, "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); parseHeaderTest("apache.org", false, "apache.org", null, "apache.org", false); } public void testValidate() throws Exception { validateTest("@apache.org,@apache.net:foo@apache.org"); validateTest("@apache.org:foo@apache.org"); validateTest("Foo Bar:;"); validateTest("foo.bar@apache.org"); validateTest("bar@apache.org"); validateTest("foo"); validateTest("foo.bar"); validateTest("\"foo\""); validateTest("\"foo\"@apache.org"); validateTest("foo@[apache].org"); validateTest("foo@[apache].[org]"); } public void testStrictParseHeader() throws Exception { parseHeaderTest("<@apache.org,@apache.net:foo@apache.org>", true, "@apache.org,@apache.net:foo@apache.org", null, "<@apache.org,@apache.net:foo@apache.org>", false); parseHeaderTest("<@apache.org:foo@apache.org>", true, "@apache.org:foo@apache.org", null, "<@apache.org:foo@apache.org>", false); parseHeaderTest("Foo Bar:;", true, "Foo Bar:;", null, "Foo Bar:;", true); parseHeaderTest("\"\\\"Foo Bar\" <foo.bar@apache.org>", true, "foo.bar@apache.org", "\"Foo Bar", "\"\\\"Foo Bar\" <foo.bar@apache.org>", false); parseHeaderTest("\"Foo Bar\" <foo.bar@apache.org>", true, "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); parseHeaderTest("(Foo) (Bar) foo.bar@apache.org", true, "foo.bar@apache.org", "Foo", "Foo <foo.bar@apache.org>", false); parseHeaderTest("<foo@apache.org>", true, "foo@apache.org", null, "foo@apache.org", false); parseHeaderTest("Foo Bar <foo.bar@apache.org>", true, "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); parseHeaderTest("foo", true, "foo", null, "foo", false); parseHeaderTest("\"foo\"", true, "\"foo\"", null, "<\"foo\">", false); parseHeaderTest("foo@apache.org", true, "foo@apache.org", null, "foo@apache.org", false); parseHeaderTest("\"foo\"@apache.org", true, "\"foo\"@apache.org", null, "<\"foo\"@apache.org>", false); parseHeaderTest("foo@[apache].org", true, "foo@[apache].org", null, "<foo@[apache].org>", false); parseHeaderTest("foo@[apache].[org]", true, "foo@[apache].[org]", null, "<foo@[apache].[org]>", false); parseHeaderTest("foo.bar@apache.org", true, "foo.bar@apache.org", null, "foo.bar@apache.org", false); parseHeaderTest("(Foo Bar) <foo.bar@apache.org>", true, "foo.bar@apache.org", null, "foo.bar@apache.org", false); parseHeaderTest("(Foo) (Bar) <foo.bar@apache.org>", true, "foo.bar@apache.org", null, "foo.bar@apache.org", false); parseHeaderTest("\"Foo\" Bar <foo.bar@apache.org>", true, "foo.bar@apache.org", "\"Foo\" Bar", "\"\\\"Foo\\\" Bar\" <foo.bar@apache.org>", false); parseHeaderTest("(Foo Bar) foo.bar@apache.org", true, "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); parseHeaderTest("apache.org", true, "apache.org", null, "apache.org", false); } public void testParse() throws Exception { parseTest("<@apache.org,@apache.net:foo@apache.org>", false, "@apache.org,@apache.net:foo@apache.org", null, "<@apache.org,@apache.net:foo@apache.org>", false); parseTest("<@apache.org:foo@apache.org>", false, "@apache.org:foo@apache.org", null, "<@apache.org:foo@apache.org>", false); parseTest("Foo Bar:;", false, "Foo Bar:;", null, "Foo Bar:;", true); parseTest("\"\\\"Foo Bar\" <foo.bar@apache.org>", false, "foo.bar@apache.org", "\"Foo Bar", "\"\\\"Foo Bar\" <foo.bar@apache.org>", false); parseTest("\"Foo Bar\" <foo.bar@apache.org>", false, "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); parseTest("(Foo) (Bar) foo.bar@apache.org", false, "foo.bar@apache.org", "Foo", "Foo <foo.bar@apache.org>", false); parseTest("<foo@apache.org>", false, "foo@apache.org", null, "foo@apache.org", false); parseTest("Foo Bar <foo.bar@apache.org>", false, "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); parseTest("foo", false, "foo", null, "foo", false); parseTest("\"foo\"", false, "\"foo\"", null, "<\"foo\">", false); parseTest("foo@apache.org", false, "foo@apache.org", null, "foo@apache.org", false); parseTest("\"foo\"@apache.org", false, "\"foo\"@apache.org", null, "<\"foo\"@apache.org>", false); parseTest("foo@[apache].org", false, "foo@[apache].org", null, "<foo@[apache].org>", false); parseTest("foo@[apache].[org]", false, "foo@[apache].[org]", null, "<foo@[apache].[org]>", false); parseTest("foo.bar@apache.org", false, "foo.bar@apache.org", null, "foo.bar@apache.org", false); parseTest("(Foo Bar) <foo.bar@apache.org>", false, "foo.bar@apache.org", null, "foo.bar@apache.org", false); parseTest("(Foo) (Bar) <foo.bar@apache.org>", false, "foo.bar@apache.org", null, "foo.bar@apache.org", false); parseTest("\"Foo\" Bar <foo.bar@apache.org>", false, "foo.bar@apache.org", "\"Foo\" Bar", "\"\\\"Foo\\\" Bar\" <foo.bar@apache.org>", false); parseTest("(Foo Bar) foo.bar@apache.org", false, "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); parseTest("apache.org", false, "apache.org", null, "apache.org", false); } public void testDefaultParse() throws Exception { parseDefaultTest("<@apache.org,@apache.net:foo@apache.org>", "@apache.org,@apache.net:foo@apache.org", null, "<@apache.org,@apache.net:foo@apache.org>", false); parseDefaultTest("<@apache.org:foo@apache.org>", "@apache.org:foo@apache.org", null, "<@apache.org:foo@apache.org>", false); parseDefaultTest("Foo Bar:;", "Foo Bar:;", null, "Foo Bar:;", true); parseDefaultTest("\"\\\"Foo Bar\" <foo.bar@apache.org>", "foo.bar@apache.org", "\"Foo Bar", "\"\\\"Foo Bar\" <foo.bar@apache.org>", false); parseDefaultTest("\"Foo Bar\" <foo.bar@apache.org>", "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); parseDefaultTest("(Foo) (Bar) foo.bar@apache.org", "foo.bar@apache.org", "Foo", "Foo <foo.bar@apache.org>", false); parseDefaultTest("<foo@apache.org>", "foo@apache.org", null, "foo@apache.org", false); parseDefaultTest("Foo Bar <foo.bar@apache.org>", "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); parseDefaultTest("foo", "foo", null, "foo", false); parseDefaultTest("\"foo\"", "\"foo\"", null, "<\"foo\">", false); parseDefaultTest("foo@apache.org", "foo@apache.org", null, "foo@apache.org", false); parseDefaultTest("\"foo\"@apache.org", "\"foo\"@apache.org", null, "<\"foo\"@apache.org>", false); parseDefaultTest("foo@[apache].org", "foo@[apache].org", null, "<foo@[apache].org>", false); parseDefaultTest("foo@[apache].[org]", "foo@[apache].[org]", null, "<foo@[apache].[org]>", false); parseDefaultTest("foo.bar@apache.org", "foo.bar@apache.org", null, "foo.bar@apache.org", false); parseDefaultTest("(Foo Bar) <foo.bar@apache.org>", "foo.bar@apache.org", null, "foo.bar@apache.org", false); parseDefaultTest("(Foo) (Bar) <foo.bar@apache.org>", "foo.bar@apache.org", null, "foo.bar@apache.org", false); parseDefaultTest("\"Foo\" Bar <foo.bar@apache.org>", "foo.bar@apache.org", "\"Foo\" Bar", "\"\\\"Foo\\\" Bar\" <foo.bar@apache.org>", false); parseDefaultTest("(Foo Bar) foo.bar@apache.org", "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); parseDefaultTest("apache.org", "apache.org", null, "apache.org", false); } public void testStrictParse() throws Exception { parseTest("<@apache.org,@apache.net:foo@apache.org>", true, "@apache.org,@apache.net:foo@apache.org", null, "<@apache.org,@apache.net:foo@apache.org>", false); parseTest("<@apache.org:foo@apache.org>", true, "@apache.org:foo@apache.org", null, "<@apache.org:foo@apache.org>", false); parseTest("Foo Bar:;", true, "Foo Bar:;", null, "Foo Bar:;", true); parseTest("\"\\\"Foo Bar\" <foo.bar@apache.org>", true, "foo.bar@apache.org", "\"Foo Bar", "\"\\\"Foo Bar\" <foo.bar@apache.org>", false); parseTest("\"Foo Bar\" <foo.bar@apache.org>", true, "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); parseTest("(Foo) (Bar) foo.bar@apache.org", true, "foo.bar@apache.org", "Foo", "Foo <foo.bar@apache.org>", false); parseTest("<foo@apache.org>", true, "foo@apache.org", null, "foo@apache.org", false); parseTest("Foo Bar <foo.bar@apache.org>", true, "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); parseTest("foo", true, "foo", null, "foo", false); parseTest("\"foo\"", true, "\"foo\"", null, "<\"foo\">", false); parseTest("foo@apache.org", true, "foo@apache.org", null, "foo@apache.org", false); parseTest("\"foo\"@apache.org", true, "\"foo\"@apache.org", null, "<\"foo\"@apache.org>", false); parseTest("foo@[apache].org", true, "foo@[apache].org", null, "<foo@[apache].org>", false); parseTest("foo@[apache].[org]", true, "foo@[apache].[org]", null, "<foo@[apache].[org]>", false); parseTest("foo.bar@apache.org", true, "foo.bar@apache.org", null, "foo.bar@apache.org", false); parseTest("(Foo Bar) <foo.bar@apache.org>", true, "foo.bar@apache.org", null, "foo.bar@apache.org", false); parseTest("(Foo) (Bar) <foo.bar@apache.org>", true, "foo.bar@apache.org", null, "foo.bar@apache.org", false); parseTest("\"Foo\" Bar <foo.bar@apache.org>", true, "foo.bar@apache.org", "\"Foo\" Bar", "\"\\\"Foo\\\" Bar\" <foo.bar@apache.org>", false); parseTest("(Foo Bar) foo.bar@apache.org", true, "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); parseTest("apache.org", true, "apache.org", null, "apache.org", false); } public void testConstructor() throws Exception { constructorTest("(Foo) (Bar) foo.bar@apache.org", false, "foo.bar@apache.org", "Foo", "Foo <foo.bar@apache.org>", false); constructorTest("<@apache.org,@apache.net:foo@apache.org>", false, "@apache.org,@apache.net:foo@apache.org", null, "<@apache.org,@apache.net:foo@apache.org>", false); constructorTest("<@apache.org:foo@apache.org>", false, "@apache.org:foo@apache.org", null, "<@apache.org:foo@apache.org>", false); constructorTest("Foo Bar:;", false, "Foo Bar:;", null, "Foo Bar:;", true); constructorTest("\"\\\"Foo Bar\" <foo.bar@apache.org>", false, "foo.bar@apache.org", "\"Foo Bar", "\"\\\"Foo Bar\" <foo.bar@apache.org>", false); constructorTest("\"Foo Bar\" <foo.bar@apache.org>", false, "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); constructorTest("<foo@apache.org>", false, "foo@apache.org", null, "foo@apache.org", false); constructorTest("Foo Bar <foo.bar@apache.org>", false, "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); constructorTest("foo", false, "foo", null, "foo", false); constructorTest("\"foo\"", false, "\"foo\"", null, "<\"foo\">", false); constructorTest("foo@apache.org", false, "foo@apache.org", null, "foo@apache.org", false); constructorTest("\"foo\"@apache.org", false, "\"foo\"@apache.org", null, "<\"foo\"@apache.org>", false); constructorTest("foo@[apache].org", false, "foo@[apache].org", null, "<foo@[apache].org>", false); constructorTest("foo@[apache].[org]", false, "foo@[apache].[org]", null, "<foo@[apache].[org]>", false); constructorTest("foo.bar@apache.org", false, "foo.bar@apache.org", null, "foo.bar@apache.org", false); constructorTest("(Foo Bar) <foo.bar@apache.org>", false, "foo.bar@apache.org", null, "foo.bar@apache.org", false); constructorTest("(Foo) (Bar) <foo.bar@apache.org>", false, "foo.bar@apache.org", null, "foo.bar@apache.org", false); constructorTest("\"Foo\" Bar <foo.bar@apache.org>", false, "foo.bar@apache.org", "\"Foo\" Bar", "\"\\\"Foo\\\" Bar\" <foo.bar@apache.org>", false); constructorTest("(Foo Bar) foo.bar@apache.org", false, "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); constructorTest("apache.org", false, "apache.org", null, "apache.org", false); } public void testDefaultConstructor() throws Exception { constructorDefaultTest("<@apache.org,@apache.net:foo@apache.org>", "@apache.org,@apache.net:foo@apache.org", null, "<@apache.org,@apache.net:foo@apache.org>", false); constructorDefaultTest("<@apache.org:foo@apache.org>", "@apache.org:foo@apache.org", null, "<@apache.org:foo@apache.org>", false); constructorDefaultTest("Foo Bar:;", "Foo Bar:;", null, "Foo Bar:;", true); constructorDefaultTest("\"\\\"Foo Bar\" <foo.bar@apache.org>", "foo.bar@apache.org", "\"Foo Bar", "\"\\\"Foo Bar\" <foo.bar@apache.org>", false); constructorDefaultTest("\"Foo Bar\" <foo.bar@apache.org>", "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); constructorDefaultTest("(Foo) (Bar) foo.bar@apache.org", "foo.bar@apache.org", "Foo", "Foo <foo.bar@apache.org>", false); constructorDefaultTest("<foo@apache.org>", "foo@apache.org", null, "foo@apache.org", false); constructorDefaultTest("Foo Bar <foo.bar@apache.org>", "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); constructorDefaultTest("foo", "foo", null, "foo", false); constructorDefaultTest("\"foo\"", "\"foo\"", null, "<\"foo\">", false); constructorDefaultTest("foo@apache.org", "foo@apache.org", null, "foo@apache.org", false); constructorDefaultTest("\"foo\"@apache.org", "\"foo\"@apache.org", null, "<\"foo\"@apache.org>", false); constructorDefaultTest("foo@[apache].org", "foo@[apache].org", null, "<foo@[apache].org>", false); constructorDefaultTest("foo@[apache].[org]", "foo@[apache].[org]", null, "<foo@[apache].[org]>", false); constructorDefaultTest("foo.bar@apache.org", "foo.bar@apache.org", null, "foo.bar@apache.org", false); constructorDefaultTest("(Foo Bar) <foo.bar@apache.org>", "foo.bar@apache.org", null, "foo.bar@apache.org", false); constructorDefaultTest("(Foo) (Bar) <foo.bar@apache.org>", "foo.bar@apache.org", null, "foo.bar@apache.org", false); constructorDefaultTest("\"Foo\" Bar <foo.bar@apache.org>", "foo.bar@apache.org", "\"Foo\" Bar", "\"\\\"Foo\\\" Bar\" <foo.bar@apache.org>", false); constructorDefaultTest("(Foo Bar) foo.bar@apache.org", "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); constructorDefaultTest("apache.org", "apache.org", null, "apache.org", false); } public void testStrictConstructor() throws Exception { constructorTest("<@apache.org,@apache.net:foo@apache.org>", true, "@apache.org,@apache.net:foo@apache.org", null, "<@apache.org,@apache.net:foo@apache.org>", false); constructorTest("<@apache.org:foo@apache.org>", true, "@apache.org:foo@apache.org", null, "<@apache.org:foo@apache.org>", false); constructorTest("Foo Bar:;", true, "Foo Bar:;", null, "Foo Bar:;", true); constructorTest("\"\\\"Foo Bar\" <foo.bar@apache.org>", true, "foo.bar@apache.org", "\"Foo Bar", "\"\\\"Foo Bar\" <foo.bar@apache.org>", false); constructorTest("\"Foo Bar\" <foo.bar@apache.org>", true, "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); constructorTest("(Foo) (Bar) foo.bar@apache.org", true, "foo.bar@apache.org", "Foo", "Foo <foo.bar@apache.org>", false); constructorTest("<foo@apache.org>", true, "foo@apache.org", null, "foo@apache.org", false); constructorTest("Foo Bar <foo.bar@apache.org>", true, "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); constructorTest("foo", true, "foo", null, "foo", false); constructorTest("\"foo\"", true, "\"foo\"", null, "<\"foo\">", false); constructorTest("foo@apache.org", true, "foo@apache.org", null, "foo@apache.org", false); constructorTest("\"foo\"@apache.org", true, "\"foo\"@apache.org", null, "<\"foo\"@apache.org>", false); constructorTest("foo@[apache].org", true, "foo@[apache].org", null, "<foo@[apache].org>", false); constructorTest("foo@[apache].[org]", true, "foo@[apache].[org]", null, "<foo@[apache].[org]>", false); constructorTest("foo.bar@apache.org", true, "foo.bar@apache.org", null, "foo.bar@apache.org", false); constructorTest("(Foo Bar) <foo.bar@apache.org>", true, "foo.bar@apache.org", null, "foo.bar@apache.org", false); constructorTest("(Foo) (Bar) <foo.bar@apache.org>", true, "foo.bar@apache.org", null, "foo.bar@apache.org", false); constructorTest("\"Foo\" Bar <foo.bar@apache.org>", true, "foo.bar@apache.org", "\"Foo\" Bar", "\"\\\"Foo\\\" Bar\" <foo.bar@apache.org>", false); constructorTest("(Foo Bar) foo.bar@apache.org", true, "foo.bar@apache.org", "Foo Bar", "Foo Bar <foo.bar@apache.org>", false); constructorTest("apache.org", true, "apache.org", null, "apache.org", false); } public void testParseHeaderList() throws Exception { InternetAddress[] addresses = InternetAddress.parseHeader("foo@apache.org,bar@apache.org", true); assertTrue("Expecting 2 addresses", addresses.length == 2); validateAddress(addresses[0], "foo@apache.org", null, "foo@apache.org", false); validateAddress(addresses[1], "bar@apache.org", null, "bar@apache.org", false); addresses = InternetAddress.parseHeader("Foo <foo@apache.org>,,Bar <bar@apache.org>", true); assertTrue("Expecting 2 addresses", addresses.length == 2); validateAddress(addresses[0], "foo@apache.org", "Foo", "Foo <foo@apache.org>", false); validateAddress(addresses[1], "bar@apache.org", "Bar", "Bar <bar@apache.org>", false); addresses = InternetAddress.parseHeader("foo@apache.org, bar@apache.org", true); assertTrue("Expecting 2 addresses", addresses.length == 2); validateAddress(addresses[0], "foo@apache.org", null, "foo@apache.org", false); validateAddress(addresses[1], "bar@apache.org", null, "bar@apache.org", false); addresses = InternetAddress.parseHeader("Foo <foo@apache.org>, Bar <bar@apache.org>", true); assertTrue("Expecting 2 addresses", addresses.length == 2); validateAddress(addresses[0], "foo@apache.org", "Foo", "Foo <foo@apache.org>", false); validateAddress(addresses[1], "bar@apache.org", "Bar", "Bar <bar@apache.org>", false); addresses = InternetAddress.parseHeader("Foo <foo@apache.org>,(yada),Bar <bar@apache.org>", true); assertTrue("Expecting 2 addresses", addresses.length == 2); validateAddress(addresses[0], "foo@apache.org", "Foo", "Foo <foo@apache.org>", false); validateAddress(addresses[1], "bar@apache.org", "Bar", "Bar <bar@apache.org>", false); } public void testParseHeaderErrors() throws Exception { parseHeaderErrorTest("foo@apache.org bar@apache.org", true); parseHeaderErrorTest("Foo foo@apache.org", true); parseHeaderErrorTest("Foo foo@apache.org", true); parseHeaderErrorTest("Foo <foo@apache.org", true); parseHeaderErrorTest("[foo]@apache.org", true); parseHeaderErrorTest("@apache.org", true); parseHeaderErrorTest("foo@[apache.org", true); } public void testValidateErrors() throws Exception { validateErrorTest("foo@apache.org bar@apache.org"); validateErrorTest("Foo foo@apache.org"); validateErrorTest("Foo foo@apache.org"); validateErrorTest("Foo <foo@apache.org"); validateErrorTest("[foo]@apache.org"); validateErrorTest("@apache.org"); validateErrorTest("foo@[apache.org"); } public void testGroup() throws Exception { parseHeaderTest("Foo:foo@apache.org;", true, "Foo:foo@apache.org;", null, "Foo:foo@apache.org;", true); parseHeaderTest("Foo:foo@apache.org,bar@apache.org;", true, "Foo:foo@apache.org,bar@apache.org;", null, "Foo:foo@apache.org,bar@apache.org;", true); parseHeaderTest("Foo Bar:<foo@apache.org>,bar@apache.org;", true, "Foo Bar:<foo@apache.org>,bar@apache.org;", null, "Foo Bar:<foo@apache.org>,bar@apache.org;", true); parseHeaderTest("Foo Bar:Foo <foo@apache.org>,bar@apache.org;", true, "Foo Bar:Foo<foo@apache.org>,bar@apache.org;", null, "Foo Bar:Foo<foo@apache.org>,bar@apache.org;", true); parseHeaderTest("Foo:<foo@apache.org>,,bar@apache.org;", true, "Foo:<foo@apache.org>,,bar@apache.org;", null, "Foo:<foo@apache.org>,,bar@apache.org;", true); parseHeaderTest("Foo:foo,bar;", true, "Foo:foo,bar;", null, "Foo:foo,bar;", true); parseHeaderTest("Foo:;", true, "Foo:;", null, "Foo:;", true); parseHeaderTest("\"Foo\":foo@apache.org;", true, "\"Foo\":foo@apache.org;", null, "\"Foo\":foo@apache.org;", true); parseHeaderErrorTest("Foo:foo@apache.org,bar@apache.org", true); parseHeaderErrorTest("Foo:foo@apache.org,Bar:bar@apache.org;;", true); parseHeaderErrorTest(":foo@apache.org;", true); parseHeaderErrorTest("Foo Bar:<foo@apache.org,bar@apache.org;", true); } public void testGetGroup() throws Exception { InternetAddress[] addresses = getGroup("Foo:foo@apache.org;", true); assertTrue("Expecting 1 address", addresses.length == 1); validateAddress(addresses[0], "foo@apache.org", null, "foo@apache.org", false); addresses = getGroup("Foo:foo@apache.org,bar@apache.org;", true); assertTrue("Expecting 2 addresses", addresses.length == 2); validateAddress(addresses[0], "foo@apache.org", null, "foo@apache.org", false); validateAddress(addresses[1], "bar@apache.org", null, "bar@apache.org", false); addresses = getGroup("Foo:<foo@apache.org>,bar@apache.org;", true); assertTrue("Expecting 2 addresses", addresses.length == 2); validateAddress(addresses[0], "foo@apache.org", null, "foo@apache.org", false); validateAddress(addresses[1], "bar@apache.org", null, "bar@apache.org", false); addresses = getGroup("Foo:<foo@apache.org>,,bar@apache.org;", true); assertTrue("Expecting 2 addresses", addresses.length == 2); validateAddress(addresses[0], "foo@apache.org", null, "foo@apache.org", false); validateAddress(addresses[1], "bar@apache.org", null, "bar@apache.org", false); addresses = getGroup("Foo:Foo <foo@apache.org>,bar@apache.org;", true); assertTrue("Expecting 2 addresses", addresses.length == 2); validateAddress(addresses[0], "foo@apache.org", "Foo", "Foo <foo@apache.org>", false); validateAddress(addresses[1], "bar@apache.org", null, "bar@apache.org", false); addresses = getGroup("Foo:Foo <@apache.org:foo@apache.org>,bar@apache.org;", true); assertTrue("Expecting 2 addresses", addresses.length == 2); validateAddress(addresses[0], "@apache.org:foo@apache.org", "Foo", "Foo <@apache.org:foo@apache.org>", false); validateAddress(addresses[1], "bar@apache.org", null, "bar@apache.org", false); addresses = getGroup("Foo:;", true); assertTrue("Expecting 0 addresses", addresses.length == 0); addresses = getGroup("Foo:foo@apache.org;", false); assertTrue("Expecting 1 address", addresses.length == 1); validateAddress(addresses[0], "foo@apache.org", null, "foo@apache.org", false); addresses = getGroup("Foo:foo@apache.org,bar@apache.org;", false); assertTrue("Expecting 2 addresses", addresses.length == 2); validateAddress(addresses[0], "foo@apache.org", null, "foo@apache.org", false); validateAddress(addresses[1], "bar@apache.org", null, "bar@apache.org", false); addresses = getGroup("Foo:<foo@apache.org>,bar@apache.org;", false); assertTrue("Expecting 2 addresses", addresses.length == 2); validateAddress(addresses[0], "foo@apache.org", null, "foo@apache.org", false); validateAddress(addresses[1], "bar@apache.org", null, "bar@apache.org", false); addresses = getGroup("Foo:<foo@apache.org>,,bar@apache.org;", false); assertTrue("Expecting 2 addresses", addresses.length == 2); validateAddress(addresses[0], "foo@apache.org", null, "foo@apache.org", false); validateAddress(addresses[1], "bar@apache.org", null, "bar@apache.org", false); addresses = getGroup("Foo:Foo <foo@apache.org>,bar@apache.org;", false); assertTrue("Expecting 2 addresses", addresses.length == 2); validateAddress(addresses[0], "foo@apache.org", "Foo", "Foo <foo@apache.org>", false); validateAddress(addresses[1], "bar@apache.org", null, "bar@apache.org", false); addresses = getGroup("Foo:Foo <@apache.org:foo@apache.org>,bar@apache.org;", false); assertTrue("Expecting 2 addresses", addresses.length == 2); validateAddress(addresses[0], "@apache.org:foo@apache.org", "Foo", "Foo <@apache.org:foo@apache.org>", false); validateAddress(addresses[1], "bar@apache.org", null, "bar@apache.org", false); addresses = getGroup("Foo:;", false); assertTrue("Expecting 0 addresses", addresses.length == 0); } public void testLocalAddress() throws Exception { System.getProperties().remove("user.name"); assertNull(InternetAddress.getLocalAddress(null)); System.setProperty("user.name", "dev"); InternetAddress localHost = null; String user = null; String host = null; try { user = System.getProperty("user.name"); host = InetAddress.getLocalHost().getHostName(); localHost = new InternetAddress(user + "@" + host); } catch (final AddressException e) { // ignore } catch (final UnknownHostException e) { // ignore } catch (final SecurityException e) { // ignore } assertEquals(InternetAddress.getLocalAddress(null), localHost); final Properties props = new Properties(); Session session = Session.getInstance(props, null); assertEquals(InternetAddress.getLocalAddress(session), localHost); props.put("mail.host", "apache.org"); session = Session.getInstance(props, null); assertEquals(InternetAddress.getLocalAddress(session), new InternetAddress(user + "@apache.org")); props.put("mail.user", "user"); props.remove("mail.host"); session = Session.getInstance(props, null); assertEquals(InternetAddress.getLocalAddress(session), new InternetAddress("user@" + host)); props.put("mail.host", "apache.org"); session = Session.getInstance(props, null); assertEquals(InternetAddress.getLocalAddress(session), new InternetAddress("user@apache.org")); props.put("mail.from", "tester@incubator.apache.org"); session = Session.getInstance(props, null); assertEquals(InternetAddress.getLocalAddress(session), new InternetAddress("tester@incubator.apache.org")); } private InternetAddress[] getGroup(final String address, final boolean strict) throws AddressException { final InternetAddress group = new InternetAddress(address); return group.getGroup(strict); } @Override protected void setUp() throws Exception { address = new InternetAddress(); } private void parseHeaderTest(final String address, final boolean strict, final String resultAddr, final String personal, final String toString, final boolean group) throws Exception { final InternetAddress[] addresses = InternetAddress.parseHeader(address, strict); assertTrue(addresses.length == 1); validateAddress(addresses[0], resultAddr, personal, toString, group); } private void parseHeaderErrorTest(final String address, final boolean strict) throws Exception { try { InternetAddress.parseHeader(address, strict); fail("Expected AddressException"); } catch (final AddressException e) { } } private void constructorTest(final String address, final boolean strict, final String resultAddr, final String personal, final String toString, final boolean group) throws Exception { validateAddress(new InternetAddress(address, strict), resultAddr, personal, toString, group); } private void constructorDefaultTest(final String address, final String resultAddr, final String personal, final String toString, final boolean group) throws Exception { validateAddress(new InternetAddress(address), resultAddr, personal, toString, group); } private void constructorErrorTest(final String address, final boolean strict) throws Exception { try { final InternetAddress foo = new InternetAddress(address, strict); fail("Expected AddressException"); } catch (final AddressException e) { } } private void parseTest(final String address, final boolean strict, final String resultAddr, final String personal, final String toString, final boolean group) throws Exception { final InternetAddress[] addresses = InternetAddress.parse(address, strict); assertTrue(addresses.length == 1); validateAddress(addresses[0], resultAddr, personal, toString, group); } private void parseErrorTest(final String address, final boolean strict) throws Exception { try { InternetAddress.parse(address, strict); fail("Expected AddressException"); } catch (final AddressException e) { } } private void parseDefaultTest(final String address, final String resultAddr, final String personal, final String toString, final boolean group) throws Exception { final InternetAddress[] addresses = InternetAddress.parse(address); assertTrue(addresses.length == 1); validateAddress(addresses[0], resultAddr, personal, toString, group); } private void parseDefaultErrorTest(final String address) throws Exception { try { InternetAddress.parse(address); fail("Expected AddressException"); } catch (final AddressException e) { } } private void validateTest(final String address) throws Exception { final InternetAddress test = new InternetAddress(); test.setAddress(address); test.validate(); } private void validateErrorTest(final String address) throws Exception { final InternetAddress test = new InternetAddress(); test.setAddress(address); try { test.validate(); fail("Expected AddressException"); } catch (final AddressException e) { } } private void validateAddress(final InternetAddress a, final String address, final String personal, final String toString, final boolean group) { assertEquals("Invalid address:", a.getAddress(), address); if (personal == null) { assertNull("Personal must be null", a.getPersonal()); } else { assertEquals("Invalid Personal:", a.getPersonal(), personal); } assertEquals("Invalid string value:", a.toString(), toString); assertTrue("Incorrect group value:", group == a.isGroup()); } }