2 #include "mockclient.h"
3 #include "mockcompositor.h"
7 #include <libds-tizen/scaler.h>
8 #include <scaler-client-protocol.h>
10 TEST(ScalerSimpleTest, CreateScaler)
12 struct wl_display *display = wl_display_create();
14 struct ds_tizen_scaler *scaler = ds_tizen_scaler_create(display);
15 ASSERT_NE(scaler, nullptr);
17 wl_display_destroy(display);
20 class ScalerCompositor : public MockCompositor, public ::testing::Test
24 MockCompositor(&ScalerCompositor::SetUpComp, this)
26 /* We are only interested in test results. Let's silence libds log. */
27 ds_log_init(DS_SILENT, nullptr);
30 static void SetUpComp(void *data)
32 ScalerCompositor *comp = static_cast<ScalerCompositor*>(data);
34 struct ds_tizen_scaler *scaler =
35 ds_tizen_scaler_create(comp->GetWlDisplay());
36 ASSERT_NE(scaler, nullptr);
40 static void handle_global(void *data, struct wl_registry *registry,
41 uint32_t name, const char *interface, uint32_t version);
42 static void handle_global_remove(void *data, struct wl_registry *registry,
45 static const struct wl_registry_listener registry_listener = {
46 .global = handle_global,
47 .global_remove = handle_global_remove,
50 class MockScalerClient : public MockClient
53 MockScalerClient() : MockClient(®istry_listener, this)
55 EXPECT_NE(this->compositor, nullptr);
56 EXPECT_NE(this->scaler, nullptr);
58 surface = wl_compositor_create_surface(this->compositor);
59 EXPECT_NE(this->surface, nullptr);
64 wl_surface_destroy(this->surface);
65 wl_scaler_destroy(this->scaler);
66 wl_compositor_destroy(this->compositor);
69 struct wl_compositor *compositor;
70 struct wl_scaler *scaler;
71 struct wl_surface *surface;
75 handle_global(void *data, struct wl_registry *registry,
76 uint32_t name, const char *interface, uint32_t version)
78 MockScalerClient *client = static_cast<MockScalerClient*>(data);
80 if (strcmp(interface, "wl_compositor") == 0) {
81 client->compositor = static_cast<struct wl_compositor*>(
82 wl_registry_bind(registry, name, &wl_compositor_interface, 4));
83 } else if (strcmp(interface, "wl_scaler") == 0) {
84 client->scaler = static_cast<struct wl_scaler*>(
85 wl_registry_bind(registry, name, &wl_scaler_interface, 2));
90 handle_global_remove(void *data, struct wl_registry *registry, uint32_t name)
94 TEST_F(ScalerCompositor, CreateViewport)
96 MockScalerClient *client = new MockScalerClient();
98 struct wl_viewport *vp = wl_scaler_get_viewport(client->scaler,
101 client->ExpectNoError();
103 wl_viewport_destroy(vp);
107 TEST_F(ScalerCompositor, CreateViewportTwice)
109 MockScalerClient *client = new MockScalerClient();
111 struct wl_viewport *vp[2];
112 vp[0] = wl_scaler_get_viewport(client->scaler, client->surface);
113 vp[1] = wl_scaler_get_viewport(client->scaler, client->surface);
115 client->ExpectProtocolError(&wl_scaler_interface,
116 WL_SCALER_ERROR_VIEWPORT_EXISTS);
118 wl_viewport_destroy(vp[0]);
119 wl_viewport_destroy(vp[1]);
123 TEST_F(ScalerCompositor, SetSource)
125 MockScalerClient *client = new MockScalerClient();
127 struct wl_viewport *vp = wl_scaler_get_viewport(client->scaler,
130 wl_viewport_set_source(vp,
131 wl_fixed_from_int(100), wl_fixed_from_int(100),
132 wl_fixed_from_int(100), wl_fixed_from_int(100));
133 wl_surface_commit(client->surface);
135 client->ExpectNoError();
137 wl_viewport_destroy(vp);
141 TEST_F(ScalerCompositor, UnsetSource)
143 MockScalerClient *client = new MockScalerClient();
145 struct wl_viewport *vp = wl_scaler_get_viewport(client->scaler,
148 wl_viewport_set_source(vp,
149 wl_fixed_from_int(-1.0), wl_fixed_from_int(-1.0),
150 wl_fixed_from_int(-1.0), wl_fixed_from_int(-1.0));
151 wl_surface_commit(client->surface);
153 client->ExpectNoError();
155 wl_viewport_destroy(vp);
159 TEST_F(ScalerCompositor, SetDestination)
161 MockScalerClient *client = new MockScalerClient();
163 struct wl_viewport *vp = wl_scaler_get_viewport(client->scaler,
166 wl_viewport_set_destination(vp, 100, 100);
167 wl_surface_commit(client->surface);
169 client->ExpectNoError();
171 wl_viewport_destroy(vp);
175 TEST_F(ScalerCompositor, UnsetDestination)
177 MockScalerClient *client = new MockScalerClient();
179 struct wl_viewport *vp = wl_scaler_get_viewport(client->scaler,
182 wl_viewport_set_destination(vp, -1, -1);
183 wl_surface_commit(client->surface);
185 client->ExpectNoError();
187 wl_viewport_destroy(vp);
192 int x, y, width, height;
195 class ScalerCompositorBadSourceTest :
196 public ScalerCompositor,
197 public testing::WithParamInterface<Box>
201 INSTANTIATE_TEST_CASE_P(ScalerBadSourceParamTest,
202 ScalerCompositorBadSourceTest,
209 Box{0, 0, -20, -10}));
211 TEST_P(ScalerCompositorBadSourceTest, SetBadSource)
213 MockScalerClient *client = new MockScalerClient();
215 struct wl_viewport *vp = wl_scaler_get_viewport(client->scaler,
218 Box src = GetParam();
219 wl_viewport_set_source(vp,
220 wl_fixed_from_int(src.x), wl_fixed_from_int(src.y),
221 wl_fixed_from_int(src.width), wl_fixed_from_int(src.height));
222 wl_surface_commit(client->surface);
224 client->ExpectProtocolError(&wl_viewport_interface,
225 WL_VIEWPORT_ERROR_BAD_VALUE);
227 wl_viewport_destroy(vp);
235 class ScalerCompositorBadDestinationTest :
236 public ScalerCompositor,
237 public testing::WithParamInterface<Size>
241 INSTANTIATE_TEST_CASE_P(ScalerBadDestinationParamTest,
242 ScalerCompositorBadDestinationTest,
251 TEST_P(ScalerCompositorBadDestinationTest, SetBadDestination)
253 MockScalerClient *client = new MockScalerClient();
255 struct wl_viewport *vp = wl_scaler_get_viewport(client->scaler,
258 Size dst = GetParam();
259 wl_viewport_set_destination(vp, dst.width, dst.height);
260 wl_surface_commit(client->surface);
262 client->ExpectProtocolError(&wl_viewport_interface,
263 WL_VIEWPORT_ERROR_BAD_VALUE);
265 wl_viewport_destroy(vp);