int main() { expected_out_open(); #ifdef HAVE_EXECV fork_fun(call_execv); expected_out("cc", "execv.c"); #endif #ifdef HAVE_EXECVE fork_fun(call_execve); expected_out("/usr/bin/cc", "execve.c"); #endif #ifdef HAVE_EXECVP fork_fun(call_execvp); expected_out("cc", "execvp.c"); #endif #ifdef HAVE_EXECVP2 fork_fun(call_execvP); expected_out("cc", "execv_p.c"); #endif #ifdef HAVE_EXECVPE fork_fun(call_execvpe); expected_out("/usr/bin/cc", "execvpe.c"); #endif #ifdef HAVE_EXECL fork_fun(call_execl); expected_out("cc", "execl.c"); #endif #ifdef HAVE_EXECLP fork_fun(call_execlp); expected_out("cc", "execlp.c"); #endif #ifdef HAVE_EXECLE fork_fun(call_execle); expected_out("/usr/bin/cc", "execle.c"); #endif #ifdef HAVE_POSIX_SPAWN call_posix_spawn(); expected_out("cc", "posix_spawn.c"); #endif #ifdef HAVE_POSIX_SPAWNP call_posix_spawnp(); expected_out("cc", "posix_spawnp.c"); #endif #ifdef HAVE_EXECLE fork_fun(call_execle_and_printenv); #endif expected_out_close(); return 0; }
TEST_F(JsonCppSerializerTest, SerializeObjectValues_ObjectInsideArrayValues) { const std::string TEST_NAME = "SerializeObjectValues_ObjectInsideArrayValues"; const std::string EXPECTED_JSON_OUTPUT = "{\"root\":{\"cards\":[{\"obj1\":{\"id\":5,\"level\":4,\"name\":\"Diablos\",\"owner\":false,\"ranks\":[4,8,5,10]},\"obj2\":{\"id\":0,\"level\":1,\"name\":\"Geezard\",\"owner\":true,\"ranks\":[5,3,1,3]}},{\"obj1\":{\"id\":5,\"level\":4,\"name\":\"Diablos\",\"owner\":false,\"ranks\":[4,8,5,10]},\"obj2\":{\"id\":0,\"level\":1,\"name\":\"Geezard\",\"owner\":true,\"ranks\":[5,3,1,3]}}]}}\n"; Value cards_object; Value diablos_obj, geezard_obj; diablos_obj["id"] = 5u; diablos_obj["name"] = "Diablos"; diablos_obj["level"] = 4u; diablos_obj["ranks"][0] = 4u; diablos_obj["ranks"][1] = 8u; diablos_obj["ranks"][2] = 5u; diablos_obj["ranks"][3] = 10u; diablos_obj["owner"] = false; geezard_obj["id"] = 0u; geezard_obj["name"] = "Geezard"; geezard_obj["level"] = 1u; geezard_obj["ranks"][0] = 5u; geezard_obj["ranks"][1] = 3u; geezard_obj["ranks"][2] = 1u; geezard_obj["ranks"][3] = 3u; geezard_obj["owner"] = true; cards_object["root"]["cards"][0]["obj1"] = diablos_obj; cards_object["root"]["cards"][0]["obj2"] = geezard_obj; cards_object["root"]["cards"][1]["obj1"] = diablos_obj; cards_object["root"]["cards"][1]["obj2"] = geezard_obj; expected_out(cards_object, EXPECTED_JSON_OUTPUT, TEST_NAME); }
TEST_F( JsonCppSerializerTest, SerializeObjectValues_ComplexArrayValues ) { Value o; Value obj; Value arr; Value obj2; obj["name"] = "Geezard"; // Object node // Array node obj["ranks"][0] = 1u; obj["ranks"][1] = 5u; obj["ranks"][2] = 3u; obj["ranks"][3] = 1u; obj["ranks"][4] = 3u; obj["ranks"][5] = true; arr["__ranks"].push_back( obj ); // Array node obj2["name"] = "Geezard"; // Under an Object node obj2["__array"].push_back( arr ); // Array node o["root"]["cards"] = obj2; expected_out( o, "{\"root\":{\"cards\":{\"__array\":[{\"__ranks\":[{\"name\":\"Geezard\",\"ranks\":[1,5,3,1,3,true]}]}],\"name\":\"Geezard\"}}}\n" ); }
TEST_F( JsonCppSerializerTest, SerializeObjectValues_UsignedIntegerValue ) { Value o; o["obj"]["key"] = 1u; expected_out( o, "{\"obj\":{\"key\":1}}\n" ); }
TEST_F( JsonCppSerializerTest, SerializeObjectValues_ComplexObjectValues ) { Value o; Value obj1; Value obj2; Value obj3; Value obj4; obj1["id"] = 0u; obj1["name"] = "Geezard"; o["root"]["cards"]["obj1"] = obj1; obj2["id"] = 1u; obj2["name"] = "Bite Bug"; o["root"]["cards"]["obj2"] = obj2; obj3["id"] = 2u; obj3["name"] = "MiniMog"; o["root"]["cards"]["obj3"]["obj4"] = obj3; obj4["id"] = 3u; obj4["name"] = "Chicobo"; o["root"]["cards"]["obj4"] = obj4; expected_out( o, "{\"root\":{\"cards\":{\"obj1\":{\"id\":0,\"name\":\"Geezard\"},\"obj2\":{\"id\":1,\"name\":\"Bite Bug\"},\"obj3\":{\"obj4\":{\"id\":2,\"name\":\"MiniMog\"}},\"obj4\":{\"id\":3,\"name\":\"Chicobo\"}}}}\n" ); }
TEST_F( JsonCppSerializerTest, SerializeArrayValues_UsignedIntegerValue ) { Value o; o[0]["key"] = 1u; expected_out( o, "[{\"key\":1}]\n" ); }
TEST_F( JsonCppSerializerTest, SerializeObjectValues_BooleanValue ) { Value o; o["obj"]["key1"] = true; o["obj"]["key2"] = false; expected_out( o, "{\"obj\":{\"key1\":true,\"key2\":false}}\n" ); }
TEST_F( JsonCppSerializerTest, SerializeObjectValues_StringValue ) { Value o; o["obj"]["key1"] = "Hello"; o["obj"]["key2"] = "...there!"; expected_out( o, "{\"obj\":{\"key1\":\"Hello\",\"key2\":\"...there!\"}}\n" ); }
TEST_F( JsonCppSerializerTest, SerializeObjectValues_RealNumberValue ) { Value o; o["obj"]["key1"] = 8.245; o["obj"]["key2"] = 8.24f; expected_out( o, "{\"obj\":{\"key1\":8.244999999999999,\"key2\":8.239999771118164}}\n" ); }
TEST_F( JsonCppSerializerTest, SerializeObjectValues_NullValue ) { Value o; o["obj"]["key"] = Value(); expected_out( o, "{\"obj\":{\"key\":null}}\n" ); }
TEST_F( JsonCppSerializerTest, SerializeArrayValues_BooleanValue ) { Value o; o[0]["key1"] = true; o[1]["key2"] = false; expected_out( o, "[{\"key1\":true},{\"key2\":false}]\n" ); }
TEST_F( JsonCppSerializerTest, SerializeArrayValues_StringValue ) { Value o; o[0]["key1"] = "Hello"; o[1]["key2"] = "...there!"; expected_out( o, "[{\"key1\":\"Hello\"},{\"key2\":\"...there!\"}]\n" ); }
TEST_F( JsonCppSerializerTest, SerializeArrayValues_RealNumberValue ) { Value o; o[0]["key1"] = 8.245; o[1]["key2"] = 8.24f; expected_out( o, "[{\"key1\":8.244999999999999},{\"key2\":8.239999771118164}]\n" ); }
TEST_F( JsonCppSerializerTest, SerializeArrayValues_NullValue ) { Value o; o[0]["key"] = Value(); expected_out( o, "[{\"key\":null}]\n" ); }
TEST_F( JsonCppSerializerTest, SerializeObjectValuesSanity2 ) { Value o; o = sanity2_out(); expected_out( o, "{\"object1\":{\"boolean1\":false,\"null\":null,\"response1\":\"Yeah buddy!\"},\"object2\":{\"array2\":[0,2,3,\"hax\"],\"boolean2\":true,\"deep_object\":{\"h\":{\"boolean\":false,\"deep_deep_deep_object\":{\"deep_deep_deep_array\":[\"string_1\",\"string_2\"],\"h\":240,\"w\":420},\"key\":\"pair\",\"null\":null},\"w\":-4},\"response2\":\"Light weight!\"},\"object3\":[{\"cmd\":[\"hax\",\"gibson\"],\"deep_object\":{\"h\":{\"boolean\":false,\"deep_deep_deep_object\":{\"deep_deep_deep_array\":[\"string_1\",\"string_2\"],\"h\":240,\"w\":420},\"key\":\"pair\",\"null\":null},\"w\":-4}}],\"object5\":[\"hello, there!\",-1,false]}\n" ); }
void call_execlp() { char *const file = "execlp.c"; char *const compiler = "cc"; expected_out(file); create_source(file); FORK(execlp(compiler, compiler, "-c", file, (char *)0);) }
void call_execl() { char *const file = "execl.c"; char *const compiler = "/usr/bin/cc"; expected_out(file); create_source(file); FORK(execl(compiler, "cc", "-c", file, (char *)0);) }
void call_execle() { char *const file = "execle.c"; char *const compiler = "/usr/bin/cc"; char *const envp[] = {"THIS=THAT", 0}; expected_out(file); create_source(file); FORK(execle(compiler, compiler, "-c", file, (char *)0, envp);) }
void call_execvP() { char *const file = "execv_p.c"; char *const compiler = "cc"; char *const argv[] = {compiler, "-c", file, 0}; expected_out(file); create_source(file); FORK(execvP(compiler, _PATH_DEFPATH, argv);) }
void call_execv() { char *const file = "execv.c"; char *const compiler = "/usr/bin/cc"; char *const argv[] = {"cc", "-c", file, 0}; expected_out(file); create_source(file); FORK(execv(compiler, argv);) }
void call_execvpe() { char *const file = "execvpe.c"; char *const compiler = "cc"; char *const argv[] = {"/usr/bin/cc", "-c", file, 0}; char *const envp[] = {"THIS=THAT", 0}; expected_out(file); create_source(file); FORK(execvpe(compiler, argv, envp);) }
TEST_F( JsonCppSerializerTest, SerializeObjectValues_ArrayValues ) { Value o; o["obj"]["arr"][0] = Value::null; o["obj"]["arr"][1] = "Yeah, buddy!"; o["obj"]["arr"][2] = -8; o["obj"]["arr"][3] = 10u; o["obj"]["arr"][4] = false; expected_out( o, "{\"obj\":{\"arr\":[null,\"Yeah, buddy!\",-8,10,false]}}\n" ); }
TEST_F( JsonCppSerializerTest, SerializeObjectValues_SimpleObjectValues ) { Value o; o["obj"]["id"] = 5u; o["obj"]["name"] = "Diablos"; o["obj"]["level"] = 4u; o["obj"]["owner"] = false; expected_out( o, "{\"obj\":{\"id\":5,\"level\":4,\"name\":\"Diablos\",\"owner\":false}}\n" ); }
TEST_F( JsonCppSerializerTest, SerializeObjectValues_ArrayValuesInObjectValues ) { Value o; o["obj"]["id"] = 5u; o["obj"]["name"] = "Diablos"; o["obj"]["level"] = 4u; o["obj"]["ranks"][0] = 4u; o["obj"]["ranks"][1] = 8u; o["obj"]["ranks"][2] = 5u; o["obj"]["ranks"][3] = 10u; o["obj"]["owner"] = false; expected_out( o, "{\"obj\":{\"id\":5,\"level\":4,\"name\":\"Diablos\",\"owner\":false,\"ranks\":[4,8,5,10]}}\n" ); }
void call_posix_spawnp() { char *const file = "posix_spawnp.c"; char *const compiler = "cc"; char *const argv[] = {compiler, "-c", file, 0}; expected_out(file); create_source(file); pid_t child; if (0 != posix_spawnp(&child, "cc", 0, 0, argv, get_environ())) { perror("posix_spawnp"); exit(EXIT_FAILURE); } wait_for(child); }
TEST_F( JsonCppSerializerTest, SerializeArrayValues_MultipleSimpleObjectValues ) { Value o; o[0]["id"] = 5u; o[0]["name"] = "Diablos"; o[0]["level"] = 4u; o[0]["owner"] = false; o[1]["id"] = 99u; o[1]["name"] = "Squall"; o[1]["level"] = 4u; o[1]["owner"] = Value(); o[2]["id"] = 55u; o[2]["name"] = "Zell"; o[2]["level"] = 2u; o[2]["owner"] = true; o[3] = Value(); expected_out( o, "[{\"id\":5,\"level\":4,\"name\":\"Diablos\",\"owner\":false},{\"id\":99,\"level\":4,\"name\":\"Squall\",\"owner\":null},{\"id\":55,\"level\":2,\"name\":\"Zell\",\"owner\":true}]\n" ); }
TEST_F( JsonCppSerializerTest, SerializeObjectValues_MultipleSimpleObjectValues ) { Value o; o["obj1"]["id"] = 5u; o["obj1"]["name"] = "Diablos"; o["obj1"]["level"] = 4u; o["obj1"]["owner"] = false; o["obj2"]["id"] = 99u; o["obj2"]["name"] = "Squall"; o["obj2"]["level"] = 4u; o["obj2"]["owner"] = Value(); o["obj3"]["id"] = 55u; o["obj3"]["name"] = "Zell"; o["obj3"]["level"] = 2u; o["obj3"]["owner"] = true; o["obj4"] = Value(); expected_out( o, "{\"obj1\":{\"id\":5,\"level\":4,\"name\":\"Diablos\",\"owner\":false},\"obj2\":{\"id\":99,\"level\":4,\"name\":\"Squall\",\"owner\":null},\"obj3\":{\"id\":55,\"level\":2,\"name\":\"Zell\",\"owner\":true}}\n" ); }
TEST_F( JsonCppSerializerTest, SerializeObjectValues_MultipleArrayValuesInObjectValues ) { Value o; o["obj1"]["id"] = 5u; o["obj1"]["name"] = "Diablos"; o["obj1"]["level"] = 4u; o["obj1"]["ranks"][0] = 4u; o["obj1"]["ranks"][1] = 8u; o["obj1"]["ranks"][2] = 5u; o["obj1"]["ranks"][3] = 10u; o["obj1"]["owner"] = false; o["obj2"]["id"] = 0u; o["obj2"]["name"] = "Geezard"; o["obj2"]["level"] = 1u; o["obj2"]["ranks"][0] = 5u; o["obj2"]["ranks"][1] = 3u; o["obj2"]["ranks"][2] = 1u; o["obj2"]["ranks"][3] = 3u; o["obj2"]["owner"] = true; expected_out( o, "{\"obj1\":{\"id\":5,\"level\":4,\"name\":\"Diablos\",\"owner\":false,\"ranks\":[4,8,5,10]},\"obj2\":{\"id\":0,\"level\":1,\"name\":\"Geezard\",\"owner\":true,\"ranks\":[5,3,1,3]}}\n" ); }
// FIXME: Output should be just a newline, I think. TEST_F( JsonCppSerializerTest, SerializeNullValue ) { Value o; expected_out( o, "null\n" ); }