13 #error JSON_TEST_SRC must point to test source directory 17 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) 20 std::string
srcdir(JSON_TEST_SRC);
21 static bool test_failed =
false;
23 #define d_assert(expr) { if (!(expr)) { test_failed = true; fprintf(stderr, "%s failed\n", filename.c_str()); } } 24 #define f_assert(expr) { if (!(expr)) { test_failed = true; fprintf(stderr, "%s failed\n", __func__); } } 26 static std::string rtrim(std::string s)
28 s.erase(s.find_last_not_of(
" \n\r\t")+1);
32 static void runtest(std::string filename,
const std::string& jdata)
34 std::string
prefix = filename.substr(0, 4);
36 bool wantPass = (
prefix ==
"pass") || (
prefix ==
"roun");
37 bool wantFail = (
prefix ==
"fail");
38 bool wantRoundTrip = (
prefix ==
"roun");
39 assert(wantPass || wantFail);
42 bool testResult = val.
read(jdata);
51 std::string odata = val.
write(0, 0);
52 assert(odata == rtrim(jdata));
56 static void runtest_file(
const char *filename_)
58 std::string basename(filename_);
59 std::string filename =
srcdir +
"/" + basename;
60 FILE *f =
fopen(filename.c_str(),
"r");
67 int bread = fread(buf, 1,
sizeof(buf), f);
70 std::string s(buf, bread);
77 runtest(basename, jdata);
80 static const char *filenames[] = {
142 testResult = val.
read(
"[\"\\u0022\"]");
146 testResult = val.
read(
"[\"\\u0191\"]");
148 f_assert(val[0].get_str() ==
"\xc6\x91");
150 testResult = val.
read(
"[\"\\u2191\"]");
152 f_assert(val[0].get_str() ==
"\xe2\x86\x91");
154 testResult = val.
read(
"[\"\\ud834\\udd61\"]");
156 f_assert(val[0].get_str() ==
"\xf0\x9d\x85\xa1");
159 int main (
int argc,
char *argv[])
161 for (
unsigned int fidx = 0; fidx <
ARRAY_SIZE(filenames); fidx++) {
162 runtest_file(filenames[fidx]);
167 return test_failed ? 1 : 0;
FILE * fopen(const fs::path &p, const char *mode)
int main(int argc, char *argv[])
bool read(const char *raw, size_t len)
std::string write(unsigned int prettyIndent=0, unsigned int indentLevel=0) const
void unescape_unicode_test()
std::string srcdir(JSON_TEST_SRC)