17 * This is defined here to prevent #include'ing misc.h
18 * which makes things difficult beyond any recognition
21 adjust_power_of_2(size_t u
)
34 /* Defines for use in the tests and the mock parse_line() */
35 #define PATH1 "/s p a c e"
36 #define PATH2 "/foo bar/baz"
37 #define PARAM1 "param1"
38 #define PARAM2 "param two"
39 #define SCRIPT_CMD "\"" PATH1 PATH2 "\"" PARAM1 "\"" PARAM2 "\""
42 __wrap_parse_line(const char *line
, char **p
, const int n
, const char *file
,
43 const int line_num
, int msglevel
, struct gc_arena
*gc
)
52 argv_printf__multiple_spaces_in_format__parsed_as_one(void **state
)
54 struct argv a
= argv_new();
56 argv_printf(&a
, " %s %s %d ", PATH1
, PATH2
, 42);
57 assert_int_equal(a
.argc
, 3);
63 argv_printf_cat__multiple_spaces_in_format__parsed_as_one(void **state
)
65 struct argv a
= argv_new();
67 argv_printf(&a
, "%s ", PATH1
);
68 argv_printf_cat(&a
, " %s %s", PATH2
, PARAM1
);
69 assert_int_equal(a
.argc
, 3);
75 argv_printf__combined_path_with_spaces__argc_correct(void **state
)
77 struct argv a
= argv_new();
79 argv_printf(&a
, "%s%sc", PATH1
, PATH2
);
80 assert_int_equal(a
.argc
, 1);
82 argv_printf(&a
, "%s%sc %d", PATH1
, PATH2
, 42);
83 assert_int_equal(a
.argc
, 2);
85 argv_printf(&a
, "foo %s%sc %s x y", PATH2
, PATH1
, "foo");
86 assert_int_equal(a
.argc
, 5);
92 argv_parse_cmd__command_string__argc_correct(void **state
)
94 struct argv a
= argv_new();
96 argv_parse_cmd(&a
, SCRIPT_CMD
);
97 assert_int_equal(a
.argc
, 3);
103 argv_parse_cmd__command_and_extra_options__argc_correct(void **state
)
105 struct argv a
= argv_new();
107 argv_parse_cmd(&a
, SCRIPT_CMD
);
108 argv_printf_cat(&a
, "bar baz %d %s", 42, PATH1
);
109 assert_int_equal(a
.argc
, 7);
115 argv_printf_cat__used_twice__argc_correct(void **state
)
117 struct argv a
= argv_new();
119 argv_printf(&a
, "%s %s %s", PATH1
, PATH2
, PARAM1
);
120 argv_printf_cat(&a
, "%s", PARAM2
);
121 argv_printf_cat(&a
, "foo");
122 assert_int_equal(a
.argc
, 5);
128 argv_str__multiple_argv__correct_output(void **state
)
130 struct argv a
= argv_new();
131 struct gc_arena gc
= gc_new();
134 argv_printf(&a
, "%s%sc", PATH1
, PATH2
);
135 argv_printf_cat(&a
, "%s", PARAM1
);
136 argv_printf_cat(&a
, "%s", PARAM2
);
137 output
= argv_str(&a
, &gc
, PA_BRACKET
);
138 assert_string_equal(output
, "[" PATH1 PATH2
"] [" PARAM1
"] [" PARAM2
"]");
145 argv_insert_head__empty_argv__head_only(void **state
)
147 struct argv a
= argv_new();
150 b
= argv_insert_head(&a
, PATH1
);
151 assert_int_equal(b
.argc
, 1);
152 assert_string_equal(b
.argv
[0], PATH1
);
159 argv_insert_head__non_empty_argv__head_added(void **state
)
161 struct argv a
= argv_new();
165 argv_printf(&a
, "%s", PATH2
);
166 b
= argv_insert_head(&a
, PATH1
);
167 assert_int_equal(b
.argc
, a
.argc
+ 1);
168 for (i
= 0; i
< b
.argc
; i
++) {
171 assert_string_equal(b
.argv
[i
], PATH1
);
175 assert_string_equal(b
.argv
[i
], a
.argv
[i
- 1]);
186 const struct CMUnitTest tests
[] = {
187 cmocka_unit_test(argv_printf__multiple_spaces_in_format__parsed_as_one
),
188 cmocka_unit_test(argv_printf_cat__multiple_spaces_in_format__parsed_as_one
),
189 cmocka_unit_test(argv_printf__combined_path_with_spaces__argc_correct
),
190 cmocka_unit_test(argv_parse_cmd__command_string__argc_correct
),
191 cmocka_unit_test(argv_parse_cmd__command_and_extra_options__argc_correct
),
192 cmocka_unit_test(argv_printf_cat__used_twice__argc_correct
),
193 cmocka_unit_test(argv_str__multiple_argv__correct_output
),
194 cmocka_unit_test(argv_insert_head__non_empty_argv__head_added
),
197 return cmocka_run_group_tests_name("argv", tests
, NULL
, NULL
);