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 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.

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 void unit_setup( void )
{
  /* whatever you want done first */
}

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 -------------------------------
