package com.oreilly.jent.people;

/**
 * In general, you may use the code in this book in your programs and 
 * documentation. You do not need to contact us for permission unless 
 * you're reproducing a significant portion of the code. For example, 
 * writing a program that uses several chunks of code from this book does 
 * not require permission. Selling or distributing a CD-ROM of examples 
 * from O'Reilly books does require permission. Answering a question by 
 * citing this book and quoting example code does not require permission. 
 * Incorporating a significant amount of example code from this book into 
 * your product's documentation does require permission.
 * 
 * We appreciate, but do not require, attribution. An attribution usually 
 * includes the title, author, publisher, and ISBN. For example: 
 * 
 *   "Java Enterprise in a Nutshell, Third Edition, 
 *    by Jim Farley and William Crawford 
 *    with Prakash Malani, John G. Norman, and Justin Gehtland. 
 *    Copyright 2006 O'Reilly Media, Inc., 0-596-10142-2."
 *  
 *  If you feel your use of code examples falls outside fair use or the 
 *  permission given above, feel free to contact us at 
 *  permissions@oreilly.com.
 */

import junit.framework.TestCase;

public class TestPersonNoFixture extends TestCase {
    /** Default constructor */
    public TestPersonNoFixture() {
        super();
    }

    /** Constructor with a name for the test case */
    public TestPersonNoFixture(String name) {
        super(name);
    }

    /** Test the name accessors on the Person bean */
    public void testSetName() {
        // Create a fresh person
        Person p = new Person();
        // Set the first and last name fields
        String fName = "John";
        String lName = "Smith";
        p.setFirstName(fName);
        p.setLastName(lName);
        // Verify that the values were accepted and saved
        assertNotNull(p.getFirstName());
        assertEquals(p.getFirstName(), fName);
        assertNotNull(p.getLastName());
        assertEquals(p.getLastName(), lName);
    }
    
    /** Test the addition of email addresses */
    public void testAddEmail() {
        // Create a fresh person
        Person p = new Person();
        // Set the email address
        String addr = "jsmith@anywhere.com";
        p.addEmailAddress(addr);
        // There should only be a single email address on the person
        assertEquals(p.getEmailAddresses().length, 1);
        // The email address should be the value we just added
        String addrR = (String)p.getEmailAddresses()[0];
        assertNotNull(addrR);
        assertEquals(addr, addrR);
    }
    
    public void testEquals() {
        Person p = new Person();
        // Set up a test person with some data
        p.setFirstName("John");
        p.setLastName("Jones");
        p.addEmailAddress("jjones@somewhereelse.org");
        try {
            // The equals implementation on Person should
            // always return true when a Person is compared
            // to itself
            assertTrue(p.equals(p));
        }
        catch (Exception e) {
            // Fail if the equals method generates any exceptions
            fail("Unexpected exception: " + e.getMessage());
        }
    }
}
