[go: up one dir, main page]

File: logging.rst

package info (click to toggle)
criterion 2.3.3git1-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 3,832 kB
  • sloc: ansic: 17,852; cpp: 795; python: 72; sh: 27; makefile: 23
file content (61 lines) | stat: -rw-r--r-- 2,200 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Logging messages
================

Sometimes, it might be useful to print some output from within a test
or fixture -- and while this can be done trivially with a ``printf``,
it doesn't integrate well with the current output, nor does it work
*at all* when the process is testing a redirected stdout.

For these cases, Criterion exposes a logging facility:

.. code-block:: c

    #include <criterion/criterion.h>
    #include <criterion/logging.h>

    Test(suite_name, test_name) {
        cr_log_info("This is an informational message. They are not displayed "
            "by default.");
        cr_log_warn("This is a warning. They indicate some possible malfunction "
            "or misconfiguration in the test.");
        cr_log_error("This is an error. They indicate serious problems and "
            "are usually shown before the test is aborted.");
    }

``cr_log_info``, ``cr_log_warn`` and ``cr_log_error`` are all macros expanding
to a call to the ``cr_log`` function. All of them take a mandatory format string,
followed by optional parameters; for instance:

.. code-block:: c

    cr_log_info("%d + %d = %d", 1, 2, 3);

If using C++, the output stream objects ``info``, ``warn`` and ``error`` are
defined within the ``criterion::logging`` namespace, and can be used in
conjunction with ``operator<<``:

.. code-block:: c++

    #include <criterion/criterion.h>
    #include <criterion/logging.h>

    using criterion::logging::info;
    using criterion::logging::warn;
    using criterion::logging::error;

    Test(suite_name, test_name) {
        info << "This is an informational message. "
             << "They are not displayed by default."
             << std::flush;
        warn << "This is a warning. "
             << "They indicate some possible malfunction "
             << "or misconfiguration in the test."
             << std::flush;
        error << "This is an error. "
             << "They indicate serious problems and "
             << "are usually shown before the test is aborted."
             << std::flush;
    }

Note that empty messages are ignored, and newlines in the log message splits
the passed string into as many messages are there are lines.