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