package com.oreilly.jent.people.tags;

/**
 * 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.Test;

import org.apache.cactus.JspTestCase;

public class TestSearchTag extends JspTestCase {
    /** An instance of the SearchTag being tested */
    private SearchTag mTag = null;
    
    /** Default constructor */
    public TestSearchTag() {
        super();
    }

    /** Constructor with a name */
    public TestSearchTag(String name) {
        super(name);
    }

    /** Constructor that wraps a test with a Cactus test */
    public TestSearchTag(String name, Test t) {
        super(name, t);
    }
    
    /** Initialize our test fixture */
    public void setUp() {
        // Make a tag instance
        mTag = new SearchTag();
        // Set its JSP context
        mTag.setPageContext(this.pageContext);
    }

    /** Clean up our test fixture */
    public void tearDown() {
        // Call the context popBody() method, which will ensure that
        // it emits its generated content from the tag, if any.
        this.pageContext.popBody();
        // Release the tag reference
        mTag = null;
    }
    
    public void testValidSearch() {
        // Set the name of the page variable where the results are to be
        // stored
        mTag.setVarName("people");
        // Set the first name search attribute on the tag
        mTag.setFirstNamePattern("John");
        // Invoke the tag's doStartTag(), performing the search
        mTag.doStartTag();
        // If the tag performed as expected, there should be no
        // error message in "people-error", and a non-null collection
        // in the "people" page variable
        assertNull("Unexpected error string seen in page context",
                   this.pageContext.findAttribute("people-error"));
        assertNotNull("No results value found in page variable",
                      this.pageContext.findAttribute("people"));
    }
}
