rdesktop/tests/utils_test.c
Cendio d10df452ee Ensure (partial) resize functionality with automated tests
This test suite was built with cgreen, and has various tests that
tries to ensure that we didn't break something while developing the
dynamic resize feature.

Signed-off-by: Henrik Andersson <hean01@cendio.com>
Signed-off-by: Karl Mikaelsson <derfian@cendio.se>
Signed-off-by: Thomas Nilefalk <thoni56@cendio.se>
2017-12-07 11:15:03 +01:00

180 lines
4.2 KiB
C

#include <cgreen/cgreen.h>
#include <cgreen/mocks.h>
#include "../rdesktop.h"
/* Boilerplate */
Describe(Utils);
BeforeEach(Utils) {};
AfterEach(Utils) {};
/* globals */
char g_codepage[16];
#include "../utils.c"
/* malloc; exit if out of memory */
void *
xmalloc(int size)
{
void *mem = malloc(size);
if (mem == NULL)
{
logger(Core, Error, "xmalloc, failed to allocate %d bytes", size);
exit(EX_UNAVAILABLE);
}
return mem;
}
/* Exit on NULL pointer. Use to verify result from XGetImage etc */
void
exit_if_null(void *ptr)
{
if (ptr == NULL)
{
logger(Core, Error, "unexpected null pointer. Out of memory?");
exit(EX_UNAVAILABLE);
}
}
/* strdup */
char *
xstrdup(const char *s)
{
char *mem = strdup(s);
if (mem == NULL)
{
logger(Core, Error, "xstrdup(), strdup() failed: %s", strerror(errno));
exit(EX_UNAVAILABLE);
}
return mem;
}
/* realloc; exit if out of memory */
void *
xrealloc(void *oldmem, size_t size)
{
void *mem;
if (size == 0)
size = 1;
mem = realloc(oldmem, size);
if (mem == NULL)
{
logger(Core, Error, "xrealloc, failed to reallocate %ld bytes", size);
exit(EX_UNAVAILABLE);
}
return mem;
}
/* free */
void
xfree(void *mem)
{
free(mem);
}
/* Test function */
Ensure(Utils, CalculateDpiScaleFactorsWhenDpiIsZero) {
uint32 physical_width, physical_height, desktop_scale, device_scale;
utils_calculate_dpi_scale_factors(1024, 768, 0,
&physical_width, &physical_height,
&desktop_scale, &device_scale);
assert_that(physical_width, is_equal_to(0));
assert_that(physical_height, is_equal_to(0));
assert_that(desktop_scale, is_equal_to(0));
assert_that(device_scale, is_equal_to(0));
}
Ensure(Utils, CalculateDpiScaleFactorsWhenDpiLessThan96) {
uint32 physical_width, physical_height, desktop_scale, device_scale;
utils_calculate_dpi_scale_factors(1024, 768, 95,
&physical_width, &physical_height,
&desktop_scale, &device_scale);
assert_that(physical_width, is_equal_to(273));
assert_that(physical_height, is_equal_to(205));
assert_that(desktop_scale, is_equal_to(100));
assert_that(device_scale, is_equal_to(100));
}
Ensure(Utils, CalculateDpiScaleFactorsWhenDpiLessThan134) {
uint32 physical_width, physical_height, desktop_scale, device_scale;
utils_calculate_dpi_scale_factors(1024, 768, 133,
&physical_width, &physical_height,
&desktop_scale, &device_scale);
assert_that(physical_width, is_equal_to(195));
assert_that(physical_height, is_equal_to(146));
assert_that(desktop_scale, is_equal_to(139));
assert_that(device_scale, is_equal_to(100));
}
Ensure(Utils, CalculateDpiScaleFactorsWhenDpiLessThan173) {
uint32 physical_width, physical_height, desktop_scale, device_scale;
utils_calculate_dpi_scale_factors(1024, 768, 172,
&physical_width, &physical_height,
&desktop_scale, &device_scale);
assert_that(physical_width, is_equal_to(151));
assert_that(physical_height, is_equal_to(113));
assert_that(desktop_scale, is_equal_to(179));
assert_that(device_scale, is_equal_to(140));
}
Ensure(Utils, CalculateDpiScaleFactorsWhenDpiGreaterThanOrEqualTo173) {
uint32 physical_width, physical_height, desktop_scale, device_scale;
utils_calculate_dpi_scale_factors(1024, 768, 173,
&physical_width, &physical_height,
&desktop_scale, &device_scale);
assert_that(physical_width, is_equal_to(150));
assert_that(physical_height, is_equal_to(112));
assert_that(desktop_scale, is_equal_to(180));
assert_that(device_scale, is_equal_to(180));
}
Ensure(Utils, ApplySessionSizeLimitationLimitsWidthAndHeightToMax8192)
{
uint32 width, height;
width = height = 90000;
utils_apply_session_size_limitations(&width, &height);
assert_that(width, is_equal_to(8192));
assert_that(height, is_equal_to(8192));
}
Ensure(Utils, ApplySessionSizeLimitationLimitsWidthAndHeightToMin200)
{
uint32 width, height;
width = height = 100;
utils_apply_session_size_limitations(&width, &height);
assert_that(width, is_equal_to(200));
assert_that(height, is_equal_to(200));
}
Ensure(Utils, ApplySessionSizeLimitationRoundsWidthToClosestSmallerEvenNumber)
{
uint32 width, height;
width = height = 201;
utils_apply_session_size_limitations(&width, &height);
assert_that(width, is_equal_to(200));
assert_that(height, is_equal_to(201));
}