Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.openwrt.org/project/libubox.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Štetiar <ynezz@true.cz>2019-11-19 16:31:44 +0300
committerPetr Štetiar <ynezz@true.cz>2019-11-24 15:26:58 +0300
commitb0a5cd8a28bf1d1883317ceac6cb8967d840d6ae (patch)
tree8600f4d551a16671af14f1d086014b111316ea10 /tests/test-json-script.c
parent1fefb7c4d7f90464940143c93e1b98f44ecf6590 (diff)
add cram based unit tests
For improved QA etc. For the start with initial test cases for avl, base64, jshn and list components. Moved runqueue and blobmsg from examples to tests. Converted just a few first test cases from json-script example into the new cram based unit test, more to come. Signed-off-by: Petr Štetiar <ynezz@true.cz>
Diffstat (limited to 'tests/test-json-script.c')
-rw-r--r--tests/test-json-script.c84
1 files changed, 84 insertions, 0 deletions
diff --git a/tests/test-json-script.c b/tests/test-json-script.c
new file mode 100644
index 0000000..6d93059
--- /dev/null
+++ b/tests/test-json-script.c
@@ -0,0 +1,84 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <json.h>
+#include "blobmsg.h"
+#include "blobmsg_json.h"
+#include "json_script.h"
+
+struct json_script_ctx jctx;
+struct blob_buf b_vars;
+struct blob_buf b_script;
+
+static void handle_command(struct json_script_ctx *ctx, const char *name,
+ struct blob_attr *data, struct blob_attr *vars)
+{
+ struct blob_attr *cur;
+ size_t rem;
+
+ fprintf(stdout, "%s", name);
+ blobmsg_for_each_attr(cur, data, rem)
+ fprintf(stdout, " %s", (char *) blobmsg_data(cur));
+ fprintf(stdout, "\n");
+}
+
+static struct json_script_file *
+handle_file(struct json_script_ctx *ctx, const char *filename)
+{
+ json_object *obj;
+
+ obj = json_object_from_file(filename);
+ if (!obj) {
+ fprintf(stderr, "load JSON data from %s failed.\n", filename);
+ return NULL;
+ }
+
+ blob_buf_init(&b_script, 0);
+ blobmsg_add_json_element(&b_script, "", obj);
+ json_object_put(obj);
+
+ return json_script_file_from_blobmsg(filename,
+ blob_data(b_script.head), blob_len(b_script.head));
+}
+
+static void usage(const char *prog, int exit_code)
+{
+ fprintf(stderr, "Usage: %s [VARNAME=value] <filename_json_script>\n", prog);
+ exit(exit_code);
+}
+
+int main(int argc, char *argv[])
+{
+ int i;
+ char *file = NULL;
+ const char *prog = argv[0];
+
+ blobmsg_buf_init(&b_vars);
+ blobmsg_buf_init(&b_script);
+
+ json_script_init(&jctx);
+ jctx.handle_command = handle_command;
+ jctx.handle_file = handle_file;
+
+ for (i = 1; i < argc; i++) {
+ char *sep = strchr(argv[i], '=');
+ if (sep) {
+ *sep = '\0';
+ blobmsg_add_string(&b_vars, argv[i], sep + 1);
+ } else if (!file) {
+ file = argv[i];
+ } else {
+ usage(prog, -1);
+ }
+ }
+ if (i < argc || !file)
+ usage(prog, -2);
+
+ json_script_run(&jctx, file, b_vars.head);
+
+ json_script_free(&jctx);
+ blob_buf_free(&b_script);
+ blob_buf_free(&b_vars);
+
+ return 0;
+}