Skip to content

Commit

Permalink
test: add json_tok_remove unit tests
Browse files Browse the repository at this point in the history
Signed-off-by: Mark Beckwith <[email protected]>
  • Loading branch information
wythe authored and rustyrussell committed Dec 6, 2018
1 parent 70707bf commit 164c764
Show file tree
Hide file tree
Showing 2 changed files with 156 additions and 0 deletions.
155 changes: 155 additions & 0 deletions common/test/run-json_remove.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
#include "config.h"
#include <common/utils.h>
#include <common/json.c>

/* AUTOGENERATED MOCKS START */
/* AUTOGENERATED MOCKS END */

struct json {
jsmntok_t *toks;
char *buffer;
};

static void convert_quotes(char *first)
{
while (*first != '\0') {
if (*first == '\'')
*first = '"';
first++;
}
}

static struct json *json_parse(const tal_t * ctx, const char *str)
{
struct json *j = tal(ctx, struct json);
j->buffer = tal_strdup(j, str);
convert_quotes(j->buffer);
bool ok;
j->toks = json_parse_input(j->buffer, strlen(j->buffer), &ok);
assert(ok);
j->toks = json_tok_copy(j, j->toks);
return j;
}

static void test_toks(const struct json *j, ...)
{
const jsmntok_t * tok = j->toks + 1;
const char *value;
va_list(ap);
va_start(ap, j);
while ((value = va_arg(ap, char *)) != NULL) {
assert(json_tok_streq(j->buffer, tok, value));
tok++;
}
}

static void sanity(void)
{
struct json *j = json_parse(tmpctx, "[]");
json_tok_remove(&j->toks, j->toks, 0);
assert(j);
}

static void remove_one(void)
{
struct json *j = json_parse(tmpctx, "['invoice']");
json_tok_remove(&j->toks, j->toks + 1, 1);
assert(j);
}

static void remove_first(void)
{
struct json *j = json_parse(tmpctx, "['one', 'two', 'three']");
assert(j);
json_tok_remove(&j->toks, j->toks + 1, 1);
assert(j->toks);

test_toks(j, "two", "three", NULL);
assert(tal_count(j->toks) == 3);

j = json_parse(tmpctx, "{'1':'one', '2':'two', '3':'three'}");
assert(j);

json_tok_remove(&j->toks, j->toks + 1, 1);
assert(j);
test_toks(j, "2", "two", "3", "three", NULL);
assert(tal_count(j->toks) == 5);

j = json_parse(tmpctx, "{'1':'one', '2':'two', '3':'three'}");
json_tok_remove(&j->toks, j->toks + 1, 1);
assert(j);
test_toks(j, "2", "two", "3", "three", NULL);
assert(tal_count(j->toks) == 5);

}

static void remove_last(void)
{
struct json *j = json_parse(tmpctx, "['one', 'two', 'three']");
json_tok_remove(&j->toks, j->toks + 3, 1);
test_toks(j, "one", "two", NULL);
assert(tal_count(j->toks) == 3);

j = json_parse(tmpctx, "{'1':'one', '2':'two', '3':'three'}");
json_tok_remove(&j->toks, j->toks + 5, 1);
assert(j);
test_toks(j, "1", "one", "2", "two", NULL);
assert(tal_count(j->toks) == 5);
}

static void remove_multiple(void)
{
struct json *j = json_parse(tmpctx, "['a', 'b', 'c', 'd', 'e']");
json_tok_remove(&j->toks, j->toks + 1, 2);
test_toks(j, "c", "d", "e", NULL);

j = json_parse(tmpctx, "['a', 'b', 'c', 'd', 'e']");
json_tok_remove(&j->toks, j->toks + 2, 2);
test_toks(j, "a", "d", "e", NULL);

j = json_parse(tmpctx, "{'1':'one', '2':'two', '3':'three', '4':'four'}");
json_tok_remove(&j->toks, j->toks + 3, 2);
assert(j);
test_toks(j, "1", "one", "4", "four", NULL);
assert(tal_count(j->toks) == 5);
}

static void remove_all(void)
{
struct json *j = json_parse(tmpctx, "['a', 'b', 'c', 'd', 'e']");
json_tok_remove(&j->toks, j->toks + 1, 5);
assert(tal_count(j->toks) == 1);

j = json_parse(tmpctx, "{'1':'one', '2':'two', '3':'three', '4':'four'}");
json_tok_remove(&j->toks, j->toks + 1, 4);
assert(tal_count(j->toks) == 1);
}

static void remove_complex(void)
{
struct json *j = json_parse(tmpctx,
"{'1':'one', '2':'two',"
"'3': { '3.1': 'a', '3.2':'b', '3.3':'c' }, "
"'4': { '4.1': 'a', '4.2':'b', '4.3':'c' }, "
"'5':'five'}");

json_tok_remove(&j->toks, j->toks + 5, 2);
test_toks(j, "1", "one", "2", "two", "5", "five", NULL);
}

int main(void)
{
setup_locale();
setup_tmpctx();

sanity();
remove_one();
remove_first();
remove_last();
remove_multiple();
remove_all();
remove_complex();

tal_free(tmpctx);
printf("run-json_remove ok\n");
}
1 change: 1 addition & 0 deletions lightningd/test/run-param.c
Original file line number Diff line number Diff line change
Expand Up @@ -561,6 +561,7 @@ int main(void)
setup_tmpctx();
cmd = tal(tmpctx, struct command);
cmd->mode = CMD_NORMAL;
cmd->allow_unused = false;
fail_msg = tal_arr(cmd, char, 10000);

zero_params();
Expand Down

0 comments on commit 164c764

Please sign in to comment.