aboutsummaryrefslogtreecommitdiff
path: root/test/suites/api/util.h
blob: 9b658e7895511896a10f47cc2b3ed8dc07061f82 (plain)
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
 * Copyright (c) 2009-2016 Petri Lehtinen <petri@digip.org>
 *
 * Jansson is free software; you can redistribute it and/or modify
 * it under the terms of the MIT license. See LICENSE for details.
 */

#ifndef UTIL_H
#define UTIL_H

#ifdef HAVE_CONFIG_H
#include <jansson_private_config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#if HAVE_LOCALE_H
#include <locale.h>
#endif

#include <jansson.h>

#define failhdr fprintf(stderr, "%s:%d: ", __FILE__, __LINE__)

#define fail(msg)                                                \
    do {                                                         \
        failhdr;                                                 \
        fprintf(stderr, "%s\n", msg);                            \
        exit(1);                                                 \
    } while(0)

/* Assumes json_error_t error */
#define check_errors(code_, texts_, num_, source_,                      \
    line_, column_, position_)                                          \
    do {                                                                \
        int i_, found_ = 0;                                             \
        if(json_error_code(&error) != code_) {                          \
            failhdr;                                                    \
            fprintf(stderr, "code: %d != %d\n",                         \
                    json_error_code(&error), code_);                    \
            exit(1);                                                    \
        }                                                               \
        for(i_ = 0; i_ < num_; i_++) {                                  \
            if(strcmp(error.text, texts_[i_]) == 0) {                   \
                found_ = 1;                                             \
                break;                                                  \
            }                                                           \
        }                                                               \
        if (!found_) {                                                  \
            failhdr;                                                    \
            if (num_ == 1) {                                            \
                fprintf(stderr, "text: \"%s\" != \"%s\"\n", error.text, texts_[0]); \
            } else {                                                    \
                fprintf(stderr, "text: \"%s\" does not match\n", error.text); \
            }                                                           \
            exit(1);                                                    \
        }                                                               \
        if(strcmp(error.source, source_) != 0) {                        \
            failhdr;                                                    \
                                                                        \
            fprintf(stderr, "source: \"%s\" != \"%s\"\n", error.source, source_); \
            exit(1);                                                    \
        }                                                               \
        if(error.line != line_) {                                       \
            failhdr;                                                    \
            fprintf(stderr, "line: %d != %d\n", error.line, line_);     \
            exit(1);                                                    \
        }                                                               \
        if(error.column != column_) {                                   \
            failhdr;                                                    \
            fprintf(stderr, "column: %d != %d\n", error.column, column_); \
            exit(1);                                                    \
        }                                                               \
        if(error.position != position_) {                               \
            failhdr;                                                    \
            fprintf(stderr, "position: %d != %d\n", error.position, position_); \
            exit(1);                                                    \
        }                                                               \
    } while(0)


/* Assumes json_error_t error */
#define check_error(code_, text_, source_, line_, column_, position_)   \
    check_errors(code_, &text_, 1, source_, line_, column_, position_)


static void run_tests();

int main() {
#ifdef HAVE_SETLOCALE
    setlocale(LC_ALL, "");
#endif
    run_tests();
    return 0;
}

#endif