You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by di...@apache.org on 2007/02/23 00:47:34 UTC

svn commit: r510715 - in /jakarta/commons/proper/email/trunk/src: java/org/apache/commons/mail/Email.java test/org/apache/commons/mail/EmailTest.java

Author: dion
Date: Thu Feb 22 15:47:33 2007
New Revision: 510715

URL: http://svn.apache.org/viewvc?view=rev&rev=510715
Log:
EMAIL-54 Charset support

Modified:
    jakarta/commons/proper/email/trunk/src/java/org/apache/commons/mail/Email.java
    jakarta/commons/proper/email/trunk/src/test/org/apache/commons/mail/EmailTest.java

Modified: jakarta/commons/proper/email/trunk/src/java/org/apache/commons/mail/Email.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/email/trunk/src/java/org/apache/commons/mail/Email.java?view=diff&rev=510715&r1=510714&r2=510715
==============================================================================
--- jakarta/commons/proper/email/trunk/src/java/org/apache/commons/mail/Email.java (original)
+++ jakarta/commons/proper/email/trunk/src/java/org/apache/commons/mail/Email.java Thu Feb 22 15:47:33 2007
@@ -16,6 +16,10 @@
  */
 package org.apache.commons.mail;
 
+import java.nio.charset.Charset;
+import java.nio.charset.IllegalCharsetNameException;
+import java.nio.charset.UnsupportedCharsetException;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
@@ -166,10 +170,10 @@
      * Defaults to the standard port ( 25 ).
      */
     protected String smtpPort = "25";
-    
+
     /**
      * The port number of the SSL enabled SMTP server;
-     * defaults to the standard port, 465. 
+     * defaults to the standard port, 465.
      */
     protected String sslSmtpPort = "465";
 
@@ -220,7 +224,7 @@
     protected boolean tls = false;
     /** does the current transport use SSL encryption? */
     protected boolean ssl = false;
-    
+
     /**
      * Setting to true will enable the display of debug information.
      *
@@ -271,11 +275,15 @@
      * Set the charset of the message.
      *
      * @param newCharset A String.
+     * @throws IllegalCharsetNameException if the charset name is invalid
+     * @throws UnsupportedCharsetException if no support for the named charset
+     * exists in the current JVM
      * @since 1.0
      */
     public void setCharset(String newCharset)
     {
-        this.charset = newCharset;
+        Charset set = Charset.forName(newCharset);
+        this.charset = set.name();
     }
 
     /**
@@ -344,7 +352,7 @@
     }
 
     /**
-     * Set or disable the TLS encryption 
+     * Set or disable the TLS encryption
      *
      * @param withTLS true if TLS needed, false otherwise
      * @since 1.1
@@ -461,7 +469,7 @@
                 properties.setProperty(MAIL_PORT, sslSmtpPort);
                 properties.setProperty(MAIL_SMTP_SOCKET_FACTORY_PORT, sslSmtpPort);
                 properties.setProperty(MAIL_SMTP_SOCKET_FACTORY_CLASS, "javax.net.ssl.SSLSocketFactory");
-                properties.setProperty(MAIL_SMTP_SOCKET_FACTORY_FALLBACK, "false");           	
+                properties.setProperty(MAIL_SMTP_SOCKET_FACTORY_FALLBACK, "false");
             }
 
             if (this.bounceAddress != null)
@@ -482,34 +490,41 @@
      *
      * @param email An email address.
      * @param name A name.
+     * @param charsetName The name of the charset to encode the name with.
      * @return An internet address.
-     * @throws EmailException Thrown when the address supplied or name were invalid.
+     * @throws EmailException Thrown when the supplied address, name or charset were invalid.
      */
