FreeRDP
Loading...
Searching...
No Matches
TestClientCmdLineStatus.c
1#include <freerdp/client.h>
2#include <freerdp/client/cmdline.h>
3#include <freerdp/settings.h>
4#include <winpr/cmdline.h>
5#include <winpr/strlst.h>
6
7int TestClientCmdLineStatus(int argc, char* argv[])
8{
9 const struct
10 {
11 const char* args[6];
12 int expected_status;
13 BOOL list_monitors;
14 } tests[] = {
15 { { "testfreerdp", "/list:kbd", nullptr }, 0, FALSE },
16 { { "testfreerdp", "--list", "kbd", nullptr }, 0, FALSE },
17 { { "testfreerdp", "-list", "kbd", nullptr }, 0, FALSE },
18 { { "testfreerdp", "/list:monitor", nullptr }, 0, TRUE },
19 { { "testfreerdp", "--list", "monitor", nullptr }, 0, TRUE },
20 { { "testfreerdp", "-list", "monitor", nullptr }, 0, TRUE },
21 { { "testfreerdp", "/log-level:ERROR", "/list:monitor", nullptr }, 0, TRUE },
22 { { "testfreerdp", "--log-level", "ERROR", "--list", "monitor", nullptr }, 0, TRUE },
23 { { "testfreerdp", "/list:invalid", nullptr }, COMMAND_LINE_ERROR, FALSE },
24 { { "testfreerdp", "--list", "invalid", nullptr }, COMMAND_LINE_ERROR, FALSE },
25 };
26 int rc = 0;
27
28 WINPR_UNUSED(argc);
29 WINPR_UNUSED(argv);
30
31 for (size_t i = 0; i < ARRAYSIZE(tests); i++)
32 {
33 rdpSettings* settings = freerdp_settings_new(0);
34 char** args = string_list_copy(tests[i].args);
35 if (!settings || !args)
36 {
37 freerdp_settings_free(settings);
38 string_list_free(args);
39 return -1;
40 }
41
42 const int count = string_list_length((const char* const*)args);
43 int status = freerdp_client_settings_parse_command_line(settings, count, args, FALSE);
44 if (status != COMMAND_LINE_STATUS_PRINT)
45 {
46 fprintf(stderr, "Test %zu: expected print status, got %d\n", i, status);
47 rc = -1;
48 }
49 else
50 {
51 status =
52 freerdp_client_settings_command_line_status_print(settings, status, count, args);
53 if (status != tests[i].expected_status)
54 {
55 fprintf(stderr, "Test %zu: expected status %d, got %d\n", i,
56 tests[i].expected_status, status);
57 rc = -1;
58 }
59 if (freerdp_settings_get_bool(settings, FreeRDP_ListMonitors) != tests[i].list_monitors)
60 {
61 fprintf(stderr, "Test %zu: unexpected ListMonitors setting\n", i);
62 rc = -1;
63 }
64 }
65
66 freerdp_settings_free(settings);
67 string_list_free(args);
68 }
69
70 return rc;
71}
FREERDP_API rdpSettings * freerdp_settings_new(DWORD flags)
creates a new setting struct
FREERDP_API void freerdp_settings_free(rdpSettings *settings)
Free a settings struct with all data in it.
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_get_bool(const rdpSettings *settings, FreeRDP_Settings_Keys_Bool id)
Returns a boolean settings value.