mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 01:20:42 -05:00
tests: Add headless start test case
Test that mutter starts properly when there are no monitors connected yet, and that things work when a monitor is eventually connected. https://bugzilla.gnome.org/show_bug.cgi?id=730551
This commit is contained in:
parent
5b37901b57
commit
3f6a2d02fd
1
.gitignore
vendored
1
.gitignore
vendored
@ -55,6 +55,7 @@ mutter-restart-helper
|
|||||||
mutter-test-client
|
mutter-test-client
|
||||||
mutter-test-runner
|
mutter-test-runner
|
||||||
mutter-test-unit-tests
|
mutter-test-unit-tests
|
||||||
|
mutter-test-headless-start-test
|
||||||
mutter-all.test
|
mutter-all.test
|
||||||
org.gnome.mutter.gschema.valid
|
org.gnome.mutter.gschema.valid
|
||||||
org.gnome.mutter.gschema.xml
|
org.gnome.mutter.gschema.xml
|
||||||
|
@ -2,6 +2,13 @@
|
|||||||
|
|
||||||
if HAVE_WAYLAND
|
if HAVE_WAYLAND
|
||||||
|
|
||||||
|
test_programs = \
|
||||||
|
mutter-test-client \
|
||||||
|
mutter-test-runner \
|
||||||
|
mutter-test-unit-tests \
|
||||||
|
mutter-test-headless-start-test \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
if BUILDOPT_INSTALL_TESTS
|
if BUILDOPT_INSTALL_TESTS
|
||||||
stackingdir = $(pkgdatadir)/tests/stacking
|
stackingdir = $(pkgdatadir)/tests/stacking
|
||||||
dist_stacking_DATA = \
|
dist_stacking_DATA = \
|
||||||
@ -19,9 +26,9 @@ installedtestsdir = $(datadir)/installed-tests/mutter
|
|||||||
installedtests_DATA = mutter-all.test
|
installedtests_DATA = mutter-all.test
|
||||||
|
|
||||||
installedtestsbindir = $(libexecdir)/installed-tests/mutter
|
installedtestsbindir = $(libexecdir)/installed-tests/mutter
|
||||||
installedtestsbin_PROGRAMS = mutter-test-client mutter-test-runner mutter-test-unit-tests
|
installedtestsbin_PROGRAMS = $(test_programs)
|
||||||
else
|
else
|
||||||
noinst_PROGRAMS += mutter-test-client mutter-test-runner mutter-test-unit-tests
|
noinst_PROGRAMS += $(test_programs)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
EXTRA_DIST += tests/mutter-all.test.in
|
EXTRA_DIST += tests/mutter-all.test.in
|
||||||
@ -52,7 +59,17 @@ mutter_test_unit_tests_SOURCES = \
|
|||||||
$(NULL)
|
$(NULL)
|
||||||
mutter_test_unit_tests_LDADD = $(MUTTER_LIBS) libmutter-$(LIBMUTTER_API_VERSION).la
|
mutter_test_unit_tests_LDADD = $(MUTTER_LIBS) libmutter-$(LIBMUTTER_API_VERSION).la
|
||||||
|
|
||||||
.PHONY: run-tests run-test-runner-tests run-unit-tests
|
mutter_test_headless_start_test_SOURCES = \
|
||||||
|
tests/headless-start-test.c \
|
||||||
|
tests/headless-start-test.h \
|
||||||
|
tests/meta-backend-test.c \
|
||||||
|
tests/meta-backend-test.h \
|
||||||
|
tests/meta-monitor-manager-test.c \
|
||||||
|
tests/meta-monitor-manager-test.h \
|
||||||
|
$(NULL)
|
||||||
|
mutter_test_headless_start_test_LDADD = $(MUTTER_LIBS) libmutter-$(LIBMUTTER_API_VERSION).la
|
||||||
|
|
||||||
|
.PHONY: run-tests run-test-runner-tests run-unit-tests run-headless-start-test
|
||||||
|
|
||||||
run-test-runner-tests: mutter-test-client mutter-test-runner
|
run-test-runner-tests: mutter-test-client mutter-test-runner
|
||||||
./mutter-test-runner $(dist_stacking_DATA)
|
./mutter-test-runner $(dist_stacking_DATA)
|
||||||
@ -60,7 +77,10 @@ run-test-runner-tests: mutter-test-client mutter-test-runner
|
|||||||
run-unit-tests: mutter-test-unit-tests
|
run-unit-tests: mutter-test-unit-tests
|
||||||
./mutter-test-unit-tests
|
./mutter-test-unit-tests
|
||||||
|
|
||||||
run-tests: run-test-runner-tests run-unit-tests
|
run-headless-start-test: mutter-test-headless-start-test
|
||||||
|
./mutter-test-headless-start-test
|
||||||
|
|
||||||
|
run-tests: run-test-runner-tests run-unit-tests run-headless-start-test
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
203
src/tests/headless-start-test.c
Normal file
203
src/tests/headless-start-test.c
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017 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 "backends/meta-monitor-manager-private.h"
|
||||||
|
#include "compositor/meta-plugin-manager.h"
|
||||||
|
#include "core/main-private.h"
|
||||||
|
#include "meta/main.h"
|
||||||
|
#include "tests/meta-backend-test.h"
|
||||||
|
#include "tests/meta-monitor-manager-test.h"
|
||||||
|
#include "wayland/meta-wayland.h"
|
||||||
|
|
||||||
|
#define ALL_TRANSFORMS ((1 << (META_MONITOR_TRANSFORM_FLIPPED_270 + 1)) - 1)
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
run_tests (gpointer data)
|
||||||
|
{
|
||||||
|
MetaBackend *backend = meta_get_backend ();
|
||||||
|
MetaSettings *settings = meta_backend_get_settings (backend);
|
||||||
|
gboolean ret;
|
||||||
|
|
||||||
|
meta_settings_override_experimental_features (settings);
|
||||||
|
|
||||||
|
meta_settings_enable_experimental_feature (
|
||||||
|
settings,
|
||||||
|
META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER);
|
||||||
|
|
||||||
|
ret = g_test_run ();
|
||||||
|
|
||||||
|
meta_quit (ret != 0);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_test_headless_start (void)
|
||||||
|
{
|
||||||
|
MetaBackend *backend = meta_get_backend ();
|
||||||
|
MetaMonitorManager *monitor_manager =
|
||||||
|
meta_backend_get_monitor_manager (backend);
|
||||||
|
|
||||||
|
g_assert_cmpint ((int) monitor_manager->n_modes,
|
||||||
|
==,
|
||||||
|
0);
|
||||||
|
g_assert_cmpint ((int) monitor_manager->n_outputs,
|
||||||
|
==,
|
||||||
|
0);
|
||||||
|
g_assert_cmpint ((int) monitor_manager->n_crtcs,
|
||||||
|
==,
|
||||||
|
0);
|
||||||
|
g_assert_null (monitor_manager->monitors);
|
||||||
|
g_assert_null (monitor_manager->logical_monitors);
|
||||||
|
|
||||||
|
g_assert_cmpint (monitor_manager->screen_width,
|
||||||
|
==,
|
||||||
|
META_MONITOR_MANAGER_MIN_SCREEN_WIDTH);
|
||||||
|
g_assert_cmpint (monitor_manager->screen_height,
|
||||||
|
==,
|
||||||
|
META_MONITOR_MANAGER_MIN_SCREEN_HEIGHT);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_test_headless_monitor_getters (void)
|
||||||
|
{
|
||||||
|
MetaDisplay *display;
|
||||||
|
MetaScreen *screen;
|
||||||
|
int index;
|
||||||
|
|
||||||
|
display = meta_get_display ();
|
||||||
|
screen = display->screen;
|
||||||
|
|
||||||
|
index = meta_screen_get_monitor_index_for_rect (screen,
|
||||||
|
&(MetaRectangle) { 0 });
|
||||||
|
g_assert_cmpint (index, ==, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_test_headless_monitor_connect (void)
|
||||||
|
{
|
||||||
|
MetaBackend *backend = meta_get_backend ();
|
||||||
|
MetaMonitorManager *monitor_manager =
|
||||||
|
meta_backend_get_monitor_manager (backend);
|
||||||
|
MetaMonitorManagerTest *monitor_manager_test =
|
||||||
|
META_MONITOR_MANAGER_TEST (monitor_manager);
|
||||||
|
MetaMonitorTestSetup *test_setup;
|
||||||
|
MetaCrtcMode **modes;
|
||||||
|
MetaCrtc **possible_crtcs;
|
||||||
|
GList *logical_monitors;
|
||||||
|
ClutterActor *stage;
|
||||||
|
|
||||||
|
test_setup = g_new0 (MetaMonitorTestSetup, 1);
|
||||||
|
test_setup->n_modes = 1;
|
||||||
|
test_setup->modes = g_new0 (MetaCrtcMode, test_setup->n_modes);
|
||||||
|
test_setup->modes[0] = (MetaCrtcMode) {
|
||||||
|
.mode_id = 1,
|
||||||
|
.width = 1024,
|
||||||
|
.height = 768,
|
||||||
|
.refresh_rate = 60.0
|
||||||
|
};
|
||||||
|
|
||||||
|
test_setup->n_crtcs = 1;
|
||||||
|
test_setup->crtcs = g_new0 (MetaCrtc, test_setup->n_crtcs);
|
||||||
|
test_setup->crtcs[0] = (MetaCrtc) {
|
||||||
|
.crtc_id = 1,
|
||||||
|
.all_transforms = ALL_TRANSFORMS
|
||||||
|
};
|
||||||
|
|
||||||
|
modes = g_new0 (MetaCrtcMode *, 1);
|
||||||
|
modes[0] = &test_setup->modes[0];
|
||||||
|
|
||||||
|
possible_crtcs = g_new0 (MetaCrtc *, 1);
|
||||||
|
possible_crtcs[0] = &test_setup->crtcs[0];
|
||||||
|
|
||||||
|
test_setup->n_outputs = 1;
|
||||||
|
test_setup->outputs = g_new0 (MetaOutput, test_setup->n_outputs);
|
||||||
|
test_setup->outputs[0] = (MetaOutput) {
|
||||||
|
.winsys_id = 1,
|
||||||
|
.name = g_strdup ("DP-1"),
|
||||||
|
.vendor = g_strdup ("MetaProduct's Inc."),
|
||||||
|
.product = g_strdup ("MetaMonitor"),
|
||||||
|
.serial = g_strdup ("0x987654"),
|
||||||
|
.preferred_mode = modes[0],
|
||||||
|
.n_modes = 1,
|
||||||
|
.modes = modes,
|
||||||
|
.n_possible_crtcs = 1,
|
||||||
|
.possible_crtcs = possible_crtcs,
|
||||||
|
.backlight = -1,
|
||||||
|
.connector_type = META_CONNECTOR_TYPE_DisplayPort
|
||||||
|
};
|
||||||
|
|
||||||
|
meta_monitor_manager_test_emulate_hotplug (monitor_manager_test, test_setup);
|
||||||
|
|
||||||
|
logical_monitors =
|
||||||
|
meta_monitor_manager_get_logical_monitors (monitor_manager);
|
||||||
|
g_assert_cmpint (g_list_length (logical_monitors), ==, 1);
|
||||||
|
|
||||||
|
g_assert_cmpint (monitor_manager->screen_width, ==, 1024);
|
||||||
|
g_assert_cmpint (monitor_manager->screen_height, ==, 768);
|
||||||
|
|
||||||
|
stage = meta_backend_get_stage (backend);
|
||||||
|
g_assert_cmpint (clutter_actor_get_width (stage), ==, 1024);
|
||||||
|
g_assert_cmpint (clutter_actor_get_height (stage), ==, 768);
|
||||||
|
}
|
||||||
|
|
||||||
|
static MetaMonitorTestSetup *
|
||||||
|
create_headless_test_setup (void)
|
||||||
|
{
|
||||||
|
return g_new0 (MetaMonitorTestSetup, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
init_tests (int argc, char **argv)
|
||||||
|
{
|
||||||
|
g_test_init (&argc, &argv, NULL);
|
||||||
|
g_test_bug_base ("http://bugzilla.gnome.org/show_bug.cgi?id=");
|
||||||
|
|
||||||
|
MetaMonitorTestSetup *initial_test_setup;
|
||||||
|
|
||||||
|
initial_test_setup = create_headless_test_setup ();
|
||||||
|
meta_monitor_manager_test_init_test_setup (initial_test_setup);
|
||||||
|
|
||||||
|
g_test_add_func ("/headless-start/start", meta_test_headless_start);
|
||||||
|
g_test_add_func ("/headless-start/monitor-getters",
|
||||||
|
meta_test_headless_monitor_getters);
|
||||||
|
g_test_add_func ("/headless-start/connect",
|
||||||
|
meta_test_headless_monitor_connect);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
init_tests (argc, argv);
|
||||||
|
|
||||||
|
meta_plugin_manager_load ("default");
|
||||||
|
|
||||||
|
meta_override_compositor_configuration (META_COMPOSITOR_TYPE_WAYLAND,
|
||||||
|
META_TYPE_BACKEND_TEST);
|
||||||
|
meta_wayland_override_display_name ("mutter-test-display");
|
||||||
|
|
||||||
|
meta_init ();
|
||||||
|
meta_register_with_session ();
|
||||||
|
|
||||||
|
g_idle_add (run_tests, NULL);
|
||||||
|
|
||||||
|
return meta_run ();
|
||||||
|
}
|
@ -372,7 +372,10 @@ meta_monitor_manager_test_calculate_monitor_mode_scale (MetaMonitorManager *mana
|
|||||||
output = meta_monitor_get_main_output (monitor);
|
output = meta_monitor_get_main_output (monitor);
|
||||||
output_test = output->driver_private;
|
output_test = output->driver_private;
|
||||||
|
|
||||||
return output_test->scale;
|
if (output_test)
|
||||||
|
return output_test->scale;
|
||||||
|
else
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static float *
|
static float *
|
||||||
|
Loading…
Reference in New Issue
Block a user