1 #include <cgreen/cgreen.h>
2 #include <cgreen/mocks.h>
3 #include "../rdesktop.h"
4
5 /* Boilerplate */
6 Describe(Utils);
BeforeEach(Utils)7 BeforeEach(Utils) {};
AfterEach(Utils)8 AfterEach(Utils) {};
9
10 /* globals */
11 char g_codepage[16];
12
13 #include "../utils.c"
14
15 /* malloc; exit if out of memory */
16 void *
xmalloc(int size)17 xmalloc(int size)
18 {
19 void *mem = malloc(size);
20 if (mem == NULL)
21 {
22 logger(Core, Error, "xmalloc, failed to allocate %d bytes", size);
23 exit(EX_UNAVAILABLE);
24 }
25 return mem;
26 }
27
28 /* Exit on NULL pointer. Use to verify result from XGetImage etc */
29 void
exit_if_null(void * ptr)30 exit_if_null(void *ptr)
31 {
32 if (ptr == NULL)
33 {
34 logger(Core, Error, "unexpected null pointer. Out of memory?");
35 exit(EX_UNAVAILABLE);
36 }
37 }
38
39 /* strdup */
40 char *
xstrdup(const char * s)41 xstrdup(const char *s)
42 {
43 char *mem = strdup(s);
44 if (mem == NULL)
45 {
46 logger(Core, Error, "xstrdup(), strdup() failed: %s", strerror(errno));
47 exit(EX_UNAVAILABLE);
48 }
49 return mem;
50 }
51
52 /* realloc; exit if out of memory */
53 void *
xrealloc(void * oldmem,size_t size)54 xrealloc(void *oldmem, size_t size)
55 {
56 void *mem;
57
58 if (size == 0)
59 size = 1;
60 mem = realloc(oldmem, size);
61 if (mem == NULL)
62 {
63 logger(Core, Error, "xrealloc, failed to reallocate %ld bytes", size);
64 exit(EX_UNAVAILABLE);
65 }
66 return mem;
67 }
68
69 /* free */
70 void
xfree(void * mem)71 xfree(void *mem)
72 {
73 free(mem);
74 }
75
76
77 /* Test function */
Ensure(Utils,CalculateDpiScaleFactorsWhenDpiIsZero)78 Ensure(Utils, CalculateDpiScaleFactorsWhenDpiIsZero) {
79 uint32 physical_width, physical_height, desktop_scale, device_scale;
80
81 utils_calculate_dpi_scale_factors(1024, 768, 0,
82 &physical_width, &physical_height,
83 &desktop_scale, &device_scale);
84
85 assert_that(physical_width, is_equal_to(0));
86 assert_that(physical_height, is_equal_to(0));
87 assert_that(desktop_scale, is_equal_to(0));
88 assert_that(device_scale, is_equal_to(0));
89 }
90
Ensure(Utils,CalculateDpiScaleFactorsWhenDpiLessThan96)91 Ensure(Utils, CalculateDpiScaleFactorsWhenDpiLessThan96) {
92 uint32 physical_width, physical_height, desktop_scale, device_scale;
93
94 utils_calculate_dpi_scale_factors(1024, 768, 95,
95 &physical_width, &physical_height,
96 &desktop_scale, &device_scale);
97
98 assert_that(physical_width, is_equal_to(273));
99 assert_that(physical_height, is_equal_to(205));
100 assert_that(desktop_scale, is_equal_to(100));
101 assert_that(device_scale, is_equal_to(100));
102 }
103
Ensure(Utils,CalculateDpiScaleFactorsWhenDpiLessThan134)104 Ensure(Utils, CalculateDpiScaleFactorsWhenDpiLessThan134) {
105 uint32 physical_width, physical_height, desktop_scale, device_scale;
106
107 utils_calculate_dpi_scale_factors(1024, 768, 133,
108 &physical_width, &physical_height,
109 &desktop_scale, &device_scale);
110
111 assert_that(physical_width, is_equal_to(195));
112 assert_that(physical_height, is_equal_to(146));
113 assert_that(desktop_scale, is_equal_to(139));
114 assert_that(device_scale, is_equal_to(100));
115 }
116
Ensure(Utils,CalculateDpiScaleFactorsWhenDpiLessThan173)117 Ensure(Utils, CalculateDpiScaleFactorsWhenDpiLessThan173) {
118 uint32 physical_width, physical_height, desktop_scale, device_scale;
119
120 utils_calculate_dpi_scale_factors(1024, 768, 172,
121 &physical_width, &physical_height,
122 &desktop_scale, &device_scale);
123
124 assert_that(physical_width, is_equal_to(151));
125 assert_that(physical_height, is_equal_to(113));
126 assert_that(desktop_scale, is_equal_to(179));
127 assert_that(device_scale, is_equal_to(140));
128 }
129
Ensure(Utils,CalculateDpiScaleFactorsWhenDpiGreaterThanOrEqualTo173)130 Ensure(Utils, CalculateDpiScaleFactorsWhenDpiGreaterThanOrEqualTo173) {
131 uint32 physical_width, physical_height, desktop_scale, device_scale;
132
133 utils_calculate_dpi_scale_factors(1024, 768, 173,
134 &physical_width, &physical_height,
135 &desktop_scale, &device_scale);
136
137 assert_that(physical_width, is_equal_to(150));
138 assert_that(physical_height, is_equal_to(112));
139 assert_that(desktop_scale, is_equal_to(180));
140 assert_that(device_scale, is_equal_to(180));
141 }
142
143
Ensure(Utils,ApplySessionSizeLimitationLimitsWidthAndHeightToMax8192)144 Ensure(Utils, ApplySessionSizeLimitationLimitsWidthAndHeightToMax8192)
145 {
146 uint32 width, height;
147
148 width = height = 90000;
149
150 utils_apply_session_size_limitations(&width, &height);
151
152 assert_that(width, is_equal_to(8192));
153 assert_that(height, is_equal_to(8192));
154 }
155
156
Ensure(Utils,ApplySessionSizeLimitationLimitsWidthAndHeightToMin200)157 Ensure(Utils, ApplySessionSizeLimitationLimitsWidthAndHeightToMin200)
158 {
159 uint32 width, height;
160
161 width = height = 100;
162
163 utils_apply_session_size_limitations(&width, &height);
164
165 assert_that(width, is_equal_to(200));
166 assert_that(height, is_equal_to(200));
167 }
168
Ensure(Utils,ApplySessionSizeLimitationRoundsWidthToClosestSmallerEvenNumber)169 Ensure(Utils, ApplySessionSizeLimitationRoundsWidthToClosestSmallerEvenNumber)
170 {
171 uint32 width, height;
172
173 width = height = 201;
174
175 utils_apply_session_size_limitations(&width, &height);
176
177 assert_that(width, is_equal_to(200));
178 assert_that(height, is_equal_to(201));
179 }
180