1 #include <cgreen/cgreen.h>
2 #include <cgreen/mocks.h>
3 #include "../rdesktop.h"
4 #include "../proto.h"
5 #include <locale.h>
6 #include <langinfo.h>
7
8 #define always_expect_error_log() always_expect(logger, when(lvl, is_equal_to(Error)))
9
10 /* Boilerplate */
11 Describe(ParseGeometry);
BeforeEach(ParseGeometry)12 BeforeEach(ParseGeometry) {};
AfterEach(ParseGeometry)13 AfterEach(ParseGeometry) {};
14
15 /* Global Variables.. :( */
16 int g_tcp_port_rdp;
17 RDPDR_DEVICE g_rdpdr_device[16];
18 uint32 g_num_devices;
19 char *g_rdpdr_clientname;
20 RD_BOOL g_using_full_workarea;
21
22 #define PACKAGE_VERSION "test"
23
24 #include "../rdesktop.c"
25
26
Ensure(ParseGeometry,HandlesWxH)27 Ensure(ParseGeometry, HandlesWxH)
28 {
29 g_requested_session_width = g_requested_session_height = 0;
30
31 assert_that(parse_geometry_string("1234x2345"), is_equal_to(0));
32
33 assert_that(g_requested_session_width, is_equal_to(1234));
34 assert_that(g_requested_session_height, is_equal_to(2345));
35 assert_that(g_window_size_type, is_equal_to(Fixed));
36 }
37
Ensure(ParseGeometry,FailsOnMissingHeight)38 Ensure(ParseGeometry, FailsOnMissingHeight)
39 {
40
41 always_expect_error_log();
42
43 g_requested_session_width = g_requested_session_height = 0;
44 assert_that(parse_geometry_string("1234"), is_equal_to(-1));
45
46 assert_that(g_requested_session_width, is_equal_to(1234));
47 assert_that(g_requested_session_height, is_equal_to(0));
48 assert_that(g_window_size_type, is_equal_to(Fixed));
49 }
50
Ensure(ParseGeometry,FailsOnMissingHeightVariant2)51 Ensure(ParseGeometry, FailsOnMissingHeightVariant2)
52 {
53 always_expect_error_log();
54
55 g_requested_session_width = g_requested_session_height = 0;
56 assert_that(parse_geometry_string("1234x"), is_equal_to(-1));
57
58 assert_that(g_requested_session_width, is_equal_to(1234));
59 assert_that(g_requested_session_height, is_equal_to(0));
60 assert_that(g_window_size_type, is_equal_to(Fixed));
61 }
62
Ensure(ParseGeometry,HandlesPercentageOfScreen)63 Ensure(ParseGeometry, HandlesPercentageOfScreen)
64 {
65 g_requested_session_width = g_requested_session_height = 0;
66
67 assert_that(parse_geometry_string("80%"), is_equal_to(0));
68
69 assert_that(g_requested_session_width, is_equal_to(80));
70 assert_that(g_requested_session_height, is_equal_to(80));
71 assert_that(g_window_size_type, is_equal_to(PercentageOfScreen));
72 }
73
Ensure(ParseGeometry,HandlesSpecificWidthAndHeightPercentageOfScreen)74 Ensure(ParseGeometry, HandlesSpecificWidthAndHeightPercentageOfScreen)
75 {
76 g_requested_session_width = g_requested_session_height = 0;
77
78 assert_that(parse_geometry_string("100%x60%"), is_equal_to(0));
79
80 assert_that(g_requested_session_width, is_equal_to(100));
81 assert_that(g_requested_session_height, is_equal_to(60));
82 assert_that(g_window_size_type, is_equal_to(PercentageOfScreen));
83 }
84
Ensure(ParseGeometry,HandlesSpecifiedDPI)85 Ensure(ParseGeometry, HandlesSpecifiedDPI)
86 {
87 g_dpi = g_requested_session_width = g_requested_session_height = 0;
88
89 assert_that(parse_geometry_string("1234x2345@234"), is_equal_to(0));
90
91 assert_that(g_dpi, is_equal_to(234));
92 assert_that(g_requested_session_width, is_equal_to(1234));
93 assert_that(g_requested_session_height, is_equal_to(2345));
94 assert_that(g_window_size_type, is_equal_to(Fixed));
95 }
96
97
Ensure(ParseGeometry,HandlesSpecifiedXPosition)98 Ensure(ParseGeometry, HandlesSpecifiedXPosition)
99 {
100 g_xpos = g_ypos = g_requested_session_width = g_requested_session_height = 0;
101
102 assert_that(parse_geometry_string("1234x2345+123"), is_equal_to(0));
103
104 assert_that(g_xpos, is_equal_to(123));
105 assert_that(g_ypos, is_equal_to(0));
106 assert_that(g_pos, is_equal_to(1));
107 assert_that(g_requested_session_width, is_equal_to(1234));
108 assert_that(g_requested_session_height, is_equal_to(2345));
109 assert_that(g_window_size_type, is_equal_to(Fixed));
110 }
111
Ensure(ParseGeometry,HandlesSpecifiedNegativeXPosition)112 Ensure(ParseGeometry, HandlesSpecifiedNegativeXPosition)
113 {
114 g_ypos = g_xpos = g_requested_session_width = g_requested_session_height = 0;
115
116 assert_that(parse_geometry_string("1234x2345-500"), is_equal_to(0));
117
118 assert_that(g_xpos, is_equal_to(-500));
119 assert_that(g_ypos, is_equal_to(0));
120 assert_that(g_pos, is_equal_to(2));
121 assert_that(g_requested_session_width, is_equal_to(1234));
122 assert_that(g_requested_session_height, is_equal_to(2345));
123 assert_that(g_window_size_type, is_equal_to(Fixed));
124 }
125
Ensure(ParseGeometry,HandlesSpecifiedNegativeXAndYPosition)126 Ensure(ParseGeometry, HandlesSpecifiedNegativeXAndYPosition)
127 {
128 g_ypos = g_xpos = g_requested_session_width = g_requested_session_height = 0;
129
130 assert_that(parse_geometry_string("1234x2345-500-501"), is_equal_to(0));
131
132 assert_that(g_xpos, is_equal_to(-500));
133 assert_that(g_ypos, is_equal_to(-501));
134 assert_that(g_pos, is_equal_to(2 | 4));
135 assert_that(g_requested_session_width, is_equal_to(1234));
136 assert_that(g_requested_session_height, is_equal_to(2345));
137 assert_that(g_window_size_type, is_equal_to(Fixed));
138 }
139
Ensure(ParseGeometry,HandlesSpecifiedXandYPosition)140 Ensure(ParseGeometry, HandlesSpecifiedXandYPosition)
141 {
142 g_xpos = g_ypos = g_requested_session_width = g_requested_session_height = 0;
143
144 assert_that(parse_geometry_string("1234x2345+123+234"), is_equal_to(0));
145
146 assert_that(g_xpos, is_equal_to(123));
147 assert_that(g_ypos, is_equal_to(234));
148 assert_that(g_pos, is_equal_to(1));
149 assert_that(g_requested_session_width, is_equal_to(1234));
150 assert_that(g_requested_session_height, is_equal_to(2345));
151 assert_that(g_window_size_type, is_equal_to(Fixed));
152 }
153
Ensure(ParseGeometry,HandlesSpecifiedXandYPositionWithDPI)154 Ensure(ParseGeometry, HandlesSpecifiedXandYPositionWithDPI)
155 {
156 g_dpi = g_xpos = g_ypos = g_requested_session_width = g_requested_session_height = 0;
157
158 assert_that(parse_geometry_string("1234x2345@678+123+234"), is_equal_to(0));
159
160 assert_that(g_dpi, is_equal_to(678));
161 assert_that(g_xpos, is_equal_to(123));
162 assert_that(g_ypos, is_equal_to(234));
163 assert_that(g_requested_session_width, is_equal_to(1234));
164 assert_that(g_requested_session_height, is_equal_to(2345));
165 assert_that(g_window_size_type, is_equal_to(Fixed));
166 }
167
Ensure(ParseGeometry,HandlesSpecialNameWorkarea)168 Ensure(ParseGeometry, HandlesSpecialNameWorkarea)
169 {
170 assert_that(parse_geometry_string("workarea"), is_equal_to(0));
171
172 assert_that(g_window_size_type, is_equal_to(Workarea));
173 }
174
175
Ensure(ParseGeometry,FailsOnNegativeDPI)176 Ensure(ParseGeometry, FailsOnNegativeDPI)
177 {
178 always_expect_error_log();
179
180 assert_that(parse_geometry_string("1234x2345@-105"), is_equal_to(-1));
181 }
182
183
Ensure(ParseGeometry,FailsOnNegativeWidth)184 Ensure(ParseGeometry, FailsOnNegativeWidth)
185 {
186 always_expect_error_log();
187
188 assert_that(parse_geometry_string("-1234x2345"), is_equal_to(-1));
189 }
190
191
Ensure(ParseGeometry,FailsOnNegativeHeight)192 Ensure(ParseGeometry, FailsOnNegativeHeight)
193 {
194 always_expect_error_log();
195
196 assert_that(parse_geometry_string("1234x-2345"), is_equal_to(-1));
197 }
198
Ensure(ParseGeometry,FailsOnMixingPixelsAndPercents)199 Ensure(ParseGeometry, FailsOnMixingPixelsAndPercents)
200 {
201 always_expect_error_log();
202
203 g_window_size_type = Fixed;
204 assert_that(parse_geometry_string("1234%x2345"), is_equal_to(-1));
205
206 g_window_size_type = Fixed;
207 assert_that(parse_geometry_string("1234x2345%"), is_equal_to(-1));
208 }
209
Ensure(ParseGeometry,FailsOnGarbageAtEndOfString)210 Ensure(ParseGeometry, FailsOnGarbageAtEndOfString)
211 {
212 always_expect_error_log();
213
214 g_window_size_type = Fixed;
215 assert_that(parse_geometry_string("1234%1239123081232345abcdefgadkfjafa4af048"), is_equal_to(-1));
216
217 g_window_size_type = Fixed;
218 assert_that(parse_geometry_string("1235abcer9823461"), is_equal_to(-1));
219
220 g_window_size_type = Fixed;
221 assert_that(parse_geometry_string("1235%x123%+123123+123123asdkjfasdf"), is_equal_to(-1));
222
223 g_window_size_type = Fixed;
224 assert_that(parse_geometry_string("1235%x123%@123asdkjfasdf"), is_equal_to(-1));
225
226 g_window_size_type = Fixed;
227 assert_that(parse_geometry_string("1235%x123%@123+1-2asdkjfasdf"), is_equal_to(-1));
228 }
229
230