2#include <winpr/crypto.h>
4#include <freerdp/settings.h>
6static BOOL test_alloc(
void)
10 const char* param[] = {
"foo:",
"bar",
"bla",
"rdp",
nullptr };
17 arg1 = freerdp_addin_argv_new(0,
nullptr);
18 if (!arg1 || (arg1->argc != 0) || (arg1->argv))
22 if (winpr_RAND(&rng,
sizeof(rng)) < 0)
24 rng = abs(rng % 8192) + 1;
26 arg2 = freerdp_addin_argv_new(rng,
nullptr);
27 if (!arg2 || (arg2->argc != rng) || (!arg2->argv))
29 for (
int x = 0; x < arg2->argc; x++)
36 arg3 = freerdp_addin_argv_new(ARRAYSIZE(param) - 1, param);
37 if (!arg3 || (arg3->argc != ARRAYSIZE(param) - 1) || (!arg3->argv))
40 for (
int x = 0; x < arg3->argc; x++)
42 if (strcmp(arg3->argv[x], param[x]) != 0)
47 arg4 = freerdp_addin_argv_new(ARRAYSIZE(param), param);
52 freerdp_addin_argv_free(arg1);
53 freerdp_addin_argv_free(arg2);
54 freerdp_addin_argv_free(arg3);
55 freerdp_addin_argv_free(arg4);
56 printf(
"%s: %d\n", __func__, rc);
60static BOOL test_clone(
void)
63 const char* param[] = {
"foo:",
"bar",
"bla",
"rdp" };
68 arg = freerdp_addin_argv_new(ARRAYSIZE(param), param);
69 if (!arg || (arg->argc != ARRAYSIZE(param)))
71 clone = freerdp_addin_argv_clone(arg);
72 if (!clone || (clone->argc != arg->argc))
75 for (
int x = 0; x < arg->argc; x++)
77 if (strcmp(param[x], arg->argv[x]) != 0)
79 if (strcmp(param[x], clone->argv[x]) != 0)
83 clone2 = freerdp_addin_argv_clone(
nullptr);
88 freerdp_addin_argv_free(arg);
89 freerdp_addin_argv_free(clone);
90 freerdp_addin_argv_free(clone2);
91 printf(
"%s: %d\n", __func__, rc);
95static BOOL test_add_remove(
void)
97 const char* args[] = {
"foo",
"bar",
"bla",
"gaga" };
99 ADDIN_ARGV* arg = freerdp_addin_argv_new(0,
nullptr);
101 if (!arg || (arg->argc != 0) || arg->argv)
103 for (
size_t y = 0; y < ARRAYSIZE(args); y++)
105 const char* param = args[y];
106 if (!freerdp_addin_argv_add_argument(arg, param))
108 if (arg->argc != (
int)y + 1)
112 if (strcmp(arg->argv[y], param) != 0)
117 if (freerdp_addin_argv_del_argument(arg,
"foobar"))
121 if (freerdp_addin_argv_del_argument(
nullptr,
"foobar"))
125 if (freerdp_addin_argv_del_argument(arg,
nullptr))
129 for (
size_t y = 0; y < ARRAYSIZE(args); y++)
131 const char* param = args[y];
132 if (!freerdp_addin_argv_del_argument(arg, param))
134 for (
size_t x = y + 1; x < ARRAYSIZE(args); x++)
136 if (strcmp(arg->argv[x - y - 1], args[x]) != 0)
142 freerdp_addin_argv_free(arg);
143 printf(
"%s: %d\n", __func__, rc);
147static BOOL test_set_argument(
void)
150 const char* newarg =
"foobar";
151 const char* args[] = {
"foo",
"bar",
"bla",
"gaga" };
155 arg = freerdp_addin_argv_new(ARRAYSIZE(args), args);
156 if (!arg || (arg->argc != ARRAYSIZE(args)) || !arg->argv)
160 ret = freerdp_addin_set_argument(
nullptr,
"foo");
163 ret = freerdp_addin_set_argument(arg,
nullptr);
168 ret = freerdp_addin_set_argument(arg,
"foo");
169 if ((ret != 1) || (arg->argc != ARRAYSIZE(args)))
173 ret = freerdp_addin_set_argument(arg, newarg);
174 if ((ret != 0) || (arg->argc != ARRAYSIZE(args) + 1) ||
175 (strcmp(newarg, arg->argv[ARRAYSIZE(args)]) != 0))
180 freerdp_addin_argv_free(arg);
181 printf(
"%s: %d\n", __func__, rc);
185static BOOL test_replace_argument(
void)
188 const char* newarg =
"foobar";
189 const char* args[] = {
"foo",
"bar",
"bla",
"gaga" };
193 arg = freerdp_addin_argv_new(ARRAYSIZE(args), args);
194 if (!arg || (arg->argc != ARRAYSIZE(args)) || !arg->argv)
198 ret = freerdp_addin_replace_argument(
nullptr,
"foo", newarg);
201 ret = freerdp_addin_replace_argument(arg,
nullptr, newarg);
204 ret = freerdp_addin_replace_argument(arg,
"foo",
nullptr);
209 ret = freerdp_addin_replace_argument(arg,
"foo", newarg);
210 if ((ret != 1) || (arg->argc != ARRAYSIZE(args)) || (strcmp(arg->argv[0], newarg) != 0))
214 ret = freerdp_addin_replace_argument(arg,
"lalala", newarg);
215 if ((ret != 0) || (arg->argc != ARRAYSIZE(args) + 1) ||
216 (strcmp(newarg, arg->argv[ARRAYSIZE(args)]) != 0))
221 freerdp_addin_argv_free(arg);
222 printf(
"%s: %d\n", __func__, rc);
226static BOOL test_set_argument_value(
void)
229 const char* newarg1 =
"foobar";
230 const char* newarg2 =
"lalala";
231 const char* fullnewarg1 =
"foo:foobar";
232 const char* fullnewarg2 =
"foo:lalala";
233 const char* fullnewvalue =
"lalala:foobar";
234 const char* args[] = {
"foo",
"foo:",
"bar",
"bla",
"gaga" };
238 arg = freerdp_addin_argv_new(ARRAYSIZE(args), args);
239 if (!arg || (arg->argc != ARRAYSIZE(args)) || !arg->argv)
243 ret = freerdp_addin_set_argument_value(
nullptr,
"foo", newarg1);
246 ret = freerdp_addin_set_argument_value(arg,
nullptr, newarg1);
249 ret = freerdp_addin_set_argument_value(arg,
"foo",
nullptr);
254 ret = freerdp_addin_set_argument_value(arg,
"foo", newarg1);
255 if ((ret != 1) || (arg->argc != ARRAYSIZE(args)) || (strcmp(arg->argv[1], fullnewarg1) != 0))
257 ret = freerdp_addin_set_argument_value(arg,
"foo", newarg2);
258 if ((ret != 1) || (arg->argc != ARRAYSIZE(args)) || (strcmp(arg->argv[1], fullnewarg2) != 0))
262 ret = freerdp_addin_set_argument_value(arg, newarg2, newarg1);
263 if ((ret != 0) || (arg->argc != ARRAYSIZE(args) + 1) ||
264 (strcmp(fullnewvalue, arg->argv[ARRAYSIZE(args)]) != 0))
269 freerdp_addin_argv_free(arg);
270 printf(
"%s: %d\n", __func__, rc);
274static BOOL test_replace_argument_value(
void)
277 const char* newarg1 =
"foobar";
278 const char* newarg2 =
"lalala";
279 const char* fullnewarg1 =
"foo:foobar";
280 const char* fullnewarg2 =
"foo:lalala";
281 const char* fullnewvalue =
"lalala:foobar";
282 const char* args[] = {
"foo",
"foo:",
"bar",
"bla",
"gaga" };
286 arg = freerdp_addin_argv_new(ARRAYSIZE(args), args);
287 if (!arg || (arg->argc != ARRAYSIZE(args)) || !arg->argv)
291 ret = freerdp_addin_replace_argument_value(
nullptr,
"bar",
"foo", newarg1);
294 ret = freerdp_addin_replace_argument_value(arg,
nullptr,
"foo", newarg1);
297 ret = freerdp_addin_replace_argument_value(arg,
"foo",
nullptr, newarg1);
300 ret = freerdp_addin_replace_argument_value(arg,
"bar",
"foo",
nullptr);
305 ret = freerdp_addin_replace_argument_value(arg,
"bla",
"foo", newarg1);
306 if ((ret != 1) || (arg->argc != ARRAYSIZE(args)) || (strcmp(arg->argv[3], fullnewarg1) != 0))
308 ret = freerdp_addin_replace_argument_value(arg,
"foo",
"foo", newarg2);
309 if ((ret != 1) || (arg->argc != ARRAYSIZE(args)) || (strcmp(arg->argv[0], fullnewarg2) != 0))
313 ret = freerdp_addin_replace_argument_value(arg,
"hahaha", newarg2, newarg1);
314 if ((ret != 0) || (arg->argc != ARRAYSIZE(args) + 1) ||
315 (strcmp(fullnewvalue, arg->argv[ARRAYSIZE(args)]) != 0))
320 freerdp_addin_argv_free(arg);
321 printf(
"%s: %d\n", __func__, rc);
325int TestAddinArgv(
int argc,
char* argv[])
335 if (!test_add_remove())
337 if (!test_set_argument())
339 if (!test_replace_argument())
341 if (!test_set_argument_value())
343 if (!test_replace_argument_value())