001 package com.croftsoft.core.lang;
002
003 /*********************************************************************
004 * A semantic interface indicating the class has a static test method.
005 *
006 * <p align="justify">
007 * When a class implements this semantic marker interface, it indicates
008 * that it defines a static test method with the following signature:
009 * <code>
010 * <pre>public static boolean test ( String [ ] args )</pre>
011 * </code>
012 * </p>
013 *
014 * <p align="justify">
015 * This method performs one or more unit self-tests for the class that
016 * it is defined in, returning true if the tests were successful and
017 * false if otherwise. It may perform white-box or black-box testing.
018 * </p>
019 *
020 * <p>
021 * When provided with a null or empty String array argument, it
022 * performs its default test.
023 * The default test must not have persistent side-effects such as
024 * creating files or modifying static variables nor attempt operations
025 * that have nuisance effects.
026 * The default test may write to the standard output and the standard
027 * error to facilitate debugging.
028 * If provided with a non-empty String array argument, it may run
029 * tests that have persistent side-effects.
030 * </p>
031 *
032 * <p align="justify">
033 * The test method can be called by the class main method, passing the
034 * command-line arguments as the test method arguments. This makes it
035 * easy to test the class from the command-line during development.
036 * Note that if no command-line arguments are specified, the argument
037 * is an empty String array and the default test will be run.
038 * <code>
039 * <pre>
040 * public static void main ( String [ ] args )
041 * {
042 * System.out.println ( test ( args ) );
043 * }
044 * </pre>
045 * </code>
046 * </p>
047 *
048 * <p align="justify">
049 * Automated testing of all the classes in a library can be performed
050 * using reflection to test if a class implements the interface
051 * Testable. If the class does, its test method can be called using
052 * reflection and the boolean result reported along with anything
053 * written to the standard output and standard error. If a class
054 * contains a test method that conforms to the required signature but
055 * it does not implement the semantic interface Testable, the test
056 * method should not be executed as the similarity may be coincidental.
057 * </p>
058 *
059 * @version
060 * 2003-03-12
061 * @since
062 * 2003-03-12
063 * @author
064 * <a href="http://www.CroftSoft.com/">David Wallace Croft</a>
065 *********************************************************************/
066
067 public interface Testable { }