monitor-unit-tests: Check monitor modes

https://bugzilla.gnome.org/show_bug.cgi?id=777732
This commit is contained in:
Jonas Ådahl 2016-12-14 17:23:44 +08:00
parent a6f464a600
commit 63ed134165

View File

@ -113,10 +113,25 @@ typedef struct _MonitorTestCaseSetup
int n_crtcs;
} MonitorTestCaseSetup;
typedef struct _MonitorTestCaseMonitorCrtcMode
{
int output;
int crtc_mode;
} MetaTestCaseMonitorCrtcMode;
typedef struct _MonitorTestCaseMonitorMode
{
int width;
int height;
MetaTestCaseMonitorCrtcMode crtc_modes[MAX_N_CRTCS];
} MetaMonitorTestCaseMonitorMode;
typedef struct _MonitorTestCaseMonitor
{
long outputs[MAX_N_OUTPUTS];
int n_outputs;
MetaMonitorTestCaseMonitorMode modes[MAX_N_MODES];
int n_modes;
int width_mm;
int height_mm;
} MonitorTestCaseMonitor;
@ -195,12 +210,38 @@ static MonitorTestCase initial_test_case = {
{
.outputs = { 0 },
.n_outputs = 1,
.modes = {
{
.width = 1024,
.height = 768,
.crtc_modes = {
{
.output = 0,
.crtc_mode = 0
}
}
}
},
.n_modes = 1,
.width_mm = 222,
.height_mm = 125
},
{
.outputs = { 1 },
.n_outputs = 1,
.modes = {
{
.width = 1024,
.height = 768,
.crtc_modes = {
{
.output = 1,
.crtc_mode = 0
}
}
}
},
.n_modes = 1,
.width_mm = 220,
.height_mm = 124
}
@ -241,6 +282,33 @@ output_from_winsys_id (MetaMonitorManager *monitor_manager,
return NULL;
}
typedef struct _CheckMonitorModeData
{
MetaMonitorManager *monitor_manager;
MetaTestCaseMonitorCrtcMode *expect_crtc_mode_iter;
} CheckMonitorModeData;
static void
check_monitor_mode (MetaMonitor *monitor,
MetaMonitorMode *mode,
MetaMonitorCrtcMode *monitor_crtc_mode,
gpointer user_data)
{
CheckMonitorModeData *data = user_data;
MetaMonitorManager *monitor_manager = data->monitor_manager;
MetaOutput *output;
MetaCrtcMode *crtc_mode;
output = output_from_winsys_id (monitor_manager,
data->expect_crtc_mode_iter->output);
crtc_mode = &monitor_manager->modes[data->expect_crtc_mode_iter->crtc_mode];
g_assert (monitor_crtc_mode->output == output);
g_assert (monitor_crtc_mode->crtc_mode == crtc_mode);
data->expect_crtc_mode_iter++;
}
static void
check_monitor_configuration (MonitorTestCase *test_case)
{
@ -274,6 +342,8 @@ check_monitor_configuration (MonitorTestCase *test_case)
GList *l_output;
int j;
int width_mm, height_mm;
GList *modes;
GList *l_mode;
outputs = meta_monitor_get_outputs (monitor);
@ -292,6 +362,29 @@ check_monitor_configuration (MonitorTestCase *test_case)
meta_monitor_get_physical_dimensions (monitor, &width_mm, &height_mm);
g_assert (width_mm == test_case->expect.monitors[i].width_mm);
g_assert (height_mm == test_case->expect.monitors[i].height_mm);
modes = meta_monitor_get_modes (monitor);
for (l_mode = modes, j = 0; l_mode; l_mode = l_mode->next, j++)
{
MetaMonitorMode *mode = l_mode->data;
int width;
int height;
CheckMonitorModeData data;
meta_monitor_mode_get_resolution (mode, &width, &height);
g_assert (width == test_case->expect.monitors[i].modes[j].width);
g_assert (height == test_case->expect.monitors[i].modes[j].height);
data = (CheckMonitorModeData) {
.monitor_manager = monitor_manager,
.expect_crtc_mode_iter =
test_case->expect.monitors[i].modes[j].crtc_modes
};
meta_monitor_mode_foreach_crtc (monitor, mode,
check_monitor_mode,
&data);
}
}
n_logical_monitors =
@ -488,6 +581,19 @@ meta_test_monitor_one_disconnected_linear_config (void)
{
.outputs = { 0 },
.n_outputs = 1,
.modes = {
{
.width = 1024,
.height = 768,
.crtc_modes = {
{
.output = 0,
.crtc_mode = 0
}
}
}
},
.n_modes = 1,
.width_mm = 222,
.height_mm = 125
}
@ -551,12 +657,38 @@ meta_test_monitor_one_off_linear_config (void)
{
.outputs = { 0 },
.n_outputs = 1,
.modes = {
{
.width = 1024,
.height = 768,
.crtc_modes = {
{
.output = 0,
.crtc_mode = 0
}
}
}
},
.n_modes = 1,
.width_mm = 222,
.height_mm = 125
},
{
.outputs = { 1 },
.n_outputs = 1,
.modes = {
{
.width = 1024,
.height = 768,
.crtc_modes = {
{
.output = 1,
.crtc_mode = 0
}
}
}
},
.n_modes = 1,
.width_mm = 224,
.height_mm = 126
}
@ -633,6 +765,39 @@ meta_test_monitor_preferred_linear_config (void)
{
.outputs = { 0 },
.n_outputs = 1,
.modes = {
{
.width = 800,
.height = 600,
.crtc_modes = {
{
.output = 0,
.crtc_mode = 0
}
}
},
{
.width = 1024,
.height = 768,
.crtc_modes = {
{
.output = 0,
.crtc_mode = 1
}
}
},
{
.width = 1280,
.height = 720,
.crtc_modes = {
{
.output = 0,
.crtc_mode = 2
}
}
}
},
.n_modes = 3,
.width_mm = 222,
.height_mm = 125
}
@ -728,6 +893,23 @@ meta_test_monitor_tiled_linear_config (void)
{
.outputs = { 0, 1 },
.n_outputs = 2,
.modes = {
{
.width = 800,
.height = 600,
.crtc_modes = {
{
.output = 0,
.crtc_mode = 0
},
{
.output = 1,
.crtc_mode = 0
}
}
},
},
.n_modes = 1,
.width_mm = 222,
.height_mm = 125,
}
@ -814,12 +996,38 @@ meta_test_monitor_hidpi_linear_config (void)
{
.outputs = { 0 },
.n_outputs = 1,
.modes = {
{
.width = 1280,
.height = 720,
.crtc_modes = {
{
.output = 0,
.crtc_mode = 0
}
}
},
},
.n_modes = 1,
.width_mm = 150,
.height_mm = 85
},
{
.outputs = { 1 },
.n_outputs = 1,
.modes = {
{
.width = 1024,
.height = 768,
.crtc_modes = {
{
.output = 1,
.crtc_mode = 1
}
}
},
},
.n_modes = 1,
.width_mm = 222,
.height_mm = 125
}