blob: 0b9fa0029eb2a688e53a6879acb67a153f7346ec [file] [log] [blame]
/*
* 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.
*/
/*
* $Id$
*/
/*
*
* 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