xref: /4.0.0/platform/tests/json_checker_test.cc (revision a44eb642)
1/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2/*
3 *     Copyright 2014 Couchbase, Inc
4 *
5 *   Licensed under the Apache License, Version 2.0 (the "License");
6 *   you may not use this file except in compliance with the License.
7 *   You may obtain a copy of the License at
8 *
9 *       http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *   Unless required by applicable law or agreed to in writing, software
12 *   distributed under the License is distributed on an "AS IS" BASIS,
13 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *   See the License for the specific language governing permissions and
15 *   limitations under the License.
16 */
17
18#include "config.h"
19#include <iostream>
20#include "JSON_checker.h"
21
22#define check(expr, msg) {if(!(expr)) \
23    { std::cerr << "JSON test failed: " << msg << std::endl; exit(1); }}
24#define CHECK_JSON(X) checkUTF8JSON((const unsigned char *)X, sizeof(X) - 1)
25
26int main(void) {
27    check(CHECK_JSON("{\"test\": 12}"), "simple json checks as OK");
28    check(CHECK_JSON("{\"test\": [[[[[[[[[[[[[[[[[[[[[[12]]]]]]]]]]]]]]]]]]]]]]}"),
29            "deep json checks as OK");
30    check(!CHECK_JSON("{\"test\": [[[[[[[[[[[[[[[[[[[[[[12]]]]]]]]]]]]]]]]]]]]]]]]}"),
31            "bad deep json is not OK");
32    check(!CHECK_JSON("{bad stuff}"), "bad json starting with { is not OK");
33    check(CHECK_JSON("null"), "bare values are OK");
34    check(CHECK_JSON("99"), "bare numbers are OK");
35    check(!CHECK_JSON("{\"test\xFF\": 12}"), "bad UTF-8 is not OK");
36
37    // MB-15778: Regression test for memory leaks.
38    unsigned char mb15778_1[] = {'"', 0xff, 0};
39    check(!CHECK_JSON(mb15778_1), "bad UTF-8 is not OK");
40    unsigned char mb15778_2[] = {'"', 'a', 0xff, 0};
41    check(!CHECK_JSON(mb15778_2), "bad UTF-8 is not OK");
42    unsigned char mb15778_3[] = {'"', '1', '2', 0xfe, 0};
43    check(!CHECK_JSON(mb15778_3), "bad UTF-8 is not OK");
44    unsigned char mb15778_4[] = {'"', '1', '2', 0xfd, 0};
45    check(!CHECK_JSON(mb15778_4), "bad UTF-8 is not OK");
46    unsigned char mb15778_5[] = {'{', '"', 'k', '"', ':', '"', 0xfc, 0};
47    check(!CHECK_JSON(mb15778_5), "bad UTF-8 is not OK");
48}
49