--- /dev/null
+/*
+ * Copyright (c) 2023 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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 <bundle_cpp.h>
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+#include <iostream>
+#include <stdexcept>
+
+#include <fstream>
+#include <string>
+
+#include "debugger_info.hh"
+#include "launcher_info.hh"
+#include "loader_info.hh"
+
+using ::testing::AtLeast;
+using namespace launchpad;
+
+class LaunchpadTest : public ::testing::Test {
+ public:
+ virtual void SetUp() {
+ std::ofstream of;
+ of.open(test_debugger);
+ of << test_debugger;
+ of.close();
+
+ of.open(test_launcher);
+ of << test_launcher;
+ of.close();
+
+ of.open(test_loader);
+ of << test_loader;
+ of.close();
+
+ of.open(test_debugger_info_file);
+ of << R"__test(
+[DEBUGGER]
+NAME DEBUG
+EXE test_debugger
+APP_TYPE capp|c++app
+EXTRA_KEY __DLP_DEBUG_ARG__
+DEFAULT_OPT --wrapper
+DEFAULT_OPT env
+DEFAULT_OPT OPENSSL_armcap=0
+DEFAULT_OPT --
+)__test";
+ of.close();
+
+ of.open(test_launcher_info_file);
+ of << R"__test(
+[LAUNCHER]
+NAME dotnet-launcher
+EXE test_launcher
+APP_TYPE dotnet
+EXTRA_ARG --PADDING_TO_CHANGE_CMDLINE_PADDING_TO_CHANGE_CMDLINE_PADDING_TO_CHANGE_CMDLINE_PADDING_TO_CHANGE_CMDLINE
+EXTRA_ARG --profile
+EXTRA_ARG --appType
+EXTRA_ARG dotnet
+EXTRA_ARG TIZEN_UIFW
+EXTRA_ARG ElmSharp
+EXTRA_ARG --standalone
+)__test";
+ of.close();
+
+ of.open(test_loader_info_file);
+ of << R"__test(
+[LOADER]
+NAME hw-loader1
+EXE /usr/bin/launchpad-loader
+APP_TYPE capp|c++app
+HW_ACC ON
+DETECTION_METHOD TIMEOUT|VISIBILITY
+TIMEOUT 5000
+EXTRA loader_type hw-loader
+EXTRA_ARRAY preload
+EXTRA_ARRAY_VAL /usr/lib/libappcore-efl.so.1
+EXTRA_ARRAY_VAL /usr/lib/libappcore-common.so.1
+EXTRA_ARRAY_VAL /usr/lib/libcapi-appfw-application.so.0
+EXTRA_ARRAY_VAL /usr/lib/ecore_imf/modules/wayland/v-1.25/module.so
+EXTRA_ARRAY_VAL /usr/lib/libdali-toolkit.so
+EXTRA_ARRAY_VAL /usr/lib/libcairo.so.2
+EXTRA_ARRAY_VAL /usr/lib/libcapi-media-player.so.0
+EXTRA_ARRAY_VAL /usr/lib/libcapi-media-camera.so.0
+EXTRA_ARRAY_VAL /usr/lib/ecore_evas/engines/extn/v-1.25/module.so
+ALTERNATIVE_LOADER common-loader1
+EXTRA threads 7
+
+)__test";
+ of.close();
+ }
+
+ virtual void TearDown() {}
+
+ private:
+ const std::string test_debugger = "test_debugger";
+ const std::string test_launcher = "test_launcher";
+ const std::string test_loader = "test_loader";
+ const std::string test_debugger_info_file = "test.debugger";
+ const std::string test_launcher_info_file = "test.launcher";
+ const std::string test_loader_info_file = "test.loader";
+};
+
+TEST_F(LaunchpadTest, DebuggerInfoTest) {
+ /* Test debugger info file
+ [DEBUGGER]
+ NAME DEBUG
+ EXE test_debugger
+ APP_TYPE capp|c++app
+ EXTRA_KEY __DLP_DEBUG_ARG__
+ DEFAULT_OPT --wrapper
+ DEFAULT_OPT env
+ DEFAULT_OPT OPENSSL_armcap=0
+ DEFAULT_OPT --
+ */
+
+ DebuggerInfoInflator inflator;
+ auto list = inflator.Inflate(".");
+ EXPECT_EQ(list.size(), 1);
+ auto info = std::move(list.front());
+ EXPECT_EQ(info->GetName(), "DEBUG");
+ EXPECT_EQ(info->GetExe(), "test_debugger");
+ EXPECT_EQ(info->GetAppTypes().size(), 2);
+ EXPECT_EQ(info->GetAppTypes()[0], "capp");
+ EXPECT_EQ(info->GetAppTypes()[1], "c++app");
+ EXPECT_EQ(info->GetExtraKeyList().size(), 1);
+ EXPECT_EQ(info->GetExtraKeyList()[0], "__DLP_DEBUG_ARG__");
+ EXPECT_EQ(info->GetDefaultOptList().size(), 4);
+ EXPECT_EQ(info->GetDefaultOptList()[0], "--wrapper");
+ EXPECT_EQ(info->GetDefaultOptList()[1], "env");
+ EXPECT_EQ(info->GetDefaultOptList()[2], "OPENSSL_armcap=0");
+ EXPECT_EQ(info->GetDefaultOptList()[3], "--");
+}
+
+TEST_F(LaunchpadTest, LauncherInfoTest) {
+ /* Test launcher info file
+ [LAUNCHER]
+ NAME dotnet-launcher
+ EXE test_launcher
+ APP_TYPE dotnet
+ EXTRA_ARG
+ --PADDING_TO_CHANGE_CMDLINE_PADDING_TO_CHANGE_CMDLINE_PADDING_TO_CHANGE_CMDLINE_PADDING_TO_CHANGE_CMDLINE
+ EXTRA_ARG --profile
+ EXTRA_ARG --appType
+ EXTRA_ARG dotnet
+ EXTRA_ARG TIZEN_UIFW
+ EXTRA_ARG ElmSharp
+ EXTRA_ARG --standalone
+ */
+
+ LauncherInfoInflator inflator;
+ auto list = inflator.Inflate(".");
+ EXPECT_EQ(list.size(), 1);
+ auto info = std::move(list.front());
+ EXPECT_EQ(info->GetName(), "dotnet-launcher");
+ EXPECT_EQ(info->GetExe(), "test_launcher");
+ EXPECT_EQ(info->GetAppTypes().size(), 1);
+ EXPECT_EQ(info->GetAppTypes()[0], "dotnet");
+ EXPECT_EQ(info->GetExtraArgs().size(), 7);
+ EXPECT_EQ(info->GetExtraArgs()[0],
+ "--PADDING_TO_CHANGE_CMDLINE_PADDING_TO_CHANGE_CMDLINE_PADDING_TO_"
+ "CHANGE_CMDLINE_PADDING_TO_CHANGE_CMDLINE");
+ EXPECT_EQ(info->GetExtraArgs()[1], "--profile");
+ EXPECT_EQ(info->GetExtraArgs()[2], "--appType");
+ EXPECT_EQ(info->GetExtraArgs()[3], "dotnet");
+ EXPECT_EQ(info->GetExtraArgs()[4], "TIZEN_UIFW");
+ EXPECT_EQ(info->GetExtraArgs()[5], "ElmSharp");
+ EXPECT_EQ(info->GetExtraArgs()[6], "--standalone");
+}
+
+TEST_F(LaunchpadTest, LoaderInfoTest) {
+/* Test loader info file
+[LOADER]
+NAME hw-loader1
+EXE /usr/bin/launchpad-loader
+APP_TYPE capp|c++app
+HW_ACC ON
+DETECTION_METHOD TIMEOUT|VISIBILITY
+TIMEOUT 5000
+EXTRA loader_type hw-loader
+EXTRA_ARRAY preload
+EXTRA_ARRAY_VAL /usr/lib/libappcore-efl.so.1
+EXTRA_ARRAY_VAL /usr/lib/libappcore-common.so.1
+EXTRA_ARRAY_VAL /usr/lib/libcapi-appfw-application.so.0
+EXTRA_ARRAY_VAL /usr/lib/ecore_imf/modules/wayland/v-1.25/module.so
+EXTRA_ARRAY_VAL /usr/lib/libdali-toolkit.so
+EXTRA_ARRAY_VAL /usr/lib/libcairo.so.2
+EXTRA_ARRAY_VAL /usr/lib/libcapi-media-player.so.0
+EXTRA_ARRAY_VAL /usr/lib/libcapi-media-camera.so.0
+EXTRA_ARRAY_VAL /usr/lib/ecore_evas/engines/extn/v-1.25/module.so
+ALTERNATIVE_LOADER common-loader1
+EXTRA threads 7
+*/
+
+ LoaderInfoInflator inflator;
+ auto list = inflator.Inflate(".");
+ EXPECT_EQ(list.size(), 1);
+ auto info = std::move(list.front());
+ EXPECT_EQ(info->GetName(), "hw-loader1");
+ EXPECT_EQ(info->GetExe(), "/usr/bin/launchpad-loader");
+ EXPECT_EQ(info->GetAppTypes().size(), 2);
+ EXPECT_EQ(info->GetAppTypes()[0], "capp");
+ EXPECT_EQ(info->GetAppTypes()[1], "c++app");
+ EXPECT_EQ(info->GetHwAcc(), "ON");
+ EXPECT_EQ(info->GetDetectionMethod(), LoaderMethod::Timeout |
+ LoaderMethod::Visibility |
+ LoaderMethod::Install);
+ EXPECT_EQ(info->GetTimeoutVal(), 5000);
+ auto& b = info->GetExtra();
+ EXPECT_EQ(b.GetString("loader_type"), "hw-loader");
+ EXPECT_EQ(b.GetString("threads"), "7");
+ auto arr = b.GetStringArray("preload");
+ EXPECT_EQ(arr.size(), 9);
+ EXPECT_EQ(arr[0], "/usr/lib/libappcore-efl.so.1");
+ EXPECT_EQ(arr[1], "/usr/lib/libappcore-common.so.1");
+ EXPECT_EQ(arr[2], "/usr/lib/libcapi-appfw-application.so.0");
+ EXPECT_EQ(arr[3], "/usr/lib/ecore_imf/modules/wayland/v-1.25/module.so");
+ EXPECT_EQ(arr[4], "/usr/lib/libdali-toolkit.so");
+ EXPECT_EQ(arr[5], "/usr/lib/libcairo.so.2");
+ EXPECT_EQ(arr[6], "/usr/lib/libcapi-media-player.so.0");
+ EXPECT_EQ(arr[7], "/usr/lib/libcapi-media-camera.so.0");
+ EXPECT_EQ(arr[8], "/usr/lib/ecore_evas/engines/extn/v-1.25/module.so");
+}