2#include <winpr/crypto.h>
4#include <freerdp/settings.h>
6static BOOL test_alloc(
void)
10 const char* param[] = {
"foo:",
"bar",
"bla",
"rdp",
nullptr };
11 const char* paramInvalid[] = {
nullptr,
"foo:",
"bar",
"bla",
"rdp",
nullptr };
19 arg1 = freerdp_addin_argv_new(0,
nullptr);
20 if (!arg1 || (arg1->argc != 0) || (arg1->argv))
24 if (winpr_RAND(&rng,
sizeof(rng)) < 0)
26 rng = abs(rng % 8192) + 1;
28 arg2 = freerdp_addin_argv_new(rng,
nullptr);
29 if (!arg2 || (arg2->argc != rng) || (!arg2->argv))
31 for (
int x = 0; x < arg2->argc; x++)
38 arg3 = freerdp_addin_argv_new(ARRAYSIZE(param) - 1, param);
39 if (!arg3 || (arg3->argc != ARRAYSIZE(param) - 1) || (!arg3->argv))
42 for (
int x = 0; x < arg3->argc; x++)
44 if (strcmp(arg3->argv[x], param[x]) != 0)
49 arg4 = freerdp_addin_argv_new(ARRAYSIZE(param), param);
54 arg5 = freerdp_addin_argv_new(ARRAYSIZE(paramInvalid), paramInvalid);
59 freerdp_addin_argv_free(arg1);
60 freerdp_addin_argv_free(arg2);
61 freerdp_addin_argv_free(arg3);
62 freerdp_addin_argv_free(arg4);
63 freerdp_addin_argv_free(arg5);
64 printf(
"%s: %d\n", __func__, rc);
68static BOOL test_clone(
void)
71 const char* param[] = {
"foo:",
"bar",
"bla",
"rdp" };
76 arg = freerdp_addin_argv_new(ARRAYSIZE(param), param);
77 if (!arg || (arg->argc != ARRAYSIZE(param)))
79 clone = freerdp_addin_argv_clone(arg);
80 if (!clone || (clone->argc != arg->argc))
83 for (
int x = 0; x < arg->argc; x++)
85 if (strcmp(param[x], arg->argv[x]) != 0)
87 if (strcmp(param[x], clone->argv[x]) != 0)
91 clone2 = freerdp_addin_argv_clone(
nullptr);
96 freerdp_addin_argv_free(arg);
97 freerdp_addin_argv_free(clone);
98 freerdp_addin_argv_free(clone2);
99 printf(
"%s: %d\n", __func__, rc);
103static BOOL test_add_remove(
void)
105 const char* args[] = {
"foo",
"bar",
"bla",
"gaga" };
107 ADDIN_ARGV* arg = freerdp_addin_argv_new(0,
nullptr);
109 if (!arg || (arg->argc != 0) || arg->argv)
111 for (
size_t y = 0; y < ARRAYSIZE(args); y++)
113 const char* param = args[y];
114 if (!freerdp_addin_argv_add_argument(arg, param))
116 if (arg->argc != (
int)y + 1)
120 if (strcmp(arg->argv[y], param) != 0)
125 if (freerdp_addin_argv_del_argument(arg,
"foobar"))
129 if (freerdp_addin_argv_del_argument(
nullptr,
"foobar"))
133 if (freerdp_addin_argv_del_argument(arg,
nullptr))
137 for (
size_t y = 0; y < ARRAYSIZE(args); y++)
139 const char* param = args[y];
140 if (!freerdp_addin_argv_del_argument(arg, param))
142 for (
size_t x = y + 1; x < ARRAYSIZE(args); x++)
144 if (strcmp(arg->argv[x - y - 1], args[x]) != 0)
150 freerdp_addin_argv_free(arg);
151 printf(
"%s: %d\n", __func__, rc);
155static BOOL test_set_argument(
void)
158 const char* newarg =
"foobar";
159 const char* args[] = {
"foo",
"bar",
"bla",
"gaga" };
163 arg = freerdp_addin_argv_new(ARRAYSIZE(args), args);
164 if (!arg || (arg->argc != ARRAYSIZE(args)) || !arg->argv)
168 ret = freerdp_addin_set_argument(
nullptr,
"foo");
171 ret = freerdp_addin_set_argument(arg,
nullptr);
176 ret = freerdp_addin_set_argument(arg,
"foo");
177 if ((ret != 1) || (arg->argc != ARRAYSIZE(args)))
181 ret = freerdp_addin_set_argument(arg, newarg);
182 if ((ret != 0) || (arg->argc != ARRAYSIZE(args) + 1) ||
183 (strcmp(newarg, arg->argv[ARRAYSIZE(args)]) != 0))
188 freerdp_addin_argv_free(arg);
189 printf(
"%s: %d\n", __func__, rc);
193static BOOL test_replace_argument(
void)
196 const char* newarg =
"foobar";
197 const char* args[] = {
"foo",
"bar",
"bla",
"gaga" };
201 arg = freerdp_addin_argv_new(ARRAYSIZE(args), args);
202 if (!arg || (arg->argc != ARRAYSIZE(args)) || !arg->argv)
206 ret = freerdp_addin_replace_argument(
nullptr,
"foo", newarg);
209 ret = freerdp_addin_replace_argument(arg,
nullptr, newarg);
212 ret = freerdp_addin_replace_argument(arg,
"foo",
nullptr);
217 ret = freerdp_addin_replace_argument(arg,
"foo", newarg);
218 if ((ret != 1) || (arg->argc != ARRAYSIZE(args)) || (strcmp(arg->argv[0], newarg) != 0))
222 ret = freerdp_addin_replace_argument(arg,
"lalala", newarg);
223 if ((ret != 0) || (arg->argc != ARRAYSIZE(args) + 1) ||
224 (strcmp(newarg, arg->argv[ARRAYSIZE(args)]) != 0))
229 freerdp_addin_argv_free(arg);
230 printf(
"%s: %d\n", __func__, rc);
234static BOOL test_set_argument_value(
void)
237 const char* newarg1 =
"foobar";
238 const char* newarg2 =
"lalala";
239 const char* fullnewarg1 =
"foo:foobar";
240 const char* fullnewarg2 =
"foo:lalala";
241 const char* fullnewvalue =
"lalala:foobar";
242 const char* args[] = {
"foo",
"foo:",
"bar",
"bla",
"gaga" };
246 arg = freerdp_addin_argv_new(ARRAYSIZE(args), args);
247 if (!arg || (arg->argc != ARRAYSIZE(args)) || !arg->argv)
251 ret = freerdp_addin_set_argument_value(
nullptr,
"foo", newarg1);
254 ret = freerdp_addin_set_argument_value(arg,
nullptr, newarg1);
257 ret = freerdp_addin_set_argument_value(arg,
"foo",
nullptr);
262 ret = freerdp_addin_set_argument_value(arg,
"foo", newarg1);
263 if ((ret != 1) || (arg->argc != ARRAYSIZE(args)) || (strcmp(arg->argv[1], fullnewarg1) != 0))
265 ret = freerdp_addin_set_argument_value(arg,
"foo", newarg2);
266 if ((ret != 1) || (arg->argc != ARRAYSIZE(args)) || (strcmp(arg->argv[1], fullnewarg2) != 0))
270 ret = freerdp_addin_set_argument_value(arg, newarg2, newarg1);
271 if ((ret != 0) || (arg->argc != ARRAYSIZE(args) + 1) ||
272 (strcmp(fullnewvalue, arg->argv[ARRAYSIZE(args)]) != 0))
277 freerdp_addin_argv_free(arg);
278 printf(
"%s: %d\n", __func__, rc);
282static BOOL test_replace_argument_value(
void)
285 const char* newarg1 =
"foobar";
286 const char* newarg2 =
"lalala";
287 const char* fullnewarg1 =
"foo:foobar";
288 const char* fullnewarg2 =
"foo:lalala";
289 const char* fullnewvalue =
"lalala:foobar";
290 const char* args[] = {
"foo",
"foo:",
"bar",
"bla",
"gaga" };
294 arg = freerdp_addin_argv_new(ARRAYSIZE(args), args);
295 if (!arg || (arg->argc != ARRAYSIZE(args)) || !arg->argv)
299 ret = freerdp_addin_replace_argument_value(
nullptr,
"bar",
"foo", newarg1);
302 ret = freerdp_addin_replace_argument_value(arg,
nullptr,
"foo", newarg1);
305 ret = freerdp_addin_replace_argument_value(arg,
"foo",
nullptr, newarg1);
308 ret = freerdp_addin_replace_argument_value(arg,
"bar",
"foo",
nullptr);
313 ret = freerdp_addin_replace_argument_value(arg,
"bla",
"foo", newarg1);
314 if ((ret != 1) || (arg->argc != ARRAYSIZE(args)) || (strcmp(arg->argv[3], fullnewarg1) != 0))
316 ret = freerdp_addin_replace_argument_value(arg,
"foo",
"foo", newarg2);
317 if ((ret != 1) || (arg->argc != ARRAYSIZE(args)) || (strcmp(arg->argv[0], fullnewarg2) != 0))
321 ret = freerdp_addin_replace_argument_value(arg,
"hahaha", newarg2, newarg1);
322 if ((ret != 0) || (arg->argc != ARRAYSIZE(args) + 1) ||
323 (strcmp(fullnewvalue, arg->argv[ARRAYSIZE(args)]) != 0))
328 freerdp_addin_argv_free(arg);
329 printf(
"%s: %d\n", __func__, rc);
333int TestAddinArgv(
int argc,
char* argv[])
343 if (!test_add_remove())
345 if (!test_set_argument())
347 if (!test_replace_argument())
349 if (!test_set_argument_value())
351 if (!test_replace_argument_value())