blob: cd97f369d79ba7c876c716e03ae39f0804ea7b8a [file]
/*
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 2001-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Xalan" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation and was
* originally based on software copyright (c) 2000, Lotus
* Development Corporation., http://www.lotus.com. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
/*
*
* Datalet.java
*
*/
package org.apache.qetest;
import java.util.Hashtable;
/**
* Minimal interface defining a datalet, a single set of data
* for a simple test case.
* <p>A Datalet defines a single group of data that a matching
* Testlet needs to execute it's simple test case. Normally,
* Testlets and Datalets are matched.</p>
*
* <p>This makes creating data-driven tests simpler, by separating
* the test algorithim from the definition of the test data. Note
* that logging what happened during the test is already separated
* out into the Logger interface.</p>
*
* <p>Normally Datalets will simply be collections of public members
* that can be written or read by anyone. An enclosing test can
* simply create or load a number of Datalets and then pass them
* to a Testlet to execute the whole bunch of them.</p>
*
* <p>One way to look at a Datalet is basically an intelligent
* Properties / Hashtable / InputSource, designed for a
* specific set of data. They can be loaded from a variety of
* inputs and will intelligently create the right kind of data
* that their corresponding Testlet is expecting.
* For example, and DOM-based InputSource Datalet might be
* loaded from a number of Strings denoting filenames or URLs.
* The Datalet would then know how to parse each of the files
* into a DOM, which a Testlet could then use directly.</p>
*
* <p>//@todo what metaphor is best? I.e. Should Datalets break OO
* paradigms and just have public members, or should they work more
* like a Hashtable with some Properties-like features thrown in?
* Or: what are the most important
* things to optimize: syntactic sugar-like simplicity for callers;
* more functionality for different datatypes; ease of use by
* inexperienced coders (perhaps testers who are just learning Java);
* ease of use by experienced coders?</p>
*
*
* <p>//@todo Should we add a getParameterInfo() method?</p>
* @author Shane_Curcuru@lotus.com
* @version $Id$
*/
public interface Datalet
{
/**
* Accesor method for a brief description of this Datalet.
*
* @return String describing the specific set of data
* this Datalet contains (can often be used as the description
* of any check() calls made from the Testlet).
*/
public abstract String getDescription();
/**
* Accesor method for a brief description of this Datalet.
* Datalets must have this as a read/write property, since many
* users will programmatically construct Datalets.
*
* @param s description to use for this Datalet.
*/
public abstract void setDescription(String s);
/**
* Load fields of this Datalet from a Hashtable.
* Note many datalets might take in a Properties block
* instead for simple String-valued data.
*
* @param Hashtable to load; Datalet should attempt to fill
* in as many member variables as possible from this, leaving
* any non-specified variables null or some default; behavior
* if null is passed is undefined
*/
public abstract void load(Hashtable h);
/**
* Load fields of this Datalet from an array.
* This allows most Datalets to be initialized from a main()
* command line or the like. For any String-valued types, or
* types that can easily be derived from a String, this makes
* running ad-hoc tests very easy.
*
* @param args array of Strings, as if from the command line;
* Datalet should attempt to fill in as many member variables
* as possible from this, defining the order itself, leaving
* any non-specified variables null or some default; behavior
* if null is passed is undefined
*/
public abstract void load(String[] args);
} // end of class Datalet