summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/testing.framework.text89
1 files changed, 89 insertions, 0 deletions
diff --git a/doc/testing.framework.text b/doc/testing.framework.text
new file mode 100644
index 000000000..c79dcd93a
--- /dev/null
+++ b/doc/testing.framework.text
@@ -0,0 +1,89 @@
+Guile Testing Framework for GNU Classpath
+
+GNU Classpath tests are written in Java. Guile is responsible for
+executing the tests and organizing the results. Guile and Java
+communicate through JNI. If JNI is unavailable, see the section on
+modifying the framework to allow for an alternate means of
+communication. [This has not been written. -PF]
+
+All tests must implement gnu.test.Test. gnu.test.Test contains two
+methods:
+
+1. String getName()
+2. Result test()
+
+When getName() is called, your test should return the name of the
+test. When test() is called, your test should be performed. Upon
+completion of the test (either through success or failure), a Result
+object is returned. test() should never throw an exception or error.
+
+There are seven predefined result types, including the POSIX 1003.3
+result codes. All result objects may optionally be constructed with a
+single String argument specifying additional information about the
+result.
+
+gnu.test.Pass : Test passed and was excepted to pass.
+gnu.test.XPass : Test passed but was expected to fail.
+gnu.test.Fail : Test failed but was expected to pass.
+gnu.test.XFail : Test failed and was expected to fail.
+gnu.test.Unresolved : Test produced indeterminate results.
+gnu.test.Untested : Test was not run -- a placeholder.
+gnu.test.Unsupported : Test does not have the required support to run.
+
+(Error is also a valid result type, but only in Guile/JNI code.)
+
+System.out and System.err are used for directing additional
+information about the running test. System.out should be used to send
+status messages when tests are expected to take large amounts of time.
+System.err should be used to send messages which are logged to the
+verbose log.
+
+Example test:
+
+import gnu.test.*;
+public class StringCharAtZeroTest implements Test
+{
+ public getName() {
+ return "java.lang.String.charAt(0)";
+ }
+
+ public Result test() {
+ char ch = "foobar".charAt(0);
+ if (ch == 'f')
+ return new Pass();
+ else
+ return new Fail("zero index of \"foobar\" is '" + ch + "'");
+ }
+}
+
+It's often desirable to group multiple tests together into one file.
+In this case, inner classes should be used. There's also the added
+benefit that tests can easily share data through static variables in
+the parent class.
+
+For example:
+
+public class TestContainer {
+ public static class test1 implements Test {
+ // test1
+ }
+ public static class test2 implements Test {
+ // test2
+ }
+}
+
+The testsuite contains a file known as "tests.to.run" which contains a
+newline delimited listing of all tests to be executed. Just add the
+name of the new test to the file and it'll be included in future runs
+of the testsuite.
+
+Running the testsuite:
+guile-jvm -s test.scm tests.to.run
+
+(It would be more natural for the testsuite to read from standard in
+if a file was not specified, but read-line in Guile 1.3a is broken.)
+
+Classes are located via the environmental variable CLASSPATH.
+
+Results are sent to two log files -- one summary (classpath.sum) and
+one verbose (classpath.log).