From ca5cac2f1e354515ddc6788c997313d176b603ba Mon Sep 17 00:00:00 2001 From: Duna Oh Date: Fri, 7 Aug 2020 15:36:48 +0900 Subject: [PATCH] DSTizenAppinfo/DSTizenAppinfoMgr: add new classes and test codes Change-Id: I26c4a6a5e158daab32c1de9ae5e0854d31cb9cfb --- samples/exampleClient.c | 23 ++++- samples/meson.build | 3 +- src/DSWaylandExtension/DSTizenAppinfo.cpp | 61 ++++++++++++ src/DSWaylandExtension/DSTizenAppinfo.h | 33 +++++++ src/DSWaylandExtension/DSTizenAppinfoMgr.cpp | 84 ++++++++++++++++ src/DSWaylandExtension/DSTizenAppinfoMgr.h | 39 ++++++++ src/DSWaylandExtension/DSWaylandExtension.cpp | 14 +++ src/DSWaylandExtension/DSWaylandExtensionPrivate.h | 3 + src/DSWaylandServer/DSWaylandTizenAppinfo.cpp | 109 +++++++++++++++++++-- src/DSWaylandServer/DSWaylandTizenAppinfo.h | 16 ++- src/DSWaylandServer/DSWaylandTizenAppinfoPrivate.h | 4 + src/meson.build | 4 + tests/DSTizenAppinfo-test.cpp | 58 +++++++++++ tests/DSWaylandTizenAppinfo-test.cpp | 22 ++++- tests/meson.build | 2 + 15 files changed, 461 insertions(+), 14 deletions(-) create mode 100644 src/DSWaylandExtension/DSTizenAppinfo.cpp create mode 100644 src/DSWaylandExtension/DSTizenAppinfo.h create mode 100644 src/DSWaylandExtension/DSTizenAppinfoMgr.cpp create mode 100644 src/DSWaylandExtension/DSTizenAppinfoMgr.h create mode 100644 tests/DSTizenAppinfo-test.cpp diff --git a/samples/exampleClient.c b/samples/exampleClient.c index 7038611..6bf344d 100644 --- a/samples/exampleClient.c +++ b/samples/exampleClient.c @@ -12,6 +12,7 @@ #include #include #include +#include struct wl_display *display = NULL; struct wl_compositor *compositor = NULL; @@ -23,6 +24,7 @@ struct wl_touch *touch = NULL; struct xkb_context *xkb_context = NULL; struct xkb_keymap *keymap = NULL; struct tizen_policy *tz_policy = NULL; +struct tizen_launch_appinfo *tz_appinfo = NULL; static void pointer_enter(void *data, struct wl_pointer *wl_pointer, uint32_t serial, struct wl_surface *surface, wl_fixed_t surface_x, wl_fixed_t surface_y) { @@ -397,10 +399,20 @@ static const struct tizen_policy_listener tz_policy_listener = { }; static void +_tizen_launch_appinfo_cb_base_output_resolution_done(void *data, struct tizen_launch_appinfo *tizen_appinfo, uint32_t pid, uint32_t width, uint32_t height) +{ + printf("Tizen Appinfo callback: base_output_resolution_done pid:(%d) w,h:(%d,%d)\n", pid, width, height); +} + +static const struct tizen_launch_appinfo_listener tz_appinfo_listener = { + _tizen_launch_appinfo_cb_base_output_resolution_done, +}; + +static void global_registry_handler(void *data, struct wl_registry *registry, uint32_t id, const char *interface, uint32_t version) { - printf("Registry event : global added (interface:%s, id:%d)\n", interface, id); + printf("Registry event : global added (interface:%s, id:%d, version:%d)\n", interface, id, version); if (strcmp(interface, "wl_compositor") == 0) { @@ -416,6 +428,15 @@ global_registry_handler(void *data, struct wl_registry *registry, uint32_t id, tz_policy = wl_registry_bind(registry, id, &tizen_policy_interface, 7); tizen_policy_add_listener(tz_policy, &tz_policy_listener, NULL); } + else if(strcmp(interface, "tizen_launch_appinfo") == 0) + { + tz_appinfo = wl_registry_bind(registry, id, &tizen_launch_appinfo_interface, 1); + + /* TODO: This request should be used by AMD.*/ + tizen_launch_appinfo_add_listener(tz_appinfo, &tz_appinfo_listener, NULL); + tizen_launch_appinfo_register_appid(tz_appinfo, "com.samsung.clocksetting"); + tizen_launch_appinfo_set_pid(tz_appinfo, "com.samsung.clocksetting", 4077); + } } static void diff --git a/samples/meson.build b/samples/meson.build index 50d5216..176e86b 100644 --- a/samples/meson.build +++ b/samples/meson.build @@ -29,10 +29,11 @@ executable('exampleCompositor', # exampleClient written for testing exampleCompositor wayland_client_dep = dependency('wayland-client') tizen_extension_client_dep = dependency('tizen-extension-client') +tizen_launch_client_dep = dependency('tizen-launch-client') libxkbcommon_dep = dependency('xkbcommon') executable('exampleClient', 'exampleClient.c', - dependencies : [libds_declared_dep, wayland_client_dep, tizen_extension_client_dep, libxkbcommon_dep], + dependencies : [libds_declared_dep, wayland_client_dep, tizen_extension_client_dep, libxkbcommon_dep, tizen_launch_client_dep], install_dir : libds_prefix_bindir, install : true ) diff --git a/src/DSWaylandExtension/DSTizenAppinfo.cpp b/src/DSWaylandExtension/DSTizenAppinfo.cpp new file mode 100644 index 0000000..d3ea3e5 --- /dev/null +++ b/src/DSWaylandExtension/DSTizenAppinfo.cpp @@ -0,0 +1,61 @@ +#include + +namespace display_server +{ +DSTizenAppinfo::DSTizenAppinfo() + : __pid(-1), + __base_output_available(false), + __base_output_width(0), + __base_output_height(0) +{ +} + +DSTizenAppinfo::DSTizenAppinfo(std::string appid) + : __pid(-1), + __base_output_available(false), + __base_output_width(0), + __base_output_height(0) +{ + __appId = appid; +} + +void DSTizenAppinfo::setAppId(std::string appId) +{ + __appId = appId; +} + +void DSTizenAppinfo::setPid(pid_t pid) +{ + __pid = pid; +} + +DSTizenAppinfo::~DSTizenAppinfo() +{ +} + +pid_t DSTizenAppinfo::pid() +{ + return __pid; +} + +std::string DSTizenAppinfo::appId() +{ + return __appId; +} + +bool DSTizenAppinfo::base_output_available() +{ + return __base_output_available; +} + +int DSTizenAppinfo::base_output_width() +{ + return __base_output_width; +} + +int DSTizenAppinfo::base_output_height() +{ + return __base_output_height; +} + +} \ No newline at end of file diff --git a/src/DSWaylandExtension/DSTizenAppinfo.h b/src/DSWaylandExtension/DSTizenAppinfo.h new file mode 100644 index 0000000..4967630 --- /dev/null +++ b/src/DSWaylandExtension/DSTizenAppinfo.h @@ -0,0 +1,33 @@ +#ifndef _DS_TIZENAPPINFO_H_ +#define _DS_TIZENAPPINFO_H_ + +#include + +namespace display_server +{ + +class DSTizenAppinfo : public DSObject +{ +public: + DSTizenAppinfo(); + DSTizenAppinfo(std::string appid); + virtual ~DSTizenAppinfo(); + + void setAppId(std::string appId); + void setPid(pid_t pid); + pid_t pid(void); + std::string appId(void); + bool base_output_available(void); + int base_output_width(void); + int base_output_height(void); + +private: + std::string __appId; + pid_t __pid; + bool __base_output_available; + int __base_output_width; + int __base_output_height; +}; + +} +#endif \ No newline at end of file diff --git a/src/DSWaylandExtension/DSTizenAppinfoMgr.cpp b/src/DSWaylandExtension/DSTizenAppinfoMgr.cpp new file mode 100644 index 0000000..7e07120 --- /dev/null +++ b/src/DSWaylandExtension/DSTizenAppinfoMgr.cpp @@ -0,0 +1,84 @@ +#include "DSTizenAppinfoMgr.h" +#include "DSWaylandTizenAppinfo.h" +#include "DSDebugLog.h" + +namespace display_server +{ + +DSTizenAppinfoMgr::DSTizenAppinfoMgr() + :__numAppinfo(0) +{ + __wlCompositor = DSWaylandCompositor::getInstance(); + __wlAppinfo = new DSWaylandTizenAppinfo(__wlCompositor, this); +} + +DSTizenAppinfoMgr::~DSTizenAppinfoMgr() +{ +} + +std::shared_ptr DSTizenAppinfoMgr::getTizenAppinfo(std::string appId) +{ + auto it = __appIdMap.find(appId); + if (it != __appIdMap.end()) + { + DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo(appId:%s) returned by appId:%s", appId); + return it->second; + } + return nullptr; +} + +std::shared_ptr DSTizenAppinfoMgr::getTizenAppinfo(pid_t pid) +{ + std::unordered_map >::iterator it; + for (it = __appIdMap.begin(); it != __appIdMap.end(); it++) { + std::shared_ptr ptr_appinfo = it->second; + DSTizenAppinfo * appinfo; + appinfo = ptr_appinfo.get() ; + if (appinfo->pid() == pid) { + DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo returned by pid:%d", pid); + return ptr_appinfo; + } + } + return nullptr; +} + +std::shared_ptr DSTizenAppinfoMgr::addTizenAppinfo(std::string appId) +{ + std::shared_ptr appinfo = getTizenAppinfo(appId); + if (appinfo == nullptr) { + appinfo = std::make_shared(appId); + if (appinfo != nullptr) + { + __appIdMap.emplace(appId, appinfo); + __numAppinfo++; + DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo(appId:%s) added", appId); + return appinfo; + } + } + DSLOG_INF("DSTizenAppinfoMgr", "No TizenAppinfo added by apppId:%s", appId); + return appinfo; +} + +void DSTizenAppinfoMgr::removeTizenAppinfo(std::string appId) +{ + auto it = __appIdMap.find(appId); + if (it != __appIdMap.end()) { + __appIdMap.erase(it); + --__numAppinfo; + DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo(appId:%s) removed", appId); + } + return; +} + +void DSTizenAppinfoMgr::updateTizenAppinfo(std::string appId, pid_t pid) +{ + std::shared_ptr ptr_appinfo = getTizenAppinfo(appId); + DSTizenAppinfo * appinfo; + appinfo = ptr_appinfo.get(); + if (appinfo != nullptr) + { + appinfo->setPid(pid); + DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo(appId:%s) set to pid:%d", appId, pid); + } +} +} \ No newline at end of file diff --git a/src/DSWaylandExtension/DSTizenAppinfoMgr.h b/src/DSWaylandExtension/DSTizenAppinfoMgr.h new file mode 100644 index 0000000..03db0ea --- /dev/null +++ b/src/DSWaylandExtension/DSTizenAppinfoMgr.h @@ -0,0 +1,39 @@ +#ifndef _DS_TIZENAPPINFO_MGR_H_ +#define _DS_TIZENAPPINFO_MGR_H_ + +#include +#include "DSWaylandCompositor.h" + +namespace display_server +{ + +class DSTizenAppinfoMgr : public DSObject +{ +public: + DSTizenAppinfoMgr(); + virtual ~DSTizenAppinfoMgr(); + + std::shared_ptr getTizenAppinfo(std::string appId); + std::shared_ptr getTizenAppinfo(pid_t pid); + + std::shared_ptr addTizenAppinfo(std::string appId); + + void removeTizenAppinfo(std::string appId); + + void updateTizenAppinfo(std::string appId, pid_t pid); + + int numAppinfo() + { + return __numAppinfo; + }; + +private: + DSWaylandCompositor *__wlCompositor; + DSWaylandTizenAppinfo *__wlAppinfo; + std::unordered_map > __appIdMap; + int __numAppinfo; +}; + +} + +#endif \ No newline at end of file diff --git a/src/DSWaylandExtension/DSWaylandExtension.cpp b/src/DSWaylandExtension/DSWaylandExtension.cpp index bc6e57c..3a38a3a 100644 --- a/src/DSWaylandExtension/DSWaylandExtension.cpp +++ b/src/DSWaylandExtension/DSWaylandExtension.cpp @@ -3,6 +3,7 @@ #include "DSWaylandCompositor.h" #include "DSWaylandZxdgShellV6.h" #include "DSWaylandTizenPolicy.h" +#include "DSTizenAppinfoMgr.h" namespace display_server @@ -32,6 +33,7 @@ bool DSWaylandExtensionPrivate::init(DSWaylandCompositor *compositor) { __initZxdgShellV6(); __initTizenPolicy(); + __initTizenAppinfoMgr(); } catch(const std::runtime_error& e) { @@ -70,6 +72,18 @@ bool DSWaylandExtensionPrivate::__initTizenPolicy(void) return true; } +bool DSWaylandExtensionPrivate::__initTizenAppinfoMgr(void) +{ + __tzAppinfoMgr = std::make_shared(); + if (__tzAppinfoMgr == nullptr) + { + throw std::runtime_error(__func__); + return false; + } + + return true; +} + DSWaylandExtension::DSWaylandExtension(DSWaylandCompositor *compositor) : DS_INIT_PRIVATE_PTR(DSWaylandExtension) { diff --git a/src/DSWaylandExtension/DSWaylandExtensionPrivate.h b/src/DSWaylandExtension/DSWaylandExtensionPrivate.h index 0521cb8..c7b8ab0 100644 --- a/src/DSWaylandExtension/DSWaylandExtensionPrivate.h +++ b/src/DSWaylandExtension/DSWaylandExtensionPrivate.h @@ -6,6 +6,7 @@ namespace display_server class DSWaylandZxdgShellV6; class DSWaylandTizenPolicy; +class DSTizenAppinfoMgr; class DSWaylandExtensionPrivate : public DSObjectPrivate { @@ -21,11 +22,13 @@ public: private: bool __initZxdgShellV6(void); bool __initTizenPolicy(void); + bool __initTizenAppinfoMgr(void); private: DSWaylandCompositor *__compositor; std::shared_ptr __zxdgShell; std::shared_ptr __tzPolicy; + std::shared_ptr __tzAppinfoMgr; }; diff --git a/src/DSWaylandServer/DSWaylandTizenAppinfo.cpp b/src/DSWaylandServer/DSWaylandTizenAppinfo.cpp index 1950c42..27585fb 100644 --- a/src/DSWaylandServer/DSWaylandTizenAppinfo.cpp +++ b/src/DSWaylandServer/DSWaylandTizenAppinfo.cpp @@ -1,61 +1,152 @@ #include "DSWaylandTizenAppinfo.h" #include "DSWaylandTizenAppinfoPrivate.h" +#include "DSTizenAppinfoMgr.h" + +const int TIZEN_APPINFO_VERSION = 1; namespace display_server { - -DSWaylandTizenAppinfo::DSWaylandTizenAppinfo() - : DSObject(), DS_INIT_PRIVATE_PTR(DSWaylandTizenAppinfo) +DSWaylandTizenAppinfoPrivate::DSWaylandTizenAppinfoPrivate(DSWaylandTizenAppinfo *p_ptr) + : DSObjectPrivate(p_ptr), + __p_ptr(p_ptr) { } -DSWaylandTizenAppinfo::~DSWaylandTizenAppinfo() +DSWaylandTizenAppinfoPrivate::~DSWaylandTizenAppinfoPrivate() { } -DSWaylandTizenAppinfoPrivate::DSWaylandTizenAppinfoPrivate(DSWaylandTizenAppinfo *p_ptr) - : DSObjectPrivate(p_ptr), - __p_ptr(p_ptr) +void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_initialize(DSWaylandCompositor *wlCompositor) { -} + ::wl_display *display; + display = wlCompositor->display(); -DSWaylandTizenAppinfoPrivate::~DSWaylandTizenAppinfoPrivate() + init(display, TIZEN_APPINFO_VERSION); +} +void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_finalize(void) { } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_bind_resource(Resource *resource) { + DSLOG_DBG("TizenAppinfoPriv", ""); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_destroy_resource(Resource *resource) { + DSLOG_DBG("TizenAppinfoPriv", ""); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_destroy(Resource *resource) { + DSLOG_DBG("TizenAppinfoPriv", ""); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_register_pid(Resource *resource, uint32_t pid) { + DSLOG_DBG("TizenAppinfoPriv", ""); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_deregister_pid(Resource *resource, uint32_t pid) { + DSLOG_DBG("TizenAppinfoPriv", ""); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_set_appid(Resource *resource, uint32_t pid, const std::string &appid) { + DSLOG_DBG("TizenAppinfoPriv", ""); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_get_base_output_resolution(Resource *resource, uint32_t pid) { + DSLOG_DBG("TizenAppinfoPriv", ""); + DS_GET_PUB(DSWaylandTizenAppinfo); + if (pub->__dsAppinfoMgr == nullptr) + return; + + std::shared_ptr ptr_appinfo = pub->__dsAppinfoMgr->getTizenAppinfo(pid); + DSTizenAppinfo *appinfo = ptr_appinfo.get(); + send_base_output_resolution_done(pid, appinfo->base_output_width(), appinfo->base_output_height()); + DSLOG_DBG("TizenAppinfoPriv", "SEND base_output_resolution_done event with width(%d), height(%d)", appinfo->base_output_width(), appinfo->base_output_height()); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_register_appid(Resource *resource, const std::string &appid) { + DSLOG_DBG("TizenAppinfoPriv", ""); + DS_GET_PUB(DSWaylandTizenAppinfo); + if (pub->__dsAppinfoMgr) + pub->__dsAppinfoMgr->addTizenAppinfo(appid); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_deregister_appid(Resource *resource, const std::string &appid) { + DSLOG_DBG("TizenAppinfoPriv", ""); + DS_GET_PUB(DSWaylandTizenAppinfo); + if (pub->__dsAppinfoMgr) + pub->__dsAppinfoMgr->removeTizenAppinfo(appid); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_set_pid(Resource *resource, const std::string &appid, uint32_t pid) { + DSLOG_DBG("TizenAppinfoPriv", ""); + DS_GET_PUB(DSWaylandTizenAppinfo); + if (pub->__dsAppinfoMgr) + pub->__dsAppinfoMgr->updateTizenAppinfo(appid, pid); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_ready_metadata(Resource *resource, const std::string &appid, uint32_t pid) { + DSLOG_DBG("TizenAppinfoPriv", ""); +} + +DSWaylandTizenAppinfo::DSWaylandTizenAppinfo(DSWaylandCompositor *wlCompositor) + : DS_INIT_PRIVATE_PTR(DSWaylandTizenAppinfo), + __wlCompositor(wlCompositor), + __isCreated(false), + __dsAppinfoMgr(nullptr) +{ + this->initialize(__wlCompositor); +} + +DSWaylandTizenAppinfo::DSWaylandTizenAppinfo(DSWaylandCompositor *wlCompositor, DSTizenAppinfoMgr *dsAppinfoMgr) + : DS_INIT_PRIVATE_PTR(DSWaylandTizenAppinfo), + __wlCompositor(wlCompositor), + __isCreated(false), + __dsAppinfoMgr(dsAppinfoMgr) +{ + this->initialize(__wlCompositor); +} + +DSWaylandTizenAppinfo::~DSWaylandTizenAppinfo() +{ + if (isCreated()) + this->finalize(); +} + +bool DSWaylandTizenAppinfo::isCreated(void) +{ + return __isCreated; +} + +bool DSWaylandTizenAppinfo::initialize(DSWaylandCompositor *wlCompositor) +{ + if (!wlCompositor) return false; + if (isCreated()) + { + DSLOG_ERR("TizenAppinfo", "Already initialized"); + return true; + } + + DS_GET_PRIV(DSWaylandTizenAppinfo); + if (!priv) return false; + + __wlCompositor = wlCompositor; + __isCreated = true; + + priv->tizen_launch_appinfo_initialize(__wlCompositor); + + DSLOG_INF("TizenAppinfo", "TizenAppinfo initialized"); + return true; +} + +void DSWaylandTizenAppinfo::finalize(void) +{ + DS_GET_PRIV(DSWaylandTizenAppinfo); + priv->tizen_launch_appinfo_finalize(); + + DSLOG_INF("TizenAppinfo", "TizenAppinfo finalized"); + __isCreated = false; } } diff --git a/src/DSWaylandServer/DSWaylandTizenAppinfo.h b/src/DSWaylandServer/DSWaylandTizenAppinfo.h index 6845d26..53b66af 100644 --- a/src/DSWaylandServer/DSWaylandTizenAppinfo.h +++ b/src/DSWaylandServer/DSWaylandTizenAppinfo.h @@ -3,19 +3,33 @@ #include #include +#include "DSWaylandCompositor.h" namespace display_server { class DSWaylandTizenAppinfoPrivate; +class DSTizenAppinfoMgr; class DSWaylandTizenAppinfo : public DSObject { DS_PIMPL_USE_PRIVATE(DSWaylandTizenAppinfo); public: - DSWaylandTizenAppinfo(); + DSWaylandTizenAppinfo(DSWaylandCompositor *wlCompositor); + DSWaylandTizenAppinfo(DSWaylandCompositor *wlCompositor, DSTizenAppinfoMgr *dsAppinfoMgr); virtual ~DSWaylandTizenAppinfo(); + + bool isCreated(void); + + bool initialize(DSWaylandCompositor *wlCompositor); + void finalize(void); + +private: + DSWaylandCompositor *__wlCompositor; + bool __isCreated; + DSTizenAppinfoMgr *__dsAppinfoMgr; + }; } diff --git a/src/DSWaylandServer/DSWaylandTizenAppinfoPrivate.h b/src/DSWaylandServer/DSWaylandTizenAppinfoPrivate.h index a15fc46..e81a992 100644 --- a/src/DSWaylandServer/DSWaylandTizenAppinfoPrivate.h +++ b/src/DSWaylandServer/DSWaylandTizenAppinfoPrivate.h @@ -2,6 +2,7 @@ #define __DS_WAYLAND_TIZEN_APPINFO_PRIVATE_H__ #include "dswayland-server-tizen-launch.h" + #include "DSWaylandTizenAppinfo.h" namespace display_server @@ -16,6 +17,9 @@ public: DSWaylandTizenAppinfoPrivate(DSWaylandTizenAppinfo *p_ptr); ~DSWaylandTizenAppinfoPrivate() override; + void tizen_launch_appinfo_initialize(DSWaylandCompositor *wlCompositor); + void tizen_launch_appinfo_finalize(void); + protected: void tizen_launch_appinfo_bind_resource(Resource *resource) override; void tizen_launch_appinfo_destroy_resource(Resource *resource) override; diff --git a/src/meson.build b/src/meson.build index 6bde3ed..d545ce7 100644 --- a/src/meson.build +++ b/src/meson.build @@ -55,6 +55,10 @@ libds_srcs = [ 'DSCore/DSStruct.h', 'DSCore/DSCore.h', 'DSWaylandExtension/DSWaylandExtension.cpp', + 'DSWaylandExtension/DSTizenAppinfo.h', + 'DSWaylandExtension/DSTizenAppinfo.cpp', + 'DSWaylandExtension/DSTizenAppinfoMgr.h', + 'DSWaylandExtension/DSTizenAppinfoMgr.cpp', 'DSWindow/DSWindow.h', 'DSWindow/DSWindowPrivate.h', 'DSWindow/DSWindow.cpp', diff --git a/tests/DSTizenAppinfo-test.cpp b/tests/DSTizenAppinfo-test.cpp new file mode 100644 index 0000000..1a582a3 --- /dev/null +++ b/tests/DSTizenAppinfo-test.cpp @@ -0,0 +1,58 @@ +#include "libds-tests.h" +#include "DSTizenAppinfo.h" +#include "DSTizenAppinfoMgr.h" + +using namespace display_server; + +class DSTizenAppinfoTest : public ::testing::Test +{ +public: + void SetUp(void) override + { + setenv("XDG_RUNTIME_DIR", "/run", 1); + } + void TearDown(void) override + { + unsetenv("XDG_RUNTIME_DIR"); + } +}; + +TEST_F(DSTizenAppinfoTest, NewTizenAppinfo) +{ + DSTizenAppinfo *appinfo = new DSTizenAppinfo(); + EXPECT_TRUE(appinfo != nullptr); + + if (appinfo) + delete appinfo; +} + +TEST_F(DSTizenAppinfoTest, NewTizenAppinfoMgr) +{ + DSTizenAppinfoMgr *appinfoMgr = new DSTizenAppinfoMgr(); + EXPECT_TRUE(appinfoMgr != nullptr); + + if (appinfoMgr) + { + std::string appId1{"com.appinfo.first"}; + std::string appId2{"com.appinfo.econd"}; + + std::shared_ptr app1 = appinfoMgr->addTizenAppinfo(appId1); + EXPECT_TRUE(app1 != nullptr); + std::shared_ptr app2 = appinfoMgr->addTizenAppinfo(appId2); + EXPECT_TRUE(app2 != nullptr); + EXPECT_TRUE(appinfoMgr->numAppinfo() == 2); + + std::shared_ptr temp = appinfoMgr->getTizenAppinfo(appId2); + EXPECT_TRUE(temp != nullptr); + appinfoMgr->removeTizenAppinfo(appId2); + + pid_t pid = 1234; + app1->setPid(pid); + temp = appinfoMgr->getTizenAppinfo(pid); + appinfoMgr->removeTizenAppinfo(temp->appId()); + + EXPECT_TRUE(appinfoMgr->numAppinfo() == 0); + + delete appinfoMgr; + } +} \ No newline at end of file diff --git a/tests/DSWaylandTizenAppinfo-test.cpp b/tests/DSWaylandTizenAppinfo-test.cpp index 46b0968..474c2e2 100644 --- a/tests/DSWaylandTizenAppinfo-test.cpp +++ b/tests/DSWaylandTizenAppinfo-test.cpp @@ -12,12 +12,30 @@ public: {} }; -TEST_F(DSWaylandTizenAppinfoTest, NewDSWaylandTizenAppinfo) +TEST_F(DSWaylandTizenAppinfoTest, New_Appinfo) { - DSWaylandTizenAppinfo *tzAppinfo = new DSWaylandTizenAppinfo; + DSWaylandCompositor *compositor = DSWaylandCompositor::getInstance(); + DSWaylandTizenAppinfo *tzAppinfo = new DSWaylandTizenAppinfo(compositor); EXPECT_TRUE(tzAppinfo != nullptr); if (tzAppinfo) delete tzAppinfo; + + DSWaylandCompositor::releaseInstance(); } +TEST_F(DSWaylandTizenAppinfoTest, Initialize_Appinfo) +{ + bool ret; + + DSWaylandCompositor *compositor = DSWaylandCompositor::getInstance(); + DSWaylandTizenAppinfo *tzAppinfo = new DSWaylandTizenAppinfo(compositor); + + ret = tzAppinfo->initialize(compositor); + EXPECT_TRUE(ret == true); + + if (tzAppinfo) + delete tzAppinfo; + + DSWaylandCompositor::releaseInstance(); +} \ No newline at end of file diff --git a/tests/meson.build b/tests/meson.build index b97f3d4..6f4106c 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -28,6 +28,7 @@ libds_tests_srcs = [ 'DSWaylandTizenPolicy-test.cpp', 'DSWaylandTizenSurface-test.cpp', 'DSWaylandTizenIndicator-test.cpp', + 'DSWaylandTizenAppinfo-test.cpp', 'DSWaylandZxdgShellV6-test.cpp', 'DSWaylandBuffer-test.cpp', 'DSObject-test.cpp', @@ -51,6 +52,7 @@ libds_tests_srcs = [ 'DSPointer-test.cpp', 'DSKeyboard-test.cpp', 'DSTouch-test.cpp', + 'DSTizenAppinfo-test.cpp', ] gmock_dep = dependency('gmock', method : 'pkg-config') -- 2.7.4