8 static void run_buffer_path_simplify(buffer
*psrc
, buffer
*pdest
, const char *in
, size_t in_len
, const char *out
, size_t out_len
) {
9 buffer_copy_string_len(psrc
, in
, in_len
);
11 buffer_path_simplify(pdest
, psrc
);
13 if (!buffer_is_equal_string(pdest
, out
, out_len
)) {
15 "%s.%d: buffer_path_simplify('%s') failed: expected '%s', got '%s'\n",
20 pdest
->ptr
? pdest
->ptr
: "");
25 "%s.%d: buffer_path_simplify('%s') succeeded: got '%s'\n",
31 if (psrc
!= pdest
) buffer_copy_buffer(psrc
, pdest
);
32 buffer_path_simplify(pdest
, psrc
);
34 if (!buffer_is_equal_string(pdest
, out
, out_len
)) {
36 "%s.%d: buffer_path_simplify('%s') failed - not idempotent: expected '%s', got '%s'\n",
41 pdest
->ptr
? pdest
->ptr
: "");
48 static void test_buffer_path_simplify_with(buffer
*psrc
, buffer
*pdest
) {
49 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN(""), CONST_STR_LEN(""));
50 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN(" "), CONST_STR_LEN("/"));
51 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN("/"), CONST_STR_LEN("/"));
52 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN("//"), CONST_STR_LEN("/"));
53 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN("abc"), CONST_STR_LEN("/abc"));
54 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN("abc//"), CONST_STR_LEN("/abc/"));
55 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN("abc/./xyz"), CONST_STR_LEN("/abc/xyz"));
56 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN("abc/.//xyz"), CONST_STR_LEN("/abc/xyz"));
57 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN("abc/../xyz"), CONST_STR_LEN("/xyz"));
58 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN("/abc/./xyz"), CONST_STR_LEN("/abc/xyz"));
59 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN("/abc//./xyz"), CONST_STR_LEN("/abc/xyz"));
60 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN("/abc/../xyz"), CONST_STR_LEN("/xyz"));
61 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN("abc/../xyz/."), CONST_STR_LEN("/xyz/"));
62 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN("/abc/../xyz/."), CONST_STR_LEN("/xyz/"));
63 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN("abc/./xyz/.."), CONST_STR_LEN("/abc/"));
64 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN("/abc/./xyz/.."), CONST_STR_LEN("/abc/"));
65 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN("./xyz/.."), CONST_STR_LEN("/"));
66 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN(".//xyz/.."), CONST_STR_LEN("/"));
67 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN("/./xyz/.."), CONST_STR_LEN("/"));
68 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN(".././xyz/.."), CONST_STR_LEN("/"));
69 run_buffer_path_simplify(psrc
, pdest
, CONST_STR_LEN("/.././xyz/.."), CONST_STR_LEN("/"));
72 static void test_buffer_path_simplify() {
73 buffer
*psrc
= buffer_init();
74 buffer
*pdest
= buffer_init();
76 /* test with using the same buffer and with using different buffers */
77 test_buffer_path_simplify_with(psrc
, psrc
);
78 test_buffer_path_simplify_with(pdest
, psrc
);
85 test_buffer_path_simplify();