Example #1
0
static void test_clone(void) {
  jd_var dst = JD_INIT, src = JD_INIT, ref = JD_INIT;
  jd_var json = JD_INIT;

  jd_set_string(&json, "{\"a\":[1,2,3],\"b\":3.14,\"c\":\"foo\"}");
  jd_from_json(&ref, &json);

  jd_clone(&src, &ref, 1);
  jd_clone(&dst, &src, 0); /* shallow */
  jdt_is(&dst, &src, "clone matches");
  jd_assign(jd_lv(&dst, "$.d.0.capsule.source"), &json);
  jdt_is(&ref, &src, "source unchanged");
  jd_assign(jd_lv(&dst, "$.a.3"), &json);
  jdt_is(jd_rv(&src, "$.a.3"), &json, "deep item changed");

  jd_clone(&src, &ref, 1);
  jd_clone(&dst, &src, 1); /* deep */
  jdt_is(&dst, &src, "clone matches");
  jd_assign(jd_lv(&dst, "$.d.0.capsule.source"), &json);
  jdt_is(&ref, &src, "source unchanged");
  jd_assign(jd_lv(&dst, "$.a.3"), &json);
  jdt_is(&ref, &src, "source unchanged again");

  jd_release(&dst);
  jd_release(&src);
  jd_release(&ref);
  jd_release(&json);
}
Example #2
0
int main(void) {
  try {
    JD_2VARS(a, b);
    jd_set_string(a, "This is A");
    jd_throw("Oops: a=%J", a);
    jd_set_bool(b, 1);
  }
  puts("cleanup");
  catch (e) jd_rethrow(e);
Example #3
0
int jdt_is_string(jd_var *got, const char *want, const char *msg, ...) {
  va_list ap;
  jd_var vwant = JD_INIT;
  int rc;

  jd_set_string(&vwant, want);
  va_start(ap, msg);
  rc = _is(got, &vwant, msg, ap);
  va_end(ap);
  jd_release(&vwant);
  return rc;
}
Example #4
0
static void test_retain_release(void) {
  int i;
  jd_var h = JD_INIT, s = JD_INIT;
  jd_set_string(&s, "Hello, World");
  jd_assign(jd_lv(&h, "$.hello"), &s);
  jd_release(&s);
  is(s.type, VOID, "release -> type == void");
  for (i = 0; i < 10; i++)
    jd_release(&s); /* make sure it's a nop */
  jdt_is_json(&h, "{\"hello\":\"Hello, World\"}", "data matches");
  jd_release(&h);
}
Example #5
0
static void test_simple_throw(void) {
  try {
    JD_2VARS(a, b);
    jd_set_string(a, "This is A");
    jd_throw("Oops: a=%J", a);
    jd_set_bool(b, 1);
  }
  catch (e) {
    jdt_is_string(jd_rv(e, "$.message"),
                  "Oops: a=\"This is A\"",
                  "exception message matches");
    jd_release(e);
  }
}
Example #6
0
static void test_to_json(void) {
  jd_var vin = JD_INIT, vout = JD_INIT, vwant = JD_INIT;

  jd_set_array(&vin, 1);
  jd_set_string(jd_push(&vin, 1), "foo");
  jd_set_int(jd_push(&vin, 1), 12345);

  jd_set_string(&vwant, "[\"foo\",12345]");

  jd_to_json(&vout, &vin);
  ok(jd_compare(&vout, &vwant) == 0, "json");

  jd_set_string(jd_lv(&vin, "$.2.name"), "a hash");
  jd_set_int(jd_lv(&vin, "$.2.value"), 555);

  jd_set_string(&vwant, "[\"foo\",12345,{\"name\":\"a hash\",\"value\":555}]");

  jd_to_json(&vout, &vin);
  ok(jd_compare(&vout, &vwant) == 0, "json");

  jd_release(&vin);
  jd_release(&vout);
  jd_release(&vwant);
}
Example #7
0
static jd_var *path_iter(jd_var *iter, jd_var *data) {
  jd_var *slot = jd_push(jd_set_array(jd_context(jd_set_closure(iter, path_iter_f)), 2), 2);
  jd_assign(slot++, data);
  jd_set_string(jd_push(jd_set_array(slot++, 1000), 1), "$");
  return iter;
}