Unit tests
==========

The goal is to add tests for *ALL* functions in libcurl. If functions are too
big and complicated, we should split them into smaller and testable ones.

Build Unit Tests
================

'./configure --enable-debug' is required for the unit tests to build. To
enable unit tests, there will be a separate static libcurl built that will be
used exclusively for linking unit test programs. Just build everything as
normal, and then you can run the unit test cases as well.

Run Unit Tests
==============

Unit tests are run as part of the regular test suite. If you have built
everything to run unit tests, to can do 'make test' at the root level. Or you
can 'cd tests' and 'make' and then invoke individual unit tests with
./runtests.pl NNNN where NNNN is the specific test number.

Debug Unit Tests
================

If a specific test fails you will get told. The test case then has output left
in the log/ subdirectory, but most importantly you can re-run the test again
using gdb by doing ./runtests.pl -g NNNN. That is, add a -g to make it start
up gdb and run the same case using that.

Write Unit Tests
================

We put tests that focus on an area or a specific function into a single C
source file. The source file should be named 'unitNNNN.c' where NNNN is a
number that starts with 1300 and you can pick the next free number.

Add your test to tests/unit/Makefile.inc (if it is a unit test).
Add your test data to tests/data/Makefile.inc

You also need a separate file called tests/data/testNNNN (using the same
number) that describes your test case. See the test1300 file for inspiration
and the tests/FILEFORMAT documentation.

For the actual C file, here's a very simple example:

----------------------- start -------------------------------
#include "curlcheck.h"

#include "a libcurl header.h" /* from the lib dir */

static CURLcode unit_setup( void )
{
  /* whatever you want done first */
  return CURLE_OK;
}

static void unit_stop( void )
{
  /* done before shutting down and exiting */
}

UNITTEST_START

  /* here you start doing things and checking that the results are good */

  fail_unless( size == 0 , "initial size should be zero" );
  fail_if( head == NULL , "head should not be initiated to NULL" );

  /* you end the test code like this: */

UNITTEST_STOP

----------------------- end -------------------------------