-    private InternetAddress createInternetAddress(String email, String name)
+    private InternetAddress createInternetAddress(String email, String name, String charsetName)
         throws EmailException
     {
         InternetAddress address = null;
 
         try
         {
+            address = new InternetAddress(email);
+
             // check name input
             if (EmailUtils.isEmpty(name))
             {
                 name = email;
             }
 
-            // Using this instead of new InternetAddress(email, name, [charset]) makes
-            // commons-email usable with javamail 1.2 / J2EE 1.3
-            address = new InternetAddress(email);
-
-            if (EmailUtils.isNotEmpty(this.charset))
+            // check charset input.
+            if (EmailUtils.isEmpty(charsetName))
             {
-                address.setPersonal(name, this.charset);
+                address.setPersonal(name);
             }
             else
             {
-                address.setPersonal(name);
+                // canonicalize the charset name and make sure
+                // the current platform supports it.
+                Charset set = Charset.forName(charsetName);
+                address.setPersonal(name, set.name());
             }
+
+            // run sanity check on new InternetAddress object; if this fails
+            // it will throw AddressException.
+            address.validate();
         }
         catch (Exception e)
         {
@@ -520,7 +535,10 @@
 
 
     /**
-     * Set the FROM field of the email.
+     * Set the FROM field of the email to use the specified address. The email
+     * address will also be used as the personal name. The name will be encoded
+     * using the Java platform's default charset (UTF-16) if it contains
+     * non-ASCII characters; otherwise, it is used as is.
      *
      * @param email A String.
      * @return An Email.
@@ -534,7 +552,10 @@
     }
 
     /**
-     * Set the FROM field of the email.
+     * Set the FROM field of the email to use the specified address and the
+     * specified personal name. The name will be encoded using the Java
+     * platform's default charset (UTF-16) if it contains non-ASCII
+     * characters; otherwise, it is used as is.
      *
      * @param email A String.
      * @param name A String.
@@ -545,13 +566,32 @@
     public Email setFrom(String email, String name)
         throws EmailException
     {
-        this.fromAddress = createInternetAddress(email, name);
+        return setFrom(email, name, null);
+    }
 
+    /**
+     * Set the FROM field of the email to use the specified address, personal
+     * name, and charset encoding for the name.
+     *
+     * @param email A String.
+     * @param name A String.
+     * @param charset The charset to encode the name with.
+     * @throws EmailException Indicates an invalid email address or charset.
+     * @return An Email.
+     * @since 1.1
+     */
+    public Email setFrom(String email, String name, String charset)
+        throws EmailException
+    {
+        this.fromAddress = createInternetAddress(email, name, charset);
         return this;
     }
 
     /**
-     * Add a recipient TO to the email.
+     * Add a recipient TO to the email. The email
+     * address will also be used as the personal name. The name will be encoded
+     * using the Java platform's default charset (UTF-16) if it contains
+     * non-ASCII characters; otherwise, it is used as is.
      *
      * @param email A String.
      * @throws EmailException Indicates an invalid email address.
@@ -565,7 +605,10 @@
     }
 
     /**
-     * Add a recipient TO to the email.
+     * Add a recipient TO to the email using the specified address and the
+     * specified personal name. The name will be encoded using the Java
+     * platform's default charset (UTF-16) if it contains non-ASCII
+     * characters; otherwise, it is used as is.
      *
      * @param email A String.
      * @param name A String.
@@ -576,16 +619,36 @@
     public Email addTo(String email, String name)
         throws EmailException
     {
-        this.toList.add(createInternetAddress(email, name));
+        return addTo(email, name, null);
+    }
+
+    /**
+     * Add a recipient TO to the email using the specified address, personal
+     * name, and charset encoding for the name.
+     *
+     * @param email A String.
+     * @param name A String.
+     * @param charset The charset to encode the name with.
+     * @throws EmailException Indicates an invalid email address or charset.
+     * @return An Email.
+     * @since 1.1
+     */
+    public Email addTo(String email, String name, String charset)
+        throws EmailException
+    {
+        this.toList.add(createInternetAddress(email, name, charset));
         return this;
     }
 
     /**
-     * Set a list of "TO" addresses.
+     * Set a list of "TO" addresses. All elements in the specified
+     * <code>Collection</code> are expected to be of type
+     * <code>java.mail.internet.InternetAddress</code>.
      *
-     * @param  aCollection collection of InternetAddress objects.
+     * @param  aCollection collection of <code>InternetAddress</code> objects.
      * @throws EmailException Indicates an invalid email address.
      * @return An Email.
+     * @see javax.mail.internet.InternetAddress
      * @since 1.0
      */
     public Email setTo(Collection aCollection) throws EmailException
@@ -600,7 +663,10 @@
     }
 
     /**
-     * Add a recipient CC to the email.
+     * Add a recipient CC to the email. The email
+     * address will also be used as the personal name. The name will be encoded
+     * using the Java platform's default charset (UTF-16) if it contains
+     * non-ASCII characters; otherwise, it is used as is.
      *
      * @param email A String.
      * @return An Email.
@@ -614,7 +680,10 @@
     }
 
     /**
-     * Add a recipient CC to the email.
+     * Add a recipient CC to the email using the specified address and the
+     * specified personal name. The name will be encoded using the Java
+     * platform's default charset (UTF-16) if it contains non-ASCII
+     * characters; otherwise, it is used as is.
      *
      * @param email A String.
      * @param name A String.
@@ -625,17 +694,37 @@
     public Email addCc(String email, String name)
         throws EmailException
     {
-        this.ccList.add(createInternetAddress(email, name));
+        return addCc(email, name, null);
+    }
+
+    /**
+     * Add a recipient CC to the email using the specified address, personal
+     * name, and charset encoding for the name.
+     *
+     * @param email A String.
+     * @param name A String.
+     * @param charset The charset to encode the name with.
+     * @throws EmailException Indicates an invalid email address or charset.
+     * @return An Email.
+     * @since 1.1
+     */
+    public Email addCc(String email, String name, String charset)
+        throws EmailException
+    {
+        this.ccList.add(createInternetAddress(email, name, charset));
         return this;
     }
 
     /**
-     * Set a list of "CC" addresses.
+     * Set a list of "CC" addresses. All elements in the specified
+     * <code>Collection</code> are expected to be of type
+     * <code>java.mail.internet.InternetAddress</code>.
      *
-     * @param aCollection collection of InternetAddress objects.
+     * @param aCollection collection of <code>InternetAddress</code> objects.
      * @return An Email.
-     * @throws EmailException Indicates an invalid email address
-     * @since 1.0.
+     * @throws EmailException Indicates an invalid email address.
+     * @see javax.mail.internet.InternetAddress
+     * @since 1.0
      */
     public Email setCc(Collection aCollection) throws EmailException
     {
@@ -649,7 +738,10 @@
     }
 
     /**
-     * Add a blind BCC recipient to the email.
+     * Add a blind BCC recipient to the email. The email
+     * address will also be used as the personal name. The name will be encoded
+     * using the Java platform's default charset (UTF-16) if it contains
+     * non-ASCII characters; otherwise, it is used as is.
      *
      * @param email A String.
      * @return An Email.
@@ -663,7 +755,10 @@
     }
 
     /**
-     * Add a blind BCC recipient to the email.
+     * Add a blind BCC recipient to the email using the specified address and
+     * the specified personal name. The name will be encoded using the Java
+     * platform's default charset (UTF-16) if it contains non-ASCII
+     * characters; otherwise, it is used as is.
      *
      * @param email A String.
      * @param name A String.
@@ -674,16 +769,36 @@
     public Email addBcc(String email, String name)
         throws EmailException
     {
-        this.bccList.add(createInternetAddress(email, name));
+        return addBcc(email, name, null);
+    }
+
+    /**
+     * Add a blind BCC recipient to the email using the specified address,
+     * personal name, and charset encoding for the name.
+     *
+     * @param email A String.
+     * @param name A String.
+     * @param charset The charset to encode the name with.
+     * @return An Email.
+     * @throws EmailException Indicates an invalid email address
+     * @since 1.1
+     */
+    public Email addBcc(String email, String name, String charset)
+        throws EmailException
+    {
+        this.bccList.add(createInternetAddress(email, name, charset));
         return this;
     }
 
     /**
-     * Set a list of "BCC" addresses
+     * Set a list of "BCC" addresses. All elements in the specified
+     * <code>Collection</code> are expected to be of type
+     * <code>java.mail.internet.InternetAddress</code>.
      *
-     * @param   aCollection collection of InternetAddress objects
+     * @param   aCollection collection of <code>InternetAddress</code> objects
      * @return  An Email.
      * @throws EmailException Indicates an invalid email address
+     * @see javax.mail.internet.InternetAddress
      * @since 1.0
      */
     public Email setBcc(Collection aCollection) throws EmailException
@@ -698,7 +813,10 @@
     }
 
     /**
-     * Add a reply to address to the email.
+     * Add a reply to address to the email. The email
+     * address will also be used as the personal name. The name will be encoded
+     * using the Java platform's default charset (UTF-16) if it contains
+     * non-ASCII characters; otherwise, it is used as is.
      *
      * @param email A String.
      * @return An Email.
@@ -712,7 +830,10 @@
     }
 
     /**
-     * Add a reply to address to the email.
+     * Add a reply to address to the email using the specified address and
+     * the specified personal name. The name will be encoded using the Java
+     * platform's default charset (UTF-16) if it contains non-ASCII
+     * characters; otherwise, it is used as is.
      *
      * @param email A String.
      * @param name A String.
@@ -723,16 +844,36 @@
     public Email addReplyTo(String email, String name)
         throws EmailException
     {
-        this.replyList.add(createInternetAddress(email, name));
+        return addReplyTo(email, name, null);
+    }
+
+    /**
+     * Add a reply to address to the email using the specified address,
+     * personal name, and charset encoding for the name.
+     *
+     * @param email A String.
+     * @param name A String.
+     * @param charset The charset to encode the name with.
+     * @return An Email.
+     * @throws EmailException Indicates an invalid email address or charset.
+     * @since 1.1
+     */
+    public Email addReplyTo(String email, String name, String charset)
+        throws EmailException
+    {
+        this.replyList.add(createInternetAddress(email, name, charset));
         return this;
     }
 
     /**
-     * Set a list of reply addresses
+     * Set a list of reply to addresses. All elements in the specified
+     * <code>Collection</code> are expected to be of type
+     * <code>java.mail.internet.InternetAddress</code>.
      *
-     * @param   aCollection collection of InternetAddress objects
+     * @param   aCollection collection of <code>InternetAddress</code> objects
      * @return  An Email.
      * @throws EmailException Indicates an invalid email address
+     * @see javax.mail.internet.InternetAddress
      * @since 1.1
      */
     public Email setReplyTo(Collection aCollection) throws EmailException

