1 /*
2 * Copyright (C) 2021 Red Hat Inc.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License as
6 * published by the Free Software Foundation; either version 2 of the
7 * License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17 * 02111-1307, USA.
18 *
19 */
20
21 #include "config.h"
22
23 #include "tests/native-virtual-monitor.h"
24
25 #include "backends/meta-backend-private.h"
26 #include "backends/meta-logical-monitor.h"
27 #include "backends/meta-monitor-config-manager.h"
28 #include "backends/meta-virtual-monitor.h"
29 #include "backends/native/meta-renderer-native.h"
30 #include "tests/meta-ref-test.h"
31
32 static void
meta_test_virtual_monitor_create(void)33 meta_test_virtual_monitor_create (void)
34 {
35 MetaBackend *backend = meta_get_backend ();
36 MetaMonitorManager *monitor_manager = meta_backend_get_monitor_manager (backend);
37 MetaMonitorConfigManager *config_manager =
38 meta_monitor_manager_get_config_manager (monitor_manager);
39 MetaRenderer *renderer = meta_backend_get_renderer (backend);
40 MetaVirtualMonitor *virtual_monitor;
41 g_autoptr (MetaVirtualMonitorInfo) monitor_info = NULL;
42 GError *error = NULL;
43 GList *monitors;
44 MetaMonitor *monitor;
45 MetaMonitorsConfig *monitors_config;
46 GList *logical_monitors;
47 GList *logical_monitor_monitors;
48 GList *views;
49 int i;
50 ClutterActor *actor;
51
52 g_assert_null (meta_monitor_config_manager_get_current (config_manager));
53 g_assert_null (meta_monitor_manager_get_logical_monitors (monitor_manager));
54 g_assert_null (meta_monitor_manager_get_monitors (monitor_manager));
55 g_assert_null (meta_renderer_get_views (renderer));
56
57 monitor_info = meta_virtual_monitor_info_new (80, 60, 60.0,
58 "MetaTestVendor",
59 "MetaVirtualMonitor",
60 "0x1234");
61 virtual_monitor = meta_monitor_manager_create_virtual_monitor (monitor_manager,
62 monitor_info,
63 &error);
64 if (!virtual_monitor)
65 g_error ("Failed to create virtual monitor: %s", error->message);
66
67 meta_monitor_manager_reload (monitor_manager);
68
69 monitors = meta_monitor_manager_get_monitors (monitor_manager);
70 g_assert_cmpint (g_list_length (monitors), ==, 1);
71 monitor = META_MONITOR (monitors->data);
72 g_assert_cmpstr (meta_monitor_get_vendor (monitor), ==, "MetaTestVendor");
73 g_assert_cmpstr (meta_monitor_get_product (monitor), ==, "MetaVirtualMonitor");
74 g_assert_cmpstr (meta_monitor_get_serial (monitor), ==, "0x1234");
75 g_assert (meta_monitor_get_main_output (monitor) ==
76 meta_virtual_monitor_get_output (virtual_monitor));
77
78 monitors_config = meta_monitor_manager_ensure_configured (monitor_manager);
79 g_assert_nonnull (monitors_config);
80 g_assert_cmpint (g_list_length (monitors_config->logical_monitor_configs),
81 ==,
82 1);
83
84 g_assert_cmpint (g_list_length (monitors_config->disabled_monitor_specs),
85 ==,
86 0);
87
88 logical_monitors =
89 meta_monitor_manager_get_logical_monitors (monitor_manager);
90 g_assert_cmpint (g_list_length (logical_monitors), ==, 1);
91 logical_monitor_monitors =
92 meta_logical_monitor_get_monitors (logical_monitors->data);
93 g_assert_cmpint (g_list_length (logical_monitor_monitors), ==, 1);
94 g_assert (logical_monitor_monitors->data == monitor);
95
96 views = meta_renderer_get_views (renderer);
97 g_assert_cmpint (g_list_length (views), ==, 1);
98
99 for (i = 0; i < 5; i++)
100 {
101 meta_ref_test_verify_view (CLUTTER_STAGE_VIEW (views->data),
102 g_test_get_path (), 0,
103 meta_ref_test_determine_ref_test_flag ());
104 }
105
106 actor = clutter_actor_new ();
107 clutter_actor_set_position (actor, 10, 10);
108 clutter_actor_set_size (actor, 40, 40);
109 clutter_actor_set_background_color (actor, CLUTTER_COLOR_LightSkyBlue);
110 clutter_actor_add_child (meta_backend_get_stage (backend), actor);
111
112 for (i = 0; i < 5; i++)
113 {
114 meta_ref_test_verify_view (CLUTTER_STAGE_VIEW (views->data),
115 g_test_get_path (), 1,
116 meta_ref_test_determine_ref_test_flag ());
117 }
118
119 g_object_unref (virtual_monitor);
120 meta_monitor_manager_reload (monitor_manager);
121
122 g_assert_null (meta_monitor_manager_ensure_configured (monitor_manager));
123 g_assert_null (meta_monitor_manager_get_logical_monitors (monitor_manager));
124 g_assert_null (meta_monitor_manager_get_monitors (monitor_manager));
125 g_assert_null (meta_renderer_get_views (renderer));
126
127 clutter_actor_destroy (actor);
128 }
129
130 void
init_virtual_monitor_tests(void)131 init_virtual_monitor_tests (void)
132 {
133 g_test_add_func ("/backends/native/virtual-monitor/create",
134 meta_test_virtual_monitor_create);
135 }
136