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