Modified: jakarta/commons/proper/email/trunk/src/test/org/apache/commons/mail/EmailTest.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/email/trunk/src/test/org/apache/commons/mail/EmailTest.java?view=diff&rev=510715&r1=510714&r2=510715
==============================================================================
--- jakarta/commons/proper/email/trunk/src/test/org/apache/commons/mail/EmailTest.java (original)
+++ jakarta/commons/proper/email/trunk/src/test/org/apache/commons/mail/EmailTest.java Thu Feb 22 15:47:33 2007
@@ -17,6 +17,8 @@
 package org.apache.commons.mail;
 
 import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
+import java.nio.charset.IllegalCharsetNameException;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
@@ -157,11 +159,15 @@
     /** */
     public void testGetSetCharset()
     {
-        for (int i = 0; i < testCharsValid.length; i++)
-        {
-            this.email.setCharset(testCharsValid[i]);
-            assertEquals(testCharsValid[i], this.email.getCharset());
-        }
+        // test ASCII and UTF-8 charsets; since every JVM is required
+        // to support these, testing them should always succeed.
+        Charset set = Charset.forName("US-ASCII");
+        this.email.setCharset(set.name());
+        assertEquals(set.name(), this.email.getCharset());
+
+        set = Charset.forName("UTF-8");
+        this.email.setCharset(set.name());
+        assertEquals(set.name(), this.email.getCharset());
     }
 
     /** */
