ATF_TC_BODY(fork, tc) { fprintf(stdout, "Should not get into child\n"); fprintf(stderr, "Should not get into child\n"); pid_t pid = atf_utils_fork(); if (pid == 0) { fprintf(stdout, "Child stdout\n"); fprintf(stderr, "Child stderr\n"); exit(EXIT_SUCCESS); } int status; ATF_REQUIRE(waitpid(pid, &status, 0) != -1); ATF_REQUIRE(WIFEXITED(status)); ATF_REQUIRE_EQ(EXIT_SUCCESS, WEXITSTATUS(status)); atf_dynstr_t out_name; RE(atf_dynstr_init_fmt(&out_name, "atf_utils_fork_%d_out.txt", (int)pid)); atf_dynstr_t err_name; RE(atf_dynstr_init_fmt(&err_name, "atf_utils_fork_%d_err.txt", (int)pid)); char buffer[1024]; read_file(atf_dynstr_cstring(&out_name), buffer, sizeof(buffer)); ATF_REQUIRE_STREQ("Child stdout\n", buffer); read_file(atf_dynstr_cstring(&err_name), buffer, sizeof(buffer)); ATF_REQUIRE_STREQ("Child stderr\n", buffer); atf_dynstr_fini(&err_name); atf_dynstr_fini(&out_name); }
ATF_TC_BODY(init_substr, tc) { atf_dynstr_t src; atf_dynstr_t str; RE(atf_dynstr_init_fmt(&src, "Str 1, Str 2")); RE(atf_dynstr_init_substr(&str, &src, 0, 0)); ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "") == 0); atf_dynstr_fini(&str); RE(atf_dynstr_init_substr(&str, &src, 0, atf_dynstr_npos)); ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "Str 1, Str 2") == 0); atf_dynstr_fini(&str); RE(atf_dynstr_init_substr(&str, &src, 0, 100)); ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "Str 1, Str 2") == 0); atf_dynstr_fini(&str); RE(atf_dynstr_init_substr(&str, &src, 0, 5)); ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "Str 1") == 0); atf_dynstr_fini(&str); RE(atf_dynstr_init_substr(&str, &src, 100, atf_dynstr_npos)); ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "") == 0); atf_dynstr_fini(&str); RE(atf_dynstr_init_substr(&str, &src, 7, atf_dynstr_npos)); ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "Str 2") == 0); atf_dynstr_fini(&str); atf_dynstr_fini(&src); }
ATF_TC_BODY(cstring, tc) { const char *cstr; atf_dynstr_t str; RE(atf_dynstr_init_fmt(&str, "Test string 1")); cstr = atf_dynstr_cstring(&str); ATF_REQUIRE(cstr != NULL); ATF_REQUIRE(strcmp(cstr, "Test string 1") == 0); atf_dynstr_fini(&str); RE(atf_dynstr_init_fmt(&str, "Test string 2")); cstr = atf_dynstr_cstring(&str); ATF_REQUIRE(cstr != NULL); ATF_REQUIRE(strcmp(cstr, "Test string 2") == 0); atf_dynstr_fini(&str); }
ATF_TC_BODY(equal_dynstr, tc) { atf_dynstr_t str, str2; RE(atf_dynstr_init(&str)); RE(atf_dynstr_init_fmt(&str2, "Test")); ATF_REQUIRE( atf_equal_dynstr_dynstr(&str, &str)); ATF_REQUIRE(!atf_equal_dynstr_dynstr(&str, &str2)); atf_dynstr_fini(&str2); atf_dynstr_fini(&str); }
ATF_TC_BODY(fini_disown, tc) { const char *cstr; char *cstr2; atf_dynstr_t str; RE(atf_dynstr_init_fmt(&str, "Test string 1")); cstr = atf_dynstr_cstring(&str); cstr2 = atf_dynstr_fini_disown(&str); ATF_REQUIRE_EQ(cstr, cstr2); free(cstr2); }
ATF_TC_BODY(init_fmt, tc) { atf_dynstr_t str; RE(atf_dynstr_init_fmt(&str, "String 1")); ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String 1") == 0); atf_dynstr_fini(&str); RE(atf_dynstr_init_fmt(&str, "String %d", 2)); ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String 2") == 0); atf_dynstr_fini(&str); RE(atf_dynstr_init_fmt(&str, "%s %d", "String", 3)); ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String 3") == 0); atf_dynstr_fini(&str); RE(atf_dynstr_init_fmt(&str, "%s%s%s%s%s%s%s", "This ", "should ", "be ", "a ", "large ", "string ", "aaaabbbbccccdddd")); ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "This should be a large string " "aaaabbbbccccdddd") == 0); atf_dynstr_fini(&str); }
ATF_TC_BODY(grep_string, tc) { atf_dynstr_t str; atf_dynstr_init_fmt(&str, "a string - aaaabbbb"); ATF_CHECK(grep_string(&str, "a string")); ATF_CHECK(grep_string(&str, "^a string")); ATF_CHECK(grep_string(&str, "aaaabbbb$")); ATF_CHECK(grep_string(&str, "aa.*bb")); ATF_CHECK(!grep_string(&str, "foo")); ATF_CHECK(!grep_string(&str, "bar")); ATF_CHECK(!grep_string(&str, "aaaaa")); atf_dynstr_fini(&str); }
ATF_TC_BODY(equal_cstring, tc) { atf_dynstr_t str; RE(atf_dynstr_init(&str)); ATF_REQUIRE( atf_equal_dynstr_cstring(&str, "")); ATF_REQUIRE(!atf_equal_dynstr_cstring(&str, "Test")); atf_dynstr_fini(&str); RE(atf_dynstr_init_fmt(&str, "Test")); ATF_REQUIRE( atf_equal_dynstr_cstring(&str, "Test")); ATF_REQUIRE(!atf_equal_dynstr_cstring(&str, "")); ATF_REQUIRE(!atf_equal_dynstr_cstring(&str, "Tes")); ATF_REQUIRE(!atf_equal_dynstr_cstring(&str, "Test ")); atf_dynstr_fini(&str); }
ATF_TC_BODY(copy, tc) { atf_dynstr_t str, str2; RE(atf_dynstr_init_fmt(&str, "Test string")); RE(atf_dynstr_copy(&str2, &str)); ATF_REQUIRE(atf_equal_dynstr_dynstr(&str, &str2)); RE(atf_dynstr_append_fmt(&str2, " non-shared text")); ATF_REQUIRE(!atf_equal_dynstr_dynstr(&str, &str2)); atf_dynstr_fini(&str2); atf_dynstr_fini(&str); }
ATF_TC_BODY(rfind_ch, tc) { atf_dynstr_t str; RE(atf_dynstr_init_fmt(&str, "Foo1/Bar2/,.Baz")); ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, '\0'), atf_dynstr_npos); ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, '0'), atf_dynstr_npos); ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, 'b'), atf_dynstr_npos); ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, 'F'), 0); ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, '/'), 9); ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, 'a'), 13); ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, 'z'), 14); atf_dynstr_fini(&str); }
ATF_TC_BODY(clear, tc) { atf_dynstr_t str; printf("Clear an empty string\n"); RE(atf_dynstr_init(&str)); atf_dynstr_clear(&str); ATF_REQUIRE_EQ(atf_dynstr_length(&str), 0); ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "") == 0); atf_dynstr_fini(&str); printf("Clear a non-empty string\n"); RE(atf_dynstr_init_fmt(&str, "Not empty")); ATF_REQUIRE_EQ(atf_dynstr_length(&str), strlen("Not empty")); ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "Not empty") == 0); atf_dynstr_clear(&str); ATF_REQUIRE_EQ(atf_dynstr_length(&str), 0); ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "") == 0); atf_dynstr_fini(&str); }
bool build_check_c_o(const char *path) { bool success; atf_dynstr_t iflag; const char *optargs[4]; RE(atf_dynstr_init_fmt(&iflag, "-I%s", atf_config_get("atf_includedir"))); optargs[0] = atf_dynstr_cstring(&iflag); optargs[1] = "-Wall"; optargs[2] = "-Werror"; optargs[3] = NULL; RE(atf_check_build_c_o(path, "test.o", optargs, &success)); atf_dynstr_fini(&iflag); return success; }
static void build_check_c_o_aux(const char *path, const char *failmsg) { bool success; atf_dynstr_t iflag; const char *optargs[2]; RE(atf_dynstr_init_fmt(&iflag, "-I%s", atf_config_get("atf_includedir"))); optargs[0] = atf_dynstr_cstring(&iflag); optargs[1] = NULL; RE(atf_check_build_c_o(path, "test.o", optargs, &success)); atf_dynstr_fini(&iflag); if (!success) atf_tc_fail(failmsg); }
bool build_check_c_o(const char *path) { bool success; atf_dynstr_t iflag; const char *optargs[4]; RE(atf_dynstr_init_fmt(&iflag, "-I%s", atf_env_get_with_default( "ATF_INCLUDEDIR", ATF_INCLUDEDIR))); optargs[0] = atf_dynstr_cstring(&iflag); optargs[1] = "-Wall"; optargs[2] = "-Werror"; optargs[3] = NULL; RE(atf_check_build_c_o(path, "test.o", optargs, &success)); atf_dynstr_fini(&iflag); return success; }