de521d5d9db84565980bbbe7cff39512815feab4
[profile/ivi/wayland-ivi-extension.git] / ivi-layermanagement-api / test / TestBase.cpp
1 #include "TestBase.h"
2 #include <cstring>
3 #include <stdexcept>
4
5 void registry_listener_callback(void* data, struct wl_registry* registry, uint32_t id, const char* interface, uint32_t version)
6 {
7     if (0 == strcmp(interface, "wl_compositor"))
8     {
9         wl_compositor** compositor = reinterpret_cast<wl_compositor**>(data);
10         *compositor = reinterpret_cast<wl_compositor*>(wl_registry_bind(registry, id, &wl_compositor_interface, 1));
11     }
12 }
13
14 TestBase::TestBase()
15 : wlDisplay(NULL)
16 , wlRegistry(NULL)
17 {
18     wlDisplay = wl_display_connect(NULL);
19     if (!wlDisplay)
20     {
21         throw std::runtime_error("could not connect to wayland display");
22     }
23     wlRegistry = wl_display_get_registry(wlDisplay);
24
25     static const struct wl_registry_listener registry_listener = {
26         registry_listener_callback,
27         NULL
28     };
29
30     wl_registry_add_listener(wlRegistry, &registry_listener, &wlCompositor);
31
32     if (wl_display_roundtrip(wlDisplay) == -1 || wl_display_roundtrip(wlDisplay) == -1)
33     {
34         throw std::runtime_error("wl_display error");
35     }
36
37     wlSurfaces.reserve(10);
38     for (int i = 0; i < wlSurfaces.capacity(); ++i)
39     {
40         wlSurfaces.push_back(wl_compositor_create_surface(wlCompositor));
41     }
42 }
43
44 TestBase::~TestBase()
45 {
46     for (std::vector<wl_surface *>::reverse_iterator it = wlSurfaces.rbegin();
47          it != wlSurfaces.rend();
48          ++it)
49     {
50         wl_surface_destroy(*it);
51     }
52     wlSurfaces.clear();
53     wl_compositor_destroy(wlCompositor);
54     wl_registry_destroy(wlRegistry);
55     wl_display_disconnect(wlDisplay);
56 }
57