@@ -304,7 +310,7 @@
      *
      * @throws Exception Exception
      */
-    public void testSetFromWithEnconding() throws Exception
+    public void testSetFromWithEncoding() throws Exception
     {
         // ====================================================================
         // Test Success (with charset set)
@@ -312,11 +318,10 @@
         String testValidEmail = "me@home.com";
 
         InternetAddress inetExpected =
-            new InternetAddress("me@home.com", "me@home.com");
+            new InternetAddress("me@home.com", "me@home.com", Email.ISO_8859_1);
 
         // set from
-        this.email.setCharset(Email.ISO_8859_1);
-        this.email.setFrom(testValidEmail);
+        this.email.setFrom(testValidEmail, testValidEmail, Email.ISO_8859_1);
 
         // retrieve and verify
         assertEquals(inetExpected, this.email.getFromAddress());
@@ -336,7 +341,7 @@
         {
             "me@home.com",
             "joe.doe@apache.org",
-            "someone_here@work-address.com.au" 
+            "someone_here@work-address.com.au"
         };
         String[] testEmailNames = { "Name1", "", null };
         ArrayList arrExpected = new ArrayList();
@@ -363,27 +368,25 @@
         // ====================================================================
         // Test Exceptions
         // ====================================================================
+        // reset the mail class
+        MockEmailConcrete anotherEmail = new MockEmailConcrete();
+
         // bad encoding
         try
         {
-            // reset the mail class
-            MockEmailConcrete anotherEmail = new MockEmailConcrete();
             // set a dodgy encoding scheme
-            anotherEmail.setCharset("bad.encoding\uc5ec\n");
-            // set a valid address but bad personal name
-            anotherEmail.setFrom(
-                "me@home.com",
-                "\t.bad.personal.name.\uc5ec\n");
-            fail("Should have thrown an exception");
+            anotherEmail.setFrom("me@home.com", "me@home.com", "bad.encoding\uc5ec\n");
+            fail("setting invalid charset should have failed!");
         }
         catch (EmailException e)
         {
-            assertTrue(true);
+            // expected runtime exception.
+            assertTrue(e.getCause() instanceof IllegalCharsetNameException);
         }
     }
 
     /**
-     * @throws EmailException  
+     * @throws EmailException
      * @throws UnsupportedEncodingException */
     public void testAddTo() throws EmailException, UnsupportedEncodingException
     {
@@ -414,25 +417,31 @@
     }
 
     /**
-     * @throws UnsupportedEncodingException  
+     * @throws UnsupportedEncodingException
      * @throws EmailException */
     public void testAddToWithEncoding() throws UnsupportedEncodingException, EmailException
     {
         // ====================================================================
         // Test Success
         // ====================================================================
-        this.email.charset = Email.US_ASCII;
+        String testCharset = Email.ISO_8859_1;
 
         ArrayList arrExpected = new ArrayList();
-        arrExpected.add(new InternetAddress("me@home.com", "me@home.com"));
+        arrExpected.add(
+            new InternetAddress(
+                "me@home.com",
+                "me@home.com",
+                testCharset));
         arrExpected.add(
             new InternetAddress(
                 "joe.doe@apache.org",
-                "joe.doe@apache.org"));
+                "joe.doe@apache.org",
+                testCharset));
         arrExpected.add(
             new InternetAddress(
                 "someone_here@work-address.com.au",
-                "someone_here@work-address.com.au"));
+                "someone_here@work-address.com.au",
+                testCharset));
 
         for (int i = 0; i < ARR_VALID_EMAILS.length; i++)
         {
@@ -446,7 +455,7 @@
     }
 
     /**
-     * @throws UnsupportedEncodingException  
+     * @throws UnsupportedEncodingException
      * @throws EmailException */
     public void testAddTo2() throws UnsupportedEncodingException, EmailException
     {
@@ -480,26 +489,26 @@
         // ====================================================================
         // Test Exceptions
         // ====================================================================
+        // reset the mail class
+        MockEmailConcrete anotherEmail = new MockEmailConcrete();
+
         // bad encoding
         try
         {
-            // reset the mail class
-            MockEmailConcrete anotherEmail = new MockEmailConcrete();
             // set a dodgy encoding scheme
-            anotherEmail.setCharset("bad.encoding\uc5ec\n");
-            // set a valid address but bad personal name
-            anotherEmail.addTo("me@home.com", "\t.bad.name.\uc5ec\n");
-            fail("Should have thrown an exception");
+            anotherEmail.addTo("me@home.com", "me@home.com", "bad.encoding\uc5ec\n");
+            fail("setting invalid charset should have failed!");
         }
         catch (EmailException e)
         {
-            assertTrue(true);
+            // expected runtime exception.
+            assertTrue(e.getCause() instanceof IllegalCharsetNameException);
         }
     }
 
     /**
-     * @throws UnsupportedEncodingException   
-     * @throws EmailException 
+     * @throws UnsupportedEncodingException
+     * @throws EmailException
      */
     public void testSetTo() throws UnsupportedEncodingException, EmailException
     {
@@ -553,7 +562,7 @@
     }
 
     /**
-     * @throws UnsupportedEncodingException  
+     * @throws UnsupportedEncodingException
      * @throws EmailException */
     public void testAddCc() throws UnsupportedEncodingException, EmailException
     {
@@ -584,25 +593,31 @@
     }
 
     /**
-     * @throws UnsupportedEncodingException  
+     * @throws UnsupportedEncodingException
      * @throws EmailException */
     public void testAddCcWithEncoding() throws UnsupportedEncodingException, EmailException
     {
         // ====================================================================
         // Test Success
         // ====================================================================
-        this.email.charset = Email.US_ASCII;
+        String testCharset = Email.ISO_8859_1;
 
         ArrayList arrExpected = new ArrayList();
-        arrExpected.add(new InternetAddress("me@home.com", "me@home.com"));
+        arrExpected.add(
+            new InternetAddress(
+                "me@home.com",
+                "me@home.com",
+                testCharset));
         arrExpected.add(
             new InternetAddress(
                 "joe.doe@apache.org",
-                "joe.doe@apache.org"));
+                "joe.doe@apache.org",
+                testCharset));
         arrExpected.add(
             new InternetAddress(
                 "someone_here@work-address.com.au",
-                "someone_here@work-address.com.au"));
+                "someone_here@work-address.com.au",
+                testCharset));
 
         // add valid ccs
         for (int i = 0; i < ARR_VALID_EMAILS.length; i++)
