UnitTests for Indy

---------------------------------
Priorities:

1) Keep It Simple

2) Do not couple to any specific unit test framework.
   - use appropriate IdTest.pas units to plug into required framework.

Units are named IdTest*, so they can be easily searched/listed.
eg using UnitExpert (http://www.epocalipse.com/downloads.htm) ctrl-u, "idtest", lists all available test units.

---------------------------------
Guidelines for writing unit tests:

1) Assert() should not contain function calls. turning off assertions in compile options should not alter the functionality.

  bad:
  Assert(ReadLn='');

  good:
  aStr=ReadLn;
  ASsert(aStr='');

2) test procedures should be have 'published' visibility (so win32 RTTI can be used to enumerate them) and be named starting with 'Test'.

  public
    //bad, won't be called
    procedure WriteTest; 
  published
    //good
    procedure TestRead;

3) additional debug code should not be left in for 'release'. 
   (by default) data should not be written to the test pc, eg log files.

4) don't raise exceptions in except-blocks, causes memory leak in delphi


---------------------------------
ToDo:

add another layer to the component heirachy that defines the interface, eg virtual methods etc.
add Setup/TearDown virtuals.
add a mechanism for recording additional debug output.
add a mechanism for supplying tests with configuration settings, eg address/user/password for a live email server to test against. suggest just a name=value stringlist and a DoConfig(TStringList);virtual method.
