test-json-parser.c revision 86bdb644d147a73df85abce4325254d694217a5f
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen/* Copyright (c) 2012 Dovecot authors, see the included COPYING file */
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainenstatic const char json_input[] =
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen "\t\"key\"\t:\t\t\"string\","
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen " \"key2\" : 1234, \n"
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen "\"key3\":true,"
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen "\"key4\":false,"
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen "\"skip1\": \"jsifjaisfjiasji\","
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen "\"skip2\": { \"x\":{ \"y\":123}, \"z\":[5,[6],{\"k\":0},3]},"
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen "\"key5\":null,"
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen "\"key6\": {},"
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen "\"key7\": {"
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen " \"sub1\":\"value\""
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen "\"key8\": {"
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen " \"sub2\":-12.456,\n"
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen " \"sub3\":12.456e9,\n"
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen " \"sub4\":0.456e-789"
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen "\"key9\": \"foo\\\\\\\"\\b\\f\\n\\r\\t\\u0001\uffff\","
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen "\"key10\": \"foo\\\\\\\"\\b\\f\\n\\r\\t\\u0001\uffff\","
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen "\"key11\": [],"
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen "\"key12\": [ \"foo\" , 5.24,[true],{\"aobj\":[]}]"
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainenstatic struct {
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen { JSON_TYPE_STRING, "foo\\\"\b\f\n\r\t\001\xef\xbf\xbf" },
4b231ca0bbe3b536acbd350101e183441ce0247aTimo Sirainen { TYPE_STREAM, "foo\\\"\b\f\n\r\t\001\xef\xbf\xbf" },
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainenstream_read_value(struct istream **input, const char **value_r)
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen const unsigned char *data;
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainenstatic void test_json_parser_success(bool full_size)
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen unsigned int i, pos, json_input_len = strlen(json_input);
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen test_begin(full_size ? "json parser" : "json parser (nonblocking)");
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen input = test_istream_create_data(json_input, json_input_len);
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen } else if (json_output[pos].type != TYPE_STREAM) {
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen test_assert(null_strcmp(json_output[pos].value, value) == 0);
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen test_assert(json_parse_next(parser, &type, &value) == -1);