diff options
author | Vincent Ambo <mail@tazj.in> | 2021-09-21T10·03+0300 |
---|---|---|
committer | Vincent Ambo <mail@tazj.in> | 2021-09-21T11·29+0300 |
commit | 43b1791ec601732ac31195df96781a848360a9ac (patch) | |
tree | daae8d638343295d2f1f7da955e556ef4c958864 /third_party/git/t/helper/test-json-writer.c | |
parent | 2d8e7dc9d9c38127ec4ebd13aee8e8f586a43318 (diff) |
chore(3p/git): Unvendor git and track patches instead r/2903
This was vendored a long time ago under the expectation that keeping it in sync with cgit would be easier this way, but it has proven not to be a big issue. On the other hand, a vendored copy of git is an annoying maintenance burden. It is much easier to rebase the single (dottime) patch that we have. This removes the vendored copy of git and instead passes the git source code to cgit via `pkgs.srcOnly`, which includes the applied patch so that cgit can continue rendering dottime. Change-Id: If31f62dea7ce688fd1b9050204e9378019775f2b
Diffstat (limited to 'third_party/git/t/helper/test-json-writer.c')
-rw-r--r-- | third_party/git/t/helper/test-json-writer.c | 565 |
1 files changed, 0 insertions, 565 deletions
diff --git a/third_party/git/t/helper/test-json-writer.c b/third_party/git/t/helper/test-json-writer.c deleted file mode 100644 index 37c452535f8b..000000000000 --- a/third_party/git/t/helper/test-json-writer.c +++ /dev/null @@ -1,565 +0,0 @@ -#include "test-tool.h" -#include "cache.h" -#include "json-writer.h" - -static const char *expect_obj1 = "{\"a\":\"abc\",\"b\":42,\"c\":true}"; -static const char *expect_obj2 = "{\"a\":-1,\"b\":2147483647,\"c\":0}"; -static const char *expect_obj3 = "{\"a\":0,\"b\":4294967295,\"c\":9223372036854775807}"; -static const char *expect_obj4 = "{\"t\":true,\"f\":false,\"n\":null}"; -static const char *expect_obj5 = "{\"abc\\tdef\":\"abc\\\\def\"}"; -static const char *expect_obj6 = "{\"a\":3.14}"; - -static const char *pretty_obj1 = ("{\n" - " \"a\": \"abc\",\n" - " \"b\": 42,\n" - " \"c\": true\n" - "}"); -static const char *pretty_obj2 = ("{\n" - " \"a\": -1,\n" - " \"b\": 2147483647,\n" - " \"c\": 0\n" - "}"); -static const char *pretty_obj3 = ("{\n" - " \"a\": 0,\n" - " \"b\": 4294967295,\n" - " \"c\": 9223372036854775807\n" - "}"); -static const char *pretty_obj4 = ("{\n" - " \"t\": true,\n" - " \"f\": false,\n" - " \"n\": null\n" - "}"); - -static struct json_writer obj1 = JSON_WRITER_INIT; -static struct json_writer obj2 = JSON_WRITER_INIT; -static struct json_writer obj3 = JSON_WRITER_INIT; -static struct json_writer obj4 = JSON_WRITER_INIT; -static struct json_writer obj5 = JSON_WRITER_INIT; -static struct json_writer obj6 = JSON_WRITER_INIT; - -static void make_obj1(int pretty) -{ - jw_object_begin(&obj1, pretty); - { - jw_object_string(&obj1, "a", "abc"); - jw_object_intmax(&obj1, "b", 42); - jw_object_true(&obj1, "c"); - } - jw_end(&obj1); -} - -static void make_obj2(int pretty) -{ - jw_object_begin(&obj2, pretty); - { - jw_object_intmax(&obj2, "a", -1); - jw_object_intmax(&obj2, "b", 0x7fffffff); - jw_object_intmax(&obj2, "c", 0); - } - jw_end(&obj2); -} - -static void make_obj3(int pretty) -{ - jw_object_begin(&obj3, pretty); - { - jw_object_intmax(&obj3, "a", 0); - jw_object_intmax(&obj3, "b", 0xffffffff); - jw_object_intmax(&obj3, "c", 0x7fffffffffffffffULL); - } - jw_end(&obj3); -} - -static void make_obj4(int pretty) -{ - jw_object_begin(&obj4, pretty); - { - jw_object_true(&obj4, "t"); - jw_object_false(&obj4, "f"); - jw_object_null(&obj4, "n"); - } - jw_end(&obj4); -} - -static void make_obj5(int pretty) -{ - jw_object_begin(&obj5, pretty); - { - jw_object_string(&obj5, "abc" "\x09" "def", "abc" "\\" "def"); - } - jw_end(&obj5); -} - -static void make_obj6(int pretty) -{ - jw_object_begin(&obj6, pretty); - { - jw_object_double(&obj6, "a", 2, 3.14159); - } - jw_end(&obj6); -} - -static const char *expect_arr1 = "[\"abc\",42,true]"; -static const char *expect_arr2 = "[-1,2147483647,0]"; -static const char *expect_arr3 = "[0,4294967295,9223372036854775807]"; -static const char *expect_arr4 = "[true,false,null]"; - -static const char *pretty_arr1 = ("[\n" - " \"abc\",\n" - " 42,\n" - " true\n" - "]"); -static const char *pretty_arr2 = ("[\n" - " -1,\n" - " 2147483647,\n" - " 0\n" - "]"); -static const char *pretty_arr3 = ("[\n" - " 0,\n" - " 4294967295,\n" - " 9223372036854775807\n" - "]"); -static const char *pretty_arr4 = ("[\n" - " true,\n" - " false,\n" - " null\n" - "]"); - -static struct json_writer arr1 = JSON_WRITER_INIT; -static struct json_writer arr2 = JSON_WRITER_INIT; -static struct json_writer arr3 = JSON_WRITER_INIT; -static struct json_writer arr4 = JSON_WRITER_INIT; - -static void make_arr1(int pretty) -{ - jw_array_begin(&arr1, pretty); - { - jw_array_string(&arr1, "abc"); - jw_array_intmax(&arr1, 42); - jw_array_true(&arr1); - } - jw_end(&arr1); -} - -static void make_arr2(int pretty) -{ - jw_array_begin(&arr2, pretty); - { - jw_array_intmax(&arr2, -1); - jw_array_intmax(&arr2, 0x7fffffff); - jw_array_intmax(&arr2, 0); - } - jw_end(&arr2); -} - -static void make_arr3(int pretty) -{ - jw_array_begin(&arr3, pretty); - { - jw_array_intmax(&arr3, 0); - jw_array_intmax(&arr3, 0xffffffff); - jw_array_intmax(&arr3, 0x7fffffffffffffffULL); - } - jw_end(&arr3); -} - -static void make_arr4(int pretty) -{ - jw_array_begin(&arr4, pretty); - { - jw_array_true(&arr4); - jw_array_false(&arr4); - jw_array_null(&arr4); - } - jw_end(&arr4); -} - -static char *expect_nest1 = - "{\"obj1\":{\"a\":\"abc\",\"b\":42,\"c\":true},\"arr1\":[\"abc\",42,true]}"; - -static struct json_writer nest1 = JSON_WRITER_INIT; - -static void make_nest1(int pretty) -{ - jw_object_begin(&nest1, pretty); - { - jw_object_sub_jw(&nest1, "obj1", &obj1); - jw_object_sub_jw(&nest1, "arr1", &arr1); - } - jw_end(&nest1); -} - -static char *expect_inline1 = - "{\"obj1\":{\"a\":\"abc\",\"b\":42,\"c\":true},\"arr1\":[\"abc\",42,true]}"; - -static char *pretty_inline1 = - ("{\n" - " \"obj1\": {\n" - " \"a\": \"abc\",\n" - " \"b\": 42,\n" - " \"c\": true\n" - " },\n" - " \"arr1\": [\n" - " \"abc\",\n" - " 42,\n" - " true\n" - " ]\n" - "}"); - -static struct json_writer inline1 = JSON_WRITER_INIT; - -static void make_inline1(int pretty) -{ - jw_object_begin(&inline1, pretty); - { - jw_object_inline_begin_object(&inline1, "obj1"); - { - jw_object_string(&inline1, "a", "abc"); - jw_object_intmax(&inline1, "b", 42); - jw_object_true(&inline1, "c"); - } - jw_end(&inline1); - jw_object_inline_begin_array(&inline1, "arr1"); - { - jw_array_string(&inline1, "abc"); - jw_array_intmax(&inline1, 42); - jw_array_true(&inline1); - } - jw_end(&inline1); - } - jw_end(&inline1); -} - -static char *expect_inline2 = - "[[1,2],[3,4],{\"a\":\"abc\"}]"; - -static char *pretty_inline2 = - ("[\n" - " [\n" - " 1,\n" - " 2\n" - " ],\n" - " [\n" - " 3,\n" - " 4\n" - " ],\n" - " {\n" - " \"a\": \"abc\"\n" - " }\n" - "]"); - -static struct json_writer inline2 = JSON_WRITER_INIT; - -static void make_inline2(int pretty) -{ - jw_array_begin(&inline2, pretty); - { - jw_array_inline_begin_array(&inline2); - { - jw_array_intmax(&inline2, 1); - jw_array_intmax(&inline2, 2); - } - jw_end(&inline2); - jw_array_inline_begin_array(&inline2); - { - jw_array_intmax(&inline2, 3); - jw_array_intmax(&inline2, 4); - } - jw_end(&inline2); - jw_array_inline_begin_object(&inline2); - { - jw_object_string(&inline2, "a", "abc"); - } - jw_end(&inline2); - } - jw_end(&inline2); -} - -/* - * When super is compact, we expect subs to be compacted (even if originally - * pretty). - */ -static const char *expect_mixed1 = - ("{\"obj1\":{\"a\":\"abc\",\"b\":42,\"c\":true}," - "\"arr1\":[\"abc\",42,true]}"); - -/* - * When super is pretty, a compact sub (obj1) is kept compact and a pretty - * sub (arr1) is re-indented. - */ -static const char *pretty_mixed1 = - ("{\n" - " \"obj1\": {\"a\":\"abc\",\"b\":42,\"c\":true},\n" - " \"arr1\": [\n" - " \"abc\",\n" - " 42,\n" - " true\n" - " ]\n" - "}"); - -static struct json_writer mixed1 = JSON_WRITER_INIT; - -static void make_mixed1(int pretty) -{ - jw_init(&obj1); - jw_init(&arr1); - - make_obj1(0); /* obj1 is compact */ - make_arr1(1); /* arr1 is pretty */ - - jw_object_begin(&mixed1, pretty); - { - jw_object_sub_jw(&mixed1, "obj1", &obj1); - jw_object_sub_jw(&mixed1, "arr1", &arr1); - } - jw_end(&mixed1); -} - -static void cmp(const char *test, const struct json_writer *jw, const char *exp) -{ - if (!strcmp(jw->json.buf, exp)) - return; - - printf("error[%s]: observed '%s' expected '%s'\n", - test, jw->json.buf, exp); - exit(1); -} - -#define t(v) do { make_##v(0); cmp(#v, &v, expect_##v); } while (0) -#define p(v) do { make_##v(1); cmp(#v, &v, pretty_##v); } while (0) - -/* - * Run some basic regression tests with some known patterns. - * These tests also demonstrate how to use the jw_ API. - */ -static int unit_tests(void) -{ - /* comptact (canonical) forms */ - t(obj1); - t(obj2); - t(obj3); - t(obj4); - t(obj5); - t(obj6); - - t(arr1); - t(arr2); - t(arr3); - t(arr4); - - t(nest1); - - t(inline1); - t(inline2); - - jw_init(&obj1); - jw_init(&obj2); - jw_init(&obj3); - jw_init(&obj4); - - jw_init(&arr1); - jw_init(&arr2); - jw_init(&arr3); - jw_init(&arr4); - - jw_init(&inline1); - jw_init(&inline2); - - /* pretty forms */ - p(obj1); - p(obj2); - p(obj3); - p(obj4); - - p(arr1); - p(arr2); - p(arr3); - p(arr4); - - p(inline1); - p(inline2); - - /* mixed forms */ - t(mixed1); - jw_init(&mixed1); - p(mixed1); - - return 0; -} - -static void get_s(int line_nr, char **s_in) -{ - *s_in = strtok(NULL, " "); - if (!*s_in) - die("line[%d]: expected: <s>", line_nr); -} - -static void get_i(int line_nr, intmax_t *s_in) -{ - char *s; - char *endptr; - - get_s(line_nr, &s); - - *s_in = strtol(s, &endptr, 10); - if (*endptr || errno == ERANGE) - die("line[%d]: invalid integer value", line_nr); -} - -static void get_d(int line_nr, double *s_in) -{ - char *s; - char *endptr; - - get_s(line_nr, &s); - - *s_in = strtod(s, &endptr); - if (*endptr || errno == ERANGE) - die("line[%d]: invalid float value", line_nr); -} - -static int pretty; - -#define MAX_LINE_LENGTH (64 * 1024) - -static char *get_trimmed_line(char *buf, int buf_size) -{ - int len; - - if (!fgets(buf, buf_size, stdin)) - return NULL; - - len = strlen(buf); - while (len > 0) { - char c = buf[len - 1]; - if (c == '\n' || c == '\r' || c == ' ' || c == '\t') - buf[--len] = 0; - else - break; - } - - while (*buf == ' ' || *buf == '\t') - buf++; - - return buf; -} - -static int scripted(void) -{ - struct json_writer jw = JSON_WRITER_INIT; - char buf[MAX_LINE_LENGTH]; - char *line; - int line_nr = 0; - - line = get_trimmed_line(buf, MAX_LINE_LENGTH); - if (!line) - return 0; - - if (!strcmp(line, "object")) - jw_object_begin(&jw, pretty); - else if (!strcmp(line, "array")) - jw_array_begin(&jw, pretty); - else - die("expected first line to be 'object' or 'array'"); - - while ((line = get_trimmed_line(buf, MAX_LINE_LENGTH)) != NULL) { - char *verb; - char *key; - char *s_value; - intmax_t i_value; - double d_value; - - line_nr++; - - verb = strtok(line, " "); - - if (!strcmp(verb, "end")) { - jw_end(&jw); - } - else if (!strcmp(verb, "object-string")) { - get_s(line_nr, &key); - get_s(line_nr, &s_value); - jw_object_string(&jw, key, s_value); - } - else if (!strcmp(verb, "object-int")) { - get_s(line_nr, &key); - get_i(line_nr, &i_value); - jw_object_intmax(&jw, key, i_value); - } - else if (!strcmp(verb, "object-double")) { - get_s(line_nr, &key); - get_i(line_nr, &i_value); - get_d(line_nr, &d_value); - jw_object_double(&jw, key, i_value, d_value); - } - else if (!strcmp(verb, "object-true")) { - get_s(line_nr, &key); - jw_object_true(&jw, key); - } - else if (!strcmp(verb, "object-false")) { - get_s(line_nr, &key); - jw_object_false(&jw, key); - } - else if (!strcmp(verb, "object-null")) { - get_s(line_nr, &key); - jw_object_null(&jw, key); - } - else if (!strcmp(verb, "object-object")) { - get_s(line_nr, &key); - jw_object_inline_begin_object(&jw, key); - } - else if (!strcmp(verb, "object-array")) { - get_s(line_nr, &key); - jw_object_inline_begin_array(&jw, key); - } - else if (!strcmp(verb, "array-string")) { - get_s(line_nr, &s_value); - jw_array_string(&jw, s_value); - } - else if (!strcmp(verb, "array-int")) { - get_i(line_nr, &i_value); - jw_array_intmax(&jw, i_value); - } - else if (!strcmp(verb, "array-double")) { - get_i(line_nr, &i_value); - get_d(line_nr, &d_value); - jw_array_double(&jw, i_value, d_value); - } - else if (!strcmp(verb, "array-true")) - jw_array_true(&jw); - else if (!strcmp(verb, "array-false")) - jw_array_false(&jw); - else if (!strcmp(verb, "array-null")) - jw_array_null(&jw); - else if (!strcmp(verb, "array-object")) - jw_array_inline_begin_object(&jw); - else if (!strcmp(verb, "array-array")) - jw_array_inline_begin_array(&jw); - else - die("unrecognized token: '%s'", verb); - } - - if (!jw_is_terminated(&jw)) - die("json not terminated: '%s'", jw.json.buf); - - printf("%s\n", jw.json.buf); - - strbuf_release(&jw.json); - return 0; -} - -int cmd__json_writer(int argc, const char **argv) -{ - argc--; /* skip over "json-writer" arg */ - argv++; - - if (argc > 0 && argv[0][0] == '-') { - if (!strcmp(argv[0], "-u") || !strcmp(argv[0], "--unit")) - return unit_tests(); - - if (!strcmp(argv[0], "-p") || !strcmp(argv[0], "--pretty")) - pretty = 1; - } - - return scripted(); -} |