@@ -616,7 +631,7 @@
     }
 
     /**
-     * @throws UnsupportedEncodingException  
+     * @throws UnsupportedEncodingException
      * @throws EmailException */
     public void testAddCc2() throws UnsupportedEncodingException, EmailException
     {
@@ -650,20 +665,20 @@
         // ====================================================================
         // Test Exceptions
         // ====================================================================
+        // reset the mail class
+        MockEmailConcrete anotherEmail = new MockEmailConcrete();
+
         // bad encoding
         try
         {
-            // reset the mail class
-            MockEmailConcrete anotherEmail = new MockEmailConcrete();
             // set a dodgy encoding scheme
-            anotherEmail.setCharset("bad.encoding\uc5ec\n");
-            // set a valid address but bad personal name
-            anotherEmail.addCc("me@home.com", "\t.bad.name.\uc5ec\n");
-            fail("Should have thrown an exception");
+            anotherEmail.addCc("me@home.com", "me@home.com", "bad.encoding\uc5ec\n");
+            fail("setting invalid charset should have failed!");
         }
         catch (EmailException e)
         {
-            assertTrue(true);
+            // expected runtime exception.
+            assertTrue(e.getCause() instanceof IllegalCharsetNameException);
         }
     }
 
@@ -711,7 +726,7 @@
     }
 
     /**
-     * @throws UnsupportedEncodingException  
+     * @throws UnsupportedEncodingException
      * @throws EmailException */
     public void testAddBcc() throws UnsupportedEncodingException, EmailException
     {
@@ -744,25 +759,31 @@
     }
 
     /**
-     * @throws UnsupportedEncodingException  
+     * @throws UnsupportedEncodingException
      * @throws EmailException */
     public void testAddBccWithEncoding() throws UnsupportedEncodingException, EmailException
     {
         // ====================================================================
         // Test Success
         // ====================================================================
-        this.email.charset = Email.US_ASCII;
+        String testCharset = Email.ISO_8859_1;
 
         ArrayList arrExpected = new ArrayList();
-        arrExpected.add(new InternetAddress("me@home.com", "me@home.com"));
+        arrExpected.add(
+            new InternetAddress(
+                "me@home.com",
+                "me@home.com",
+                testCharset));
         arrExpected.add(
             new InternetAddress(
                 "joe.doe@apache.org",
-                "joe.doe@apache.org"));
+                "joe.doe@apache.org",
+                testCharset));
         arrExpected.add(
             new InternetAddress(
                 "someone_here@work-address.com.au",
-                "someone_here@work-address.com.au"));
+                "someone_here@work-address.com.au",
+                testCharset));
 
         for (int i = 0; i < ARR_VALID_EMAILS.length; i++)
         {
@@ -778,7 +799,7 @@
     }
 
     /**
-     * @throws UnsupportedEncodingException  
+     * @throws UnsupportedEncodingException
      * @throws EmailException */
     public void testAddBcc2() throws UnsupportedEncodingException, EmailException
     {
@@ -814,25 +835,25 @@
         // ====================================================================
         // Test Exceptions
         // ====================================================================
+        // reset the mail class
+        MockEmailConcrete anotherEmail = new MockEmailConcrete();
+
         // bad encoding
         try
         {
-            // reset the mail class
-            MockEmailConcrete anotherEmail = new MockEmailConcrete();
             // set a dodgy encoding scheme
-            anotherEmail.setCharset("bad.encoding\uc5ec\n");
-            // set a valid address but bad personal name
-            anotherEmail.addBcc("me@home.com", "\t.bad.name.\uc5ec\n");
-            fail("Should have thrown an exception");
+            anotherEmail.addBcc("me@home.com", "me@home.com", "bad.encoding\uc5ec\n");
+            fail("setting invalid charset should have failed!");
         }
         catch (EmailException e)
         {
-            assertTrue(true);
+            // expected runtime exception.
+            assertTrue(e.getCause() instanceof IllegalCharsetNameException);
         }
     }
 
     /**
-     * @throws UnsupportedEncodingException  
+     * @throws UnsupportedEncodingException
      * @throws EmailException */
     public void testSetBcc() throws UnsupportedEncodingException, EmailException
     {
@@ -881,7 +902,7 @@
     }
 
     /**
-     * @throws UnsupportedEncodingException  
+     * @throws UnsupportedEncodingException
      * @throws EmailException */
     public void testAddReplyTo() throws UnsupportedEncodingException, EmailException
     {
@@ -914,25 +935,31 @@
     }
 
     /**
-     * @throws UnsupportedEncodingException  
+     * @throws UnsupportedEncodingException
      * @throws EmailException */
     public void testAddReplyToWithEncoding() throws UnsupportedEncodingException, EmailException
     {
         // ====================================================================
         // Test Success
         // ====================================================================
-        this.email.charset = Email.US_ASCII;
+        String testCharset = Email.ISO_8859_1;
 
         ArrayList arrExpected = new ArrayList();
-        arrExpected.add(new InternetAddress("me@home.com", "me@home.com"));
+        arrExpected.add(
+            new InternetAddress(
+                "me@home.com",
+                "me@home.com",
+                testCharset));
         arrExpected.add(
             new InternetAddress(
                 "joe.doe@apache.org",
-                "joe.doe@apache.org"));
+                "joe.doe@apache.org",
+                testCharset));
         arrExpected.add(
             new InternetAddress(
                 "someone_here@work-address.com.au",
-                "someone_here@work-address.com.au"));
+                "someone_here@work-address.com.au",
+                testCharset));
 
         for (int i = 0; i < ARR_VALID_EMAILS.length; i++)
         {
@@ -948,7 +975,7 @@
     }
 
     /**
-     * @throws UnsupportedEncodingException  
+     * @throws UnsupportedEncodingException
      * @throws EmailException */
     public void testAddReplyTo2() throws UnsupportedEncodingException, EmailException
     {
@@ -984,20 +1011,20 @@
         // ====================================================================
         // Test Exceptions
         // ====================================================================
+        // reset the mail class
+        MockEmailConcrete anotherEmail = new MockEmailConcrete();
+
         // bad encoding
         try
         {
-            // reset the mail class
-            MockEmailConcrete anotherEmail = new MockEmailConcrete();
             // set a dodgy encoding scheme
-            anotherEmail.setCharset("bad.encoding\uc5ec\n");
-            // set a valid address but bad personal name
-            anotherEmail.addReplyTo("me@home.com", "\t.bad.name.\uc5ec\n");
-            fail("Should have thrown an exception");
+            anotherEmail.addReplyTo("me@home.com", "me@home.com", "bad.encoding\uc5ec\n");
+            fail("setting invalid charset should have failed!");
         }
         catch (EmailException e)
         {
-            assertTrue(true);
+            // expected runtime exception.
+            assertTrue(e.getCause() instanceof IllegalCharsetNameException);
         }
     }
 
@@ -1269,7 +1296,7 @@
     }
 
     /**
-     * @throws EmailException  
+     * @throws EmailException
      * @throws UnsupportedEncodingException */
     public void testToInternetAddressArray() throws EmailException, UnsupportedEncodingException
     {



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org