add unit tests 31/276331/6
authordyamy-lee <dyamy.lee@samsung.com>
Wed, 15 Jun 2022 01:35:07 +0000 (10:35 +0900)
committerdyamy-lee <dyamy.lee@samsung.com>
Wed, 15 Jun 2022 04:55:31 +0000 (13:55 +0900)
add unit tests for checking voice control elementary API which in voice_control_elm.h
add run-unittest script in spec file following guide for running unit test.

Change-Id: I5084336d45c4592abc84938ad1e129ddc904b127

CMakeLists.txt
packaging/voice-control-elm.spec
tests/CMakeLists.txt [new file with mode: 0644]
tests/org.tizen.vc-elm-unittests.manifest [new file with mode: 0644]
tests/org.tizen.vc-elm-unittests.xml [new file with mode: 0644]
tests/src/cynara_mock.cpp [new file with mode: 0644]
tests/src/cynara_mock.h [new file with mode: 0644]
tests/src/main.cpp [new file with mode: 0644]
tests/src/system_info_mock.cpp [new file with mode: 0644]
tests/src/system_info_mock.h [new file with mode: 0644]
tests/src/vc_elm_unittests.cpp [new file with mode: 0644]

index 3cbdc8f..81e570c 100644 (file)
@@ -135,3 +135,13 @@ INSTALL(FILES      ${PROJECT_SOURCE_DIR}/data/image.png
 INSTALL(FILES  ${PROJECT_SOURCE_DIR}/voice-control-elm-config.xml
        DESTINATION ${TZ_SYS_RO_SHARE}/voice/vc-elm/1.0)
 
+
+## Test
+IF(NOT DEFINED MINIMUM_BUILD)
+ENABLE_TESTING()
+SET(UNITTEST_VC_ELM vc-elm-unittests)
+ADD_TEST(NAME ${UNITTEST_VC_ELM} COMMAND ${UNITTEST_VC_ELM}
+                                    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests)
+
+ADD_SUBDIRECTORY(tests)
+ENDIF(NOT DEFINED MINIMUM_BUILD)
index eca8cbc..01031a2 100644 (file)
@@ -26,6 +26,7 @@ BuildRequires:        pkgconfig(libxml-2.0)
 BuildRequires: pkgconfig(voice-control-widget)
 BuildRequires: pkgconfig(vconf)
 BuildRequires: gettext-tools
+BuildRequires: pkgconfig(gmock)
 
 Requires(post):   /sbin/ldconfig
 Requires(postun): /sbin/ldconfig
@@ -49,6 +50,14 @@ Group:               Graphics & UI Framework/Voice Framework
 voice-control-elm gcov objects
 %endif
 
+%package unittests
+Summary:    voice-control-elm tests
+Group:      Development/Libraries
+Requires:   %{name} = %{version}
+
+%description unittests
+voice-control-elm gtests
+
 %prep
 %setup -q
 cp %{SOURCE1001} %{SOURCE1002} .
@@ -57,6 +66,8 @@ cp %{SOURCE1001} %{SOURCE1002} .
 export LDFLAGS+=" -Wl,--rpath=%{_libdir} -Wl,--hash-style=both -Wl,--as-needed"
 
 %if 0%{?gcov:1}
+export CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage -DTIZEN_TEST_GCOV"
+export CXXFLAGS="$CXXFLAGS -fprofile-arcs -ftest-coverage -DTIZEN_TEST_GCOV"
 export CFLAGS+=" -fprofile-arcs -ftest-coverage"
 export CXXFLAGS+=" -fprofile-arcs -ftest-coverage"
 export LDFLAGS+=" -lgcov"
@@ -73,6 +84,8 @@ MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'`
        -DLIBDIR=%{_libdir} \
        -DINCLUDEDIR=%{_includedir} \
        -DTZ_SYS_RO_SHARE=%TZ_SYS_RO_SHARE \
+       -DTZ_SYS_RO_PACKAGES=%TZ_SYS_RO_PACKAGES \
+       -DTZ_SYS_RO_APP=%TZ_SYS_RO_APP \
        -DTZ_SYS_BIN=%TZ_SYS_BIN \
        -DCMAKE_BUILD_TYPE=Debug \
        -DMAJORVER=${MAJORVER} \
@@ -84,6 +97,8 @@ MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'`
        -DLIBDIR=%{_libdir} \
        -DINCLUDEDIR=%{_includedir} \
        -DTZ_SYS_RO_SHARE=%TZ_SYS_RO_SHARE \
+       -DTZ_SYS_RO_PACKAGES=%TZ_SYS_RO_PACKAGES \
+       -DTZ_SYS_RO_APP=%TZ_SYS_RO_APP \
        -DTZ_SYS_BIN=%TZ_SYS_BIN \
        -DCMAKE_BUILD_TYPE=Debug \
        -DMAJORVER=${MAJORVER} \
@@ -105,6 +120,36 @@ mkdir -p "$gcno_obj_dir"
 find . -name '*.gcno' -exec cp --parents '{}' "$gcno_obj_dir" ';'
 %endif
 
+cat << EOF > run-unittest.sh
+#!/bin/sh
+setup() {
+    echo "setup start"
+    touch /opt/share/askuser_disable
+    mount -o remount,rw /
+    tpk-backend --preload -y org.tizen.vc-elm-unittests
+}
+
+test_main() {
+    echo "test_main start"
+    launch_app org.tizen.vc-elm-unittests
+}
+
+teardown() {
+    echo "teardown start"
+}
+
+main() {
+    setup
+    test_main
+    teardown
+}
+
+main "\$*"
+EOF
+
+mkdir -p %{buildroot}%{_bindir}/tizen-unittests/%{name}
+install -m 0755 run-unittest.sh %{buildroot}%{_bindir}/tizen-unittests/%{name}
+
 %clean
 rm -rf %{buildroot}
 
@@ -137,3 +182,10 @@ mkdir -p %{TZ_SYS_RO_SHARE}/voice
 %files gcov
 %{_datadir}/gcov/obj/*
 %endif
+
+%files unittests
+%manifest tests/org.tizen.vc-elm-unittests.manifest
+%defattr(-,root,root,-)
+%{TZ_SYS_RO_PACKAGES}/org.tizen.vc-elm-unittests.xml
+%{TZ_SYS_RO_APP}/org.tizen.vc-elm-unittests/bin/vc-elm-unittests
+%{_bindir}/tizen-unittests/%{name}/run-unittest.sh
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
new file mode 100644 (file)
index 0000000..d128051
--- /dev/null
@@ -0,0 +1,54 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(gtest-voice-control-elm CXX)
+
+SET(PKGNAME "org.tizen.vc-elm-unittests")
+SET(BINDIR "${TZ_SYS_RO_APP}/${PKGNAME}/bin")
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(test_pkgs REQUIRED
+       vconf
+       capi-system-info
+       glib-2.0
+       elementary
+       ecore
+       dlog
+       gmock
+)
+
+FOREACH(flag ${test_pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -Wall")
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fPIE")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
+
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -std=c++11")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS}")
+
+SET(SOURCES "")
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../include)
+
+AUX_SOURCE_DIRECTORY(src SOURCES)
+
+ADD_DEFINITIONS("-DFULLVER=\"${FULLVER}\"")
+
+ADD_EXECUTABLE(${UNITTEST_VC_ELM}
+       ${SOURCES}
+       )
+
+TARGET_LINK_LIBRARIES(${UNITTEST_VC_ELM} vc-elm -ldl ${test_pkgs_LDFLAGS})
+TARGET_LINK_LIBRARIES(${UNITTEST_VC_ELM} ${GTEST_LIBRARIES} ${test_pkgs_LDFLAGS} ${EXTRA_LDFLAGS})
+SET_TARGET_PROPERTIES(${UNITTEST_VC_ELM} PROPERTIES
+       COMPILE_FLAGS "-fPIE"
+       #Never add any space for LINKFLAGS
+       LINK_FLAGS "-Wl,\
+--wrap=system_info_get_platform_bool,\
+--wrap=cynara_initialize,\
+--wrap=cynara_finish,\
+--wrap=cynara_session_from_pid,\
+--wrap=cynara_check")
+
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/tests/${PKGNAME}.xml DESTINATION ${TZ_SYS_RO_PACKAGES})
+INSTALL(TARGETS ${UNITTEST_VC_ELM} DESTINATION ${BINDIR})
diff --git a/tests/org.tizen.vc-elm-unittests.manifest b/tests/org.tizen.vc-elm-unittests.manifest
new file mode 100644 (file)
index 0000000..97e8c31
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+       <request>
+               <domain name="_"/>
+       </request>
+</manifest>
diff --git a/tests/org.tizen.vc-elm-unittests.xml b/tests/org.tizen.vc-elm-unittests.xml
new file mode 100644 (file)
index 0000000..eccabf8
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" api-version="3.0" package="org.tizen.vc-elm-unittests" version="0.6.2" install-location="internal-only">
+               <label>Voice Control Elm unittests</label>
+               <author email="dyamy.lee" href="www.samsung.com">Daye Lee</author>
+               <description>Voice Control Elm unittests</description>
+               <service-application appid="org.tizen.vc-elm-unittests" launch_mode="caller" exec="vc-elm-unittests" hw-acceleration="use-GL" nodisplay="true" multiple="false" type="capp" taskmanage="false">
+                       <label>Voice Control Elm unittests</label>
+                       <background-category value="assistant"/>
+                       <background-category value="media"/>
+               </service-application>
+               <privileges>
+                       <privilege>http://tizen.org/privilege/recorder</privilege>
+               </privileges>
+</manifest>
diff --git a/tests/src/cynara_mock.cpp b/tests/src/cynara_mock.cpp
new file mode 100644 (file)
index 0000000..858ebac
--- /dev/null
@@ -0,0 +1,42 @@
+#include "cynara_mock.h"
+#include <string.h>
+#include <stdio.h>
+#include <tizen.h>
+
+static int check_result = CYNARA_API_ACCESS_ALLOWED;
+
+void cynara_check_set_result(int result)
+{
+       check_result = result;
+}
+
+EXPORT_API int __wrap_cynara_initialize(cynara** c, const cynara_configuration* conf)
+{
+       *c = (void *)0x1;
+       (void)conf;
+       return 0;
+}
+
+EXPORT_API int __wrap_cynara_finish(cynara* c)
+{
+       (void)c;
+       return 0;
+}
+
+EXPORT_API int __wrap_cynara_check(cynara* c, const char* client, const char* client_session,
+       const char* user,
+       const char* privilege)
+{
+       (void)c;
+       (void)client;
+       (void)client_session;
+       (void)user;
+       (void)privilege;
+       return check_result;
+}
+
+EXPORT_API char *__wrap_cynara_session_from_pid(pid_t pid)
+{
+       (void)pid;
+       return strdup("session");
+}
diff --git a/tests/src/cynara_mock.h b/tests/src/cynara_mock.h
new file mode 100644 (file)
index 0000000..4f69b05
--- /dev/null
@@ -0,0 +1,87 @@
+#ifndef MOCK_CYNARA_H_
+#define MOCK_CYNARA_H_
+
+#include <sys/types.h>
+#include <unistd.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void cynara;
+typedef void* cynara_configuration;
+
+/*! \brief  indicating that API call was interrupted by user*/
+#define CYNARA_API_INTERRUPTED                  4
+
+/*! \brief  indicating access that cannot be resolved without further actions*/
+#define CYNARA_API_ACCESS_NOT_RESOLVED          3
+
+/*! \brief   indicating access that was checked is allowed */
+#define CYNARA_API_ACCESS_ALLOWED               2
+
+/*! \brief   indicating that access that was checked is denied */
+#define CYNARA_API_ACCESS_DENIED                1
+
+/*! \brief   indicating the result of the one specific API is successful */
+#define CYNARA_API_SUCCESS                      0
+
+/*! \brief   indicating that value is not present in cache */
+#define CYNARA_API_CACHE_MISS                   -1
+
+/*! \brief   indicating that pending requests reached maximum */
+#define CYNARA_API_MAX_PENDING_REQUESTS         -2
+
+/*! \brief   indicating system is running out of memory state */
+#define CYNARA_API_OUT_OF_MEMORY                -3
+
+/*! \brief   indicating the API's parameter is malformed */
+#define CYNARA_API_INVALID_PARAM                -4
+
+/*! \brief   indicating that service is not available */
+#define CYNARA_API_SERVICE_NOT_AVAILABLE        -5
+
+/*! \brief   indicating that provided method is not supported by library */
+#define CYNARA_API_METHOD_NOT_SUPPORTED         -6
+
+/*! \brief   cynara service does not allow to perform requested operation */
+#define CYNARA_API_OPERATION_NOT_ALLOWED        -7
+
+/*! \brief   cynara service failed to perform requested operation */
+#define CYNARA_API_OPERATION_FAILED             -8
+
+/*! \brief   cynara service hasn't found requested bucket */
+#define CYNARA_API_BUCKET_NOT_FOUND             -9
+
+/*! \brief   indicating an unknown error */
+#define CYNARA_API_UNKNOWN_ERROR                -10
+
+/*! \brief   indicating configuration error */
+#define CYNARA_API_CONFIGURATION_ERROR          -11
+
+/*! \brief   indicating invalid parameter in command-line */
+#define CYNARA_API_INVALID_COMMANDLINE_PARAM    -12
+
+/*! \brief   indicating that provided buffer is too short */
+#define CYNARA_API_BUFFER_TOO_SHORT             -13
+
+/*! \brief   indicating that database is corrupted */
+#define CYNARA_API_DATABASE_CORRUPTED           -14
+
+/*! \brief   indicating that user doesn't have enough permission to perform action */
+#define CYNARA_API_PERMISSION_DENIED            -15
+
+void cynara_check_set_result(int result);
+
+int __wrap_cynara_initialize(cynara** c, const cynara_configuration* conf);
+int __wrap_cynara_finish(cynara* c);
+int __wrap_cynara_check(cynara* c, const char* client, const char* client_session,
+                                               const char* user,
+                                               const char* privilege);
+
+char *__wrap_cynara_session_from_pid(pid_t pid);
+
+#ifdef __cplusplus
+}
+#endif
+#endif  /* MOCK_CYNARA_H_ */
diff --git a/tests/src/main.cpp b/tests/src/main.cpp
new file mode 100644 (file)
index 0000000..2c6dd7b
--- /dev/null
@@ -0,0 +1,22 @@
+#include <gtest/gtest.h>
+#include <gmock/gmock.h>
+
+
+#ifdef TIZEN_TEST_GCOV
+extern "C" void __gcov_flush(void);
+#endif
+
+int main(int argc, char** argv) {
+#ifdef TIZEN_TEST_GCOV
+       setenv("GCOV_PREFIX", "/tmp", 1);
+#endif
+
+       testing::InitGoogleTest(&argc, argv);
+       auto testResults = RUN_ALL_TESTS();
+
+#ifdef TIZEN_TEST_GCOV
+       __gcov_flush();
+#endif
+
+       return testResults;
+}
diff --git a/tests/src/system_info_mock.cpp b/tests/src/system_info_mock.cpp
new file mode 100644 (file)
index 0000000..834f3d4
--- /dev/null
@@ -0,0 +1,12 @@
+#include "system_info_mock.h"
+#include <stdio.h>
+#include <tizen.h>
+
+EXPORT_API int __wrap_system_info_get_platform_bool(const char *key, bool *value)
+{
+       (void)key;
+       if (value)
+               *value = true;
+
+       return 0;
+}
diff --git a/tests/src/system_info_mock.h b/tests/src/system_info_mock.h
new file mode 100644 (file)
index 0000000..075c93b
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef MOCK_SYSTEM_INFO_H_
+#define MOCK_SYSTEM_INFO_H_
+
+#include <sys/types.h>
+#include <unistd.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int __wrap_system_info_get_platform_bool(const char *key, bool *value);
+
+#ifdef __cplusplus
+}
+#endif
+#endif  /* MOCK_SYSTEM_INFO_H_ */
diff --git a/tests/src/vc_elm_unittests.cpp b/tests/src/vc_elm_unittests.cpp
new file mode 100644 (file)
index 0000000..9c44fba
--- /dev/null
@@ -0,0 +1,2197 @@
+/*
+ * Copyright (c) 2022 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 <gtest/gtest.h>
+#include <Ecore.h>
+#include <system_info.h>
+
+#include <voice_control_elm.h>
+#include "system_info_mock.h"
+#include "cynara_mock.h"
+
+static int g_vc_elm_init = false;
+static bool g_vc_elm_supported = false;
+
+namespace {
+
+class VCElmTest : public testing::Test {
+       public:
+               virtual void SetUp() {
+                       ecore_init();
+
+                       cynara_check_set_result(CYNARA_API_ACCESS_ALLOWED);
+
+                       int ret = VC_ELM_ERROR_NONE;
+                       int i;
+
+                       bool mic_supported = false;
+                       bool vc_supported = false;
+                       g_vc_elm_supported = false;
+                       if (0 == system_info_get_platform_bool("http://tizen.org/feature/speech.control", &vc_supported)) {
+                               if (0 == system_info_get_platform_bool("http://tizen.org/feature/microphone", &mic_supported)) {
+                                       if (true == vc_supported && true == mic_supported) {
+                                               g_vc_elm_supported = true;
+                                       }
+                               }
+                       }
+
+                       g_vc_elm_init = false;
+                       elm_init(0,NULL);
+                       ret = vc_elm_initialize();
+                       for (i = 0; i < 20; i++)
+                               ecore_main_loop_iterate();
+
+                       if (VC_ELM_ERROR_NONE == ret) {
+                               g_vc_elm_init = true;
+                       } else {
+                               g_vc_elm_init = false;
+                       }
+               }
+
+               virtual void TearDown() {
+                       int i;
+                       for (i = 0; i < 30; i++)
+                               ecore_main_loop_iterate();
+
+                       vc_elm_deinitialize();
+                       elm_shutdown();
+
+                       g_vc_elm_init = false;
+
+                       ecore_shutdown();
+               }
+};
+
+static bool _vc_elm_supported_language_cb(const char *language, void *user_data)
+{
+       (void)language;
+       (void)user_data;
+       return true;
+}
+
+static bool _vc_elm_widget_cb(const char *widget, void *user_data)
+{
+       (void)widget;
+       (void)user_data;
+       return false;
+}
+
+static bool _vc_elm_action_cb(const char *action, void *user_data)
+{
+       (void)action;
+       (void)user_data;
+       return false;
+}
+
+static void _vc_elm_current_language_changed_cb(const char *previous, const char *current, void *user_data)
+{
+       (void)previous;
+       (void)current;
+       (void)user_data;
+}
+
+/**
+ * @testcase           utc_vc_elm_initialize_p
+ * @since_tizen                2.4
+ * @description                test whether vc-elm is initialized properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_initialize_p)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_initialize_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error when vc-elm is already initialized.
+ */
+TEST_F(VCElmTest, utc_vc_elm_initialize_n)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_initialize();
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_STATE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_deinitialize_p
+ * @since_tizen                2.4
+ * @description                test whether vc-elm is deinitialized properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_deinitialize_p)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_deinitialize();
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_deinitialize();
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_deinitialize_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error when vc-elm is already deinitialized.
+ */
+TEST_F(VCElmTest, utc_vc_elm_deinitialize_n)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_deinitialize();
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_deinitialize();
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_deinitialize();
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_STATE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_foreach_supported_languages_p
+ * @since_tizen                2.4
+ * @description                test whether it is to get each supported languages properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_foreach_supported_languages_p)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_foreach_supported_languages(_vc_elm_supported_language_cb, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_foreach_supported_languages(_vc_elm_supported_language_cb, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_foreach_supported_languages_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL as callback function pointer.
+ */
+TEST_F(VCElmTest, utc_vc_elm_foreach_supported_languages_n)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_foreach_supported_languages(NULL, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_foreach_supported_languages(NULL, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_foreach_supported_languages_n2
+ * @since_tizen                2.4
+ * @description                test whether function returns error when vc-elm is not initialized.
+ */
+TEST_F(VCElmTest, utc_vc_elm_foreach_supported_languages_n2)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_foreach_supported_languages(_vc_elm_supported_language_cb, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_deinitialize();
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_foreach_supported_languages(_vc_elm_supported_language_cb, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_STATE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_get_current_language_p
+ * @since_tizen                2.4
+ * @description                test whether it is to get current language properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_get_current_language_p)
+{
+       char *current_language = NULL;
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_current_language(&current_language);
+               if (NULL != current_language) {
+                       free(current_language);
+                       current_language = NULL;
+               }
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_current_language(&current_language);
+               if (NULL != current_language) {
+                       free(current_language);
+                       current_language = NULL;
+               }
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_voice_control_elm_vc_elm_get_current_language_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL parameter.
+ */
+TEST_F(VCElmTest, utc_vc_elm_get_current_language_n)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_current_language(NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_current_language(NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+       }
+}
+
+/**
+ * @testcase           utc_voice_control_elm_vc_elm_get_current_language_n2
+ * @since_tizen                2.4
+ * @description                test whether function returns error when vc-elm is already deinitialized.
+ */
+TEST_F(VCElmTest, utc_vc_elm_get_current_language_n2)
+{
+       char *current_language = NULL;
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_current_language(&current_language);
+               if (NULL != current_language) {
+                       free(current_language);
+                       current_language = NULL;
+               }
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_deinitialize();
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_get_current_language(&current_language);
+               if (NULL != current_language) {
+                       free(current_language);
+                       current_language = NULL;
+               }
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_STATE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_foreach_supported_widgets_p
+ * @since_tizen                2.4
+ * @description                test whether it is to get each supported widgets properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_foreach_supported_widgets_p)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_foreach_supported_languages(_vc_elm_widget_cb, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_foreach_supported_languages(_vc_elm_widget_cb, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_foreach_supported_widgets_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL as callback function pointer.
+ */
+TEST_F(VCElmTest, utc_vc_elm_foreach_supported_widgets_n)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_foreach_supported_languages(NULL, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_foreach_supported_languages(NULL, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_foreach_supported_widgets_n2
+ * @since_tizen                2.4
+ * @description                test whether function returns error when vc-elm is not initialized.
+ */
+TEST_F(VCElmTest, utc_vc_elm_foreach_supported_widgets_n2)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_foreach_supported_languages(_vc_elm_widget_cb, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_deinitialize();
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_foreach_supported_languages(_vc_elm_widget_cb, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_STATE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_foreach_supported_actions_p
+ * @since_tizen                2.4
+ * @description                test whether it is to get each supported actions properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_foreach_supported_actions_p)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_foreach_supported_actions("Elm_List", _vc_elm_action_cb, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_foreach_supported_actions("Elm_List", _vc_elm_action_cb, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_foreach_supported_actions_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL as callback function pointer.
+ */
+TEST_F(VCElmTest, utc_vc_elm_foreach_supported_actions_n)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_foreach_supported_actions("Elm_List", NULL, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_foreach_supported_actions("Elm_List", NULL, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_foreach_supported_actions_n2
+ * @since_tizen                2.4
+ * @description                test whether function returns error when vc-elm is not initialized.
+ */
+TEST_F(VCElmTest, utc_vc_elm_foreach_supported_actions_n2)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_foreach_supported_actions("Elm_List", _vc_elm_action_cb, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_deinitialize();
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_foreach_supported_actions("Elm_List", _vc_elm_action_cb, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_STATE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_foreach_supported_actions_n3
+ * @since_tizen                2.4
+ * @description                test whether function returns error when widget is not supported.
+ */
+TEST_F(VCElmTest, utc_vc_elm_foreach_supported_actions_n3)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_foreach_supported_actions("Elm_None", _vc_elm_action_cb, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_foreach_supported_actions("Elm_None", _vc_elm_action_cb, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_OPERATION_FAILED);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_get_action_command_p
+ * @since_tizen                2.4
+ * @description                test whether it is to get action command properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_get_action_command_p)
+{
+       char *command = NULL;
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_action_command("scroll_up", &command);
+               if (NULL != command) {
+                       free(command);
+                       command = NULL;
+               }
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_action_command("scroll_up", &command);
+               if (NULL != command) {
+                       free(command);
+                       command = NULL;
+               }
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_get_action_command_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL as action and command parameter.
+ */
+TEST_F(VCElmTest, utc_vc_elm_get_action_command_n)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_action_command(NULL, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_action_command(NULL, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_get_action_command_n2
+ * @since_tizen                2.4
+ * @description                test whether function returns error when vc-elm is not initialized.
+ */
+TEST_F(VCElmTest, utc_vc_elm_get_action_command_n2)
+{
+       char *command = NULL;
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_action_command("scroll_up", &command);
+               if (NULL != command) {
+                       free(command);
+                       command = NULL;
+               }
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_deinitialize();
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_get_action_command("scroll_up", &command);
+               if (NULL != command) {
+                       free(command);
+                       command = NULL;
+               }
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_STATE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_get_action_command_n3
+ * @since_tizen                2.4
+ * @description                test whether function returns error when action is not supported.
+ */
+TEST_F(VCElmTest, utc_vc_elm_get_action_command_n3)
+{
+       char *command = NULL;
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_action_command("no_command", &command);
+               if (NULL != command) {
+                       free(command);
+                       command = NULL;
+               }
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_action_command("no_command", &command);
+               if (NULL != command) {
+                       free(command);
+                       command = NULL;
+               }
+               EXPECT_EQ(ret, VC_ELM_ERROR_OPERATION_FAILED);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_create_object_p
+ * @since_tizen                2.4
+ * @description                test whether it is to create handle for button object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_create_object_p)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_button_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_create_object_p2
+ * @since_tizen                2.4
+ * @description                test whether it is to create handle for checkbox object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_create_object_p2)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_check_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_create_object_p3
+ * @since_tizen                2.4
+ * @description                test whether it is to create handle for radio button object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_create_object_p3)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_radio_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_create_object_p4
+ * @since_tizen                2.4
+ * @description                test whether it is to create handle for slider object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_create_object_p4)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_slider_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_create_object_p5
+ * @since_tizen                2.4
+ * @description                test whether it is to create handle for spinner object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_create_object_p5)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_spinner_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_create_object_p6
+ * @since_tizen                2.4
+ * @description                test whether it is to create handle for entry object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_create_object_p6)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_entry_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_create_object_p7
+ * @since_tizen                2.4
+ * @description                test whether it is to create handle for scroller object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_create_object_p7)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_scroller_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_create_object_p8
+ * @since_tizen                2.4
+ * @description                test whether it is to create handle for label object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_create_object_p8)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_label_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_create_object_p9
+ * @since_tizen                2.4
+ * @description                test whether it is to create handle for genlist object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_create_object_p9)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_genlist_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_create_object_p10
+ * @since_tizen                2.4
+ * @description                test whether it is to create handle for gengrid object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_create_object_p10)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_gengrid_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_create_object_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL as handler parameter.
+ */
+TEST_F(VCElmTest, utc_vc_elm_create_object_n)
+{
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_button_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_create_object_n2
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL as object parameter.
+ */
+TEST_F(VCElmTest, utc_vc_elm_create_object_n2)
+{
+       vc_elm_h handler = NULL;
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(NULL, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(NULL, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_create_object_n3
+ * @since_tizen                2.4
+ * @description                test whether function returns error when vc-elm is not initialized.
+ */
+TEST_F(VCElmTest, utc_vc_elm_create_object_n3)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_button_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_deinitialize();
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_STATE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_create_item_p
+ * @since_tizen                2.4
+ * @description                test whether it is to create handle for item object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_create_item_p)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* glist = elm_list_add(win);
+       Elm_Object_Item *it = elm_list_item_append(glist, "test", NULL, NULL, NULL, NULL);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+               EXPECT_NE(it, nullptr);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_item(it, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+               EXPECT_NE(it, nullptr);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_item(it, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_create_item_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL as handler parameter.
+ */
+TEST_F(VCElmTest, utc_vc_elm_create_item_n)
+{
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* glist = elm_list_add(win);
+       Elm_Object_Item *it = elm_list_item_append(glist, "test", NULL, NULL, NULL, NULL);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+               EXPECT_NE(it, nullptr);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_item(it, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+               EXPECT_NE(it, nullptr);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_item(it, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_create_item_n2
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL as item object parameter.
+ */
+TEST_F(VCElmTest, utc_vc_elm_create_item_n2)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* glist = elm_list_add(win);
+       Elm_Object_Item *it = elm_list_item_append(glist, "test", NULL, NULL, NULL, NULL);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+               EXPECT_NE(it, nullptr);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_item(NULL, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+               EXPECT_NE(it, nullptr);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_item(NULL, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_create_item_n3
+ * @since_tizen                2.4
+ * @description                test whether function returns error when vc-elm is not initialized.
+ */
+TEST_F(VCElmTest, utc_vc_elm_create_item_n3)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* glist = elm_list_add(win);
+       Elm_Object_Item *it = elm_list_item_append(glist, "test", NULL, NULL, NULL, NULL);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_item(it, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_deinitialize();
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(it, nullptr);
+
+               ret = vc_elm_create_item(it, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_STATE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_destroy_p
+ * @since_tizen                2.4
+ * @description                test whether it is to destroy handle for object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_destroy_p)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_button_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_destroy_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL as handler parameter.
+ */
+TEST_F(VCElmTest, utc_vc_elm_destroy_n)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_button_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_destroy(NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_destroy_n2
+ * @since_tizen                2.4
+ * @description                test whether function returns error when try to destroy handle that is not created.
+ */
+ TEST_F(VCElmTest, utc_vc_elm_destroy_n2)
+{
+       vc_elm_h handler = NULL;
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_set_command_p
+ * @since_tizen                2.4
+ * @description                test whether it is to set command on object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_set_command_p)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_button_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_command(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_set_command(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_set_command_p2
+ * @since_tizen                2.4
+ * @description                test whether it is to set command on item object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_set_command_p2)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* glist = elm_list_add(win);
+       Elm_Object_Item *it = elm_list_item_append(glist, "test", NULL, NULL, NULL, NULL);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_command(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+               EXPECT_NE(it, nullptr);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_item(it, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_set_command(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_set_command_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL as handler parameter.
+ */
+TEST_F(VCElmTest, utc_vc_elm_set_command_n)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_command(NULL, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_command(NULL, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_unset_command_p
+ * @since_tizen                2.4
+ * @description                test whether it is to unset command on object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_unset_command_p)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_button_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_unset_command(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_set_command(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_unset_command(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_unset_command_p2
+ * @since_tizen                2.4
+ * @description                test whether it is to unset command on item object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_unset_command_p2)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* glist = elm_list_add(win);
+       Elm_Object_Item *it = elm_list_item_append(glist, "test", NULL, NULL, NULL, NULL);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_unset_command(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+               EXPECT_NE(it, nullptr);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_item(it, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_set_command(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_unset_command(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_unset_command_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL as handler parameter.
+ */
+TEST_F(VCElmTest, utc_vc_elm_unset_command_n)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_unset_command(NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_unset_command(NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_set_command_hint_p
+ * @since_tizen                2.4
+ * @description                test whether it is to set command hint on object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_set_command_hint_p)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_button_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_command_hint(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_set_command(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_set_command_hint_p2
+ * @since_tizen                2.4
+ * @description                test whether it is to set command hint on item object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_set_command_hint_p2)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* glist = elm_list_add(win);
+       Elm_Object_Item *it = elm_list_item_append(glist, "test", NULL, NULL, NULL, NULL);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_command_hint(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+               EXPECT_NE(it, nullptr);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_item(it, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_set_command(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_set_command_hint_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL as handler parameter.
+ */
+TEST_F(VCElmTest, utc_vc_elm_set_command_hint_n)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_command_hint(NULL, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_command_hint(NULL, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_unset_command_hint_p
+ * @since_tizen                2.4
+ * @description                test whether it is to unset command hint on object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_unset_command_hint_p)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_button_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_unset_command_hint(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_set_command(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_unset_command_hint(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_unset_command_hint_p2
+ * @since_tizen                2.4
+ * @description                test whether it is to unset command hint on item object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_unset_command_hint_p2)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* glist = elm_list_add(win);
+       Elm_Object_Item *it = elm_list_item_append(glist, "test", NULL, NULL, NULL, NULL);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_unset_command_hint(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+               EXPECT_NE(it, nullptr);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_item(it, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_set_command(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_unset_command_hint(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_unset_command_hint_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL as handler parameter.
+ */
+TEST_F(VCElmTest, utc_vc_elm_unset_command_hint_n)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_unset_command_hint(NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_unset_command_hint(NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_set_command_hint_direction_p
+ * @since_tizen                2.4
+ * @description                test whether it is to set command hint direction on object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_set_command_hint_direction_p)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_button_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_command_hint_direction(handler, VC_ELM_DIRECTION_TOP);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_set_command(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint_direction(handler, VC_ELM_DIRECTION_TOP);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_set_command_hint_direction_p2
+ * @since_tizen                2.4
+ * @description                test whether it is to set command hint direction on item object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_set_command_hint_direction_p2)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* glist = elm_list_add(win);
+       Elm_Object_Item *it = elm_list_item_append(glist, "test", NULL, NULL, NULL, NULL);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_command_hint_direction(handler, VC_ELM_DIRECTION_TOP);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+               EXPECT_NE(it, nullptr);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_item(it, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_set_command(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint_direction(handler, VC_ELM_DIRECTION_TOP);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_set_command_hint_direction_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL as handler parameter.
+ */
+TEST_F(VCElmTest, utc_vc_elm_set_command_hint_direction_n)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_command_hint_direction(NULL, VC_ELM_DIRECTION_TOP);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_command_hint_direction(NULL, VC_ELM_DIRECTION_TOP);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_get_command_hint_direction_p
+ * @since_tizen                2.4
+ * @description                test whether it is to get command hint direction on object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_get_command_hint_direction_p)
+{
+       vc_elm_h handler = NULL;
+       vc_elm_direction_e direction;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_button_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_command_hint_direction(handler, &direction);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_set_command(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint_direction(handler, VC_ELM_DIRECTION_TOP);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_get_command_hint_direction(handler, &direction);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_EQ(direction, VC_ELM_DIRECTION_TOP);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_get_command_hint_direction_p2
+ * @since_tizen                2.4
+ * @description                test whether it is to get command hint direction on item object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_get_command_hint_direction_p2)
+{
+       vc_elm_h handler = NULL;
+       vc_elm_direction_e direction;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* glist = elm_list_add(win);
+       Elm_Object_Item *it = elm_list_item_append(glist, "test", NULL, NULL, NULL, NULL);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_command_hint_direction(handler, &direction);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+               EXPECT_NE(it, nullptr);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_item(it, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_set_command(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint_direction(handler, VC_ELM_DIRECTION_TOP);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_get_command_hint_direction(handler, &direction);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_EQ(direction, VC_ELM_DIRECTION_TOP);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_get_command_hint_direction_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL as handler parameter.
+ */
+TEST_F(VCElmTest, utc_vc_elm_get_command_hint_direction_n)
+{
+       vc_elm_direction_e direction;
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_command_hint_direction(NULL, &direction);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_command_hint_direction(NULL, &direction);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_set_command_hint_offset_p
+ * @since_tizen                2.4
+ * @description                test whether it is to set command hint offset on object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_set_command_hint_offset_p)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_button_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_command_hint_offset(handler, 100, 100);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_set_command(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint_offset(handler, 100, 100);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_set_command_hint_offset_p2
+ * @since_tizen                2.4
+ * @description                test whether it is to set command hint offset on item object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_set_command_hint_offset_p2)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* glist = elm_list_add(win);
+       Elm_Object_Item *it = elm_list_item_append(glist, "test", NULL, NULL, NULL, NULL);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_command_hint_offset(handler, 100, 100);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+               EXPECT_NE(it, nullptr);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_item(it, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_set_command(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint_offset(handler, 100, 100);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_set_command_hint_offset_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL as handler parameter.
+ */
+TEST_F(VCElmTest, utc_vc_elm_set_command_hint_offset_n)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_command_hint_offset(NULL, 100, 100);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_command_hint_offset(NULL, 100, 100);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_get_command_hint_offset_p
+ * @since_tizen                2.4
+ * @description                test whether it is to get command hint offset on object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_get_command_hint_offset_p)
+{
+       int x, y;
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_button_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_command_hint_offset(handler, &x, &y);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_set_command(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint_offset(handler, 100, 100);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_get_command_hint_offset(handler, &x, &y);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_EQ(x, 100);
+               EXPECT_EQ(y, 100);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_get_command_hint_offset_p2
+ * @since_tizen                2.4
+ * @description                test whether it is to get command hint offset on item object properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_get_command_hint_offset_p2)
+{
+       int x, y;
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* glist = elm_list_add(win);
+       Elm_Object_Item *it = elm_list_item_append(glist, "test", NULL, NULL, NULL, NULL);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_command_hint_offset(handler, &x, &y);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+               EXPECT_NE(it, nullptr);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_item(it, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_set_command(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint(handler, "TEST");
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_command_hint_offset(handler, 100, 100);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_get_command_hint_offset(handler, &x, &y);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_EQ(x, 100);
+               EXPECT_EQ(y, 100);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_get_command_hint_offset_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL as handler parameter.
+ */
+TEST_F(VCElmTest, utc_vc_elm_get_command_hint_offset_n)
+{
+       int x, y;
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_command_hint_offset(NULL, &x, &y);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_command_hint_offset(NULL, &x, &y);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_get_command_hint_offset_n2
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL as position x and y.
+ */
+TEST_F(VCElmTest, utc_vc_elm_get_command_hint_offset_n2)
+{
+       vc_elm_h handler = NULL;
+       Evas_Object* win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
+       Evas_Object* object = elm_button_add(win);
+
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_get_command_hint_offset(handler, NULL, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_create_object(object, &handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+               EXPECT_NE(handler, nullptr);
+
+               ret = vc_elm_get_command_hint_offset(handler, NULL, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_PARAMETER);
+
+               ret = vc_elm_destroy(handler);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_set_current_language_changed_cb_p
+ * @since_tizen                2.4
+ * @description                test whether it is to set current_language_changed callback function properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_set_current_language_changed_cb_p)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_current_language_changed_cb(_vc_elm_current_language_changed_cb, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_current_language_changed_cb(_vc_elm_current_language_changed_cb, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_set_current_language_changed_cb_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error with NULL as callback pointer.
+ */
+TEST_F(VCElmTest, utc_vc_elm_set_current_language_changed_cb_n)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_current_language_changed_cb(NULL, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_current_language_changed_cb(NULL, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_OPERATION_FAILED);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_set_current_language_changed_cb_n2
+ * @since_tizen                2.4
+ * @description                test whether function returns error when vc-elm is not initialized.
+ */
+TEST_F(VCElmTest, utc_vc_elm_set_current_language_changed_cb_n2)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_current_language_changed_cb(_vc_elm_current_language_changed_cb, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_deinitialize();
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_set_current_language_changed_cb(_vc_elm_current_language_changed_cb, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_STATE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_unset_current_language_changed_cb_p
+ * @since_tizen                2.4
+ * @description                test whether it is to unset current_language_changed callback function properly.
+ */
+TEST_F(VCElmTest, utc_vc_elm_unset_current_language_changed_cb_p)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_unset_current_language_changed_cb();
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_set_current_language_changed_cb(_vc_elm_current_language_changed_cb, NULL);
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_unset_current_language_changed_cb();
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_unset_current_language_changed_cb_n
+ * @since_tizen                2.4
+ * @description                test whether function returns error when current_language_changed callback is not set.
+ */
+TEST_F(VCElmTest, utc_vc_elm_unset_current_language_changed_cb_n)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_unset_current_language_changed_cb();
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_unset_current_language_changed_cb();
+               EXPECT_NE(ret, VC_ELM_ERROR_NONE);
+       }
+}
+
+/**
+ * @testcase           utc_vc_elm_unset_current_language_changed_cb_n2
+ * @since_tizen                2.4
+ * @description                test whether function returns error when vc-elm is not initialized.
+ */
+TEST_F(VCElmTest, utc_vc_elm_unset_current_language_changed_cb_n2)
+{
+       if (false == g_vc_elm_supported) {
+               EXPECT_EQ(g_vc_elm_init, false);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_unset_current_language_changed_cb();
+               EXPECT_EQ(ret, VC_ELM_ERROR_NOT_SUPPORTED);
+       } else {
+               EXPECT_EQ(g_vc_elm_init, true);
+
+               int ret = VC_ELM_ERROR_NONE;
+               ret = vc_elm_deinitialize();
+               EXPECT_EQ(ret, VC_ELM_ERROR_NONE);
+
+               ret = vc_elm_unset_current_language_changed_cb();
+               EXPECT_EQ(ret, VC_ELM_ERROR_INVALID_STATE);
+       }
+}
+
+} // namespace