コード例 #1
0
ファイル: json.c プロジェクト: AndyA/jsondata
static void test_utf8(void) {
  uint8_t u8[] = {
    0x00, 0x7f, 0xc2, 0x80, 0xdf, 0xbf, 0xe0, 0xa0, 0x80, 0xef, 0xbf, 0xbf
  };

  scope {
    jd_var *got = jd_from_json(jd_nv(),
    jd_nsv("\"\\u0000\\u007F\\u0080\\u07FF\\u0800\\uFFFF\""));
    size_t sz;
    const char *bytes = jd_bytes(got, &sz);

    if (ok(sz == sizeof(u8) + 1, "utf8: size matches")) {
      ok(0 == memcmp(bytes, u8, sz - 1), "utf8: bytes match");
    }
  }

  scope {
    const char one80[] = ONE80;
    const char *one80json = "\"" ONE80 "\"";
    jd_var *got = jd_from_json(jd_nv(), jd_nsv(one80json));
    size_t sz;
    const char *bytes = jd_bytes(got, &sz);
    if (ok(sz == sizeof(one80), "180 degrees: size matches")) {
      ok(0 == memcmp(bytes, one80, sz), "180 degrees: bytes match");
    }
  }
}
コード例 #2
0
ファイル: clone.c プロジェクト: nevali/jsondata
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);
}
コード例 #3
0
ファイル: jd_test.c プロジェクト: AndyA/jsondata
static int _isj(jd_var *got, jd_var *want, const char *msg, va_list ap) {
  jd_var vgot = JD_INIT;
  int rc;
  jd_to_json(&vgot, got);
  rc = test(jd_compare(&vgot, want) == 0, msg, ap);
  if (!rc) {
    jd_var pwant = JD_INIT;
    jd_from_json(&pwant, want);
    jdt_diag("wanted %lJ", &pwant);
    jdt_diag("got %lJ", got);
    jd_release(&pwant);
  }
  jd_release(&vgot);
  return rc;
}
コード例 #4
0
ファイル: jdtest.c プロジェクト: AndyA/jsondata
static jd_var *load_json(jd_var *out, const char *filename) {
  jd_var json = JD_INIT;
  jd_from_json(out, load_string(&json, filename));
  jd_release(&json);
  return out;
}
コード例 #5
0
ファイル: framework.c プロジェクト: AndyA/multicoder
jd_var *tf_load_json(jd_var *out, FILE *f) {
  jd_var json = JD_INIT;
  jd_from_json(out, tf_load_string(&json, f));
  jd_release(&json);
  return out;
}