SET(TARGET_AUL "aul")
ENABLE_TESTING()
-SET(TARGET_AUL_UNIT_TEST "aul-unit-test")
+SET(TARGET_AUL_UNIT_TESTS "aul-unit-tests")
+SET(TARGET_APP_CONTROL_TESTS "app-control-tests")
INCLUDE(FindPkgConfig)
INCLUDE(ApplyPkgConfig)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/feature/preexec_list.txt DESTINATION ${SHARE_INSTALL_PREFIX}/aul )
INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/miregex DESTINATION ${SHARE_INSTALL_PREFIX}/aul )
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/aul.conf DESTINATION /etc/dbus-1/system.d)
-INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/include/ DESTINATION include/aul/
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/include/ DESTINATION include/aul
FILES_MATCHING
PATTERN "*.h"
)
-INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/aul/api/ DESTINATION include/aul/api/
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/aul/api/ DESTINATION include/aul/api
FILES_MATCHING
PATTERN "*.h"
)
APP_GROUP_ADD = 149,
APP_GROUP_REMOVE = 150,
+ APP_GET_APPID_LIST = 151,
+
APP_CMD_MAX
};
* @since_tizen 6.0
*/
#define AUL_K_INSERT_BEFORE_WINDOW "__K_INSERT_BEFORE_WINDOW"
+
+/**
+ * @brief Definition for AUL: The list of application ID.
+ * @since_tizen 6.0
+ */
+#define AUL_K_APPID_LIST "__AUL_K_APPID_LIST__"
*/
int aul_svc_info_destroy(aul_svc_info_h h);
+/**
+ * @brief Resolves the app control.
+ * @since_tizen 6.0
+ * @remarks The @appid_array should be released using aul_svc_free_appid_array().
+ *
+ * @param[in] b The bundle object
+ * @param[in] uid The user ID
+ * @param[out] appid_array The array pointer of the appid
+ * @param[out] len The array length
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @remarks This API is only for App Framework internally.
+ * @see aul_svc_free_appid_array()
+ */
+int aul_svc_resolve(bundle *b, uid_t uid, char ***appid_array,
+ unsigned int *len);
+
+/**
+ * @brief Gets an array of application ID.
+ * @since_tizen 6.0
+ * @remarks The @appid_array should be released using aul_svc_free_appid_array().
+ *
+ * @param[in] b The bundle object
+ * @param[in] uid The user ID
+ * @param[out] appid_array The array pointer of the appid
+ * @param[out] len The array length
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @remarks This API is only for App Framework internally.
+ * @see aul_svc_free_appid_array()
+ */
+int aul_svc_get_appid_array(bundle *b, uid_t uid, char ***appid_array,
+ unsigned int *len);
+
+/**
+ * @brief Release an array of application ID.
+ * @since_tizen 6.0
+ *
+ * @param[in] appid_array The array pointer of the appid
+ * @param[in] len The array length
+ * @remarks This API is only for App Framework internally.
+ */
+void aul_svc_free_appid_array(char **appid_array, unsigned int len);
+
#ifdef __cplusplus
}
#endif
BuildRequires: pkgconfig(libsmack)
BuildRequires: pkgconfig(gmock)
+%if 0%{?gcov:1}
+BuildRequires: lcov
+BuildRequires: zip
+%endif
+
Recommends: amd
Recommends: amd-mod-component-manager
Recommends: amd-mod-watchdog
%description test
Application utility library (test tools)
+#################################################
+# aul-gcov
+#################################################
+%if 0%{?gcov:1}
+%package gcov
+Summary: AUL (gcov)
+Group: Application Framework/Testing
+
+%description gcov
+AUL gcov objects
+%endif
+
%if "%{?_prelink_enable}" == "y"
%define tizen_feature_prelink 1
%else
%define tizen_feature_prelink 0
%endif
+%define _aulresdir /opt/usr/home/owner/share/aul/res
+
%prep
%setup -q
sed -i 's|TZ_SYS_DB|%{TZ_SYS_DB}|g' %{SOURCE1001}
cp %{SOURCE1001} .
%build
+%if 0%{?gcov:1}
+export CFLAGS+=" -fprofile-arcs -ftest-coverage"
+export CXXFLAGS+=" -fprofile-arcs -ftest-coverage"
+export FFLAGS+=" -fprofile-arcs -ftest-coverage"
+export LDFLAGS+=" -lgcov"
+%endif
+
%if 0%{?simulator}
CFLAGS="%{optflags} -D__emul__"; export CFLAGS
%endif
%cmake -DFULLVER=%{version} \
-DMAJORVER=${MAJORVER} \
-D_TIZEN_FEATURE_PRELINK:BOOL=${_TIZEN_FEATURE_PRELINK} \
+ -DAUL_RES_DIR=%{_aulresdir} \
.
%__make %{?_smp_mflags}
sqlite3 .appsvc.db < ./data/appsvc_db.sql
sqlite3 .component.db < ./parser/component/data/component_db.sql
+%if 0%{?gcov:1}
+mkdir -p gcov-obj
+find . -name '*.gcno' -exec cp '{}' gcov-obj ';'
+%endif
+
+%check
+ctest --output-on-failure %{?_smp_mflags}
+%if 0%{?gcov:1}
+lcov -c --ignore-errors graph --no-external -q -d . -o %{name}.info
+genhtml %{name}.info -o %{name}.out
+zip -r %{name}.zip %{name}.out %{name}.info
+install -m 0644 %{name}.zip %{buildroot}%{_datadir}/gcov/
+%endif
+
%install
rm -rf %{buildroot}
%make_install
mkdir -p %{buildroot}%{_sysconfdir}/gumd/useradd.d
cp -f scripts/12_appsvc-add.post %{buildroot}%{_sysconfdir}/gumd/useradd.d/12_appsvc-add.post
+%if 0%{?gcov:1}
+mkdir -p %{buildroot}%{_datadir}/gcov/obj
+install -m 0644 gcov-obj/* %{buildroot}%{_datadir}/gcov/obj
+%endif
+
%preun
%post
chsmack -a 'User::Home' %{TZ_SYS_DB}/.component.db
chsmack -a 'User::Home' %{TZ_SYS_DB}/.component.db-journal
-
%postun
/sbin/ldconfig
+%post test
+%if 0%{?gcov:1}
+%{_bindir}/aul-unit-tests
+%endif
+chmod +x %{_aulresdir}/tpk/install.sh
+%{_aulresdir}/tpk/install.sh
+
%files
%license LICENSE
%manifest %{name}.manifest
%attr(0755,root,root) %{_datadir}/upgrade/scripts/501.component_upgrade.sh
%files test
+%{_bindir}/app-control-tests
+%{_bindir}/aul-unit-tests
%{_bindir}/open_app
+%{_aulresdir}/*
%files devel
%{_includedir}/aul/*.h
%{_includedir}/aul/api/*.h
%{_libdir}/*.so
%{_libdir}/pkgconfig/*.pc
+
+#################################################
+# aul-gcov
+#################################################
+%if 0%{?gcov:1}
+%files gcov
+%{_datadir}/gcov/*
+%endif
"APP_GROUP_ADD",
"APP_GROUP_REMOVE",
+ "APP_GET_APPID_LIST",
+
"CUSTOM_COMMAND"
};
#include "aul.h"
#include "aul_api.h"
-#include "aul_svc.h"
+#include "aul_app_group.h"
+#include "aul_error.h"
#include "aul_sock.h"
+#include "aul_svc.h"
#include "aul_svc_db.h"
-#include "aul_util.h"
+#include "aul_svc_internal.h"
#include "aul_svc_priv_key.h"
+#include "aul_util.h"
#include "launch.h"
-#include "aul_svc_internal.h"
-#include "aul_app_group.h"
#define MAX_CHECKSUM_BUF 2048
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
g_slist_free(list);
}
-static gchar *__make_checksum(const char *op, const char *uri, const char *mime)
-{
- char buf[MAX_CHECKSUM_BUF];
- gchar *checksum;
-
- snprintf(buf, sizeof(buf), "%s:%s:%s", op, uri, mime);
- checksum = g_compute_checksum_for_string(G_CHECKSUM_MD5, buf, -1);
-
- return checksum;
-}
-
-static char *__get_cache(const char *checksum, uid_t uid)
-{
- app_pkt_t *pkt = NULL;
- int fd;
- int ret;
- bundle *b;
- char buf[MAX_PID_STR_BUFSZ];
- char *appid;
-
- b = bundle_create();
- if (b == NULL) {
- _E("out of memory");
- return NULL;
- }
-
- snprintf(buf, sizeof(buf), "%d", uid);
- bundle_add(b, AUL_K_TARGET_UID, buf);
- bundle_add(b, AUL_K_CHECKSUM, checksum);
-
- fd = aul_sock_send_bundle(AUL_UTIL_PID, uid, APP_GET_APPID_FROM_CACHE,
- b, AUL_SOCK_ASYNC);
- bundle_free(b);
- if (fd <= 0)
- return NULL;
-
- ret = aul_sock_recv_reply_pkt(fd, &pkt);
- if (ret < 0)
- return NULL;
-
- if (pkt->cmd == APP_GET_APPID_FROM_CACHE) {
- if (pkt->data[0] == 0) {
- free(pkt);
- return NULL;
- }
- appid = strdup((const char *)(pkt->data));
- free(pkt);
- return appid;
- }
- free(pkt);
-
- return NULL;
-}
-
-static void __put_cache(const char *checksum, const char *appid, uid_t uid)
-{
- int ret;
- bundle *b;
- char buf[MAX_PID_STR_BUFSZ];
-
- b = bundle_create();
- if (!b) {
- _E("out of memory");
- return;
- }
-
- snprintf(buf, sizeof(buf), "%d", uid);
- bundle_add(b, AUL_K_TARGET_UID, buf);
- bundle_add(b, AUL_K_CHECKSUM, checksum);
- bundle_add(b, AUL_K_APPID, appid);
-
- ret = app_send_cmd_for_uid(AUL_UTIL_PID, uid, APP_SET_CACHE, b);
-
- if (ret < 0)
- _E("Failed to set cache : %d", ret);
-
- bundle_free(b);
-}
-
-static void __put_cache_with_info(const char *checksum, const char *info, uid_t uid)
-{
- char buf[PATH_MAX];
-
- snprintf(buf, sizeof(buf), "@APP_SELECTOR %s", info);
- __put_cache(checksum, buf, uid);
-}
-
static void __invalidate_cache(uid_t uid)
{
int ret;
bundle *b;
uid_t uid;
aul_svc_resolve_info_t ri;
- gchar *checksum;
- char *cache;
+ char **appid_array;
+ unsigned int len;
} resolution_info_t;
typedef int (*resolution_handler)(resolution_info_t *info);
{
aul_svc_resolve_info_t *ri = &info->ri;
int ret;
- size_t n;
ret = __get_resolve_info(info->b, ri);
- if (ret < 0)
- goto err;
+ if (ret < 0) {
+ __free_resolve_info_data(ri);
+ return ret;
+ }
SECURE_LOGD("op - %s / mime - %s / scheme - %s",
ri->op, ri->origin_mime, ri->scheme);
- info->checksum = __make_checksum(ri->op, ri->uri, ri->origin_mime);
- info->cache = __get_cache(info->checksum, info->uid);
- if (info->cache) {
- _D("Hit! %s / %s", info->checksum, info->cache);
- n = strlen("@APP_SELECTOR ");
- if (!strncmp("@APP_SELECTOR ", info->cache, n)) {
- bundle_add(info->b, AUL_SVC_K_URI_R_INFO,
- &info->cache[n]);
- info->appid = strdup(APP_SELECTOR);
- if (info->appid == NULL) {
- _E("Out of memory");
- ret = AUL_SVC_RET_ERROR;
- goto err;
- }
- } else if (!strcmp(info->cache, "^")) {
- ret = AUL_SVC_RET_ENOMATCH;
- goto err;
- } else {
- info->appid = info->cache;
- }
-
- return AUL_SVC_RET_OK;
- }
-
return AUL_SVC_RET_OK;
-
-err:
- if (info->cache) {
- free(info->cache);
- info->cache = NULL;
- }
-
- if (info->checksum) {
- g_free(info->checksum);
- info->checksum = NULL;
- }
-
- __free_resolve_info_data(ri);
-
- return ret;
}
static int __resolution_uri(resolution_info_t *info)
char *id;
char *query;
- if (info->appid || info->list)
+ if (info->list)
return AUL_SVC_RET_OK;
id = _svc_db_get_app(ri->op, ri->origin_mime, ri->uri, info->uid);
if (id) {
- info->appid = id;
+ info->list = g_slist_append(info->list, strdup(id));
return AUL_SVC_RET_OK;
}
__get_list_with_category(ri->category, &info->list, info->uid);
__get_list_with_submode(ri->op, ri->win_id, &info->list, info->uid);
- if (g_slist_length(info->list) > 1)
+ if (g_slist_length(info->list) > 1) {
+ _E("uri_r_info: %s, uri: %s", info->uri_r_info, ri->uri);
info->uri_r_info = ri->uri;
+ }
return AUL_SVC_RET_OK;
}
char *id;
char *query = NULL;
- if (info->appid || info->list)
+ if (info->list)
return AUL_SVC_RET_OK;
if (!ri->uri_r_info)
id = _svc_db_get_app(ri->op, ri->origin_mime, ri->uri_r_info,
info->uid);
if (id) {
- info->appid = id;
+ info->list = g_slist_append(info->list, strdup(id));
return AUL_SVC_RET_OK;
}
__get_list_with_category(ri->category, &info->list, info->uid);
__get_list_with_submode(ri->op, ri->win_id, &info->list, info->uid);
- if (g_slist_length(info->list) > 1)
+ if (g_slist_length(info->list) > 1) {
+ _E("uri_r_info: %s, uri_r_info: %s",
+ info->uri_r_info, info->uri_r_info);
info->uri_r_info = ri->uri_r_info;
+ }
return AUL_SVC_RET_OK;
}
char *id;
char *query = NULL;
- if (info->appid || info->list)
+ if (info->list)
return AUL_SVC_RET_OK;
id = _svc_db_get_app(ri->op, ri->origin_mime, ri->scheme, info->uid);
if (id) {
- info->appid = id;
+ info->list = g_slist_append(info->list, strdup(id));
return AUL_SVC_RET_OK;
}
__get_list_with_category(ri->category, &info->list, info->uid);
__get_list_with_submode(ri->op, ri->win_id, &info->list, info->uid);
- if (g_slist_length(info->list) > 1)
+ if (g_slist_length(info->list) > 1) {
+ _E("uri_r_info: %s, scheme: %s", info->uri_r_info, ri->scheme);
info->uri_r_info = ri->scheme;
+ }
return AUL_SVC_RET_OK;
}
static int __resolution_post(resolution_info_t *info)
{
+ GSList *iter;
int ret = AUL_SVC_RET_OK;
int count;
-
- if (info->appid) {
- __put_cache(info->checksum, info->appid, info->uid);
- goto end;
- }
+ int i = 0;
count = g_slist_length(info->list);
_D("count: %d", count);
- if (count == 1) {
- info->appid = strdup((const char *)info->list->data);
- if (info->appid == NULL) {
- _E("Out of memory");
- ret = AUL_SVC_RET_ERROR;
- goto end;
- }
- __put_cache(info->checksum, info->appid, info->uid);
- } else if (count < 1) {
- __put_cache(info->checksum, "^", info->uid);
+ if (count < 1) {
ret = AUL_SVC_RET_ENOMATCH;
} else {
+ _E("uri_r_info: %s", info->uri_r_info);
bundle_add(info->b, AUL_SVC_K_URI_R_INFO, info->uri_r_info);
- __put_cache_with_info(info->checksum, info->uri_r_info,
- info->uid);
- info->appid = strdup(APP_SELECTOR);
- if (info->appid == NULL) {
- _E("Out of memory");
- ret = AUL_SVC_RET_ERROR;
+ info->len = count;
+ info->appid_array = calloc(info->len, sizeof(char *));
+ iter = info->list;
+ while (iter) {
+ info->appid_array[i++] = strdup((char *)iter->data);
+ iter = g_slist_next(iter);
}
}
-end:
__free_pkg_list(info->list);
__free_resolve_info_data(&info->ri);
- g_free(info->checksum);
return ret;
}
-static int __get_appid(bundle *b, uid_t uid, char **appid)
+API int aul_svc_resolve(bundle *b, uid_t uid, char ***appid_array,
+ unsigned int *len)
{
static const resolution_handler handlers[] = {
__resolution_pre,
int ret;
int i;
- if (b == NULL || appid == NULL) {
+ if (b == NULL || appid_array == NULL || len == NULL) {
_E("Invalid parameter");
return AUL_SVC_RET_EINVAL;
}
if (id) {
if (!op)
aul_svc_set_operation(b, AUL_SVC_OPERATION_DEFAULT);
- *appid = strdup(id);
- if (*appid == NULL) {
- _E("Out of memory");
- return AUL_SVC_RET_ERROR;
- }
+ *appid_array = calloc(1, sizeof(char *));
+ (*appid_array)[0] = strdup(id);
+ *len = 1;
return AUL_SVC_RET_OK;
}
(op && (!strcmp(op, AUL_SVC_OPERATION_SHARE) ||
!strcmp(op, AUL_SVC_OPERATION_MULTI_SHARE) ||
!strcmp(op, AUL_SVC_OPERATION_SHARE_TEXT)))) {
- *appid = strdup(SHARE_PANEL);
- if (*appid == NULL) {
- _E("Out of memory");
- return AUL_SVC_RET_ERROR;
- }
+ *appid_array = calloc(1, sizeof(char *));
+ (*appid_array)[0] = strdup(SHARE_PANEL);
+ *len = 1;
return AUL_SVC_RET_OK;
}
}
}
- *appid = info.appid;
+ *appid_array = info.appid_array;
+ *len = info.len;
+
+ return AUL_SVC_RET_OK;
+}
+
+static int __get_appid(bundle *b, char **appid)
+{
+ const char *operation;
+ const char *pkgname;
+ char *app_id;
+
+ if (!b || !appid) {
+ _E("Invalid parameter");
+ return AUL_SVC_RET_EINVAL;
+ }
+
+ operation = aul_svc_get_operation(b);
+ pkgname = aul_svc_get_pkgname(b);
+ if (!operation && !pkgname) {
+ _E("Invalid request");
+ return AUL_SVC_RET_EINVAL;
+ }
+
+ if (pkgname) {
+ if (!operation)
+ aul_svc_set_operation(b, AUL_SVC_OPERATION_DEFAULT);
+ app_id = strdup(pkgname);
+ } else {
+ app_id = strdup("@UNKNOWN");
+ }
+
+ if (!app_id) {
+ _E("Out of memory");
+ return AUL_SVC_RET_ERROR;
+ }
+
+ *appid = app_id;
return AUL_SVC_RET_OK;
}
char *appid = NULL;
int ret;
- ret = __get_appid(b, uid, &appid);
+ ret = __get_appid(b, &appid);
if (ret != AUL_SVC_RET_OK) {
_E("Failed to get appid");
return ret;
char *appid = NULL;
int ret;
- ret = __get_appid(b, uid, &appid);
+ ret = __get_appid(b, &appid);
if (ret != AUL_SVC_RET_OK) {
_E("Failed to find appid");
return ret;
return AUL_SVC_RET_EINVAL;
}
- ret = __get_appid(b, uid, &appid);
+ ret = __get_appid(b, &appid);
if (ret != AUL_SVC_RET_OK) {
_E("Failed to get appid");
return ret;
return ret;
}
+
+API int aul_svc_get_appid_array(bundle *b, uid_t uid, char ***appid_array,
+ unsigned int *len)
+{
+ bundle *res_b = NULL;
+ app_pkt_t *pkt;
+ const char *str;
+ const char **str_arr;
+ int arr_len = 0;
+ int ret;
+ int fd;
+ int i;
+
+ if (!b || !appid_array || !len) {
+ _E("Invalid parameter");
+ return AUL_SVC_RET_EINVAL;
+ }
+
+ str = bundle_get_val(b, AUL_K_APPID);
+ if (str && !strcmp(str, "@UNKNOWN")) {
+ *appid_array = calloc(1, sizeof(char *));
+ (*appid_array)[0] = strdup(str);
+ *len = 1;
+ return AUL_SVC_RET_OK;
+ }
+
+ bundle_del(b, AUL_K_APPID);
+ bundle_add(b, AUL_K_APPID, "@UNKNOWN");
+
+ fd = aul_sock_send_bundle(AUL_UTIL_PID, uid, APP_GET_APPID_LIST,
+ b, AUL_SOCK_ASYNC);
+ if (fd < 0)
+ return __error_convert(aul_error_convert(fd));
+
+ ret = aul_sock_recv_reply_pkt(fd, &pkt);
+ if (ret < 0)
+ return __error_convert(aul_error_convert(ret));
+
+ if (pkt->cmd != APP_GET_APPID_LIST) {
+ ret = pkt->cmd;
+ _E("Error(%d) occurs", ret);
+ free(pkt);
+ return __error_convert(aul_error_convert(ret));
+ }
+
+ if (pkt->opt & AUL_SOCK_BUNDLE)
+ res_b = bundle_decode(pkt->data, pkt->len);
+
+ free(pkt);
+
+ if (!res_b) {
+ _E("result bundle is nullptr");
+ return AUL_SVC_RET_ERROR;
+ }
+
+ str = bundle_get_val(res_b, AUL_SVC_K_URI_R_INFO);
+ if (str) {
+ bundle_del(b, AUL_SVC_K_URI_R_INFO);
+ bundle_add(b, AUL_SVC_K_URI_R_INFO, str);
+ }
+
+ str_arr = bundle_get_str_array(res_b, AUL_K_APPID_LIST, &arr_len);
+ if (!str_arr) {
+ _E("Failed to get appid list. str_arr(%p), arr_len(%d)",
+ str_arr, arr_len);
+ bundle_free(res_b);
+ return AUL_SVC_RET_ERROR;
+ }
+
+ *len = arr_len;
+ *appid_array = calloc(arr_len, sizeof(char *));
+ for (i = 0; i < arr_len; ++i)
+ (*appid_array)[i] = strdup(str_arr[i]);
+
+ bundle_free(res_b);
+
+ return AUL_SVC_RET_OK;
+}
+
+API void aul_svc_free_appid_array(char **appid_array, unsigned int len)
+{
+ unsigned int i;
+
+ if (!appid_array)
+ return;
+
+ for (i = 0; i < len; ++i)
+ free(appid_array[i]);
+
+ free(appid_array);
+}
ADD_SUBDIRECTORY(unit_tests)
+ADD_SUBDIRECTORY(app_control_tests)
--- /dev/null
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/ APP_CONTROL_TESTS_SRCS)
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/mock/ APP_CONTROL_TESTS_SRCS)
+
+ADD_EXECUTABLE(${TARGET_APP_CONTROL_TESTS}
+ ${APP_CONTROL_TESTS_SRCS})
+
+TARGET_INCLUDE_DIRECTORIES(${TARGET_APP_CONTROL_TESTS} PUBLIC
+ "${CMAKE_CURRENT_SOURCE_DIR}/mock"
+ "${CMAKE_CURRENT_SOURCE_DIR}/../"
+ "${CMAKE_CURRENT_SOURCE_DIR}/../../include"
+ "${CMAKE_CURRENT_SOURCE_DIR}/../../src"
+)
+
+APPLY_PKG_CONFIG(${TARGET_APP_CONTROL_TESTS} PUBLIC
+ BUNDLE_DEPS
+ DLOG_DEPS
+ GLIB_DEPS
+ GMOCK_DEPS
+)
+
+TARGET_LINK_LIBRARIES(${TARGET_APP_CONTROL_TESTS} PUBLIC ${TARGET_AUL})
+SET_TARGET_PROPERTIES(${TARGET_APP_CONTROL_TESTS} PROPERTIES COMPILE_FLAGS "-fPIE")
+SET_TARGET_PROPERTIES(${TARGET_APP_CONTROL_TESTS} PROPERTIES LINK_FLAGS "-pie")
+
+INSTALL(TARGETS ${TARGET_APP_CONTROL_TESTS} DESTINATION bin)
+
+INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/res DESTINATION
+ ${AUL_RES_DIR}/../)
--- /dev/null
+// Copyright (c) 2020 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by a apache 2.0 license that can be
+// found in the LICENSE file.
+
+#include <gtest/gtest.h>
+#include <gmock/gmock.h>
+
+int main(int argc, char** argv) {
+ try {
+ testing::InitGoogleTest(&argc, argv);
+ } catch (...) {
+ std::cout << "Exception occurred" << std::endl;
+ }
+
+ int ret;
+ try {
+ ret = RUN_ALL_TESTS();
+ } catch (const ::testing::internal::GoogleTestFailureException& e) {
+ ret = -1;
+ std::cout << "GoogleTestFailureException was thrown:" << e.what()
+ << std::endl;
+ }
+
+ return ret;
+}
--- /dev/null
+/*
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef APP_CONTROL_TESTS_MOCK_MOCK_HOOK_H_
+#define APP_CONTROL_TESTS_MOCK_MOCK_HOOK_H_
+
+#define MOCK_HOOK_P0(MOCK_CLASS, f) \
+ TestFixture::GetMock<MOCK_CLASS>().f()
+
+#define MOCK_HOOK_P1(MOCK_CLASS, f, p1) \
+ TestFixture::GetMock<MOCK_CLASS>().f(p1)
+
+#define MOCK_HOOK_P2(MOCK_CLASS, f, p1, p2) \
+ TestFixture::GetMock<MOCK_CLASS>().f(p1, p2)
+
+#define MOCK_HOOK_P3(MOCK_CLASS, f, p1, p2, p3) \
+ TestFixture::GetMock<MOCK_CLASS>().f(p1, p2, p3)
+
+#define MOCK_HOOK_P4(MOCK_CLASS, f, p1, p2, p3, p4) \
+ TestFixture::GetMock<MOCK_CLASS>().f(p1, p2, p3, p4)
+
+#define MOCK_HOOK_P5(MOCK_CLASS, f, p1, p2, p3, p4, p5) \
+ TestFixture::GetMock<MOCK_CLASS>().f(p1, p2, p3, p4, p5)
+
+#define MOCK_HOOK_P6(MOCK_CLASS, f, p1, p2, p3, p4, p5, p6) \
+ TestFixture::GetMock<MOCK_CLASS>().f(p1, p2, p3, p4, p5, p6)
+
+#define MOCK_HOOK_P7(MOCK_CLASS, f, p1, p2, p3, p4, p5, p6, p7) \
+ TestFixture::GetMock<MOCK_CLASS>().f(p1, p2, p3, p4, p5, p6, p7)
+
+#define MOCK_HOOK_P8(MOCK_CLASS, f, p1, p2, p3, p4, p5, p6, p7, p8) \
+ TestFixture::GetMock<MOCK_CLASS>().f(p1, p2, p3, p4, p5, p6, p7, p8)
+
+#define MOCK_HOOK_P10(MOCK_CLASS, f, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) \
+ TestFixture::GetMock<MOCK_CLASS>().f( \
+ p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)
+
+#endif // APP_CONTROL_TESTS_MOCK_MOCK_HOOK_H_
--- /dev/null
+/*
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef APP_CONTROL_TESTS_MOCK_MODULE_MOCK_H_
+#define APP_CONTROL_TESTS_MOCK_MODULE_MOCK_H_
+
+class ModuleMock {
+ public:
+ virtual ~ModuleMock() {}
+};
+
+#endif // APP_CONTROL_TESTS_MOCK_MODULE_MOCK_H_
--- /dev/null
+/*
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "app_control_tests/mock/test_fixture.h"
+
+#include <memory>
+
+std::unique_ptr<ModuleMock> TestFixture::mock_;
--- /dev/null
+/*
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef APP_CONTROL_TESTS_MOCK_TEST_FIXTURE_H_
+#define APP_CONTROL_TESTS_MOCK_TEST_FIXTURE_H_
+
+#include <gtest/gtest.h>
+
+#include <memory>
+#include <stdexcept>
+#include <string>
+#include <utility>
+
+#include "app_control_tests/mock/module_mock.h"
+
+class TestFixture : public ::testing::Test {
+ public:
+ explicit TestFixture(std::unique_ptr<ModuleMock>&& mock) {
+ mock_ = std::move(mock);
+ }
+ virtual ~TestFixture() {
+ mock_.reset();
+ }
+
+ virtual void SetUp() {}
+ virtual void TearDown() {}
+
+ template <typename T>
+ static T& GetMock() {
+ auto ptr = dynamic_cast<T*>(mock_.get());
+ if (!ptr)
+ throw std::invalid_argument("The test does not provide mock of \"" +
+ std::string(typeid(T).name()) + "\"");
+ return *ptr;
+ }
+
+ static std::unique_ptr<ModuleMock> mock_;
+};
+
+#endif // APP_CONTROL_TESTS_MOCK_TEST_FIXTURE_H_
--- /dev/null
+#!/bin/bash
+
+PATH_RES_TPK="/opt/usr/home/owner/share/aul/res/tpk"
+TPK_LIST=`ls ${PATH_RES_TPK} | grep tpk`
+
+for tpk in ${TPK_LIST}; do
+ /usr/bin/pkgcmd -i -p ${PATH_RES_TPK}/${tpk}
+done
--- /dev/null
+/*
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <aul_svc_internal.h>
+#include <bundle_cpp.h>
+#include <bundle_internal.h>
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <iostream>
+#include <memory>
+#include <string>
+
+#include "test_fixture.h"
+
+using ::testing::_;
+using ::testing::DoAll;
+using ::testing::Return;
+using ::testing::SetArgPointee;
+using ::testing::Invoke;
+
+namespace {
+
+std::string APP_CONTROL_OPERATION =
+ "http://tizen.org/appcontrol/operation";
+std::string APP_CONTROL_OPERATION_ADD =
+ APP_CONTROL_OPERATION + "/add";
+std::string APP_CONTROL_OPERATION_CALL =
+ APP_CONTROL_OPERATION + "/call";
+std::string APP_CONTROL_OPERATION_COMPOSE =
+ APP_CONTROL_OPERATION + "/compose";
+std::string APP_CONTROL_OPERATION_CONFIGURE_LOCATION =
+ APP_CONTROL_OPERATION + "/configure/location";
+std::string APP_CONTROL_OPERATION_DIAL =
+ APP_CONTROL_OPERATION + "/dial";
+std::string APP_CONTROL_OPERATION_DOWNLOAD =
+ APP_CONTROL_OPERATION + "/download";
+std::string APP_CONTROL_OPERATION_EDIT =
+ APP_CONTROL_OPERATION + "/edit";
+std::string APP_CONTROL_OPERATION_GET_INPUT =
+ APP_CONTROL_OPERATION + "/get_input";
+std::string APP_CONTROL_OPERATION_GUIDE_PRIVACY_SETTING =
+ APP_CONTROL_OPERATION + "/guide_privacy_setting";
+std::string APP_CONTROL_OPERATION_PICK =
+ APP_CONTROL_OPERATION + "/pick";
+std::string APP_CONTROL_OPERATION_READ_SCREEN =
+ APP_CONTROL_OPERATION + "/read_screen";
+std::string APP_CONTROL_OPERATION_SCREEN_READER_UI =
+ APP_CONTROL_OPERATION + "/screen_reader_ui";
+std::string APP_CONTROL_OPERATION_SETTING =
+ APP_CONTROL_OPERATION + "/setting";
+std::string APP_CONTROL_OPERATION_SETTING_AIRPLANE_MODE =
+ APP_CONTROL_OPERATION_SETTING + "/aireplane_mode";
+std::string APP_CONTROL_OPERATION_SETTING_APP_NOTIFICATIONS =
+ APP_CONTROL_OPERATION_SETTING + "/app_notifications";
+std::string APP_CONTROL_OPERATION_SETTING_BT_ENABLE =
+ APP_CONTROL_OPERATION_SETTING + "/bt_enable";
+std::string APP_CONTROL_OPERATION_SETTING_BT_VISIBILITY =
+ APP_CONTROL_OPERATION_SETTING + "/bt_visibility";
+std::string APP_CONTROL_OPERATION_SETTING_CALL =
+ APP_CONTROL_OPERATION_SETTING + "/call";
+std::string APP_CONTROL_OPERATION_SETTING_DO_NOT_DISTURB =
+ APP_CONTROL_OPERATION_SETTING + "/do_not_disturb";
+std::string APP_CONTROL_OPERATION_SETTING_LOCATION =
+ APP_CONTROL_OPERATION_SETTING + "/location";
+std::string APP_CONTROL_OPERATION_SETTING_MESSAGES =
+ APP_CONTROL_OPERATION_SETTING + "/messages";
+std::string APP_CONTROL_OPERATION_SETTING_MOBILE_NETWORK =
+ APP_CONTROL_OPERATION_SETTING + "/mobile_network";
+std::string APP_CONTROL_OPERATION_SETTING_NFC =
+ APP_CONTROL_OPERATION_SETTING + "/nfc";
+std::string APP_CONTROL_OPERATION_SETTING_NOTIFICATION_ON_LOCK_SCREEN =
+ APP_CONTROL_OPERATION_SETTING + "/notification_on_lock_screen";
+std::string APP_CONTROL_OPERATION_SETTING_VPN =
+ APP_CONTROL_OPERATION_SETTING + "/vpn";
+std::string APP_CONTROL_OPERATION_SHARE_TEXT =
+ APP_CONTROL_OPERATION + "/share_text";
+std::string APP_CONTROL_OPERATION_VIEW =
+ APP_CONTROL_OPERATION + "/view";
+std::string URI_FILE_AUL_RES =
+ "file://opt/usr/home/owner/share/aul/res/";
+
+} // namespace
+
+class Mocks : public ::testing::NiceMock<ModuleMock> {};
+
+class AppControlTest : public TestFixture {
+ public:
+ AppControlTest() : TestFixture(std::make_unique<Mocks>()) {
+ }
+
+ virtual ~AppControlTest() {
+ }
+
+ virtual void SetUp() {
+ }
+
+ virtual void TearDown() {
+ }
+
+ bool Compare(const std::string& operation,
+ const std::string& uri, const std::string& mime) {
+ tizen_base::Bundle b;
+ bundle* handle = b.GetHandle();
+ aul_svc_set_operation(handle, operation.c_str());
+ if (!uri.empty())
+ aul_svc_set_uri(handle, uri.c_str());
+ if (!mime.empty())
+ aul_svc_set_mime(handle, mime.c_str());
+ char** appid_array = nullptr;
+ unsigned int len = 0;
+ int ret1 = aul_svc_resolve(handle, getuid(), &appid_array, &len);
+ if (ret1 != AUL_SVC_RET_OK)
+ fprintf(stderr, "aul_svc_resolve() is failed. error(%d)\n", ret1);
+
+ std::string uri_r_info1 = b.GetString(AUL_SVC_K_URI_R_INFO);
+ b.Delete(AUL_SVC_K_URI_R_INFO);
+ std::vector<std::string> result1;
+ result1.reserve(len);
+ for (unsigned int i = 0; i < len; ++i)
+ result1.push_back(appid_array[i]);
+ aul_svc_free_appid_array(appid_array, len);
+
+ appid_array = nullptr;
+ len = 0;
+ int ret2 = aul_svc_get_appid_array(handle, getuid(), &appid_array, &len);
+ if (ret2 != AUL_SVC_RET_OK)
+ fprintf(stderr, "aul_svc_get_appid_array() is failed. error(%d)\n", ret2);
+
+ std::string uri_r_info2 = b.GetString(AUL_SVC_K_URI_R_INFO);
+ std::vector<std::string> result2;
+ result2.reserve(len);
+ for (unsigned int i = 0; i < len; ++i)
+ result2.push_back(appid_array[i]);
+ aul_svc_free_appid_array(appid_array, len);
+
+ if (ret1 != ret2) {
+ fprintf(stderr, "result1(%d) : result2(%d)", ret1, ret2);
+ return false;
+ }
+
+ if (result1.size() != result2.size()) {
+ fprintf(stderr, "resul1.size(%u) is not equal to result2.size(%u)\n",
+ result1.size(), result2.size());
+ return false;
+ }
+
+ for (auto& str1 : result1) {
+ bool found = false;
+ for (auto& str2 : result2) {
+ if (str1 == str2) {
+ found = true;
+ break;
+ }
+ }
+
+ if (found == false) {
+ fprintf(stderr, "%s is not found\n", str1.c_str());
+ return false;
+ }
+ }
+
+ if (uri_r_info1 != uri_r_info2)
+ fprintf(stderr, "%s : %s\n", uri_r_info1.c_str(), uri_r_info2.c_str());
+
+ return true;
+ }
+};
+
+TEST_F(AppControlTest, app_control_resolution_add_application) {
+ bool ret = Compare(APP_CONTROL_OPERATION_ADD,
+ "", "application/vnd.tizen.contact");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_call_tel) {
+ bool ret = Compare(APP_CONTROL_OPERATION_CALL,
+ "tel:+358-9-123-45678", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_compose) {
+ bool ret= Compare(APP_CONTROL_OPERATION_COMPOSE, "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_compose_sms) {
+ bool ret= Compare(APP_CONTROL_OPERATION_COMPOSE,
+ "sms:+19725551212?body=hello%20there", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_compose_mmsto) {
+ bool ret= Compare(APP_CONTROL_OPERATION_COMPOSE,
+ "mmsto:addr1%2C%20addr2", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_configure_location) {
+ bool ret = Compare(APP_CONTROL_OPERATION_CONFIGURE_LOCATION,
+ "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_dial_tel) {
+ bool ret = Compare(APP_CONTROL_OPERATION_DIAL,
+ "tel:+358-9-123-45678", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_download_http) {
+ bool ret = Compare(APP_CONTROL_OPERATION_DOWNLOAD,
+ "http://download.tizen.org/", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_download_https) {
+ bool ret = Compare(APP_CONTROL_OPERATION_DOWNLOAD,
+ "https://download.tizen.org/", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_download) {
+ bool ret = Compare(APP_CONTROL_OPERATION_DOWNLOAD,
+ "ftp://download.tizen.org/", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_edit_application) {
+ bool ret = Compare(APP_CONTROL_OPERATION_EDIT,
+ "", "application/vnd.tizen.contact");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_edit_application_on_off) {
+ bool ret = Compare(APP_CONTROL_OPERATION_EDIT,
+ "", "application/x-bluetooth-on-off");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_edit_application_visibility) {
+ bool ret = Compare(APP_CONTROL_OPERATION_EDIT,
+ "", "application/x-bluetooth-visibility");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_get_input) {
+ bool ret = Compare(APP_CONTROL_OPERATION_GET_INPUT,
+ "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_get_input_text_plain) {
+ bool ret = Compare(APP_CONTROL_OPERATION_GET_INPUT,
+ "", "text/plain");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_get_input_audio_all) {
+ bool ret = Compare(APP_CONTROL_OPERATION_GET_INPUT,
+ "", "audio/*");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_get_input_image_all) {
+ bool ret = Compare(APP_CONTROL_OPERATION_GET_INPUT,
+ "", "image/*");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_get_input_all) {
+ bool ret = Compare(APP_CONTROL_OPERATION_GET_INPUT,
+ "", "*/*");
+ EXPECT_EQ(ret, true);
+}
+TEST_F(AppControlTest, app_control_resolution_guide_privacy_setting) {
+ bool ret = Compare(APP_CONTROL_OPERATION_GUIDE_PRIVACY_SETTING,
+ "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_pick_all) {
+ bool ret = Compare(APP_CONTROL_OPERATION_PICK,
+ "", "*/*");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_pick_image_all) {
+ bool ret = Compare(APP_CONTROL_OPERATION_PICK,
+ "", "image/*");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_pick_video_all) {
+ bool ret = Compare(APP_CONTROL_OPERATION_PICK,
+ "", "video/*");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_pick_audio_all) {
+ bool ret = Compare(APP_CONTROL_OPERATION_PICK,
+ "", "audio/*");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_pick_application) {
+ bool ret = Compare(APP_CONTROL_OPERATION_PICK,
+ "", "application/vnd.tizen.contact");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_pick_geo) {
+ bool ret = Compare(APP_CONTROL_OPERATION_PICK,
+ "geo:37.786971,-122.399677;u=35", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_pick_text_vcard) {
+ bool ret = Compare(APP_CONTROL_OPERATION_PICK,
+ "", "text/vcard");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_read_screen) {
+ bool ret = Compare(APP_CONTROL_OPERATION_READ_SCREEN,
+ "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_screen_reader_ui) {
+ bool ret = Compare(APP_CONTROL_OPERATION_SCREEN_READER_UI,
+ "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_setting) {
+ bool ret = Compare(APP_CONTROL_OPERATION_SETTING,
+ "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_setting_airplane_mode) {
+ bool ret = Compare(APP_CONTROL_OPERATION_SETTING_AIRPLANE_MODE,
+ "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_setting_app_notifications) {
+ bool ret = Compare(APP_CONTROL_OPERATION_SETTING_APP_NOTIFICATIONS,
+ "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_setting_bt_enable) {
+ bool ret = Compare(APP_CONTROL_OPERATION_SETTING_BT_ENABLE,
+ "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_setting_bt_visibility) {
+ bool ret = Compare(APP_CONTROL_OPERATION_SETTING_BT_VISIBILITY,
+ "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_setting_call) {
+ bool ret = Compare(APP_CONTROL_OPERATION_SETTING_CALL,
+ "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_setting_do_not_disturb) {
+ bool ret = Compare(APP_CONTROL_OPERATION_SETTING_DO_NOT_DISTURB,
+ "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_setting_location) {
+ bool ret = Compare(APP_CONTROL_OPERATION_SETTING_LOCATION,
+ "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_setting_messages) {
+ bool ret= Compare(APP_CONTROL_OPERATION_SETTING_MESSAGES,
+ "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_setting_mobile_network) {
+ bool ret = Compare(APP_CONTROL_OPERATION_SETTING_MOBILE_NETWORK,
+ "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_setting_nfc) {
+ bool ret = Compare(APP_CONTROL_OPERATION_SETTING_NFC,
+ "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_setting_notification_on_lock_screen) {
+ bool ret = Compare(APP_CONTROL_OPERATION_SETTING_NOTIFICATION_ON_LOCK_SCREEN,
+ "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_setting_vpn) {
+ bool ret = Compare(APP_CONTROL_OPERATION_SETTING_VPN,
+ "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_share_text) {
+ bool ret= Compare(APP_CONTROL_OPERATION_SHARE_TEXT,
+ "", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_share_text_sms) {
+ bool ret= Compare(APP_CONTROL_OPERATION_SHARE_TEXT,
+ "sms:+19725551212?body=hello%20there", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_share_text_mmsto) {
+ bool ret= Compare(APP_CONTROL_OPERATION_SHARE_TEXT,
+ "mmsto:addr1%2C%20addr2", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_image_bmp) {
+ std::string uri = URI_FILE_AUL_RES + "images/zebra_1024_680.bmp";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "image/bmp");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_uri_bmp) {
+ std::string uri = URI_FILE_AUL_RES + "images/zebra_1024_680.bmp";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_image_jpeg) {
+ std::string uri = URI_FILE_AUL_RES + "images/giraffe_800_1179.jpg";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "image/jpeg");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_uri_jpeg) {
+ std::string uri = URI_FILE_AUL_RES + "images/giraffe_800_1179.jpg";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_image_gif) {
+ std::string uri = URI_FILE_AUL_RES + "images/squee.gif";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "image/gif");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_uri_gif) {
+ std::string uri = URI_FILE_AUL_RES + "images/squee.gif";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_image_png) {
+ std::string uri = URI_FILE_AUL_RES + "images/plane_1024_768.png";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "image/png");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_uri_png) {
+ std::string uri = URI_FILE_AUL_RES + "images/plane_1024_768.png";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_audio_aac) {
+ std::string uri = URI_FILE_AUL_RES + "sounds/SampleAAC.aac";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "audio/aac");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_uri_aac) {
+ std::string uri = URI_FILE_AUL_RES + "sounds/SampleAAC.aac";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_audio_amr) {
+ std::string uri = URI_FILE_AUL_RES + "sounds/SampleAMR.amr";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "audio/amr");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_uri_amr) {
+ std::string uri = URI_FILE_AUL_RES + "sounds/SampleAMR.amr";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_audio_mp3) {
+ std::string uri = URI_FILE_AUL_RES + "sounds/SampleMP3.mp3";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "audio/mp3");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_uri_mp3) {
+ std::string uri = URI_FILE_AUL_RES + "sounds/SampleMP3.mp3";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_audio_wav) {
+ std::string uri = URI_FILE_AUL_RES + "sounds/SampleWAV.wav";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "audio/wav");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_uri_wav) {
+ std::string uri = URI_FILE_AUL_RES + "sounds/SampleWAV.wav";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_video_3gpp) {
+ std::string uri = URI_FILE_AUL_RES + "videos/sampleH263.3gp";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "video/3gpp");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_uri_3gpp) {
+ std::string uri = URI_FILE_AUL_RES + "videos/sampleH263.3gp";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_video_mp4) {
+ std::string uri = URI_FILE_AUL_RES + "video/sampleMPEG4.mp4";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "video/mp4");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_uri_mp4) {
+ std::string uri = URI_FILE_AUL_RES + "video/sampleMPEG4.mp4";
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ uri, "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_application_contact) {
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ "", "application/vnd.tizen.contact");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_application_number) {
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ "", "application/vnd.tizen.number");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_application_phone_log) {
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ "", "application/vnd.tizen.phone-log");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_geo) {
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ "geo:37.786971,-122.399677;u=35", "");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_application_widget) {
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ "", "application/widget");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_application_widget_sharing) {
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ "", "application/vnd.wac.widget-sharing");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_application_rpm) {
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ "", "application/x-rpm");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_application_redhat) {
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ "", "application/x-redhat-package-manager");
+ EXPECT_EQ(ret, true);
+}
+
+TEST_F(AppControlTest, app_control_resolution_view_application_package) {
+ bool ret = Compare(APP_CONTROL_OPERATION_VIEW,
+ "", "application/vnd.tizen.package");
+ EXPECT_EQ(ret, true);
+}
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/ UNIT_TESTS_SRCS)
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/mock/ UNIT_TESTS_SRCS)
-ADD_EXECUTABLE(${TARGET_AUL_UNIT_TEST} ${UNIT_TESTS_SRCS})
-TARGET_INCLUDE_DIRECTORIES(${TARGET_AUL_UNIT_TEST} PUBLIC
+ADD_EXECUTABLE(${TARGET_AUL_UNIT_TESTS} ${UNIT_TESTS_SRCS})
+
+TARGET_INCLUDE_DIRECTORIES(${TARGET_AUL_UNIT_TESTS} PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}/../"
"${CMAKE_CURRENT_SOURCE_DIR}/../../include"
"${CMAKE_CURRENT_SOURCE_DIR}/../../src"
)
-APPLY_PKG_CONFIG(${TARGET_AUL_UNIT_TEST} PUBLIC
+APPLY_PKG_CONFIG(${TARGET_AUL_UNIT_TESTS} PUBLIC
GLIB_DEPS
GMOCK_DEPS
BUNDLE_DEPS
)
-TARGET_LINK_LIBRARIES(${TARGET_AUL_UNIT_TEST} PUBLIC ${TARGET_AUL})
-SET_TARGET_PROPERTIES(${TARGET_AUL_UNIT_TEST} PROPERTIES COMPILE_FLAGS "-fPIE")
-SET_TARGET_PROPERTIES(${TARGET_AUL_UNIT_TEST} PROPERTIES LINK_FLAGS "-pie")
+TARGET_LINK_LIBRARIES(${TARGET_AUL_UNIT_TESTS} PUBLIC ${TARGET_AUL})
+SET_TARGET_PROPERTIES(${TARGET_AUL_UNIT_TESTS} PROPERTIES COMPILE_FLAGS "-fPIE")
+SET_TARGET_PROPERTIES(${TARGET_AUL_UNIT_TESTS} PROPERTIES LINK_FLAGS "-pie")
+
+INSTALL(TARGETS ${TARGET_AUL_UNIT_TESTS} DESTINATION bin)
ADD_TEST(
- NAME ${TARGET_AUL_UNIT_TEST}
- COMMAND ${TARGET_AUL_UNIT_TEST}
+ NAME ${TARGET_AUL_UNIT_TESTS}
+ COMMAND ${TARGET_AUL_UNIT_TESTS}
)