Skip to main content

.

Project description

buildstatus

About

A C test framework.

Based on https://github.com/vberlier/nala.

Features

  • Automatic test discovery

  • Use the same generic assertions everywhere

  • Assertion failures reported as diffs

  • Easy-to-use output capturing utilities

  • Amalgamated source file and header ready to drop in your project

  • Mocking support

  • Works well with errors reported by sanitizers

Installation

Nala is distributed as an amalgamated source file and header:

Drop the two files in your project, make sure nala.c is compiled and linked just like the other source files of your test program and you should be good to go.

Example

First of all, download nala.[hc].

$ wget https://raw.githubusercontent.com/eerimoq/nala/master/dist/nala.h
$ wget https://raw.githubusercontent.com/eerimoq/nala/master/dist/nala.c

Create main.c and write a test case using all assertions and capturing output.

#include "nala.h"

TEST(assertions)
{
    ASSERT_EQ(NULL, NULL);
    ASSERT_NE(1, 2);
    ASSERT_LT(1.0, 2.0);
    ASSERT_LE(1, 1);
    ASSERT_GT(2L, 1L);
    ASSERT_GE(1, 1);
    ASSERT_SUBSTRING("12345", "34");
    ASSERT_NOT_SUBSTRING("12345", "4567");
    ASSERT_MEMORY("abcd", "abcd", 5);
    ASSERT(1 == 1);

    CAPTURE_OUTPUT(stdoutput, stderrput) {
        printf("std!\n");
        fprintf(stderr, "err!\n");
    }

    ASSERT_EQ(stdoutput, "std!\n");
    ASSERT_EQ(stderrput, "err!\n");
}

Build and run the test.

$ gcc *.c && ./a.out
std!
err!

Test results:

  PASSED assertions (0.38 ms)

Tests: 1 passed, 1 total
Time: 0.38 ms

Debugging tips

Nala executes each test in its own process. This means that following the execution of a test with a debugger can be a bit tricky because debuggers like GDB can only follow a single process at a time.

If you’re using GDB, set a breakpoint at <test>_before_fork and then run the program until it stops at the breakpoint. Before continuing the program execution, tell GDB to follow the forked test process by setting follow-fork-mode to child.

All commands are shown below for the test called foo.

$ gdb ./a.out
(gdb) b foo_before_fork
(gdb) r
(gdb) set follow-fork-mode child
(gdb) c

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nala-0.1.0.tar.gz (10.6 kB view hashes)

Uploaded Source

Built Distribution

nala-0.1.0-py2.py3-none-any.whl (10.9 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page