afca974405
It already was built into it without any symbols exported, but also duplicated in test cases that used it. Make it so that the built in functions are exported, with prefixes, and make all tests use the exported functions. While at it, make things go via MetaContext or MetaBackend depending on how early in initialization things are run. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2262>
1049 lines
30 KiB
C
1049 lines
30 KiB
C
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
|
|
|
/*
|
|
* Copyright (C) 2016 Red Hat, Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "config.h"
|
|
|
|
#include "tests/monitor-store-unit-tests.h"
|
|
|
|
#include "backends/meta-backend-private.h"
|
|
#include "backends/meta-monitor-config-store.h"
|
|
#include "backends/meta-monitor-config-manager.h"
|
|
#include "backends/meta-monitor-manager-private.h"
|
|
#include "tests/meta-monitor-test-utils.h"
|
|
#include "tests/unit-tests.h"
|
|
|
|
#define MAX_N_MONITORS 10
|
|
#define MAX_N_LOGICAL_MONITORS 10
|
|
#define MAX_N_CONFIGURATIONS 10
|
|
|
|
typedef struct _MonitorStoreTestCaseMonitorMode
|
|
{
|
|
int width;
|
|
int height;
|
|
float refresh_rate;
|
|
MetaCrtcModeFlag flags;
|
|
} MonitorStoreTestCaseMonitorMode;
|
|
|
|
typedef struct _MonitorStoreTestCaseMonitor
|
|
{
|
|
const char *connector;
|
|
const char *vendor;
|
|
const char *product;
|
|
const char *serial;
|
|
MonitorStoreTestCaseMonitorMode mode;
|
|
gboolean is_underscanning;
|
|
} MonitorStoreTestCaseMonitor;
|
|
|
|
typedef struct _MonitorStoreTestCaseLogicalMonitor
|
|
{
|
|
MetaRectangle layout;
|
|
float scale;
|
|
MetaMonitorTransform transform;
|
|
gboolean is_primary;
|
|
gboolean is_presentation;
|
|
MonitorStoreTestCaseMonitor monitors[MAX_N_MONITORS];
|
|
int n_monitors;
|
|
} MonitorStoreTestCaseLogicalMonitor;
|
|
|
|
typedef struct _MonitorStoreTestConfiguration
|
|
{
|
|
MonitorStoreTestCaseLogicalMonitor logical_monitors[MAX_N_LOGICAL_MONITORS];
|
|
int n_logical_monitors;
|
|
} MonitorStoreTestConfiguration;
|
|
|
|
typedef struct _MonitorStoreTestExpect
|
|
{
|
|
MonitorStoreTestConfiguration configurations[MAX_N_CONFIGURATIONS];
|
|
int n_configurations;
|
|
} MonitorStoreTestExpect;
|
|
|
|
static MetaMonitorsConfigKey *
|
|
create_config_key_from_expect (MonitorStoreTestConfiguration *expect_config)
|
|
{
|
|
MetaMonitorsConfigKey *config_key;
|
|
GList *monitor_specs;
|
|
int i;
|
|
|
|
monitor_specs = NULL;
|
|
for (i = 0; i < expect_config->n_logical_monitors; i++)
|
|
{
|
|
int j;
|
|
|
|
for (j = 0; j < expect_config->logical_monitors[i].n_monitors; j++)
|
|
{
|
|
MetaMonitorSpec *monitor_spec;
|
|
MonitorStoreTestCaseMonitor *test_monitor =
|
|
&expect_config->logical_monitors[i].monitors[j];
|
|
|
|
monitor_spec = g_new0 (MetaMonitorSpec, 1);
|
|
|
|
monitor_spec->connector = g_strdup (test_monitor->connector);
|
|
monitor_spec->vendor = g_strdup (test_monitor->vendor);
|
|
monitor_spec->product = g_strdup (test_monitor->product);
|
|
monitor_spec->serial = g_strdup (test_monitor->serial);
|
|
|
|
monitor_specs = g_list_prepend (monitor_specs, monitor_spec);
|
|
}
|
|
}
|
|
|
|
g_assert_nonnull (monitor_specs);
|
|
|
|
monitor_specs = g_list_sort (monitor_specs,
|
|
(GCompareFunc) meta_monitor_spec_compare);
|
|
|
|
config_key = g_new0 (MetaMonitorsConfigKey, 1);
|
|
*config_key = (MetaMonitorsConfigKey) {
|
|
.monitor_specs = monitor_specs
|
|
};
|
|
|
|
return config_key;
|
|
}
|
|
|
|
static void
|
|
check_monitor_store_configuration (MetaMonitorConfigStore *config_store,
|
|
MonitorStoreTestConfiguration *config_expect)
|
|
{
|
|
MetaMonitorsConfigKey *config_key;
|
|
MetaMonitorsConfig *config;
|
|
GList *l;
|
|
int i;
|
|
|
|
config_key = create_config_key_from_expect (config_expect);
|
|
config = meta_monitor_config_store_lookup (config_store, config_key);
|
|
g_assert_nonnull (config);
|
|
|
|
g_assert (meta_monitors_config_key_equal (config->key, config_key));
|
|
meta_monitors_config_key_free (config_key);
|
|
|
|
g_assert_cmpuint (g_list_length (config->logical_monitor_configs),
|
|
==,
|
|
config_expect->n_logical_monitors);
|
|
|
|
for (l = config->logical_monitor_configs, i = 0; l; l = l->next, i++)
|
|
{
|
|
MetaLogicalMonitorConfig *logical_monitor_config = l->data;
|
|
GList *k;
|
|
int j;
|
|
|
|
g_assert (meta_rectangle_equal (&logical_monitor_config->layout,
|
|
&config_expect->logical_monitors[i].layout));
|
|
g_assert_cmpfloat (logical_monitor_config->scale,
|
|
==,
|
|
config_expect->logical_monitors[i].scale);
|
|
g_assert_cmpint (logical_monitor_config->transform,
|
|
==,
|
|
config_expect->logical_monitors[i].transform);
|
|
g_assert_cmpint (logical_monitor_config->is_primary,
|
|
==,
|
|
config_expect->logical_monitors[i].is_primary);
|
|
g_assert_cmpint (logical_monitor_config->is_presentation,
|
|
==,
|
|
config_expect->logical_monitors[i].is_presentation);
|
|
|
|
g_assert_cmpint ((int) g_list_length (logical_monitor_config->monitor_configs),
|
|
==,
|
|
config_expect->logical_monitors[i].n_monitors);
|
|
|
|
for (k = logical_monitor_config->monitor_configs, j = 0;
|
|
k;
|
|
k = k->next, j++)
|
|
{
|
|
MetaMonitorConfig *monitor_config = k->data;
|
|
MonitorStoreTestCaseMonitor *test_monitor =
|
|
&config_expect->logical_monitors[i].monitors[j];
|
|
|
|
g_assert_cmpstr (monitor_config->monitor_spec->connector,
|
|
==,
|
|
test_monitor->connector);
|
|
g_assert_cmpstr (monitor_config->monitor_spec->vendor,
|
|
==,
|
|
test_monitor->vendor);
|
|
g_assert_cmpstr (monitor_config->monitor_spec->product,
|
|
==,
|
|
test_monitor->product);
|
|
g_assert_cmpstr (monitor_config->monitor_spec->serial,
|
|
==,
|
|
test_monitor->serial);
|
|
|
|
g_assert_cmpint (monitor_config->mode_spec->width,
|
|
==,
|
|
test_monitor->mode.width);
|
|
g_assert_cmpint (monitor_config->mode_spec->height,
|
|
==,
|
|
test_monitor->mode.height);
|
|
g_assert_cmpfloat (monitor_config->mode_spec->refresh_rate,
|
|
==,
|
|
test_monitor->mode.refresh_rate);
|
|
g_assert_cmpint (monitor_config->mode_spec->flags,
|
|
==,
|
|
test_monitor->mode.flags);
|
|
g_assert_cmpint (monitor_config->enable_underscanning,
|
|
==,
|
|
test_monitor->is_underscanning);
|
|
}
|
|
}
|
|
}
|
|
|
|
static void
|
|
check_monitor_store_configurations (MonitorStoreTestExpect *expect)
|
|
{
|
|
MetaBackend *backend = meta_get_backend ();
|
|
MetaMonitorManager *monitor_manager =
|
|
meta_backend_get_monitor_manager (backend);
|
|
MetaMonitorConfigManager *config_manager = monitor_manager->config_manager;
|
|
MetaMonitorConfigStore *config_store =
|
|
meta_monitor_config_manager_get_store (config_manager);
|
|
int i;
|
|
|
|
g_assert_cmpint (meta_monitor_config_store_get_config_count (config_store),
|
|
==,
|
|
expect->n_configurations);
|
|
|
|
for (i = 0; i < expect->n_configurations; i++)
|
|
check_monitor_store_configuration (config_store, &expect->configurations[i]);
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_single (void)
|
|
{
|
|
MonitorStoreTestExpect expect = {
|
|
.configurations = {
|
|
{
|
|
.logical_monitors = {
|
|
{
|
|
.layout = {
|
|
.x = 0,
|
|
.y = 0,
|
|
.width = 1920,
|
|
.height = 1080
|
|
},
|
|
.scale = 1,
|
|
.is_primary = TRUE,
|
|
.is_presentation = FALSE,
|
|
.monitors = {
|
|
{
|
|
.connector = "DP-1",
|
|
.vendor = "MetaProduct's Inc.",
|
|
.product = "MetaMonitor",
|
|
.serial = "0x123456",
|
|
.mode = {
|
|
.width = 1920,
|
|
.height = 1080,
|
|
.refresh_rate = 60.000495910644531
|
|
}
|
|
}
|
|
},
|
|
.n_monitors = 1,
|
|
}
|
|
},
|
|
.n_logical_monitors = 1
|
|
}
|
|
},
|
|
.n_configurations = 1
|
|
};
|
|
|
|
meta_set_custom_monitor_config (test_context, "single.xml");
|
|
|
|
check_monitor_store_configurations (&expect);
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_vertical (void)
|
|
{
|
|
MonitorStoreTestExpect expect = {
|
|
.configurations = {
|
|
{
|
|
.logical_monitors = {
|
|
{
|
|
.layout = {
|
|
.x = 0,
|
|
.y = 0,
|
|
.width = 1024,
|
|
.height = 768
|
|
},
|
|
.scale = 1,
|
|
.is_primary = TRUE,
|
|
.is_presentation = FALSE,
|
|
.monitors = {
|
|
{
|
|
.connector = "DP-1",
|
|
.vendor = "MetaProduct's Inc.",
|
|
.product = "MetaMonitor",
|
|
.serial = "0x123456",
|
|
.mode = {
|
|
.width = 1024,
|
|
.height = 768,
|
|
.refresh_rate = 60.000495910644531
|
|
}
|
|
}
|
|
},
|
|
.n_monitors = 1,
|
|
},
|
|
{
|
|
.layout = {
|
|
.x = 0,
|
|
.y = 768,
|
|
.width = 800,
|
|
.height = 600
|
|
},
|
|
.scale = 1,
|
|
.is_primary = FALSE,
|
|
.is_presentation = FALSE,
|
|
.monitors = {
|
|
{
|
|
.connector = "DP-2",
|
|
.vendor = "MetaProduct's Inc.",
|
|
.product = "MetaMonitor",
|
|
.serial = "0x123456",
|
|
.mode = {
|
|
.width = 800,
|
|
.height = 600,
|
|
.refresh_rate = 60.000495910644531
|
|
}
|
|
}
|
|
},
|
|
.n_monitors = 1,
|
|
}
|
|
},
|
|
.n_logical_monitors = 2
|
|
}
|
|
},
|
|
.n_configurations = 1
|
|
};
|
|
|
|
meta_set_custom_monitor_config (test_context, "vertical.xml");
|
|
|
|
check_monitor_store_configurations (&expect);
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_primary (void)
|
|
{
|
|
MonitorStoreTestExpect expect = {
|
|
.configurations = {
|
|
{
|
|
.logical_monitors = {
|
|
{
|
|
.layout = {
|
|
.x = 0,
|
|
.y = 0,
|
|
.width = 1024,
|
|
.height = 768
|
|
},
|
|
.scale = 1,
|
|
.is_primary = FALSE,
|
|
.is_presentation = FALSE,
|
|
.monitors = {
|
|
{
|
|
.connector = "DP-1",
|
|
.vendor = "MetaProduct's Inc.",
|
|
.product = "MetaMonitor",
|
|
.serial = "0x123456",
|
|
.mode = {
|
|
.width = 1024,
|
|
.height = 768,
|
|
.refresh_rate = 60.000495910644531
|
|
}
|
|
}
|
|
},
|
|
.n_monitors = 1,
|
|
},
|
|
{
|
|
.layout = {
|
|
.x = 1024,
|
|
.y = 0,
|
|
.width = 800,
|
|
.height = 600
|
|
},
|
|
.scale = 1,
|
|
.is_primary = TRUE,
|
|
.is_presentation = FALSE,
|
|
.monitors = {
|
|
{
|
|
.connector = "DP-2",
|
|
.vendor = "MetaProduct's Inc.",
|
|
.product = "MetaMonitor",
|
|
.serial = "0x123456",
|
|
.mode = {
|
|
.width = 800,
|
|
.height = 600,
|
|
.refresh_rate = 60.000495910644531
|
|
}
|
|
}
|
|
},
|
|
.n_monitors = 1,
|
|
}
|
|
},
|
|
.n_logical_monitors = 2
|
|
}
|
|
},
|
|
.n_configurations = 1
|
|
};
|
|
|
|
meta_set_custom_monitor_config (test_context, "primary.xml");
|
|
|
|
check_monitor_store_configurations (&expect);
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_underscanning (void)
|
|
{
|
|
MonitorStoreTestExpect expect = {
|
|
.configurations = {
|
|
{
|
|
.logical_monitors = {
|
|
{
|
|
.layout = {
|
|
.x = 0,
|
|
.y = 0,
|
|
.width = 1024,
|
|
.height = 768
|
|
},
|
|
.scale = 1,
|
|
.is_primary = TRUE,
|
|
.is_presentation = FALSE,
|
|
.monitors = {
|
|
{
|
|
.connector = "DP-1",
|
|
.vendor = "MetaProduct's Inc.",
|
|
.product = "MetaMonitor",
|
|
.serial = "0x123456",
|
|
.is_underscanning = TRUE,
|
|
.mode = {
|
|
.width = 1024,
|
|
.height = 768,
|
|
.refresh_rate = 60.000495910644531
|
|
}
|
|
}
|
|
},
|
|
.n_monitors = 1,
|
|
},
|
|
},
|
|
.n_logical_monitors = 1
|
|
}
|
|
},
|
|
.n_configurations = 1
|
|
};
|
|
|
|
meta_set_custom_monitor_config (test_context, "underscanning.xml");
|
|
|
|
check_monitor_store_configurations (&expect);
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_scale (void)
|
|
{
|
|
MonitorStoreTestExpect expect = {
|
|
.configurations = {
|
|
{
|
|
.logical_monitors = {
|
|
{
|
|
.layout = {
|
|
.x = 0,
|
|
.y = 0,
|
|
.width = 960,
|
|
.height = 540
|
|
},
|
|
.scale = 2,
|
|
.is_primary = TRUE,
|
|
.is_presentation = FALSE,
|
|
.monitors = {
|
|
{
|
|
.connector = "DP-1",
|
|
.vendor = "MetaProduct's Inc.",
|
|
.product = "MetaMonitor",
|
|
.serial = "0x123456",
|
|
.mode = {
|
|
.width = 1920,
|
|
.height = 1080,
|
|
.refresh_rate = 60.000495910644531
|
|
}
|
|
}
|
|
},
|
|
.n_monitors = 1,
|
|
}
|
|
},
|
|
.n_logical_monitors = 1
|
|
}
|
|
},
|
|
.n_configurations = 1
|
|
};
|
|
|
|
if (!meta_is_stage_views_enabled ())
|
|
{
|
|
g_test_skip ("Not using stage views");
|
|
return;
|
|
}
|
|
|
|
meta_set_custom_monitor_config (test_context, "scale.xml");
|
|
|
|
check_monitor_store_configurations (&expect);
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_fractional_scale (void)
|
|
{
|
|
MonitorStoreTestExpect expect = {
|
|
.configurations = {
|
|
{
|
|
.logical_monitors = {
|
|
{
|
|
.layout = {
|
|
.x = 0,
|
|
.y = 0,
|
|
.width = 800,
|
|
.height = 600
|
|
},
|
|
.scale = 1.5,
|
|
.is_primary = TRUE,
|
|
.is_presentation = FALSE,
|
|
.monitors = {
|
|
{
|
|
.connector = "DP-1",
|
|
.vendor = "MetaProduct's Inc.",
|
|
.product = "MetaMonitor",
|
|
.serial = "0x123456",
|
|
.mode = {
|
|
.width = 1200,
|
|
.height = 900,
|
|
.refresh_rate = 60.000495910644531
|
|
}
|
|
}
|
|
},
|
|
.n_monitors = 1,
|
|
}
|
|
},
|
|
.n_logical_monitors = 1
|
|
}
|
|
},
|
|
.n_configurations = 1
|
|
};
|
|
|
|
if (!meta_is_stage_views_enabled ())
|
|
{
|
|
g_test_skip ("Not using stage views");
|
|
return;
|
|
}
|
|
|
|
meta_set_custom_monitor_config (test_context, "fractional-scale.xml");
|
|
|
|
check_monitor_store_configurations (&expect);
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_high_precision_fractional_scale (void)
|
|
{
|
|
MonitorStoreTestExpect expect = {
|
|
.configurations = {
|
|
{
|
|
.logical_monitors = {
|
|
{
|
|
.layout = {
|
|
.x = 0,
|
|
.y = 0,
|
|
.width = 744,
|
|
.height = 558
|
|
},
|
|
.scale = 1.3763440847396851,
|
|
.is_primary = TRUE,
|
|
.is_presentation = FALSE,
|
|
.monitors = {
|
|
{
|
|
.connector = "DP-1",
|
|
.vendor = "MetaProduct's Inc.",
|
|
.product = "MetaMonitor",
|
|
.serial = "0x123456",
|
|
.mode = {
|
|
.width = 1024,
|
|
.height = 768,
|
|
.refresh_rate = 60.000495910644531
|
|
}
|
|
}
|
|
},
|
|
.n_monitors = 1,
|
|
}
|
|
},
|
|
.n_logical_monitors = 1
|
|
}
|
|
},
|
|
.n_configurations = 1
|
|
};
|
|
|
|
if (!meta_is_stage_views_enabled ())
|
|
{
|
|
g_test_skip ("Not using stage views");
|
|
return;
|
|
}
|
|
|
|
meta_set_custom_monitor_config (test_context, "high-precision-fractional-scale.xml");
|
|
|
|
check_monitor_store_configurations (&expect);
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_mirrored (void)
|
|
{
|
|
MonitorStoreTestExpect expect = {
|
|
.configurations = {
|
|
{
|
|
.logical_monitors = {
|
|
{
|
|
.layout = {
|
|
.x = 0,
|
|
.y = 0,
|
|
.width = 800,
|
|
.height = 600
|
|
},
|
|
.scale = 1,
|
|
.is_primary = TRUE,
|
|
.monitors = {
|
|
{
|
|
.connector = "DP-1",
|
|
.vendor = "MetaProduct's Inc.",
|
|
.product = "MetaMonitor",
|
|
.serial = "0x123456",
|
|
.mode = {
|
|
.width = 800,
|
|
.height = 600,
|
|
.refresh_rate = 60.000495910644531
|
|
}
|
|
},
|
|
{
|
|
.connector = "DP-2",
|
|
.vendor = "MetaProduct's Inc.",
|
|
.product = "MetaMonitor",
|
|
.serial = "0x123456",
|
|
.mode = {
|
|
.width = 800,
|
|
.height = 600,
|
|
.refresh_rate = 60.000495910644531
|
|
}
|
|
}
|
|
},
|
|
.n_monitors = 2,
|
|
}
|
|
},
|
|
.n_logical_monitors = 1
|
|
}
|
|
},
|
|
.n_configurations = 1
|
|
};
|
|
|
|
meta_set_custom_monitor_config (test_context, "mirrored.xml");
|
|
|
|
check_monitor_store_configurations (&expect);
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_first_rotated (void)
|
|
{
|
|
MonitorStoreTestExpect expect = {
|
|
.configurations = {
|
|
{
|
|
.logical_monitors = {
|
|
{
|
|
.layout = {
|
|
.x = 0,
|
|
.y = 0,
|
|
.width = 768,
|
|
.height = 1024
|
|
},
|
|
.scale = 1,
|
|
.transform = META_MONITOR_TRANSFORM_270,
|
|
.is_primary = TRUE,
|
|
.is_presentation = FALSE,
|
|
.monitors = {
|
|
{
|
|
.connector = "DP-1",
|
|
.vendor = "MetaProduct's Inc.",
|
|
.product = "MetaMonitor",
|
|
.serial = "0x123456",
|
|
.mode = {
|
|
.width = 1024,
|
|
.height = 768,
|
|
.refresh_rate = 60.000495910644531
|
|
}
|
|
}
|
|
},
|
|
.n_monitors = 1,
|
|
},
|
|
{
|
|
.layout = {
|
|
.x = 768,
|
|
.y = 0,
|
|
.width = 1024,
|
|
.height = 768
|
|
},
|
|
.scale = 1,
|
|
.transform = META_MONITOR_TRANSFORM_NORMAL,
|
|
.is_primary = FALSE,
|
|
.is_presentation = FALSE,
|
|
.monitors = {
|
|
{
|
|
.connector = "DP-2",
|
|
.vendor = "MetaProduct's Inc.",
|
|
.product = "MetaMonitor",
|
|
.serial = "0x123456",
|
|
.mode = {
|
|
.width = 1024,
|
|
.height = 768,
|
|
.refresh_rate = 60.000495910644531
|
|
}
|
|
}
|
|
},
|
|
.n_monitors = 1,
|
|
}
|
|
},
|
|
.n_logical_monitors = 2
|
|
}
|
|
},
|
|
.n_configurations = 1
|
|
};
|
|
|
|
meta_set_custom_monitor_config (test_context, "first-rotated.xml");
|
|
|
|
check_monitor_store_configurations (&expect);
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_second_rotated (void)
|
|
{
|
|
MonitorStoreTestExpect expect = {
|
|
.configurations = {
|
|
{
|
|
.logical_monitors = {
|
|
{
|
|
.layout = {
|
|
.x = 0,
|
|
.y = 256,
|
|
.width = 1024,
|
|
.height = 768
|
|
},
|
|
.scale = 1,
|
|
.transform = META_MONITOR_TRANSFORM_NORMAL,
|
|
.is_primary = TRUE,
|
|
.is_presentation = FALSE,
|
|
.monitors = {
|
|
{
|
|
.connector = "DP-1",
|
|
.vendor = "MetaProduct's Inc.",
|
|
.product = "MetaMonitor",
|
|
.serial = "0x123456",
|
|
.mode = {
|
|
.width = 1024,
|
|
.height = 768,
|
|
.refresh_rate = 60.000495910644531
|
|
}
|
|
}
|
|
},
|
|
.n_monitors = 1,
|
|
},
|
|
{
|
|
.layout = {
|
|
.x = 1024,
|
|
.y = 0,
|
|
.width = 768,
|
|
.height = 1024
|
|
},
|
|
.scale = 1,
|
|
.transform = META_MONITOR_TRANSFORM_90,
|
|
.is_primary = FALSE,
|
|
.is_presentation = FALSE,
|
|
.monitors = {
|
|
{
|
|
.connector = "DP-2",
|
|
.vendor = "MetaProduct's Inc.",
|
|
.product = "MetaMonitor",
|
|
.serial = "0x123456",
|
|
.mode = {
|
|
.width = 1024,
|
|
.height = 768,
|
|
.refresh_rate = 60.000495910644531
|
|
}
|
|
}
|
|
},
|
|
.n_monitors = 1,
|
|
}
|
|
},
|
|
.n_logical_monitors = 2
|
|
}
|
|
},
|
|
.n_configurations = 1
|
|
};
|
|
|
|
meta_set_custom_monitor_config (test_context, "second-rotated.xml");
|
|
|
|
check_monitor_store_configurations (&expect);
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_interlaced (void)
|
|
{
|
|
MonitorStoreTestExpect expect = {
|
|
.configurations = {
|
|
{
|
|
.logical_monitors = {
|
|
{
|
|
.layout = {
|
|
.x = 0,
|
|
.y = 0,
|
|
.width = 1024,
|
|
.height = 768
|
|
},
|
|
.scale = 1,
|
|
.is_primary = TRUE,
|
|
.is_presentation = FALSE,
|
|
.monitors = {
|
|
{
|
|
.connector = "DP-1",
|
|
.vendor = "MetaProduct's Inc.",
|
|
.product = "MetaMonitor",
|
|
.serial = "0x123456",
|
|
.mode = {
|
|
.width = 1024,
|
|
.height = 768,
|
|
.refresh_rate = 60.000495910644531,
|
|
.flags = META_CRTC_MODE_FLAG_INTERLACE,
|
|
}
|
|
}
|
|
},
|
|
.n_monitors = 1,
|
|
},
|
|
},
|
|
.n_logical_monitors = 1
|
|
}
|
|
},
|
|
.n_configurations = 1
|
|
};
|
|
|
|
meta_set_custom_monitor_config (test_context, "interlaced.xml");
|
|
|
|
check_monitor_store_configurations (&expect);
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_unknown_elements (void)
|
|
{
|
|
MonitorStoreTestExpect expect = {
|
|
.configurations = {
|
|
{
|
|
.logical_monitors = {
|
|
{
|
|
.layout = {
|
|
.x = 0,
|
|
.y = 0,
|
|
.width = 1920,
|
|
.height = 1080
|
|
},
|
|
.scale = 1,
|
|
.is_primary = TRUE,
|
|
.is_presentation = FALSE,
|
|
.monitors = {
|
|
{
|
|
.connector = "DP-1",
|
|
.vendor = "MetaProduct's Inc.",
|
|
.product = "MetaMonitor",
|
|
.serial = "0x123456",
|
|
.mode = {
|
|
.width = 1920,
|
|
.height = 1080,
|
|
.refresh_rate = 60.000495910644531
|
|
}
|
|
}
|
|
},
|
|
.n_monitors = 1,
|
|
}
|
|
},
|
|
.n_logical_monitors = 1
|
|
}
|
|
},
|
|
.n_configurations = 1
|
|
};
|
|
|
|
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
|
|
"Unknown element <unknownundermonitors> "
|
|
"under <monitors>, ignoring");
|
|
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
|
|
"Unknown element <unknownunderconfiguration> "
|
|
"under <configuration>, ignoring");
|
|
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
|
|
"Unknown element <unknownunderlogicalmonitor> "
|
|
"under <logicalmonitor>, ignoring");
|
|
meta_set_custom_monitor_config (test_context, "unknown-elements.xml");
|
|
g_test_assert_expected_messages ();
|
|
|
|
check_monitor_store_configurations (&expect);
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_policy_not_allowed (void)
|
|
{
|
|
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
|
|
"*Policy can only be defined in system level "
|
|
"configurations*");
|
|
meta_set_custom_monitor_config (test_context, "policy.xml");
|
|
g_test_assert_expected_messages ();
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_policy (void)
|
|
{
|
|
MetaBackend *backend = meta_get_backend ();
|
|
MetaMonitorManager *monitor_manager =
|
|
meta_backend_get_monitor_manager (backend);
|
|
MetaMonitorConfigManager *config_manager = monitor_manager->config_manager;
|
|
MetaMonitorConfigStore *config_store =
|
|
meta_monitor_config_manager_get_store (config_manager);
|
|
GList *stores_policy;
|
|
|
|
meta_set_custom_monitor_system_config (test_context, "policy.xml");
|
|
stores_policy = meta_monitor_config_store_get_stores_policy (config_store);
|
|
g_assert_cmpuint (g_list_length (stores_policy), ==, 1);
|
|
g_assert_cmpint (GPOINTER_TO_INT (stores_policy->data),
|
|
==,
|
|
META_CONFIG_STORE_SYSTEM);
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_policy_empty (void)
|
|
{
|
|
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
|
|
"*Invalid store*");
|
|
meta_set_custom_monitor_system_config (test_context, "policy-empty.xml");
|
|
g_test_assert_expected_messages ();
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_policy_duplicate (void)
|
|
{
|
|
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
|
|
"*Multiple identical stores*");
|
|
meta_set_custom_monitor_system_config (test_context, "policy-duplicate.xml");
|
|
g_test_assert_expected_messages ();
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_policy_invalid (void)
|
|
{
|
|
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
|
|
"*Invalid store*");
|
|
meta_set_custom_monitor_system_config (test_context, "policy-invalid.xml");
|
|
g_test_assert_expected_messages ();
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_policy_multiple (void)
|
|
{
|
|
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
|
|
"*Multiple stores elements under policy*");
|
|
meta_set_custom_monitor_system_config (test_context, "policy-multiple.xml");
|
|
g_test_assert_expected_messages ();
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_policy_dbus (void)
|
|
{
|
|
MetaBackend *backend = meta_context_get_backend (test_context);
|
|
MetaMonitorManager *monitor_manager =
|
|
meta_backend_get_monitor_manager (backend);
|
|
MetaMonitorConfigManager *config_manager =
|
|
meta_monitor_manager_get_config_manager (monitor_manager);
|
|
MetaMonitorConfigStore *config_store =
|
|
meta_monitor_config_manager_get_store (config_manager);
|
|
const MetaMonitorConfigPolicy *policy;
|
|
|
|
policy = meta_monitor_config_store_get_policy (config_store);
|
|
g_assert_nonnull (policy);
|
|
g_assert_cmpint (policy->enable_dbus, ==, TRUE);
|
|
|
|
meta_set_custom_monitor_system_config (test_context, "policy-dbus.xml");
|
|
|
|
policy = meta_monitor_config_store_get_policy (config_store);
|
|
g_assert_nonnull (policy);
|
|
g_assert_cmpint (policy->enable_dbus, ==, FALSE);
|
|
}
|
|
|
|
static void
|
|
meta_test_monitor_store_policy_dbus_invalid (void)
|
|
{
|
|
MetaBackend *backend = meta_context_get_backend (test_context);
|
|
MetaMonitorManager *monitor_manager =
|
|
meta_backend_get_monitor_manager (backend);
|
|
MetaMonitorConfigManager *config_manager =
|
|
meta_monitor_manager_get_config_manager (monitor_manager);
|
|
MetaMonitorConfigStore *config_store =
|
|
meta_monitor_config_manager_get_store (config_manager);
|
|
const MetaMonitorConfigPolicy *policy;
|
|
|
|
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
|
|
"*Multiple dbus elements under policy*");
|
|
meta_set_custom_monitor_system_config (test_context,
|
|
"policy-dbus-invalid.xml");
|
|
g_test_assert_expected_messages ();
|
|
|
|
policy = meta_monitor_config_store_get_policy (config_store);
|
|
g_assert_nonnull (policy);
|
|
g_assert_cmpint (policy->enable_dbus, ==, FALSE);
|
|
}
|
|
|
|
void
|
|
init_monitor_store_tests (void)
|
|
{
|
|
g_test_add_func ("/backends/monitor-store/single",
|
|
meta_test_monitor_store_single);
|
|
g_test_add_func ("/backends/monitor-store/vertical",
|
|
meta_test_monitor_store_vertical);
|
|
g_test_add_func ("/backends/monitor-store/primary",
|
|
meta_test_monitor_store_primary);
|
|
g_test_add_func ("/backends/monitor-store/underscanning",
|
|
meta_test_monitor_store_underscanning);
|
|
g_test_add_func ("/backends/monitor-store/scale",
|
|
meta_test_monitor_store_scale);
|
|
g_test_add_func ("/backends/monitor-store/fractional-scale",
|
|
meta_test_monitor_store_fractional_scale);
|
|
g_test_add_func ("/backends/monitor-store/high-precision-fractional-scale",
|
|
meta_test_monitor_store_high_precision_fractional_scale);
|
|
g_test_add_func ("/backends/monitor-store/mirrored",
|
|
meta_test_monitor_store_mirrored);
|
|
g_test_add_func ("/backends/monitor-store/first-rotated",
|
|
meta_test_monitor_store_first_rotated);
|
|
g_test_add_func ("/backends/monitor-store/second-rotated",
|
|
meta_test_monitor_store_second_rotated);
|
|
g_test_add_func ("/backends/monitor-store/interlaced",
|
|
meta_test_monitor_store_interlaced);
|
|
g_test_add_func ("/backends/monitor-store/unknown-elements",
|
|
meta_test_monitor_store_unknown_elements);
|
|
g_test_add_func ("/backends/monitor-store/policy-not-allowed",
|
|
meta_test_monitor_store_policy_not_allowed);
|
|
g_test_add_func ("/backends/monitor-store/policy",
|
|
meta_test_monitor_store_policy);
|
|
g_test_add_func ("/backends/monitor-store/policy-empty",
|
|
meta_test_monitor_store_policy_empty);
|
|
g_test_add_func ("/backends/monitor-store/policy-duplicate",
|
|
meta_test_monitor_store_policy_duplicate);
|
|
g_test_add_func ("/backends/monitor-store/policy-invalid",
|
|
meta_test_monitor_store_policy_invalid);
|
|
g_test_add_func ("/backends/monitor-store/policy-multiple",
|
|
meta_test_monitor_store_policy_multiple);
|
|
g_test_add_func ("/backends/monitor-store/dbus",
|
|
meta_test_monitor_store_policy_dbus);
|
|
g_test_add_func ("/backends/monitor-store/dbus-invalid",
|
|
meta_test_monitor_store_policy_dbus_invalid);
|
|
}
|