Copyright (c) 2007, 2008 Tero Koskinen <tero.koskinen@iki.fi>
Contents:
Ahven is a unit test library modeled after JUnit library for Java. So, for JUnit users the API should be familiar.
 The heart of the library is an abstract
    class called Test. It has two subclasses,
    Test_Case, and Test_Suite.
    Test_Case is the base class for other unit tests
    and Test_Suite is a container, which can hold
    Test objects.
  
For your first test case, you need to create a new package and a new
   class, which is derived from Ahven.Framework.Test_Case.
   Let's call the package My_Tests and the class
   My_Tests.Test.
   -- my_tests.ads
   with Ahven.Framework;
   package My_Tests is
      type Test is new Ahven.Framework.Test_Case with null record;
   end My_Tests;
 After you have defined your class, you need to overload 
    Test_Case's Initialize procedure
    and create your own test procedure (My_First_Test).
   -- my_tests.ads
   with Ahven.Framework;
   package My_Tests is
      type Test is new Ahven.Framework.Test_Case with null record;
      procedure Initialize (T : in out Test);
      procedure My_First_Test;
   end My_Tests;
 Next you need to create the body of the My_Tests package.
    In Initialize procedure you need to do two things:
    
   -- my_tests.adb
   package body My_Tests is
      procedure Initialize (T : in out Test) is
      begin
         Set_Name (T, "My tests");
         Ahven.Framework.Add_Test_Routine
           (T, My_First_Test'Access, "My first test");
      end Initialize;
      ...
   end My_Tests;
 In the test procedure My_First_Test you can do anything
    you want. The Ahven package defines two utility procedures for you:
    Assert (Condition : Boolean; Message : String)
    and Fail (Message : String).
 Assert will raise Assertion_Error if
    Condition is False.
    Fail does what its name implies and will raise
    Assertion_Error always.
    These Assertion_Errors will show as failures when you
    run the tests.
Here is an example:
   -- my_tests.adb
   with Ahven;
   use Ahven;
   package body My_Tests is
      procedure Initialize (T : in out Test) is
      begin
         Set_Name (T, "My tests");
         Framework.Add_Test_Routine
           (T, My_First_Test'Access, "My first test");
      end Initialize;
      
      procedure My_First_Test is
      begin
         Assert (1 /= 4, "1 /= 4 failed!");
      end My_First_Test;
      
   end My_Tests;
 To run your tests you need to feed them to a test runner.
    For example, Ahven.Text_Runner.Run runs the tests
    and prints the results to the standard output.
The best way to run the tests is to define a Test_Suite, add the tests there, and give the test suite to the runner.
-- runner.adb
with Ahven.Text_Runner;
with Ahven.Framework;
with My_Tests;
procedure Runner is
   S : Ahven.Framework.Test_Suite_Access :=
     Ahven.Framework.Create_Suite ("All my tests");
begin
   Ahven.Framework.Add_Test (S.all, new My_Tests.Test);
   Ahven.Text_Runner.Run (S);
   Ahven.Framework.Release_Suite (S);
   -- Release_Suite will release all its children also.
end Runner;
Tero Koskinen, 2008-01-07