# Targets
SET(TARGET_LIBNAME_WGT_MANIFEST_HANDLERS "wgt-manifest-handlers")
+ENABLE_TESTING()
+SET(TARGET_WGT_MANIFEST_HANDLERS_UNIT_TEST "wgt-manifest-handlers-unit-test")
+
ADD_DEFINITIONS("-DPROJECT_TAG=\"wgt-manifest-handlers\"")
ADD_DEFINITIONS("-DSHAREDIR=\"${SHAREDIR}\"")
PKG_CHECK_MODULES(MANIFEST_PARSER_DEPS REQUIRED manifest-parser)
PKG_CHECK_MODULES(MANIFEST_PARSER_UTILS_DEPS REQUIRED manifest-parser-utils)
PKG_CHECK_MODULES(CAPI_SYSTEM_INFO REQUIRED capi-system-info)
+PKG_CHECK_MODULES(GMOCK_DEPS REQUIRED gmock)
-FIND_PACKAGE(GTest REQUIRED)
FIND_PACKAGE(Boost REQUIRED COMPONENTS system filesystem)
# xmlsec1 - choose crypto library which to use
ADD_DEFINITIONS("-DXMLSEC_CRYPTO_OPENSSL")
ADD_SUBDIRECTORY(src)
+ADD_SUBDIRECTORY(test)
BuildRequires: boost-devel
BuildRequires: cmake
-BuildRequires: gtest-devel
+BuildRequires: pkgconfig(gmock)
BuildRequires: pkgconfig(xdgmime)
BuildRequires: pkgconfig(manifest-parser)
BuildRequires: pkgconfig(capi-system-info)
+%if 0%{?gcov:1}
+BuildRequires: lcov
+BuildRequires: zip
+%endif
+
%description
This is a meta package that installs wgt manifest handlers.
export CFLAGS="$(echo $CFLAGS | sed 's/-Wl,--as-needed//g')"
export CXXFLAGS="$(echo $CXXFLAGS | sed 's/-Wl,--as-needed//g')"
export FFLAGS="$(echo $FFLAGS | sed 's/-Wl,--as-needed//g')"
+
+%if 0%{?gcov:1}
+export CFLAGS+=" -fprofile-arcs -ftest-coverage"
+export CXXFLAGS+=" -fprofile-arcs -ftest-coverage"
+export FFLAGS=" -fprofile-arcs -ftest-coverage"
+export LDFLAGS+=" -lgcov"
+%endif
+
# BUILD_PARSER macro is defined so we can build two separate projects
# with cmake, which are on one repository. Later this macro
# is used in CMakeLists.txt files to distinguish, which project
make %{?_smp_mflags}
+%if 0%{?gcov:1}
+mkdir -p gcov-obj
+find . -name '*.gcno' ! -path './gcov-obj/*' -exec cp '{}' gcov-obj ';'
+%endif
+
+%check
+export LD_LIBRARY_PATH=../../src/wgt_manifest_handlers
+ctest -V
+%if 0%{?gcov:1}
+lcov -c --ignore-errors graph --no-external -q -d . -o wgt-manifest-handlers.info
+genhtml wgt-manifest-handlers.info -o wgt-manifest-handlers.out
+zip -r wgt-manifest-handlers.zip wgt-manifest-handlers.out
+install -m 0644 wgt-manifest-handlers.zip %{buildroot}%{_datadir}/gcov/
+%endif
+
%install
%make_install
+%if 0%{?gcov:1}
+mkdir -p %{buildroot}%{_datadir}/gcov/obj
+install -m 0644 gcov-obj/* %{buildroot}%{_datadir}/gcov/obj
+%endif
+
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%{_libdir}/libwgt-manifest-handlers.so
%{_includedir}/wgt_manifest_handlers/*.h
-%files tests
-%manifest %{name}.manifest
-%{_bindir}/manifest-parser-ut/*
-%{_datadir}/manifest-parser-ut/*
+#%files tests
+#%manifest %{name}.manifest
+#%{_bindir}/manifest-parser-ut/*
+#%{_datadir}/manifest-parser-ut/*
+
+#################################################
+# wgt-manifest-handlers-gcov
+#################################################
+%if 0%{?gcov:1}
+%package gcov
+Summary: Simple string key-val dictionary ADT (gcov)
+Group: Application Framework/Testing
+
+%description gcov
+Simple string key-val dictionary ADT gcov objects
+%endif
+
+%if 0%{?gcov:1}
+%files gcov
+%defattr(-,root,root,-)
+%{_datadir}/gcov/*
+%endif
+
ADD_SUBDIRECTORY(wgt_manifest_handlers)
-ADD_SUBDIRECTORY(unit_tests)
\ No newline at end of file
+++ /dev/null
-SET(PRJ_PATH ..)
-
-SET(TESTS
- parser_manifest_util_unittest
- service_handler_unittest
- content_handler_unittest
- appwidget_handler_unittest
- warp_handler_unittest
- csp_handler_unittest
- account_handler_unittest
- launch_screen_handler_unittest
- splash_handler_unittest
- xml_normalization_unittest
- addon_handler_unittest
-)
-SET(DESTINATION_DIR manifest-parser-ut)
-
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../)
-
-INSTALL(DIRECTORY test_samples/ DESTINATION ${SHAREDIR}/${DESTINATION_DIR}/test_samples)
-
-FOREACH(test ${TESTS})
- ADD_EXECUTABLE(${test} "${test}.cc")
-
- APPLY_PKG_CONFIG(${test} PUBLIC
- Boost
- GTEST
- MANIFEST_PARSER_DEPS
- MANIFEST_PARSER_UTILS_DEPS
- )
-
- INSTALL(TARGETS ${test} DESTINATION ${BINDIR}/${DESTINATION_DIR})
- # FindGTest module do not sets all needed libraries in GTEST_LIBRARIES and
- # GTest main libraries is still missing, so additional linking of
- # GTEST_MAIN_LIBRARIES is needed.
- TARGET_LINK_LIBRARIES(${test} PUBLIC ${TARGET_LIBNAME_PARSER}
- ${TARGET_LIBNAME_WGT_MANIFEST_HANDLERS} ${GTEST_MAIN_LIBRARIES})
-ENDFOREACH(test)
+++ /dev/null
-// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
-// Use of this source code is governed by an apache 2.0 license that can be
-// found in the LICENSE file.
-
-
-#include <boost/filesystem/path.hpp>
-
-#include <gtest/gtest.h>
-
-#include <manifest_parser/manifest.h>
-#include <manifest_parser/manifest_util.h>
-
-#include <memory>
-
-#include "unit_tests/base_test.h"
-#include "wgt_manifest_handlers/account_handler.h"
-
-namespace bf = boost::filesystem;
-
-namespace {
-
-const bf::path kXmlDirectory("/usr/share/manifest-parser-ut/test_samples/xmls");
-
-struct RegistryPolicyForAccount {
- static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
- using wgt::parse::AccountHandler;
- std::unique_ptr<parser::ManifestHandlerRegistry> registry;
- registry.reset(new parser::ManifestHandlerRegistry());
- registry->RegisterManifestHandler(new AccountHandler());
- return registry;
- }
-};
-
-} // namespace
-
-namespace parser {
-
-class AccountHandlerTest : public BaseTest<RegistryPolicyForAccount> {
- void SetUp() override {
- BaseTest<RegistryPolicyForAccount>::SetUp();
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- }
-};
-
-TEST_F(AccountHandlerTest, Valid) {
- ASSERT_TRUE(ParseAppManifest()) << GetError();
- ASSERT_TRUE(ValidateAppManifest()) << GetError();
- std::shared_ptr<const wgt::parse::AccountInfo> data =
- std::static_pointer_cast<const wgt::parse::AccountInfo>(
- GetManifestData(wgt::parse::AccountInfo::Key()));
- ASSERT_TRUE(!!data);
- ASSERT_EQ(data->accounts().size(), 1);
- auto account = data->accounts()[0];
- ASSERT_EQ(account.names.size(), 1);
- ASSERT_EQ(account.names[0].first, "name");
- ASSERT_EQ(account.names[0].second, "");
- ASSERT_EQ(account.icon_paths.size(), 1);
- ASSERT_EQ(account.icon_paths[0].first, "Account");
- ASSERT_EQ(account.icon_paths[0].second, "icon");
- ASSERT_EQ(account.capabilities.size(), 0);
-}
-
-TEST_F(AccountHandlerTest, Many) {
- ASSERT_TRUE(ParseAppManifest()) << GetError();
- ASSERT_TRUE(ValidateAppManifest()) << GetError();
- std::shared_ptr<const wgt::parse::AccountInfo> data =
- std::static_pointer_cast<const wgt::parse::AccountInfo>(
- GetManifestData(wgt::parse::AccountInfo::Key()));
- ASSERT_TRUE(!!data);
- ASSERT_EQ(data->accounts().size(), 2);
-
- auto account1 = data->accounts()[0];
- ASSERT_EQ(account1.names.size(), 2);
- ASSERT_EQ(account1.names[0].first, "name");
- ASSERT_EQ(account1.names[0].second, "");
- ASSERT_EQ(account1.names[1].first, "name_en_gb");
- ASSERT_EQ(account1.names[1].second, "en-GB");
- ASSERT_EQ(account1.icon_paths.size(), 1);
- ASSERT_EQ(account1.icon_paths[0].first, "Account");
- ASSERT_EQ(account1.icon_paths[0].second, "icon");
- ASSERT_EQ(account1.capabilities.size(), 0);
- ASSERT_FALSE(account1.multiple_account_support);
-
- auto account2 = data->accounts()[1];
- ASSERT_EQ(account2.names.size(), 1);
- ASSERT_EQ(account2.names[0].first, "name2");
- ASSERT_EQ(account2.names[0].second, "");
- ASSERT_EQ(account2.icon_paths.size(), 2);
- ASSERT_EQ(account2.icon_paths[0].first, "Account");
- ASSERT_EQ(account2.icon_paths[0].second, "icon2");
- ASSERT_EQ(account2.icon_paths[1].first, "AccountSmall");
- ASSERT_EQ(account2.icon_paths[1].second, "icon2s");
- ASSERT_EQ(account2.capabilities.size(), 0);
- ASSERT_TRUE(account2.multiple_account_support);
-}
-
-TEST_F(AccountHandlerTest, MAS_False) {
- ASSERT_TRUE(ParseAppManifest()) << GetError();
- ASSERT_TRUE(ValidateAppManifest()) << GetError();
- std::shared_ptr<const wgt::parse::AccountInfo> data =
- std::static_pointer_cast<const wgt::parse::AccountInfo>(
- GetManifestData(wgt::parse::AccountInfo::Key()));
- ASSERT_TRUE(!!data);
- ASSERT_EQ(data->accounts().size(), 1);
- auto account = data->accounts()[0];
- ASSERT_FALSE(account.multiple_account_support);
-}
-
-TEST_F(AccountHandlerTest, MAS_True) {
- ASSERT_TRUE(ParseAppManifest()) << GetError();
- ASSERT_TRUE(ValidateAppManifest()) << GetError();
- std::shared_ptr<const wgt::parse::AccountInfo> data =
- std::static_pointer_cast<const wgt::parse::AccountInfo>(
- GetManifestData(wgt::parse::AccountInfo::Key()));
- ASSERT_TRUE(!!data);
- ASSERT_EQ(data->accounts().size(), 1);
- auto account = data->accounts()[0];
- ASSERT_TRUE(account.multiple_account_support);
-}
-
-TEST_F(AccountHandlerTest, MAS_Missing) {
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AccountHandlerTest, MAS_Wrong) {
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AccountHandlerTest, Capability_One) {
- ASSERT_TRUE(ParseAppManifest()) << GetError();
- ASSERT_TRUE(ValidateAppManifest()) << GetError();
- std::shared_ptr<const wgt::parse::AccountInfo> data =
- std::static_pointer_cast<const wgt::parse::AccountInfo>(
- GetManifestData(wgt::parse::AccountInfo::Key()));
- ASSERT_TRUE(!!data);
- ASSERT_EQ(data->accounts().size(), 1);
- auto account = data->accounts()[0];
- ASSERT_EQ(account.capabilities.size(), 1);
- ASSERT_EQ(account.capabilities[0], "cap1");
-}
-
-TEST_F(AccountHandlerTest, Capability_Many) {
- ASSERT_TRUE(ParseAppManifest()) << GetError();
- ASSERT_TRUE(ValidateAppManifest()) << GetError();
- std::shared_ptr<const wgt::parse::AccountInfo> data =
- std::static_pointer_cast<const wgt::parse::AccountInfo>(
- GetManifestData(wgt::parse::AccountInfo::Key()));
- ASSERT_TRUE(!!data);
- ASSERT_EQ(data->accounts().size(), 1);
- auto account = data->accounts()[0];
- ASSERT_EQ(account.capabilities.size(), 3);
- ASSERT_EQ(account.capabilities[0], "cap1");
- ASSERT_EQ(account.capabilities[1], "cap2");
- ASSERT_EQ(account.capabilities[2], "cap3");
-}
-
-TEST_F(AccountHandlerTest, Name_Missing) {
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AccountHandlerTest, Name_More) {
- ASSERT_TRUE(ParseAppManifest()) << GetError();
- ASSERT_TRUE(ValidateAppManifest()) << GetError();
- std::shared_ptr<const wgt::parse::AccountInfo> data =
- std::static_pointer_cast<const wgt::parse::AccountInfo>(
- GetManifestData(wgt::parse::AccountInfo::Key()));
- ASSERT_TRUE(!!data);
- ASSERT_EQ(data->accounts().size(), 1);
- auto account = data->accounts()[0];
- ASSERT_EQ(account.names.size(), 4);
- ASSERT_EQ(account.names[0].first, "name");
- ASSERT_EQ(account.names[0].second, "");
- ASSERT_EQ(account.names[1].first, "name_en");
- ASSERT_EQ(account.names[1].second, "en");
- ASSERT_EQ(account.names[2].first, "name_de");
- ASSERT_EQ(account.names[2].second, "de");
- ASSERT_EQ(account.names[3].first, "name_ru");
- ASSERT_EQ(account.names[3].second, "ru");
-}
-
-TEST_F(AccountHandlerTest, Icon_Missing) {
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AccountHandlerTest, Icon_More) {
- ASSERT_TRUE(ParseAppManifest()) << GetError();
- ASSERT_TRUE(ValidateAppManifest()) << GetError();
- std::shared_ptr<const wgt::parse::AccountInfo> data =
- std::static_pointer_cast<const wgt::parse::AccountInfo>(
- GetManifestData(wgt::parse::AccountInfo::Key()));
- ASSERT_TRUE(!!data);
- ASSERT_EQ(data->accounts().size(), 1);
- auto account = data->accounts()[0];
- ASSERT_EQ(account.icon_paths.size(), 2);
- ASSERT_EQ(account.icon_paths[0].first, "Account");
- ASSERT_EQ(account.icon_paths[0].second, "icon");
- ASSERT_EQ(account.icon_paths[1].first, "AccountSmall");
- ASSERT_EQ(account.icon_paths[1].second, "icon2");
-}
-
-} // namespace parser
+++ /dev/null
-// Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
-// Use of this source code is governed by an apache 2.0 license that can be
-// found in the LICENSE file.
-
-
-#include <boost/filesystem/path.hpp>
-
-#include <gtest/gtest.h>
-
-#include <manifest_parser/manifest.h>
-#include <manifest_parser/manifest_util.h>
-
-#include <memory>
-
-#include "unit_tests/base_test.h"
-#include "wgt_manifest_handlers/addon_handler.h"
-
-namespace bf = boost::filesystem;
-
-namespace {
-
-const bf::path kXmlDirectory("/usr/share/manifest-parser-ut/test_samples/xmls");
-
-struct RegistryPolicyForAddon {
- static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
- using wgt::parse::AddonHandler;
- std::unique_ptr<parser::ManifestHandlerRegistry> registry;
- registry.reset(new parser::ManifestHandlerRegistry());
- registry->RegisterManifestHandler(new AddonHandler());
- return registry;
- }
-};
-
-} // namespace
-
-namespace parser {
-
-class AddonHandlerTest : public BaseTest<RegistryPolicyForAddon> {
- void SetUp() override {
- BaseTest<RegistryPolicyForAddon>::SetUp();
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- }
-};
-
-TEST_F(AddonHandlerTest, Valid) {
- ASSERT_TRUE(ParseAppManifest()) << GetError();
- ASSERT_TRUE(ValidateAppManifest()) << GetError();
- std::shared_ptr<const wgt::parse::AddonInfo> data =
- std::static_pointer_cast<const wgt::parse::AddonInfo>(
- GetManifestData(wgt::parse::AddonInfo::Key()));
- EXPECT_TRUE(!!data);
-}
-
-TEST_F(AddonHandlerTest, PackageNameTest) {
- ASSERT_TRUE(ParseAppManifest()) << GetError();
- ASSERT_TRUE(ValidateAppManifest()) << GetError();
- std::shared_ptr<const wgt::parse::AddonInfo> data =
- std::static_pointer_cast<const wgt::parse::AddonInfo>(
- GetManifestData(wgt::parse::AddonInfo::Key()));
- ASSERT_TRUE(!!data);
- EXPECT_EQ(data->package(), "package0id");
-}
-
-TEST_F(AddonHandlerTest, RequiredVersionTest) {
- ASSERT_TRUE(ParseAppManifest()) << GetError();
- ASSERT_TRUE(ValidateAppManifest()) << GetError();
- std::shared_ptr<const wgt::parse::AddonInfo> data =
- std::static_pointer_cast<const wgt::parse::AddonInfo>(
- GetManifestData(wgt::parse::AddonInfo::Key()));
- ASSERT_TRUE(!!data);
- EXPECT_EQ(data->required_version(), "5.5");
-}
-
-TEST_F(AddonHandlerTest, NoPackageNameTest) {
- ASSERT_TRUE(ParseAppManifest()) << GetError();
- EXPECT_FALSE(ValidateAppManifest());
-}
-
-TEST_F(AddonHandlerTest, NoRequiredVersionTest) {
- ASSERT_TRUE(ParseAppManifest()) << GetError();
- EXPECT_FALSE(ValidateAppManifest());
-}
-
-} // namespace parser
+++ /dev/null
-// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
-// Use of this source code is governed by an apache 2.0 license that can be
-// found in the LICENSE file.
-
-#include <boost/filesystem/path.hpp>
-
-#include <gtest/gtest.h>
-
-#include <manifest_parser/manifest.h>
-#include <manifest_parser/manifest_util.h>
-
-#include <algorithm>
-#include <memory>
-#include <vector>
-
-#include "unit_tests/base_test.h"
-#include "wgt_manifest_handlers/application_manifest_constants.h"
-#include "wgt_manifest_handlers/appwidget_handler.h"
-#include "wgt_manifest_handlers/tizen_application_handler.h"
-
-namespace bf = boost::filesystem;
-
-namespace {
-
-const bf::path kXmlDirectory("/usr/share/manifest-parser-ut/test_samples/xmls");
-
-struct RegistryPolicyForAppWidget {
- static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
- std::unique_ptr<parser::ManifestHandlerRegistry> registry;
- registry.reset(new parser::ManifestHandlerRegistry());
- registry->RegisterManifestHandler(
- new wgt::parse::TizenApplicationHandler());
- registry->RegisterManifestHandler(
- new wgt::parse::AppWidgetHandler());
- return registry;
- }
-};
-
-} // namespace
-
-namespace parser {
-
-class AppWidgetHandlerTest : public BaseTest<RegistryPolicyForAppWidget> {
-};
-
-TEST_F(AppWidgetHandlerTest, dbox1) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::AppWidgetInfo> data =
- std::static_pointer_cast<const wgt::parse::AppWidgetInfo>(
- GetManifestData(
- wgt::application_widget_keys::kTizenAppWidgetFullKey));
- ASSERT_EQ(data->app_widgets().size(), 1);
- const wgt::parse::AppWidget& app_widget = *data->app_widgets().begin();
- ASSERT_EQ(app_widget.auto_launch, true);
- ASSERT_EQ(app_widget.content_mouse_event, true);
- ASSERT_EQ(app_widget.content_touch_effect, false);
- ASSERT_EQ(app_widget.content_src, "box/index.html");
- ASSERT_EQ(app_widget.id, "aaaaaaa100.dbox1.default");
- ASSERT_EQ(app_widget.primary, true);
- ASSERT_EQ(app_widget.label.default_value, "dbox1 default label");
- ASSERT_EQ(app_widget.label.lang_value_map.size(), 2);
- ASSERT_EQ(app_widget.label.lang_value_map.count("pl"), 1);
- ASSERT_EQ(app_widget.label.lang_value_map.find("pl")->second,
- "dbox1 pl label");
- ASSERT_EQ(app_widget.label.lang_value_map.count("en"), 1);
- ASSERT_EQ(app_widget.label.lang_value_map.find("en")->second,
- "dbox1 en label");
- ASSERT_EQ(app_widget.icon_src, "icon.png");
- ASSERT_EQ(app_widget.max_instance, 0);
- ASSERT_EQ(app_widget.update_period.size(), 1);
- ASSERT_EQ(app_widget.update_period.at(0), 2000.0);
-
- ASSERT_EQ(app_widget.content_size.size(), 3);
- auto size1 = std::find_if(app_widget.content_size.begin(),
- app_widget.content_size.end(),
- [](const wgt::parse::AppWidgetSize& size) {
- return size.type == wgt::parse::k1x1;
- });
- auto size2 = std::find_if(app_widget.content_size.begin(),
- app_widget.content_size.end(),
- [](const wgt::parse::AppWidgetSize& size) {
- return size.type == wgt::parse::k2x1;
- });
- auto size3 = std::find_if(app_widget.content_size.begin(),
- app_widget.content_size.end(),
- [](const wgt::parse::AppWidgetSize& size) {
- return size.type == wgt::parse::k2x2;
- });
- ASSERT_NE(size1, app_widget.content_size.end());
- ASSERT_NE(size2, app_widget.content_size.end());
- ASSERT_NE(size3, app_widget.content_size.end());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_icon_none) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::AppWidgetInfo> data =
- std::static_pointer_cast<const wgt::parse::AppWidgetInfo>(
- GetManifestData(
- wgt::application_widget_keys::kTizenAppWidgetFullKey));
- ASSERT_EQ(data->app_widgets().size(), 1);
- const wgt::parse::AppWidget& app_widget = *data->app_widgets().begin();
- ASSERT_TRUE(app_widget.icon_src.empty());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox2) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::AppWidgetInfo> data =
- std::static_pointer_cast<const wgt::parse::AppWidgetInfo>(
- GetManifestData(
- wgt::application_widget_keys::kTizenAppWidgetFullKey));
- ASSERT_EQ(data->app_widgets().size(), 2);
- auto result1 = std::find_if(data->app_widgets().begin(),
- data->app_widgets().end(),
- [](const wgt::parse::AppWidget& candidate) {
- return candidate.id == "aaaaaaa200.dbox2.default";
- });
- auto result2 = std::find_if(data->app_widgets().begin(),
- data->app_widgets().end(),
- [](const wgt::parse::AppWidget& candidate) {
- return candidate.id == "aaaaaaa200.dbox2.second";
- });
- ASSERT_NE(result1, data->app_widgets().end());
- ASSERT_NE(result2, data->app_widgets().end());
-
- const wgt::parse::AppWidget& app_widget1 = *result1;
- ASSERT_EQ(app_widget1.auto_launch, true);
- ASSERT_EQ(app_widget1.content_mouse_event, true);
- ASSERT_EQ(app_widget1.content_touch_effect, false);
- ASSERT_EQ(app_widget1.content_src, "box/index.html");
- ASSERT_EQ(app_widget1.id, "aaaaaaa200.dbox2.default");
- ASSERT_EQ(app_widget1.primary, true);
- ASSERT_EQ(app_widget1.label.default_value, "dbox2 default label");
- ASSERT_EQ(app_widget1.label.lang_value_map.size(), 2);
- ASSERT_EQ(app_widget1.label.lang_value_map.count("pl"), 1);
- ASSERT_EQ(app_widget1.label.lang_value_map.find("pl")->second,
- "dbox2 pl label");
- ASSERT_EQ(app_widget1.label.lang_value_map.count("en"), 1);
- ASSERT_EQ(app_widget1.label.lang_value_map.find("en")->second,
- "dbox2 en label");
- ASSERT_EQ(app_widget1.icon_src, "icon.png");
- ASSERT_EQ(app_widget1.max_instance, 0);
- ASSERT_EQ(app_widget1.update_period.size(), 1);
- ASSERT_EQ(app_widget1.update_period.at(0), 2000.0);
-
- const wgt::parse::AppWidget& app_widget2 = *result2;
- ASSERT_EQ(app_widget2.auto_launch, false);
- ASSERT_EQ(app_widget2.content_mouse_event, false);
- ASSERT_EQ(app_widget2.content_touch_effect, true);
- ASSERT_EQ(app_widget2.content_src, "box/index2.html");
- ASSERT_EQ(app_widget2.id, "aaaaaaa200.dbox2.second");
- ASSERT_EQ(app_widget2.primary, false);
- ASSERT_EQ(app_widget2.label.default_value, "dbox2 default label 2");
- ASSERT_EQ(app_widget2.label.lang_value_map.size(), 2);
- ASSERT_EQ(app_widget2.label.lang_value_map.count("pl"), 1);
- ASSERT_EQ(app_widget2.label.lang_value_map.find("pl")->second,
- "dbox2 pl label 2");
- ASSERT_EQ(app_widget2.label.lang_value_map.count("en"), 1);
- ASSERT_EQ(app_widget2.label.lang_value_map.find("en")->second,
- "dbox2 en label 2");
- ASSERT_EQ(app_widget2.icon_src, "icon2.png");
- ASSERT_EQ(app_widget2.max_instance, 0);
- ASSERT_EQ(app_widget2.update_period.size(), 1);
- ASSERT_EQ(app_widget2.update_period.at(0), 4000.0);
-}
-
-TEST_F(AppWidgetHandlerTest, dbox2_app_widget_primary_two_true) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::AppWidgetInfo> data =
- std::static_pointer_cast<const wgt::parse::AppWidgetInfo>(
- GetManifestData(
- wgt::application_widget_keys::kTizenAppWidgetFullKey));
- ASSERT_EQ(data->app_widgets().size(), 2);
- auto result1 = std::find_if(data->app_widgets().begin(),
- data->app_widgets().end(),
- [](const wgt::parse::AppWidget& candidate) {
- return candidate.id == "aaaaaaa201.dbox2.default";
- });
- auto result2 = std::find_if(data->app_widgets().begin(),
- data->app_widgets().end(),
- [](const wgt::parse::AppWidget& candidate) {
- return candidate.id == "aaaaaaa201.dbox2.second";
- });
- ASSERT_NE(result1, data->app_widgets().end());
- ASSERT_NE(result2, data->app_widgets().end());
-
- const wgt::parse::AppWidget& app_widget1 = *result1;
- ASSERT_EQ(app_widget1.primary, true);
-
- const wgt::parse::AppWidget& app_widget2 = *result2;
- ASSERT_EQ(app_widget2.primary, true);
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_auto_launch_not_bool) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_content_box_size_invalid) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_content_box_size_none) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest,
- dbox1_app_widget_box_content_box_size_use_decoration_invalid) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest,
- dbox1_app_widget_box_content_mouse_event_not_bool) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_content_none) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_content_pd_height_invalid) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_content_pd_height_ood) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_content_pd_src_none) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_content_pd_width_invalid) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_content_src_none) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest,
- dbox1_app_widget_box_content_touch_effect_not_bool) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_content_two) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_icon_src_none) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_icon_two) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_label_none) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_id_invalid_1) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_id_invalid_2) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_id_none) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_primary_none) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_primary_not_bool) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_update_period_invalid) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(AppWidgetHandlerTest, dbox1_app_widget_update_period_ood) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-} // namespace parser
+++ /dev/null
-// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
-// Use of this source code is governed by an apache 2.0 license that can be
-// found in the LICENSE file.
-
-#ifndef UNIT_TESTS_BASE_TEST_H_
-#define UNIT_TESTS_BASE_TEST_H_
-
-#include <gtest/gtest.h>
-
-#include <manifest_parser/manifest_parser_impl.h>
-#include <manifest_parser/manifest_parser.h>
-
-#include <memory>
-#include <string>
-
-namespace parser {
-
-/**
- * Base class for unittests of handlers
- *
- * Requires policy class parameter implementing static method:
- * - std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry();
- * which must return valid registry for given tests.
- */
-template<typename RegistryPolicy>
-class BaseTest : public testing::Test {
- public:
- void SetUp() override {
- parser_.reset(new ManifestParserImpl(RegistryPolicy::GetRegistry()));
- }
- void TearDown() override { parser_.reset(); }
- void SetManifest(std::shared_ptr<Manifest> manifest) {
- parser_->SetManifest(manifest);
- }
- bool ParseAppManifest() {
- return parser_->ParseAppManifest(&error_);
- }
- bool ValidateAppManifest() {
- return parser_->ValidateAppManifest(&error_);
- }
- std::shared_ptr<const ManifestData> GetManifestData(const std::string& key) {
- return parser_->GetManifestData(key);
- }
-
- std::string GetMyName() const {
- std::string suite =
- testing::UnitTest::GetInstance()->current_test_info()->test_case_name();
- std::string case_name =
- testing::UnitTest::GetInstance()->current_test_info()->name();
- return suite + '.' + case_name;
- }
-
- const std::string& GetError() const {
- return error_;
- }
-
- private:
- std::unique_ptr<ManifestParserImpl> parser_;
- std::string error_;
-};
-
-} // namespace parser
-
-#endif // UNIT_TESTS_BASE_TEST_H_
+++ /dev/null
-// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
-// Use of this source code is governed by a apache-2.0 license that can be
-// found in the LICENSE file.
-
-#include <boost/filesystem/path.hpp>
-
-#include <gtest/gtest.h>
-
-#include <manifest_parser/manifest.h>
-#include <manifest_parser/manifest_util.h>
-
-#include <memory>
-#include <vector>
-
-#include "unit_tests/base_test.h"
-#include "wgt_manifest_handlers/application_manifest_constants.h"
-#include "wgt_manifest_handlers/content_handler.h"
-
-namespace bf = boost::filesystem;
-
-namespace {
-
-const char kWidgetKey[] = "widget";
-const char kNamespaceKey[] = "@namespace";
-const char kTizenContentTagKey[] = "content";
-const char kTizenNamespacePrefix[] = "http://tizen.org/ns/widgets";
-const char kWidgetNamespacePrefix[] = "http://www.w3.org/ns/widgets";
-const char kTizenContentEncodingKey[] = "@encoding";
-const char kTizenContentTypeKey[] = "@type";
-const char kTizenContentKey[] = "widget.content";
-const char kMimeMainComponent[] = "";
-const char kMimeCharsetComponent[] = "charset";
-const char kDefaultMimeType[] = "text/html";
-const char kDefaultEncoding[] = "UTF-8";
-const char kTizenContentSrcKey[] = "@src";
-
-struct RegistryPolicyForContent {
- static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
- std::unique_ptr<parser::ManifestHandlerRegistry> registry;
- registry.reset(new parser::ManifestHandlerRegistry());
- registry->RegisterManifestHandler(new wgt::parse::ContentHandler());
- return registry;
- }
-};
-
-} // namespace
-
-namespace parser {
-
-class ContentHandlerTest : public BaseTest<RegistryPolicyForContent> {
-};
-
-TEST_F(ContentHandlerTest, NoContentEntry) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- ASSERT_TRUE(!GetManifestData(kTizenContentKey));
-}
-
-TEST_F(ContentHandlerTest, SingleContentEntry) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- content->SetString(kTizenContentSrcKey, "my_index.html");
- widget->Set(kTizenContentTagKey, content.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::ContentInfo> content_info =
- std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
- GetManifestData(kTizenContentKey));
- ASSERT_TRUE(!!content_info);
- ASSERT_EQ(content_info->is_tizen_content(), false);
- ASSERT_EQ(content_info->src(), "my_index.html");
-}
-
-TEST_F(ContentHandlerTest, SingleContentEntrySrcEmpty) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- content->SetString(kTizenContentSrcKey, "");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kTizenContentTagKey, content.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check empty
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::ContentInfo> content_info =
- std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
- GetManifestData(kTizenContentKey));
- ASSERT_FALSE(!!content_info);
-}
-
-TEST_F(ContentHandlerTest, SingleTizenContentEntry) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- content->SetString(kTizenContentSrcKey, "http://www.tizen.app/my_index.html");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kTizenContentTagKey, content.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::ContentInfo> content_info =
- std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
- GetManifestData(kTizenContentKey));
- ASSERT_TRUE(!!content_info);
- ASSERT_EQ(content_info->is_tizen_content(), true);
- ASSERT_EQ(content_info->src(), "http://www.tizen.app/my_index.html");
-}
-
-TEST_F(ContentHandlerTest, SingleTizenContentEntryNotURL) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- content->SetString(kTizenContentSrcKey, "relative_NOT_url");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kTizenContentTagKey, content.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check error
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::ContentInfo> content_info =
- std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
- GetManifestData(kTizenContentKey));
- ASSERT_TRUE(!!content_info);
- ASSERT_EQ(content_info->is_tizen_content(), true);
- ASSERT_EQ(content_info->src(), "relative_NOT_url");
-}
-
-TEST_F(ContentHandlerTest, MultipleContentEntryW3CTakeFirst) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<ListValue> list(new ListValue());
- std::unique_ptr<DictionaryValue> content1(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content2(new DictionaryValue());
- content1->SetString(kTizenContentSrcKey, "w3c_1_index.html");
- content2->SetString(kTizenContentSrcKey, "w3c_2_index.html");
- list->Append(content1.release());
- list->Append(content2.release());
- widget->Set(kTizenContentTagKey, list.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::ContentInfo> content_info =
- std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
- GetManifestData(kTizenContentKey));
- ASSERT_TRUE(!!content_info);
- ASSERT_EQ(content_info->is_tizen_content(), false);
- ASSERT_EQ(content_info->src(), "w3c_1_index.html");
-}
-
-TEST_F(ContentHandlerTest, MultipleContentEntryTizenTakeFirst) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<ListValue> list(new ListValue());
- std::unique_ptr<DictionaryValue> content1(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content2(new DictionaryValue());
- content1->SetString(kTizenContentSrcKey,
- "http://www.tizen.app/tizen_1_index.html");
- content1->SetString(kNamespaceKey, kTizenNamespacePrefix);
- content2->SetString(kTizenContentSrcKey,
- "http://www.tizen.app/tizen_2_index.html");
- content2->SetString(kNamespaceKey, kTizenNamespacePrefix);
- list->Append(content1.release());
- list->Append(content2.release());
- widget->Set(kTizenContentTagKey, list.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::ContentInfo> content_info =
- std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
- GetManifestData(kTizenContentKey));
- ASSERT_TRUE(!!content_info);
- ASSERT_EQ(content_info->is_tizen_content(), true);
- ASSERT_EQ(content_info->src(), "http://www.tizen.app/tizen_1_index.html");
-}
-
-TEST_F(ContentHandlerTest, MultipleContentEntryTizenPrioritizedAsFirst) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<ListValue> list(new ListValue());
- std::unique_ptr<DictionaryValue> content1(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content2(new DictionaryValue());
- content1->SetString(kTizenContentSrcKey,
- "http://www.tizen.app/tizen_index.html");
- content1->SetString(kNamespaceKey, kTizenNamespacePrefix);
- content2->SetString(kTizenContentSrcKey, "my_index.html");
- list->Append(content1.release());
- list->Append(content2.release());
- widget->Set(kTizenContentTagKey, list.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::ContentInfo> content_info =
- std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
- GetManifestData(kTizenContentKey));
- ASSERT_TRUE(!!content_info);
- ASSERT_EQ(content_info->is_tizen_content(), true);
- ASSERT_EQ(content_info->src(), "http://www.tizen.app/tizen_index.html");
-}
-
-TEST_F(ContentHandlerTest, MultipleContentEntryTizenPrioritizedAsSecond) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<ListValue> list(new ListValue());
- std::unique_ptr<DictionaryValue> content1(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content2(new DictionaryValue());
- content1->SetString(kTizenContentSrcKey, "my_index.html");
- content2->SetString(kTizenContentSrcKey,
- "http://www.tizen.app/tizen_index.html");
- content2->SetString(kNamespaceKey, kTizenNamespacePrefix);
- list->Append(content1.release());
- list->Append(content2.release());
- widget->Set(kTizenContentTagKey, list.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::ContentInfo> content_info =
- std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
- GetManifestData(kTizenContentKey));
- ASSERT_TRUE(!!content_info);
- ASSERT_EQ(content_info->is_tizen_content(), true);
- ASSERT_EQ(content_info->src(), "http://www.tizen.app/tizen_index.html");
-}
-
-TEST_F(ContentHandlerTest, MultipleContentEntryW3CIgnoreIfNotFirst) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<ListValue> list(new ListValue());
- std::unique_ptr<DictionaryValue> content1(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content2(new DictionaryValue());
- content2->SetString(kTizenContentSrcKey, "w3c_2_index.html");
- list->Append(content1.release());
- list->Append(content2.release());
- widget->Set(kTizenContentTagKey, list.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check empty
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::ContentInfo> content_info =
- std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
- GetManifestData(kTizenContentKey));
- ASSERT_FALSE(!!content_info);
-}
-
-TEST_F(ContentHandlerTest, MultipleContentEntryW3CIgnoreIfFirstEmpty) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<ListValue> list(new ListValue());
- std::unique_ptr<DictionaryValue> content1(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content2(new DictionaryValue());
- content1->SetString(kTizenContentSrcKey, "");
- content2->SetString(kTizenContentSrcKey, "w3c_2_index.html");
- list->Append(content1.release());
- list->Append(content2.release());
- widget->Set(kTizenContentTagKey, list.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check empty
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::ContentInfo> content_info =
- std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
- GetManifestData(kTizenContentKey));
- ASSERT_FALSE(!!content_info);
-}
-
-TEST_F(ContentHandlerTest, MultipleContentBackToW3CWhenTizenEntryBroken) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<ListValue> list(new ListValue());
- std::unique_ptr<DictionaryValue> content1(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content2(new DictionaryValue());
- content1->SetString(kNamespaceKey, kTizenNamespacePrefix);
- content2->SetString(kTizenContentSrcKey, "w3c_1_index.html");
- list->Append(content1.release());
- list->Append(content2.release());
- widget->Set(kTizenContentTagKey, list.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check w3c when tizen:content broken
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::ContentInfo> content_info =
- std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
- GetManifestData(kTizenContentKey));
- ASSERT_TRUE(!!content_info);
- ASSERT_EQ(content_info->is_tizen_content(), false);
- ASSERT_EQ(content_info->src(), "w3c_1_index.html");
-}
-
-TEST_F(ContentHandlerTest, MultipleMoreContentEntry) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<ListValue> list(new ListValue());
- std::unique_ptr<DictionaryValue> content1(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content2(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content3(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content4(new DictionaryValue());
- content1->SetString(kTizenContentSrcKey, "w3c_1_index.html");
- content2->SetString(kTizenContentSrcKey, "w3c_2_index.html");
- content3->SetString(kTizenContentSrcKey,
- "http://www.tizen.app/tizen_3_index.html");
- content3->SetString(kNamespaceKey, kTizenNamespacePrefix);
- content4->SetString(kTizenContentSrcKey,
- "http://www.tizen.app/tizen_4_index.html");
- content4->SetString(kNamespaceKey, kTizenNamespacePrefix);
- list->Append(content1.release());
- list->Append(content2.release());
- list->Append(content3.release());
- list->Append(content4.release());
- widget->Set(kTizenContentTagKey, list.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::ContentInfo> content_info =
- std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
- GetManifestData(kTizenContentKey));
- ASSERT_TRUE(!!content_info);
- ASSERT_EQ(content_info->is_tizen_content(), true);
- ASSERT_EQ(content_info->src(), "http://www.tizen.app/tizen_3_index.html");
-}
-
-} // namespace parser
+++ /dev/null
-// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
-// Use of this source code is governed by an apache 2.0 license that can be
-// found in the LICENSE file.
-
-#include <boost/filesystem/path.hpp>
-
-#include <gtest/gtest.h>
-
-#include <manifest_parser/manifest.h>
-#include <manifest_parser/manifest_util.h>
-
-#include <memory>
-
-#include "unit_tests/base_test.h"
-#include "wgt_manifest_handlers/csp_handler.h"
-
-namespace bf = boost::filesystem;
-
-namespace {
-
-const bf::path kXmlDirectory("/usr/share/manifest-parser-ut/test_samples/xmls");
-
-struct RegistryPolicyForCSP {
- static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
- using wgt::parse::CSPHandler;
- std::unique_ptr<parser::ManifestHandlerRegistry> registry;
- registry.reset(new parser::ManifestHandlerRegistry());
- registry->RegisterManifestHandler(
- new CSPHandler(CSPHandler::SecurityType::CSP));
- registry->RegisterManifestHandler(
- new CSPHandler(CSPHandler::SecurityType::CSP_REPORT_ONLY));
- return registry;
- }
-};
-
-} // namespace
-
-namespace parser {
-
-class CSPHandlerTest : public BaseTest<RegistryPolicyForCSP> {
- void SetUp() override {
- BaseTest<RegistryPolicyForCSP>::SetUp();
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- }
-};
-
-TEST_F(CSPHandlerTest, InvalidNamespace) {
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::CSPInfo> data =
- std::static_pointer_cast<const wgt::parse::CSPInfo>(
- GetManifestData(wgt::parse::CSPInfo::Key()));
- ASSERT_TRUE(!data);
- std::shared_ptr<const wgt::parse::CSPInfo> data_report_only =
- std::static_pointer_cast<const wgt::parse::CSPInfo>(
- GetManifestData(wgt::parse::CSPInfo::Report_only_key()));
- ASSERT_TRUE(!data_report_only);
-}
-
-TEST_F(CSPHandlerTest, Valid) {
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::CSPInfo> data =
- std::static_pointer_cast<const wgt::parse::CSPInfo>(
- GetManifestData(wgt::parse::CSPInfo::Key()));
- ASSERT_TRUE(!!data);
- ASSERT_EQ(data->security_rules(), "script-src 'self'");
- std::shared_ptr<const wgt::parse::CSPInfo> data_report_only =
- std::static_pointer_cast<const wgt::parse::CSPInfo>(
- GetManifestData(wgt::parse::CSPInfo::Report_only_key()));
- ASSERT_TRUE(!!data_report_only);
- ASSERT_EQ(data_report_only->security_rules(),
- "script-src 'self'; report-uri=\"http://example.com/report.cgi\"");
-}
-
-} // namespace parser
+++ /dev/null
-// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
-// Use of this source code is governed by an apache 2.0 license that can be
-// found in the LICENSE file.
-
-#include <boost/filesystem/path.hpp>
-
-#include <gtest/gtest.h>
-
-#include <manifest_parser/manifest.h>
-#include <manifest_parser/manifest_util.h>
-
-#include <memory>
-#include <vector>
-
-#include "unit_tests/base_test.h"
-#include "wgt_manifest_handlers/application_manifest_constants.h"
-#include "wgt_manifest_handlers/launch_screen_handler.h"
-
-namespace bf = boost::filesystem;
-
-namespace {
-
-const bf::path kXmlDirectory("/usr/share/manifest-parser-ut/test_samples/xmls");
-
-struct RegistryPolicyForLaunchScreen {
- static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
- std::unique_ptr<parser::ManifestHandlerRegistry> registry;
- registry.reset(new parser::ManifestHandlerRegistry());
- registry->RegisterManifestHandler(new wgt::parse::LaunchScreenHandler());
- return registry;
- }
-};
-
-} // namespace
-
-namespace parser {
-
-class LaunchScreenHandlerTest : public BaseTest<RegistryPolicyForLaunchScreen> {
-};
-
-TEST_F(LaunchScreenHandlerTest, Valid) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
-
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
-
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
-
- std::shared_ptr<const wgt::parse::LaunchScreenInfo> data =
- std::static_pointer_cast<const wgt::parse::LaunchScreenInfo>(
- GetManifestData(wgt::parse::LaunchScreenInfo::Key()));
- ASSERT_EQ(wgt::parse::ReadyWhen::FIRSTPAINT, data->ready_when());
-
- std::map<wgt::parse::ScreenOrientation, wgt::parse::LaunchScreenData>
- testData = data->launch_screen_data();
- ASSERT_EQ(1, testData.size());
-
- wgt::parse::LaunchScreenData launchData =
- testData.find(wgt::parse::ScreenOrientation::AUTO)->second;
- std::vector<std::pair<std::string, boost::optional<int>>> strPair =
- launchData.background_images;
- ASSERT_EQ(1, strPair.size());
- ASSERT_EQ("bg_image.png", strPair[0].first);
- ASSERT_EQ(boost::none, strPair[0].second);
-
- ASSERT_EQ(255, launchData.background_color.get()->red);
- ASSERT_EQ(0, launchData.background_color.get()->green);
- ASSERT_EQ(0, launchData.background_color.get()->blue);
-
- strPair = launchData.images;
- ASSERT_EQ(1, strPair.size());
- ASSERT_EQ("default_image.gif", strPair[0].first);
- ASSERT_EQ(boost::none, strPair[0].second);
-
- std::vector<std::string> strData = launchData.image_border;
- ASSERT_EQ(6, strData.size());
- ASSERT_EQ("30px", strData[0]);
- ASSERT_EQ("30px", strData[1]);
- ASSERT_EQ("20px", strData[2]);
- ASSERT_EQ("10px", strData[3]);
- ASSERT_EQ("repeat", strData[4]);
- ASSERT_EQ("round", strData[5]);
-}
-
-TEST_F(LaunchScreenHandlerTest, ValidMultiScreenOrientation) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
-
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
-
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
-
- std::shared_ptr<const wgt::parse::LaunchScreenInfo> data =
- std::static_pointer_cast<const wgt::parse::LaunchScreenInfo>(
- GetManifestData(wgt::parse::LaunchScreenInfo::Key()));
- ASSERT_EQ(wgt::parse::ReadyWhen::FIRSTPAINT, data->ready_when());
-
- std::map<wgt::parse::ScreenOrientation, wgt::parse::LaunchScreenData>
- testData = data->launch_screen_data();
- ASSERT_EQ(3, testData.size());
-
- wgt::parse::LaunchScreenData launchData =
- testData.find(wgt::parse::ScreenOrientation::AUTO)->second;
- ASSERT_EQ(255, launchData.background_color.get()->red);
- ASSERT_EQ(0, launchData.background_color.get()->green);
- ASSERT_EQ(0, launchData.background_color.get()->blue);
-
- launchData = testData.find(wgt::parse::ScreenOrientation::PORTRAIT)->second;
- ASSERT_EQ(0, launchData.background_color.get()->red);
- ASSERT_EQ(255, launchData.background_color.get()->green);
- ASSERT_EQ(0, launchData.background_color.get()->blue);
-
- launchData = testData.find(wgt::parse::ScreenOrientation::LANDSCAPE)->second;
- ASSERT_EQ(0, launchData.background_color.get()->red);
- ASSERT_EQ(0, launchData.background_color.get()->green);
- ASSERT_EQ(255, launchData.background_color.get()->blue);
-}
-
-TEST_F(LaunchScreenHandlerTest, ValidMultiImages) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
-
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
-
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
-
- std::shared_ptr<const wgt::parse::LaunchScreenInfo> data =
- std::static_pointer_cast<const wgt::parse::LaunchScreenInfo>(
- GetManifestData(wgt::parse::LaunchScreenInfo::Key()));
- ASSERT_EQ(wgt::parse::ReadyWhen::FIRSTPAINT, data->ready_when());
-
- std::map<wgt::parse::ScreenOrientation, wgt::parse::LaunchScreenData>
- testData = data->launch_screen_data();
- ASSERT_EQ(1, testData.size());
-
- wgt::parse::LaunchScreenData launchData =
- testData.find(wgt::parse::ScreenOrientation::AUTO)->second;
- std::vector<std::pair<std::string, boost::optional<int>>> strPair =
- launchData.images;
- ASSERT_EQ(2, strPair.size());
- ASSERT_EQ("default_image.gif", strPair[0].first);
- ASSERT_EQ(1, strPair[0].second);
- ASSERT_EQ("default_image2x.jpg", strPair[1].first);
- ASSERT_EQ(2, strPair[1].second);
-}
-
-TEST_F(LaunchScreenHandlerTest, ValidMultiBackgroundImages) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
-
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
-
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
-
- std::shared_ptr<const wgt::parse::LaunchScreenInfo> data =
- std::static_pointer_cast<const wgt::parse::LaunchScreenInfo>(
- GetManifestData(wgt::parse::LaunchScreenInfo::Key()));
- ASSERT_EQ(wgt::parse::ReadyWhen::FIRSTPAINT, data->ready_when());
-
- std::map<wgt::parse::ScreenOrientation, wgt::parse::LaunchScreenData>
- testData = data->launch_screen_data();
- ASSERT_EQ(1, testData.size());
-
- wgt::parse::LaunchScreenData launchData =
- testData.find(wgt::parse::ScreenOrientation::AUTO)->second;
- std::vector<std::pair<std::string, boost::optional<int>>> strPair =
- launchData.background_images;
- ASSERT_EQ(2, strPair.size());
- ASSERT_EQ("bg_image.png", strPair[0].first);
- ASSERT_EQ(1, strPair[0].second);
- ASSERT_EQ("bg_image2x.bmp", strPair[1].first);
- ASSERT_EQ(2, strPair[1].second);
-}
-
-TEST_F(LaunchScreenHandlerTest, ValidComplex) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
-
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
-
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
-
- std::shared_ptr<const wgt::parse::LaunchScreenInfo> data =
- std::static_pointer_cast<const wgt::parse::LaunchScreenInfo>(
- GetManifestData(wgt::parse::LaunchScreenInfo::Key()));
- ASSERT_EQ(wgt::parse::ReadyWhen::FIRSTPAINT, data->ready_when());
-
- std::map<wgt::parse::ScreenOrientation, wgt::parse::LaunchScreenData>
- testData = data->launch_screen_data();
- ASSERT_EQ(3, testData.size());
-
- wgt::parse::LaunchScreenData launchData =
- testData.find(wgt::parse::ScreenOrientation::AUTO)->second;
- std::vector<std::pair<std::string, boost::optional<int>>> strPair =
- launchData.background_images;
- ASSERT_EQ(2, strPair.size());
- ASSERT_EQ("bg_image.png", strPair[0].first);
- ASSERT_EQ(1, strPair[0].second);
- ASSERT_EQ("bg_image2x.bmp", strPair[1].first);
- ASSERT_EQ(2, strPair[1].second);
-
- ASSERT_EQ(255, launchData.background_color.get()->red);
- ASSERT_EQ(0, launchData.background_color.get()->green);
- ASSERT_EQ(0, launchData.background_color.get()->blue);
-
- strPair = launchData.images;
- ASSERT_EQ(2, strPair.size());
- ASSERT_EQ("default_image.gif", strPair[0].first);
- ASSERT_EQ(1, strPair[0].second);
- ASSERT_EQ("default_image2x.jpg", strPair[1].first);
- ASSERT_EQ(2, strPair[1].second);
-
- std::vector<std::string> strData = launchData.image_border;
- ASSERT_EQ(6, strData.size());
- ASSERT_EQ("30px", strData[0]);
- ASSERT_EQ("30px", strData[1]);
- ASSERT_EQ("20px", strData[2]);
- ASSERT_EQ("10px", strData[3]);
- ASSERT_EQ("repeat", strData[4]);
- ASSERT_EQ("round", strData[5]);
-
- launchData = testData.find(wgt::parse::ScreenOrientation::PORTRAIT)->second;
- strPair = launchData.background_images;
- ASSERT_EQ(1, strPair.size());
- ASSERT_EQ("bg_image.png", strPair[0].first);
- ASSERT_EQ(boost::none, strPair[0].second);
-
- ASSERT_EQ(0, launchData.background_color.get()->red);
- ASSERT_EQ(255, launchData.background_color.get()->green);
- ASSERT_EQ(0, launchData.background_color.get()->blue);
-
- strPair = launchData.images;
- ASSERT_EQ(1, strPair.size());
- ASSERT_EQ("portrait_image.png", strPair[0].first);
- ASSERT_EQ(boost::none, strPair[0].second);
-
- strData = launchData.image_border;
- ASSERT_EQ(1, strData.size());
- ASSERT_EQ("repeat", strData[0]);
-
- launchData = testData.find(wgt::parse::ScreenOrientation::LANDSCAPE)->second;
- strPair = launchData.background_images;
- ASSERT_EQ(1, strPair.size());
- ASSERT_EQ("bg_image.png", strPair[0].first);
- ASSERT_EQ(boost::none, strPair[0].second);
-
- ASSERT_EQ(0, launchData.background_color.get()->red);
- ASSERT_EQ(0, launchData.background_color.get()->green);
- ASSERT_EQ(255, launchData.background_color.get()->blue);
-
- strPair = launchData.images;
- ASSERT_EQ(1, strPair.size());
- ASSERT_EQ("landscape_image.gif", strPair[0].first);
- ASSERT_EQ(boost::none, strPair[0].second);
-
- strData = launchData.image_border;
- ASSERT_EQ(1, strData.size());
- ASSERT_EQ("repeat", strData[0]);
-}
-
-TEST_F(LaunchScreenHandlerTest, InvalidNamespace) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
-
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
-
- ASSERT_FALSE(ParseAppManifest());
-}
-
-TEST_F(LaunchScreenHandlerTest, Empty) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
-
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
-
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
-
- std::shared_ptr<const wgt::parse::LaunchScreenInfo> data =
- std::static_pointer_cast<const wgt::parse::LaunchScreenInfo>(
- GetManifestData(wgt::parse::LaunchScreenInfo::Key()));
- ASSERT_EQ(wgt::parse::ReadyWhen::FIRSTPAINT, data->ready_when());
-
- std::map<wgt::parse::ScreenOrientation, wgt::parse::LaunchScreenData>
- testData = data->launch_screen_data();
- ASSERT_EQ(0, testData.size());
-}
-
-TEST_F(LaunchScreenHandlerTest, InvalidReadyWhen) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
-
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
-
- ASSERT_FALSE(ParseAppManifest());
-}
-
-} // namespace parser
+++ /dev/null
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE-xwalk file.
-
-#include <boost/filesystem/fstream.hpp>
-#include <boost/filesystem/path.hpp>
-#include <boost/filesystem/operations.hpp>
-#include <gtest/gtest.h>
-
-#include "manifest_parser/manifest.h"
-#include "manifest_parser/manifest_util.h"
-#include "wgt_manifest_handlers/application_manifest_constants.h"
-
-namespace bf = boost::filesystem;
-
-namespace parser {
-
-class ManifestUtilTest : public testing::Test {
-};
-
-TEST_F(ManifestUtilTest, LoadApplicationWithValidPath) {
- boost::filesystem::path install_dir("/usr/share/manifest-parser-ut");
- ASSERT_TRUE(&install_dir);
- install_dir /= "test_samples";
- install_dir /= "good_manifest.xml";
-
- std::string error;
- std::shared_ptr<Manifest> manifest(
- LoadManifest(install_dir.string(), &error));
- ASSERT_TRUE(error.empty());
- EXPECT_TRUE(manifest.get());
-
- std::string app_id;
- manifest->GetString("widget.application.@id", &app_id);
- EXPECT_STREQ("nNBDOItqjN.WebSettingSample", app_id.c_str());
-}
-
-TEST_F(ManifestUtilTest,
- LoadApplicationGivesHelpfullErrorOnMissingManifest) {
- boost::filesystem::path install_dir("/usr/share/manifest-parser-ut");
- ASSERT_TRUE(&install_dir);
- install_dir /= "test_samples";
- install_dir /= "bad_manifest.xml";
- std::string error;
- std::shared_ptr<Manifest> manifest(
- LoadManifest(install_dir.string(), &error));
- ASSERT_FALSE(error.empty());
- ASSERT_STREQ("Manifest file is missing or unreadable.", error.c_str());
- EXPECT_FALSE(manifest.get());
-}
-
-// Tests IsPropSupportDir method
-TEST_F(ManifestUtilTest, IsPropSupportDirTest) {
- xmlChar kWidgetNodeKey[] = "widget";
- xmlChar kNameNodeKey[] = "name";
- xmlChar kVersionAttributeKey[] = "version";
- xmlChar kShortAttributeKey[] = "short";
- xmlNode node, sec_node;
- node.name = kWidgetNodeKey;
- sec_node.name = kNameNodeKey;
- xmlAttr attr, sec_attr;
- attr.name = kVersionAttributeKey;
- sec_attr.name = kShortAttributeKey;
- ASSERT_TRUE(IsPropSupportDir(&node, &attr));
- ASSERT_TRUE(IsPropSupportDir(&sec_node, &sec_attr));
- ASSERT_TRUE(!IsPropSupportDir(&node, &sec_attr));
- ASSERT_TRUE(!IsPropSupportDir(&sec_node, &attr));
- ASSERT_TRUE(!IsPropSupportDir(&node, &sec_attr));
-}
-
-// Tests IsElementSupportSpanAndDir method
-TEST_F(ManifestUtilTest, IsElementSupportSpanAndDirTest) {
- std::map <const char*, bool> nodeNames = {
- { "name", true },
- { "description", true },
- { "author", true },
- { "license", true },
- { "badlicense", false }
- };
- xmlNode node;
- for (const auto& p : nodeNames) {
- node.name = reinterpret_cast<xmlChar*>(const_cast<char*>(p.first));
- EXPECT_TRUE(IsElementSupportSpanAndDir(&node) == p.second);
- }
-}
-
-// Tests IsTrimRequiredForElement
-TEST_F(ManifestUtilTest, IsTrimRequiredForElementTest) {
- std::map<const char*, bool> elements {
- { "name", true },
- { "author", true },
- { "badname", false },
- { "badauthor", false }
- };
- xmlNode node;
- for (const auto& p : elements) {
- node.name = reinterpret_cast<xmlChar*>(const_cast<char*>(p.first));
- EXPECT_TRUE(IsTrimRequiredForElement(&node) == p.second);
- }
-}
-
-// Tests IsTrimRequiredForProp method
-TEST_F(ManifestUtilTest, IsTrimRequiredForPropTest) {
- struct node{
- bool operator <(const node& rhs) const {
- return node_name_ < rhs.node_name_;
- }
- const char* node_name_;
- const char* attr_name_;
- };
-
- std::map<node, bool> nodes = {
- { {"widget", "id"}, true },
- { {"widget", "version"}, true },
- { {"widget", "defaultlocale"}, true },
- { {"name", "short"}, true },
- { {"author", "email"}, true },
- { {"author", "href"}, true },
- { {"license", "href"}, true },
- { {"icon", "path"}, true },
- { {"widget", "email"}, false },
- { {"name", "path"}, false },
- { {"author", "id"}, false }
- };
-
- xmlNode node;
- xmlAttr attr;
- for (const auto& p : nodes) {
- node.name =
- reinterpret_cast<xmlChar*>(const_cast<char*>(p.first.node_name_));
- attr.name =
- reinterpret_cast<xmlChar*>(const_cast<char*>(p.first.attr_name_));
- EXPECT_TRUE(IsTrimRequiredForProp(&node, &attr) == p.second);
- }
-}
-
-// Tests GetNodeDir method with proper values
-TEST_F(ManifestUtilTest, GetNodeDirTestProperValues) {
- const char* xml = "<widget dir=\"rtl\">"
- "<name>ppa emoS</name>"
- "</widget>";
- xmlDoc* doc = xmlParseMemory(xml, strlen(xml));
- ASSERT_TRUE(doc);
- xmlNode* root = doc->children;
- ASSERT_TRUE(root);
- std::string inherit_dir("ltr");
- EXPECT_STREQ("rtl", GetNodeDir(root, inherit_dir).c_str());
-}
-
-// Tests GetNodeDir method with default dir
-TEST_F(ManifestUtilTest, GetNodeDirTestDefaultValues) {
- const char* xml = "<widget>"
- "<name>Some app</name>"
- "</widget>";
- xmlDoc* doc = xmlParseMemory(xml, strlen(xml));
- ASSERT_TRUE(doc);
- xmlNode* root = doc->children;
- ASSERT_TRUE(root);
- std::string inherit_dir("ltr");
- EXPECT_STREQ("ltr", GetNodeDir(root, inherit_dir).c_str());
-}
-
-// Tests GetNodeText method with rtl text direction
-TEST_F(ManifestUtilTest, GetNodeTextTestXmlElementNode) {
- const char* xml = "<widget dir=\"rtl\">"
- "<name>ppa emoS</name>"
- "</widget>";
- std::map<int, char> control_chars = {
- { 0, '\xe2' }, { 1, '\x80' }, { 2, '\xab' },
- { 14, '\xe2' }, { 15, '\x80' }, { 16, '\xac' },
- };
- xmlDoc* doc = xmlParseMemory(xml, strlen(xml));
- ASSERT_TRUE(doc);
- xmlNode* root = doc->children;
- ASSERT_TRUE(root);
- std::string inherit_dir("ltr");
- std::string s = GetNodeText(root, inherit_dir);
- for (const auto& p : control_chars)
- EXPECT_EQ(p.second, s[p.first]);
-}
-
-// Tests GetNodeText method with rtl and ltr text direction
-TEST_F(ManifestUtilTest, GetNodeTextTestTwoXmlElementNodes) {
- const char* xml = "<widget dir=\"rtl\">"
- "<name>ppa emoS</name>"
- "<description dir=\"ltr\">Desc</description>"
- "</widget>";
- std::map<int, char> control_chars = {
- { 0, '\xe2' }, { 1, '\x80' }, { 2, '\xab' },
- { 14, '\xe2' }, { 15, '\x80' }, { 16, '\xac' },
- { 17, '\xe2' }, { 18, '\x80' }, { 19, '\xaa' },
- { 24, '\xe2' }, { 25, '\x80' }, { 26, '\xac' }
- };
- xmlDoc* doc = xmlParseMemory(xml, strlen(xml));
- ASSERT_TRUE(doc);
- xmlNode* root = doc->children;
- ASSERT_TRUE(root);
- std::string inherit_dir("ltr");
- std::string s = GetNodeText(root, inherit_dir);
- for (const auto& p : control_chars)
- EXPECT_EQ(p.second, s[p.first]);
-}
-
-// Tests LoadXMLNode method with proper xml tree
-TEST_F(ManifestUtilTest, LoadXMLNodeTestProperXMLTree) {
- const char* xml = "<root>"
- "<widget dir=\"ltr\">"
- "<name short=\"SA\">Some app</name>"
- "<description>Desc</description>"
- "<author dir=\"rtl\">enoemoS</author>"
- "</widget>"
- "</root>";
- std::map<std::string, std::string> expected_vals = {
- { "widget.@dir", "ltr" },
- { "widget.name.@short",
- std::string("\xE2\x80\xAA") + "SA" + "\xE2\x80\xAC" },
- { "widget.name.#text",
- std::string("\xE2\x80\xAA") + "Some app" + "\xE2\x80\xAC" },
- { "widget.description.#text",
- std::string("\xE2\x80\xAA") + "Desc" + "\xE2\x80\xAC" },
- { "widget.author.@dir", "rtl" },
- { "widget.author.#text",
- std::string("\xE2\x80\xAB") + "enoemoS" + "\xE2\x80\xAC" }
- };
-
- xmlDoc* doc = xmlParseMemory(xml, strlen(xml));
- ASSERT_TRUE(doc);
- xmlNode* root = doc->children;
- std::unique_ptr<DictionaryValue> val = LoadXMLNode(root);
-
- std::string test_str;
- for (const auto& p : expected_vals) {
- ASSERT_TRUE(val->GetString(p.first, &test_str));
- EXPECT_STREQ(p.second.c_str(), test_str.c_str());
- }
-}
-
-} // namespace parser
+++ /dev/null
-// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
-// Use of this source code is governed by a apache-2.0 license that can be
-// found in the LICENSE file.
-
-#include <boost/filesystem/path.hpp>
-
-#include <gtest/gtest.h>
-
-#include <manifest_parser/manifest.h>
-#include <manifest_parser/manifest_util.h>
-
-#include <memory>
-#include <vector>
-
-#include "unit_tests/base_test.h"
-#include "wgt_manifest_handlers/application_manifest_constants.h"
-#include "wgt_manifest_handlers/service_handler.h"
-
-namespace bf = boost::filesystem;
-
-namespace {
-
-const char kWidgetKey[] = "widget";
-const char kTizenServiceKey[] = "widget.service";
-const char kTizenServiceContentKey[] = "content";
-const char kTizenServiceContentSrcKey[] = "@src";
-const char kTizenServiceIdKey[] = "@id";
-const char kTizenNamespacePrefix[] = "http://tizen.org/ns/widgets";
-const char kTizenServiceOnBootKey[] = "@on-boot";
-const char kTizenServiceNameKey[] = "name";
-const char kTizenServiceCategoryNameKey[] = "@name";
-const char kTizenServiceCategoryKey[] = "category";
-const char kTizenServiceIconKey[] = "icon";
-const char kNamespaceKey[] = "@namespace";
-const char kServiceKey[] = "service";
-const char kTizenServiceAutoRestartKey[] = "@auto-restart";
-const char kTizenServiceIconSrcKey[] = "@src";
-const char kTizenServiceDescriptionKey[] = "description";
-const char kTizenServiceMetadataKeyKey[] = "@key";
-const char kTizenServiceMetadataValueKey[] = "@value";
-const char kTizenServiceMetadataKey[] = "metadata";
-const char kXmlLangKey[] = "@lang";
-const char kXmlTextKey[] = "#text";
-
-
-struct RegistryPolicyForService {
- static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
- std::unique_ptr<parser::ManifestHandlerRegistry> registry;
- registry.reset(new parser::ManifestHandlerRegistry());
- registry->RegisterManifestHandler(new wgt::parse::ServiceHandler());
- return registry;
- }
-};
-
-} // namespace
-
-namespace parser {
-
-class ServiceHandlerTest : public BaseTest<RegistryPolicyForService> {
-};
-
-TEST_F(ServiceHandlerTest, NoServiceEntry) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntryDefault) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
- service->Set(kTizenServiceContentKey, content.release());
- service->Set(kTizenServiceNameKey, name.release());
- service->SetString(kTizenServiceIdKey, "correct001.appId");
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
- std::shared_ptr<const wgt::parse::ServiceList> service_list =
- std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
- GetManifestData(kTizenServiceKey));
- ASSERT_TRUE(!!service_list);
- ASSERT_EQ(service_list->services.size(), 1);
- ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
- ASSERT_EQ(service_list->services[0].auto_restart(), false);
- ASSERT_EQ(service_list->services[0].on_boot(), false);
- ASSERT_EQ(service_list->services[0].content(), "service.js");
- ASSERT_EQ(service_list->services[0].names().size(), 1);
- ASSERT_EQ(service_list->services[0].names()[0].second, "name");
- ASSERT_EQ(service_list->services[0].categories().size(), 0);
- ASSERT_EQ(service_list->services[0].metadata_set().size(), 0);
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntryOnBootOn) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(::kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
- service->Set(kTizenServiceContentKey, content.release());
- service->Set(kTizenServiceNameKey, name.release());
- service->SetString(kTizenServiceIdKey, "correct002.appId");
- service->SetString(kTizenServiceOnBootKey, "true");
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
- std::shared_ptr<const wgt::parse::ServiceList> service_list =
- std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
- GetManifestData(kTizenServiceKey));
- ASSERT_TRUE(!!service_list);
- ASSERT_EQ(service_list->services.size(), 1);
- ASSERT_EQ(service_list->services[0].id(), "correct002.appId");
- ASSERT_EQ(service_list->services[0].auto_restart(), false);
- ASSERT_EQ(service_list->services[0].on_boot(), true);
- ASSERT_EQ(service_list->services[0].content(), "service.js");
- ASSERT_EQ(service_list->services[0].names().size(), 1);
- ASSERT_EQ(service_list->services[0].names()[0].second, "name");
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntryAutoRestartOn) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
- service->Set(kTizenServiceContentKey, content.release());
- service->Set(kTizenServiceNameKey, name.release());
- service->SetString(kTizenServiceIdKey, "correct003.appId");
- service->SetString(kTizenServiceOnBootKey, "false");
- service->SetString(kTizenServiceAutoRestartKey, "true");
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
- std::shared_ptr<const wgt::parse::ServiceList> service_list =
- std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
- GetManifestData(kTizenServiceKey));
- ASSERT_TRUE(!!service_list);
- ASSERT_EQ(service_list->services.size(), 1);
- ASSERT_EQ(service_list->services[0].id(), "correct003.appId");
- ASSERT_EQ(service_list->services[0].auto_restart(), true);
- ASSERT_EQ(service_list->services[0].on_boot(), false);
- ASSERT_EQ(service_list->services[0].content(), "service.js");
- ASSERT_EQ(service_list->services[0].names().size(), 1);
- ASSERT_EQ(service_list->services[0].names()[0].second, "name");
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntryWrongId) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
- service->Set(kTizenServiceContentKey, content.release());
- service->Set(kTizenServiceNameKey, name.release());
- service->SetString(kTizenServiceIdKey, "wrongid.appId");
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_FALSE(ValidateAppManifest());
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntryIdTypeMismatch) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
- service->Set(kTizenServiceContentKey, content.release());
- service->Set(kTizenServiceNameKey, name.release());
- service->SetInteger(kTizenServiceIdKey, 1410);
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_FALSE(ParseAppManifest());
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntryNameMissing) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- service->Set(kTizenServiceContentKey, content.release());
- service->SetInteger(kTizenServiceIdKey, 1410);
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_FALSE(ParseAppManifest());
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntryIdSingleNameNotInTizen) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
- service->Set(kTizenServiceContentKey, content.release());
- service->SetInteger(kTizenServiceIdKey, 1410);
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_FALSE(ParseAppManifest());
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntryMultipleNames) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
-
- std::unique_ptr<ListValue> name_list(new ListValue());
- for (auto& pair : {std::make_pair(std::string(), "first"),
- std::make_pair(std::string("en"), "second"),
- std::make_pair(std::string("de"), "third")}) {
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- if (!pair.first.empty()) name->SetString(kXmlLangKey, pair.first);
- name->SetString(kXmlTextKey, pair.second);
- name_list->Append(name.release());
- }
- service->Set(kTizenServiceNameKey, name_list.release());
-
- service->Set(kTizenServiceContentKey, content.release());
- service->SetString(kTizenServiceIdKey, "correct003.appId");
- service->SetString(kTizenServiceOnBootKey, "false");
- service->SetString(kTizenServiceAutoRestartKey, "true");
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
- std::shared_ptr<const wgt::parse::ServiceList> service_list =
- std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
- GetManifestData(kTizenServiceKey));
- ASSERT_TRUE(!!service_list);
- ASSERT_EQ(service_list->services.size(), 1);
- ASSERT_EQ(service_list->services[0].id(), "correct003.appId");
- ASSERT_EQ(service_list->services[0].auto_restart(), true);
- ASSERT_EQ(service_list->services[0].on_boot(), false);
- ASSERT_EQ(service_list->services[0].content(), "service.js");
- ASSERT_EQ(service_list->services[0].names().size(), 3);
- ASSERT_EQ(service_list->services[0].names()[0].first, "");
- ASSERT_EQ(service_list->services[0].names()[0].second, "first");
- ASSERT_EQ(service_list->services[0].names()[1].first, "en");
- ASSERT_EQ(service_list->services[0].names()[1].second, "second");
- ASSERT_EQ(service_list->services[0].names()[2].first, "de");
- ASSERT_EQ(service_list->services[0].names()[2].second, "third");
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntryIdSingleContentNotInTizen) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
- service->Set(kTizenServiceNameKey, name.release());
- service->SetInteger(kTizenServiceIdKey, 1410);
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_FALSE(ParseAppManifest());
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntryContentMissing) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
- service->Set(kTizenServiceNameKey, name.release());
- service->SetInteger(kTizenServiceIdKey, 1410);
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_FALSE(ParseAppManifest());
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntryMultipleContents) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
-
- std::unique_ptr<ListValue> content_list(new ListValue());
- for (auto& start_file : {"content1.js", "content2.js"}) {
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, start_file);
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- content_list->Append(content.release());
- }
- service->Set(kTizenServiceContentKey, content_list.release());
-
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
- service->Set(kTizenServiceNameKey, name.release());
- service->SetInteger(kTizenServiceIdKey, 1410);
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_FALSE(ParseAppManifest());
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntrySingleIcon) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- std::unique_ptr<DictionaryValue> icon(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
- icon->SetString(kNamespaceKey, kTizenNamespacePrefix);
- icon->SetString(kTizenServiceIconSrcKey, "my_icon.png");
- service->Set(kTizenServiceIconKey, icon.release());
- service->Set(kTizenServiceContentKey, content.release());
- service->Set(kTizenServiceNameKey, name.release());
- service->SetString(kTizenServiceIdKey, "correct001.appId");
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
- std::shared_ptr<const wgt::parse::ServiceList> service_list =
- std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
- GetManifestData(kTizenServiceKey));
- ASSERT_TRUE(!!service_list);
- ASSERT_EQ(service_list->services.size(), 1);
- ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
- ASSERT_EQ(service_list->services[0].auto_restart(), false);
- ASSERT_EQ(service_list->services[0].on_boot(), false);
- ASSERT_EQ(service_list->services[0].content(), "service.js");
- ASSERT_EQ(service_list->services[0].names().size(), 1);
- ASSERT_EQ(service_list->services[0].names()[0].second, "name");
- ASSERT_EQ(service_list->services[0].icon(), "my_icon.png");
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntrySingleIconNotInTizen) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- std::unique_ptr<DictionaryValue> icon(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
- icon->SetString(kTizenServiceIconSrcKey, "my_icon.png");
- service->Set(kTizenServiceIconKey, icon.release());
- service->Set(kTizenServiceContentKey, content.release());
- service->Set(kTizenServiceNameKey, name.release());
- service->SetString(kTizenServiceIdKey, "correct001.appId");
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
- std::shared_ptr<const wgt::parse::ServiceList> service_list =
- std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
- GetManifestData(kTizenServiceKey));
- ASSERT_TRUE(!!service_list);
- ASSERT_EQ(service_list->services.size(), 1);
- ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
- ASSERT_EQ(service_list->services[0].auto_restart(), false);
- ASSERT_EQ(service_list->services[0].on_boot(), false);
- ASSERT_EQ(service_list->services[0].content(), "service.js");
- ASSERT_EQ(service_list->services[0].names().size(), 1);
- ASSERT_EQ(service_list->services[0].names()[0].second, "name");
- ASSERT_EQ(service_list->services[0].icon(), "");
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntryMultipleIcon) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
-
- std::unique_ptr<ListValue> icon_list(new ListValue());
- for (auto& icon_value : {"icon1.png", "icon2.png"}) {
- std::unique_ptr<DictionaryValue> icon(new DictionaryValue());
- icon->SetString(kNamespaceKey, kTizenNamespacePrefix);
- icon->SetString(kTizenServiceIconSrcKey, icon_value);
- icon_list->Append(icon.release());
- }
-
- service->Set(kTizenServiceIconKey, icon_list.release());
- service->Set(kTizenServiceContentKey, content.release());
- service->Set(kTizenServiceNameKey, name.release());
- service->SetString(kTizenServiceIdKey, "correct001.appId");
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_FALSE(ParseAppManifest());
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntrySingleDescription) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- std::unique_ptr<DictionaryValue> description(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
- description->SetString(kNamespaceKey, kTizenNamespacePrefix);
- description->SetString(kXmlTextKey, "my description");
- service->Set(kTizenServiceDescriptionKey, description.release());
- service->Set(kTizenServiceContentKey, content.release());
- service->Set(kTizenServiceNameKey, name.release());
- service->SetString(kTizenServiceIdKey, "correct001.appId");
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
- std::shared_ptr<const wgt::parse::ServiceList> service_list =
- std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
- GetManifestData(kTizenServiceKey));
- ASSERT_TRUE(!!service_list);
- ASSERT_EQ(service_list->services.size(), 1);
- ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
- ASSERT_EQ(service_list->services[0].auto_restart(), false);
- ASSERT_EQ(service_list->services[0].on_boot(), false);
- ASSERT_EQ(service_list->services[0].content(), "service.js");
- ASSERT_EQ(service_list->services[0].names().size(), 1);
- ASSERT_EQ(service_list->services[0].names()[0].second, "name");
- ASSERT_EQ(service_list->services[0].description(), "my description");
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntrySingleDescriptionNotInTizen) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- std::unique_ptr<DictionaryValue> description(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
- description->SetString(kXmlTextKey, "my description");
- service->Set(kTizenServiceDescriptionKey, description.release());
- service->Set(kTizenServiceContentKey, content.release());
- service->Set(kTizenServiceNameKey, name.release());
- service->SetString(kTizenServiceIdKey, "correct001.appId");
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
- std::shared_ptr<const wgt::parse::ServiceList> service_list =
- std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
- GetManifestData(kTizenServiceKey));
- ASSERT_TRUE(!!service_list);
- ASSERT_EQ(service_list->services.size(), 1);
- ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
- ASSERT_EQ(service_list->services[0].auto_restart(), false);
- ASSERT_EQ(service_list->services[0].on_boot(), false);
- ASSERT_EQ(service_list->services[0].content(), "service.js");
- ASSERT_EQ(service_list->services[0].names().size(), 1);
- ASSERT_EQ(service_list->services[0].names()[0].second, "name");
- ASSERT_EQ(service_list->services[0].description(), "");
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntryMultipleDescription) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
-
- std::unique_ptr<ListValue> description_list(new ListValue());
- for (auto& desc_value : {"1", "2"}) {
- std::unique_ptr<DictionaryValue> description(new DictionaryValue());
- description->SetString(kNamespaceKey, kTizenNamespacePrefix);
- description->SetString(kXmlTextKey, desc_value);
- description_list->Append(description.release());
- }
- service->Set(kTizenServiceDescriptionKey, description_list.release());
-
- service->Set(kTizenServiceContentKey, content.release());
- service->Set(kTizenServiceNameKey, name.release());
- service->SetString(kTizenServiceIdKey, "correct001.appId");
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_FALSE(ParseAppManifest());
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntrySingleMetadata) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- std::unique_ptr<DictionaryValue> metadata(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
- metadata->SetString(kNamespaceKey, kTizenNamespacePrefix);
- metadata->SetString(kTizenServiceMetadataKeyKey, "unique key");
- metadata->SetString(kTizenServiceMetadataValueKey, "some value");
- service->Set(kTizenServiceMetadataKey, metadata.release());
- service->Set(kTizenServiceContentKey, content.release());
- service->Set(kTizenServiceNameKey, name.release());
- service->SetString(kTizenServiceIdKey, "correct001.appId");
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
- std::shared_ptr<const wgt::parse::ServiceList> service_list =
- std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
- GetManifestData(kTizenServiceKey));
- ASSERT_TRUE(!!service_list);
- ASSERT_EQ(service_list->services.size(), 1);
- ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
- ASSERT_EQ(service_list->services[0].auto_restart(), false);
- ASSERT_EQ(service_list->services[0].on_boot(), false);
- ASSERT_EQ(service_list->services[0].content(), "service.js");
- ASSERT_EQ(service_list->services[0].names().size(), 1);
- ASSERT_EQ(service_list->services[0].names()[0].second, "name");
- ASSERT_EQ(service_list->services[0].metadata_set().size(), 1);
- ASSERT_EQ(service_list->services[0].metadata_set()[0].first, "unique key");
- ASSERT_EQ(service_list->services[0].metadata_set()[0].second, "some value");
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntrySingleMetadataNotInTizen) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- std::unique_ptr<DictionaryValue> metadata(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
- metadata->SetString(kTizenServiceMetadataKeyKey, "unique key");
- metadata->SetString(kTizenServiceMetadataValueKey, "some value");
- service->Set(kTizenServiceMetadataKey, metadata.release());
- service->Set(kTizenServiceContentKey, content.release());
- service->Set(kTizenServiceNameKey, name.release());
- service->SetString(kTizenServiceIdKey, "correct001.appId");
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
- std::shared_ptr<const wgt::parse::ServiceList> service_list =
- std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
- GetManifestData(kTizenServiceKey));
- ASSERT_TRUE(!!service_list);
- ASSERT_EQ(service_list->services.size(), 1);
- ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
- ASSERT_EQ(service_list->services[0].auto_restart(), false);
- ASSERT_EQ(service_list->services[0].on_boot(), false);
- ASSERT_EQ(service_list->services[0].content(), "service.js");
- ASSERT_EQ(service_list->services[0].names().size(), 1);
- ASSERT_EQ(service_list->services[0].names()[0].second, "name");
- ASSERT_EQ(service_list->services[0].metadata_set().size(), 0);
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntryMultipleMetadata) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
-
- std::unique_ptr<ListValue> metadata_list(new ListValue());
- std::unique_ptr<DictionaryValue> metadata(new DictionaryValue());
- metadata->SetString(kNamespaceKey, kTizenNamespacePrefix);
- metadata->SetString(kTizenServiceMetadataKeyKey, "unique key");
- metadata->SetString(kTizenServiceMetadataValueKey, "some value");
- metadata_list->Append(metadata.release());
- std::unique_ptr<DictionaryValue> metadata2(new DictionaryValue());
- metadata2->SetString(kNamespaceKey, kTizenNamespacePrefix);
- metadata2->SetString(kTizenServiceMetadataKeyKey, "unique key 2");
- metadata_list->Append(metadata2.release());
- service->Set(kTizenServiceMetadataKey, metadata_list.release());
-
- service->Set(kTizenServiceContentKey, content.release());
- service->Set(kTizenServiceNameKey, name.release());
- service->SetString(kTizenServiceIdKey, "correct001.appId");
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
- std::shared_ptr<const wgt::parse::ServiceList> service_list =
- std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
- GetManifestData(kTizenServiceKey));
- ASSERT_TRUE(!!service_list);
- ASSERT_EQ(service_list->services.size(), 1);
- ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
- ASSERT_EQ(service_list->services[0].auto_restart(), false);
- ASSERT_EQ(service_list->services[0].on_boot(), false);
- ASSERT_EQ(service_list->services[0].content(), "service.js");
- ASSERT_EQ(service_list->services[0].names().size(), 1);
- ASSERT_EQ(service_list->services[0].names()[0].second, "name");
- ASSERT_EQ(service_list->services[0].metadata_set().size(), 2);
- ASSERT_EQ(service_list->services[0].metadata_set()[0].first, "unique key");
- ASSERT_EQ(service_list->services[0].metadata_set()[0].second, "some value");
- ASSERT_EQ(service_list->services[0].metadata_set()[1].first, "unique key 2");
- ASSERT_EQ(service_list->services[0].metadata_set()[1].second, "");
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntryMultipleMetadataMixedNamespaces) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
-
- std::unique_ptr<ListValue> metadata_list(new ListValue());
-
- std::unique_ptr<DictionaryValue> metadata(new DictionaryValue());
- metadata->SetString(kNamespaceKey, kTizenNamespacePrefix);
- metadata->SetString(kTizenServiceMetadataKeyKey, "unique key");
- metadata->SetString(kTizenServiceMetadataValueKey, "some value");
- metadata_list->Append(metadata.release());
-
- std::unique_ptr<DictionaryValue> metadata2(new DictionaryValue());
- metadata2->SetString(kNamespaceKey, kTizenNamespacePrefix);
- metadata2->SetString(kTizenServiceMetadataKeyKey, "unique key 2");
- metadata_list->Append(metadata2.release());
-
- std::unique_ptr<DictionaryValue> metadata3(new DictionaryValue());
- metadata3->SetString(kTizenServiceMetadataKeyKey, "unique key 3");
- metadata_list->Append(metadata3.release());
-
- service->Set(kTizenServiceMetadataKey, metadata_list.release());
-
- service->Set(kTizenServiceContentKey, content.release());
- service->Set(kTizenServiceNameKey, name.release());
- service->SetString(kTizenServiceIdKey, "correct001.appId");
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
- std::shared_ptr<const wgt::parse::ServiceList> service_list =
- std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
- GetManifestData(kTizenServiceKey));
- ASSERT_TRUE(!!service_list);
- ASSERT_EQ(service_list->services.size(), 1);
- ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
- ASSERT_EQ(service_list->services[0].auto_restart(), false);
- ASSERT_EQ(service_list->services[0].on_boot(), false);
- ASSERT_EQ(service_list->services[0].content(), "service.js");
- ASSERT_EQ(service_list->services[0].names().size(), 1);
- ASSERT_EQ(service_list->services[0].names()[0].second, "name");
- ASSERT_EQ(service_list->services[0].metadata_set().size(), 2);
- ASSERT_EQ(service_list->services[0].metadata_set()[0].first, "unique key");
- ASSERT_EQ(service_list->services[0].metadata_set()[0].second, "some value");
- ASSERT_EQ(service_list->services[0].metadata_set()[1].first, "unique key 2");
- ASSERT_EQ(service_list->services[0].metadata_set()[1].second, "");
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntrySingleCategory) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- std::unique_ptr<DictionaryValue> category(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
- category->SetString(kNamespaceKey, kTizenNamespacePrefix);
- category->SetString(kTizenServiceCategoryNameKey, "category name");
- service->Set(kTizenServiceCategoryKey, category.release());
- service->Set(kTizenServiceContentKey, content.release());
- service->Set(kTizenServiceNameKey, name.release());
- service->SetString(kTizenServiceIdKey, "correct001.appId");
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
- std::shared_ptr<const wgt::parse::ServiceList> service_list =
- std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
- GetManifestData(kTizenServiceKey));
- ASSERT_TRUE(!!service_list);
- ASSERT_EQ(service_list->services.size(), 1);
- ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
- ASSERT_EQ(service_list->services[0].auto_restart(), false);
- ASSERT_EQ(service_list->services[0].on_boot(), false);
- ASSERT_EQ(service_list->services[0].content(), "service.js");
- ASSERT_EQ(service_list->services[0].names().size(), 1);
- ASSERT_EQ(service_list->services[0].names()[0].second, "name");
- ASSERT_EQ(service_list->services[0].categories().size(), 1);
- ASSERT_EQ(service_list->services[0].categories()[0], "category name");
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntrySingleCategoryNotInTizen) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- std::unique_ptr<DictionaryValue> category(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
- category->SetString(kTizenServiceCategoryNameKey, "category name");
- service->Set(kTizenServiceCategoryKey, category.release());
- service->Set(kTizenServiceContentKey, content.release());
- service->Set(kTizenServiceNameKey, name.release());
- service->SetString(kTizenServiceIdKey, "correct001.appId");
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
- std::shared_ptr<const wgt::parse::ServiceList> service_list =
- std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
- GetManifestData(kTizenServiceKey));
- ASSERT_TRUE(!!service_list);
- ASSERT_EQ(service_list->services.size(), 1);
- ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
- ASSERT_EQ(service_list->services[0].auto_restart(), false);
- ASSERT_EQ(service_list->services[0].on_boot(), false);
- ASSERT_EQ(service_list->services[0].content(), "service.js");
- ASSERT_EQ(service_list->services[0].names().size(), 1);
- ASSERT_EQ(service_list->services[0].names()[0].second, "name");
- ASSERT_EQ(service_list->services[0].categories().size(), 0);
-}
-
-TEST_F(ServiceHandlerTest, SingleServiceEntryMultipleCategory) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service(new DictionaryValue());
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
-
- std::unique_ptr<ListValue> catogory_list(new ListValue());
- for (auto& name : {"category name 1", "category name 2", "category name 3"}) {
- std::unique_ptr<DictionaryValue> category(new DictionaryValue());
- category->SetString(kNamespaceKey, kTizenNamespacePrefix);
- category->SetString(kTizenServiceCategoryNameKey, name);
- catogory_list->Append(category.release());
- }
- service->Set(kTizenServiceCategoryKey, catogory_list.release());
-
- service->Set(kTizenServiceContentKey, content.release());
- service->Set(kTizenServiceNameKey, name.release());
- service->SetString(kTizenServiceIdKey, "correct001.appId");
- service->SetString(kNamespaceKey, kTizenNamespacePrefix);
- widget->Set(kServiceKey, service.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
- std::shared_ptr<const wgt::parse::ServiceList> service_list =
- std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
- GetManifestData(kTizenServiceKey));
- ASSERT_TRUE(!!service_list);
- ASSERT_EQ(service_list->services.size(), 1);
- ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
- ASSERT_EQ(service_list->services[0].auto_restart(), false);
- ASSERT_EQ(service_list->services[0].on_boot(), false);
- ASSERT_EQ(service_list->services[0].content(), "service.js");
- ASSERT_EQ(service_list->services[0].names().size(), 1);
- ASSERT_EQ(service_list->services[0].names()[0].second, "name");
- ASSERT_EQ(service_list->services[0].categories().size(), 3);
- ASSERT_EQ(service_list->services[0].categories()[0], "category name 1");
- ASSERT_EQ(service_list->services[0].categories()[1], "category name 2");
- ASSERT_EQ(service_list->services[0].categories()[2], "category name 3");
-}
-
-TEST_F(ServiceHandlerTest, MultipleServiceEntry) {
- // Set test values
- std::unique_ptr<DictionaryValue> value(new DictionaryValue());
- std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
- std::unique_ptr<ListValue> list(new ListValue());
- std::unique_ptr<DictionaryValue> service1(new DictionaryValue());
- std::unique_ptr<DictionaryValue> service2(new DictionaryValue());
- service1->SetString(kTizenServiceIdKey, "correct004.appId");
- service1->SetString(kNamespaceKey, kTizenNamespacePrefix);
- service2->SetString(kTizenServiceIdKey, "correct005.appId");
- service2->SetString(kNamespaceKey, kTizenNamespacePrefix);
- for (auto& service : {service1.get(), service2.get()}) {
- std::unique_ptr<DictionaryValue> content(new DictionaryValue());
- std::unique_ptr<DictionaryValue> name(new DictionaryValue());
- content->SetString(kTizenServiceContentSrcKey, "service.js");
- content->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kNamespaceKey, kTizenNamespacePrefix);
- name->SetString(kXmlTextKey, "name");
- service->Set(kTizenServiceContentKey, content.release());
- service->Set(kTizenServiceNameKey, name.release());
- }
- list->Append(service1.release());
- list->Append(service2.release());
- widget->Set(kServiceKey, list.release());
- value->Set(kWidgetKey, widget.release());
- std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
- SetManifest(manifest);
- // Check correctness
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
- std::shared_ptr<const wgt::parse::ServiceList> service_list =
- std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
- GetManifestData(wgt::parse::ServiceInfo::Key()));
- ASSERT_TRUE(!!service_list);
- ASSERT_EQ(service_list->services.size(), 2);
- ASSERT_EQ(service_list->services[0].id(), "correct004.appId");
- ASSERT_EQ(service_list->services[1].id(), "correct005.appId");
- ASSERT_EQ(service_list->services[0].content(), "service.js");
- ASSERT_EQ(service_list->services[0].names().size(), 1);
- ASSERT_EQ(service_list->services[0].names()[0].second, "name");
- ASSERT_EQ(service_list->services[1].content(), "service.js");
- ASSERT_EQ(service_list->services[1].names().size(), 1);
- ASSERT_EQ(service_list->services[1].names()[0].second, "name");
-}
-
-} // namespace parser
+++ /dev/null
-// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
-// Use of this source code is governed by an apache 2.0 license that can be
-// found in the LICENSE file.
-
-#include <boost/filesystem/path.hpp>
-
-#include <gtest/gtest.h>
-
-#include <manifest_parser/manifest.h>
-#include <manifest_parser/manifest_util.h>
-
-#include <memory>
-#include <vector>
-
-#include "unit_tests/base_test.h"
-#include "wgt_manifest_handlers/application_manifest_constants.h"
-#include "wgt_manifest_handlers/splash_screen_handler.h"
-
-namespace bf = boost::filesystem;
-
-namespace {
-
-const bf::path kXmlDirectory("/usr/share/manifest-parser-ut/test_samples/xmls");
-
-struct RegistryPolicyForSplash {
- static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
- std::unique_ptr<parser::ManifestHandlerRegistry> registry;
- registry.reset(new parser::ManifestHandlerRegistry());
- registry->RegisterManifestHandler(new wgt::parse::SplashScreenHandler());
- return registry;
- }
-};
-
-} // namespace
-
-namespace parser {
-
-class SplashHandlerTest : public BaseTest<RegistryPolicyForSplash> {
-};
-
-TEST_F(SplashHandlerTest, InvalidNamespace) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::SplashScreenInfo> data =
- std::static_pointer_cast<const wgt::parse::SplashScreenInfo>(
- GetManifestData(wgt::parse::SplashScreenInfo::Key()));
- ASSERT_TRUE(!data);
-}
-
-TEST_F(SplashHandlerTest, NoSrc) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
-}
-
-TEST_F(SplashHandlerTest, Valid) {
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::SplashScreenInfo> data =
- std::static_pointer_cast<const wgt::parse::SplashScreenInfo>(
- GetManifestData(wgt::parse::SplashScreenInfo::Key()));
- ASSERT_EQ(data->src(), "splash.html");
-}
-
-} // namespace parser
+++ /dev/null
-<widget id="http://yourdomain/WebSettingSample" version="1.0.0" viewmodes="maximized">
- <tizen:application id="nNBDOItqjN.WebSettingSample" package="nNBDOItqjN" required_version="2.2"/>
- <content>index.html</content>
- <feature>http://tizen.org/feature/screen.size.all</content>
- <icon>icon.png</icon>
- <name name="WebSettingSample"/>
- <tizen:privilege>http://tizen.org/privilege/websetting</tizen:privilege>
-</widget>
+++ /dev/null
-<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="AuthorSignature">
-<SignedInfo>
-<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></CanonicalizationMethod>
-<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"></SignatureMethod>
-<Reference URI="config.xml">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>iEX0LuZs81Q6Du/SkXgbMd+Qa6puMxgyRUCLqhrfpJ8=</DigestValue>
-</Reference>
-<Reference URI="icon.png">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs=</DigestValue>
-</Reference>
-<Reference URI="index.html">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>rJOIi81O4OG/Gar/hwrjvD623MpScv6TMdurRZgzDf0=</DigestValue>
-</Reference>
-<Reference URI="version.txt">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>MjYb9c/C/J56bHY6rlIjfDqkpjFtsUBjLLkco/rcfFY=</DigestValue>
-</Reference>
-<Reference URI="#prop">
-<Transforms>
-<Transform Algorithm="http://www.w3.org/2006/12/xml-c14n11"></Transform>
-</Transforms>
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>lpo8tUDs054eLlBQXiDPVDVKfw30ZZdtkRs1jd7H5K8=</DigestValue>
-</Reference>
-</SignedInfo>
-<SignatureValue>
-c7Jd7btw6Bi9MxzKVv6JY9xcegxv42DhOzZhyrjz3EMN/60dhcGJClfKBY39FwH6exMajoThyFIW
-djtnp7pqIiQJCJkGRs0vAQThcm8JniVSbUwHMcMw7WjAW5VPsLQZKmEe16YW00YkoT6KfZLC1ySw
-48WNrHrCrTcj6LZRrld=
-</SignatureValue>
-<KeyInfo>
-<X509Data>
-<X509Certificate>
-MIIC2zCCAcOgAwIBAgIGAUudC0tkMA0GCSqGSIb3DQEBBQUAMFYxGjAYBgNVBAoMEVRpemVuIEFz
-c29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4gRGV2
-ZWxvcGVycyBDQTAeFw0xMjExMDEwMDAwMDBaFw0xOTAxMDEwMDAwMDBaMFcxCzAJBgNVBAYTAlBM
-MQ8wDQYDVQQHDAZXYXJzYXcxEDAOBgNVBAoMB1NhbXN1bmcxFDASBgNVBAsMC1dlYlBsYXRmb3Jt
-MQ8wDQYDVQQDDAZhdXRob3IwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM0kQ8aPoKnJaBjk
-3ET7XdOS5C3ueSemfA8tYNihWQ3VX95CKX38ARLpaAGRSfOdo2L1vTIBtaO/UWEEl/XKQzqwem22
-A9UuLwl0rJNDeoq5Xz5oJD1z9eA+uuNde6cAcPmxRQDsilnVZNHlpATdDOeKUSs8+Y5UxPDz1c6j
-kUTpAgMBAAGjMjAwMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUF
-BwMDMA0GCSqGSIb3DQEBBQUAA4IBAQC2kGzwMPMgxRrAi3ZaRu+i8x2ApZEWW4Y5uaZ9s7p4483A
-l+RBZ1/zHhkmZaekhCm2YwOpWIkXLiQc2wm9YRq+W1OorrArl/wgxtpO7hajlCxDS3X8GgJqCy7v
-8vQYTBvNXayQaRB496mC9lLZDjRL9ycYnPk55eimL3HEYclbibDjOvks4bdN/fedA8jovir+wA+b
-tIC+GGkiwGco6URdxigydxdpNEwRECCl78YVybf9agKeowXL08kwDZN9DAHCixu76kw1qtpfwm3T
-t/lz7VB1pDFhjzfuG6runH4H257bBYLkJnSBchiNItMuK2zvTVP8HsQmBeOLAFGtsoas
-</X509Certificate>
-<X509Certificate>
-MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMRowGAYDVQQKDBFUaXplbiBBc3NvY2lh
-dGlvbjEaMBgGA1UECwwRVGl6ZW4gQXNzb2NpYXRpb24xHjAcBgNVBAMMFVRpemVuIERldmVsb3Bl
-cnMgUm9vdDAeFw0xMjAxMDEwMDAwMDBaFw0yNzAxMDEwMDAwMDBaMFYxGjAYBgNVBAoMEVRpemVu
-IEFzc29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4g
-RGV2ZWxvcGVycyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANVGhRGmMIUyBA7o
-PCz8Sxut6z6HNkF4oDIuzuKaMzRYPeWodwe9O0gmqAkToQHfwg2giRhE5GoPld0fq+OYMMwSasCu
-g8dwODx1eDeSYVuOLWRxpAmbTXOsSFi6VoWeyaPEm18JBHvZBsU5YQtgZ6Kp7MqzvQg3pXOxtajj
-vyHxiatJl+xXrHgcXC1wgyG3buty7u/Fi2mvKXJ0PRJcCjjK81dqe/Vr20sRUCrbk02zbm5ggFt/
-jIEhV8wbFRQpliobc7J4dSTKhFfrqGM8rdd54LYhD7gSI1CFSe16pUXfcVR7FhJztRaiGLnCrwBE
-dyTZ248+D4L/qR/D0axb3jcCAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOC
-AQEAnOXXQ/1O/QTDHyrmQDtFziqPY3xWlJBqJtEqXiT7Y+Ljpe66e+Ee/OjQMlZe8gu21/8cKklH
-95RxjopMWCVedXDUbWdvS2+CdyvVW/quT2E0tjqIzXDekUTYwwhlPWlGxvfj3VsxqSFq3p8Brl04
-1Gx5RKAGyKVsMfTLhbbwSWwApuBUxYfcNpKwLWGPXkysu+HctY03OKv4/xKBnVWiN8ex/Sgesi0M
-+OBAOMdZMPK32uJBTeKFx1xZgTLIhk45V0hPOomPjZloiv0LSS11eyd451ufjW0iHRE7WlpR6EvI
-W6TFyZgMpQq+kg4hWl2SBTf3s2VI8Ygz7gj8TMlClg==
-</X509Certificate>
-</X509Data>
-</KeyInfo>
-<Object Id="prop"><SignatureProperties xmlns:dsp="http://www.w3.org/2009/xmldsig-properties"><SignatureProperty Id="profile" Target="#AuthorSignature"><dsp:Profile URI="http://www.w3.org/ns/widgets-digsig#profile"></dsp:Profile></SignatureProperty><SignatureProperty Id="role" Target="#AuthorSignature"><dsp:Role URI="http://www.w3.org/ns/widgets-digsig#role-author"></dsp:Role></SignatureProperty><SignatureProperty Id="identifier" Target="#AuthorSignature"><dsp:Identifier></dsp:Identifier></SignatureProperty></SignatureProperties></Object>
-</Signature>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/AppInstallersTest" version="1.0.0" viewmodes="maximized">
- <tizen:application id="ZK6wgb4nwt.AppInstallersTest" package="ZK6wgb4nwt" required_version="2.3"/>
- <content src="index.html"/>
- <feature name="http://tizen.org/feature/screen.size.all"/>
- <icon src="icon.png"/>
- <name>AppInstallersTest</name>
- <tizen:profile name="mobile"/>
-</widget>
+++ /dev/null
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
- <meta name="description" content="Tizen basic template generated by Tizen Web IDE"/>
-
- <title>Tizen Web IDE - Tizen - Tizen basic Application</title>
-</head>
-
-<body>
- <header>
- <hgroup>
- <h1>Tizen app</h1>
- <h2>An empty template of tizen</h2>
- </hgroup>
- </header>
-
- <nav>
- <ul>
- <li><a href="#">Home</a></li>
- <li><a href="#">About Us</a></li>
- <li><a href="#">Contact Us</a></li>
- </ul>
- </nav>
-
- <article>
- <p>This is an empty template of Tizen Web Application. Tizen will support multiple device categories:</p>
- <ul>
- <li>smartphones, tablets and smart TVs
- <li>netbooks, in-vehicle infotainment devices
- </ul>
- <section>
- <p>This is a basic section of a document.</p>
- <p>The following button displays a time using JavaScript.</p>
- <div id="divbutton1">
- <button>Clock</button>
- </div>
- </section>
- </article>
-
- <footer>
- <p>© 2012 Company Name. All rights reserved.</p>
- </footer>
-</body>
-</html>
+++ /dev/null
-<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="DistributorSignature">
-<SignedInfo>
-<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></CanonicalizationMethod>
-<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"></SignatureMethod>
-<Reference URI="author-signature.xml">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>opfWp60FUsKzpdQBgTp3x31PB1GzC9mS6M7B6n2m63c=</DigestValue>
-</Reference>
-<Reference URI="config.xml">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>iEX0LuZs81Q6Du/SkXgbMd+Qa6puMxgyRUCLqhrfpJ8=</DigestValue>
-</Reference>
-<Reference URI="icon.png">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs=</DigestValue>
-</Reference>
-<Reference URI="index.html">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>rJOIi81O4OG/Gar/hwrjvD623MpScv6TMdurRZgzDf0=</DigestValue>
-</Reference>
-<Reference URI="version.txt">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>MjYb9c/C/J56bHY6rlIjfDqkpjFtsUBjLLkco/rcfFY=</DigestValue>
-</Reference>
-<Reference URI="#prop">
-<Transforms>
-<Transform Algorithm="http://www.w3.org/2006/12/xml-c14n11"></Transform>
-</Transforms>
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>u/jU3U4Zm5ihTMSjKGlGYbWzDfRkGphPPHx3gJIYEJ4=</DigestValue>
-</Reference>
-</SignedInfo>
-<SignatureValue>
-O6yHkXzPKe+8nGxjh06ivDImxKSKygVOgvZzmKKHVWn879K2K8vY08/f7FXKG+zRXEouXbZd7aip
-IGyOCpulXUzESCQMIiffzMVgTV0Ho+kXx44xbME/XKy7DJYpZOvZFXX1S9ZXvU2BmmgHtWWLS/gc
-sFiYVHpRxLnify3npXF=
-</SignatureValue>
-<KeyInfo>
-<X509Data>
-<X509Certificate>
-MIICmzCCAgQCCQDXI7WLdVZwiTANBgkqhkiG9w0BAQUFADCBjzELMAkGA1UEBhMCS1IxDjAMBgNV
-BAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6ZW4gVGVzdCBDQTEiMCAGA1UE
-CwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwbVGl6ZW4gUHVibGljIERpc3Ry
-aWJ1dG9yIENBMB4XDTEyMTAyOTEzMDMwNFoXDTIyMTAyNzEzMDMwNFowgZMxCzAJBgNVBAYTAktS
-MQ4wDAYDVQQIDAVTdXdvbjEOMAwGA1UEBwwFU3V3b24xFjAUBgNVBAoMDVRpemVuIFRlc3QgQ0Ex
-IjAgBgNVBAsMGVRpemVuIERpc3RyaWJ1dG9yIFRlc3QgQ0ExKDAmBgNVBAMMH1RpemVuIFB1Ymxp
-YyBEaXN0cmlidXRvciBTaWduZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALtMvlc5hENK
-90ZdA+y66+Sy0enD1gpZDBh5T9RP0oRsptJv5jjNTseQbQi0SZOdOXb6J7iQdlBCtR343RpIEz8H
-mrBy7mSY7mgwoU4EPpp4CTSUeAuKcmvrNOngTp5Hv7Ngf02TTHOLK3hZLpGayaDviyNZB5PdqQdB
-hokKjzAzAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAvGp1gxxAIlFfhJH1efjb9BJK/rtRkbYn9+Ez
-GEbEULg1svsgnyWisFimI3uFvgI/swzr1eKVY3Sc8MQ3+Fdy3EkbDZ2+WAubhcEkorTWjzWz2fL1
-vKaYjeIsuEX6TVRUugHWudPzcEuQRLQf8ibZWjbQdBmpeQYBMg5x+xKLCJc=
-</X509Certificate>
-<X509Certificate>
-MIICtDCCAh2gAwIBAgIJAMDbehElPNKvMA0GCSqGSIb3DQEBBQUAMIGVMQswCQYDVQQGEwJLUjEO
-MAwGA1UECAwFU3V3b24xDjAMBgNVBAcMBVN1d29uMRYwFAYDVQQKDA1UaXplbiBUZXN0IENBMSMw
-IQYDVQQLDBpUVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEpMCcGA1UEAwwgVGl6ZW4gUHVibGlj
-IERpc3RyaWJ1dG9yIFJvb3QgQ0EwHhcNMTIxMDI5MTMwMjUwWhcNMjIxMDI3MTMwMjUwWjCBjzEL
-MAkGA1UEBhMCS1IxDjAMBgNVBAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6
-ZW4gVGVzdCBDQTEiMCAGA1UECwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwb
-VGl6ZW4gUHVibGljIERpc3RyaWJ1dG9yIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDe
-OTS/3nXvkDEmsFCJIvRlQ3RKDcxdWJJp625pFqHdmoJBdV+x6jl1raGK2Y1sp2Gdvpjc/z92yzAp
-bE/UVLPh/tRNZPeGhzU4ejDDm7kzdr2f7Ia0U98K+OoY12ucwg7TYNItj9is7Cj4blGfuMDzd2ah
-2AgnCGlwNwV/pv+uVQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACqJ
-KO33YdoGudwanZIxMdXuxnnD9R6u72ltKk1S4zPfMJJv482CRGCI4FK6djhlsI4i0Lt1SVIJEed+
-yc3qckGm19dW+4xdlkekon7pViEBWuyHw8OWv3RXtTum1+PGHjBJ2eYY4ZKIpz73U/1NC16sTB/0
-VhfnkHwPltmrpYVe
-</X509Certificate>
-</X509Data>
-</KeyInfo>
-<Object Id="prop"><SignatureProperties xmlns:dsp="http://www.w3.org/2009/xmldsig-properties"><SignatureProperty Id="profile" Target="#DistributorSignature"><dsp:Profile URI="http://www.w3.org/ns/widgets-digsig#profile"></dsp:Profile></SignatureProperty><SignatureProperty Id="role" Target="#DistributorSignature"><dsp:Role URI="http://www.w3.org/ns/widgets-digsig#role-distributor"></dsp:Role></SignatureProperty><SignatureProperty Id="identifier" Target="#DistributorSignature"><dsp:Identifier></dsp:Identifier></SignatureProperty></SignatureProperties></Object>
-</Signature>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets"
- id="http://yourdomain/WebSettingSample" version="1.0.0" viewmodes="maximized">
- <tizen:application id="nNBDOItqjN.WebSettingSample" package="nNBDOItqjN" required_version="2.2"/>
- <content src="index.html"/>
- <feature name="http://tizen.org/feature/screen.size.all"/>
- <icon src="icon.png"/>
- <name>WebSettingSample</name>
- <tizen:privilege name="http://tizen.org/privilege/websetting"/>
-</widget>
+++ /dev/null
-<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="AuthorSignature">
-<SignedInfo>
-<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></CanonicalizationMethod>
-<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"></SignatureMethod>
-<Reference URI="config.xml">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>iEX0LuZs81Q6Du/SkXgbMd+Qa6puMxgyRUCLqhrfpJ8=</DigestValue>
-</Reference>
-<Reference URI="icon.png">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs=</DigestValue>
-</Reference>
-<Reference URI="index.html">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>rJOIi81O4OG/Gar/hwrjvD623MpScv6TMdurRZgzDf0=</DigestValue>
-</Reference>
-<Reference URI="version.txt">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>MjYb9c/C/J56bHY6rlIjfDqkpjFtsUBjLLkco/rcfFY=</DigestValue>
-</Reference>
-<Reference URI="#prop">
-<Transforms>
-<Transform Algorithm="http://www.w3.org/2006/12/xml-c14n11"></Transform>
-</Transforms>
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>lpo8tUDs054eLlBQXiDPVDVKfw30ZZdtkRs1jd7H5K8=</DigestValue>
-</Reference>
-</SignedInfo>
-<SignatureValue>
-c7Jd7btw6Bi9MxzKVv6JY9xcegxv42DhOzZhyrjz3EMN/60dhcGJClfKBY39FwH6exMajoThyFIW
-djtnp7pqIiQJCJkGRs0vAQThcm8JniVSbUwHMcMw7WjAW5VPsLQZKmEe16YW00YkoT6KfZLC1ySw
-48WNrHrCrTcj6LZRrlc=
-</SignatureValue>
-<KeyInfo>
-<X509Data>
-<X509Certificate>
-MIIC2zCCAcOgAwIBAgIGAUudC0tkMA0GCSqGSIb3DQEBBQUAMFYxGjAYBgNVBAoMEVRpemVuIEFz
-c29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4gRGV2
-ZWxvcGVycyBDQTAeFw0xMjExMDEwMDAwMDBaFw0xOTAxMDEwMDAwMDBaMFcxCzAJBgNVBAYTAlBM
-MQ8wDQYDVQQHDAZXYXJzYXcxEDAOBgNVBAoMB1NhbXN1bmcxFDASBgNVBAsMC1dlYlBsYXRmb3Jt
-MQ8wDQYDVQQDDAZhdXRob3IwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM0kQ8aPoKnJaBjk
-3ET7XdOS5C3ueSemfA8tYNihWQ3VX95CKX38ARLpaAGRSfOdo2L1vTIBtaO/UWEEl/XKQzqwem22
-A9UuLwl0rJNDeoq5Xz5oJD1z9eA+uuNde6cAcPmxRQDsilnVZNHlpATdDOeKUSs8+Y5UxPDz1c6j
-kUTpAgMBAAGjMjAwMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUF
-BwMDMA0GCSqGSIb3DQEBBQUAA4IBAQC2kGzwMPMgxRrAi3ZaRu+i8x2ApZEWW4Y5uaZ9s7p4483A
-l+RBZ1/zHhkmZaekhCm2YwOpWIkXLiQc2wm9YRq+W1OorrArl/wgxtpO7hajlCxDS3X8GgJqCy7v
-8vQYTBvNXayQaRB496mC9lLZDjRL9ycYnPk55eimL3HEYclbibDjOvks4bdN/fedA8jovir+wA+b
-tIC+GGkiwGco6URdxigydxdpNEwRECCl78YVybf9agKeowXL08kwDZN9DAHCixu76kw1qtpfwm3T
-t/lz7VB1pDFhjzfuG6runH4H257bBYLkJnSBchiNItMuK2zvTVP8HsQmBeOLAFGtsoas
-</X509Certificate>
-<X509Certificate>
-MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMRowGAYDVQQKDBFUaXplbiBBc3NvY2lh
-dGlvbjEaMBgGA1UECwwRVGl6ZW4gQXNzb2NpYXRpb24xHjAcBgNVBAMMFVRpemVuIERldmVsb3Bl
-cnMgUm9vdDAeFw0xMjAxMDEwMDAwMDBaFw0yNzAxMDEwMDAwMDBaMFYxGjAYBgNVBAoMEVRpemVu
-IEFzc29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4g
-RGV2ZWxvcGVycyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANVGhRGmMIUyBA7o
-PCz8Sxut6z6HNkF4oDIuzuKaMzRYPeWodwe9O0gmqAkToQHfwg2giRhE5GoPld0fq+OYMMwSasCu
-g8dwODx1eDeSYVuOLWRxpAmbTXOsSFi6VoWeyaPEm18JBHvZBsU5YQtgZ6Kp7MqzvQg3pXOxtajj
-vyHxiatJl+xXrHgcXC1wgyG3buty7u/Fi2mvKXJ0PRJcCjjK81dqe/Vr20sRUCrbk02zbm5ggFt/
-jIEhV8wbFRQpliobc7J4dSTKhFfrqGM8rdd54LYhD7gSI1CFSe16pUXfcVR7FhJztRaiGLnCrwBE
-dyTZ248+D4L/qR/D0axb3jcCAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOC
-AQEAnOXXQ/1O/QTDHyrmQDtFziqPY3xWlJBqJtEqXiT7Y+Ljpe66e+Ee/OjQMlZe8gu21/8cKklH
-95RxjopMWCVedXDUbWdvS2+CdyvVW/quT2E0tjqIzXDekUTYwwhlPWlGxvfj3VsxqSFq3p8Brl04
-1Gx5RKAGyKVsMfTLhbbwSWwApuBUxYfcNpKwLWGPXkysu+HctY03OKv4/xKBnVWiN8ex/Sgesi0M
-+OBAOMdZMPK32uJBTeKFx1xZgTLIhk45V0hPOomPjZloiv0LSS11eyd451ufjW0iHRE7WlpR6EvI
-W6TFyZgMpQq+kg4hWl2SBTf3s2VI8Ygz7gj8TMlClg==
-</X509Certificate>
-</X509Data>
-</KeyInfo>
-<Object Id="prop"><SignatureProperties xmlns:dsp="http://www.w3.org/2009/xmldsig-properties"><SignatureProperty Id="profile" Target="#AuthorSignature"><dsp:Profile URI="http://www.w3.org/ns/widgets-digsig#profile"></dsp:Profile></SignatureProperty><SignatureProperty Id="role" Target="#AuthorSignature"><dsp:Role URI="http://www.w3.org/ns/widgets-digsig#role-author"></dsp:Role></SignatureProperty><SignatureProperty Id="identifier" Target="#AuthorSignature"><dsp:Identifier></dsp:Identifier></SignatureProperty></SignatureProperties></Object>
-</Signature>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/AppInstallersTest" version="1.0.0" viewmodes="maximized">
- <tizen:application id="ZK6wgb4nwt.AppInstallersTest" package="ZK6wgb4nwt" required_version="2.3"/>
- <content src="index.html"/>
- <feature name="http://tizen.org/feature/screen.size.all"/>
- <icon src="icon.png"/>
- <name>AppInstallersTest</name>
- <tizen:profile name="mobile"/>
-</widget>
+++ /dev/null
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
- <meta name="description" content="Tizen basic template generated by Tizen Web IDE"/>
-
- <title>Tizen Web IDE - Tizen - Tizen basic Application</title>
-</head>
-
-<body>
- <header>
- <hgroup>
- <h1>Tizen app</h1>
- <h2>An empty template of tizen</h2>
- </hgroup>
- </header>
-
- <nav>
- <ul>
- <li><a href="#">Home</a></li>
- <li><a href="#">About Us</a></li>
- <li><a href="#">Contact Us</a></li>
- </ul>
- </nav>
-
- <article>
- <p>This is an empty template of Tizen Web Application. Tizen will support multiple device categories:</p>
- <ul>
- <li>smartphones, tablets and smart TVs
- <li>netbooks, in-vehicle infotainment devices
- </ul>
- <section>
- <p>This is a basic section of a document.</p>
- <p>The following button displays a time using JavaScript.</p>
- <div id="divbutton1">
- <button>Clock</button>
- </div>
- </section>
- </article>
-
- <footer>
- <p>© 2012 Company Name. All rights reserved.</p>
- </footer>
-</body>
-</html>
+++ /dev/null
-<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="DistributorSignature">
-<SignedInfo>
-<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></CanonicalizationMethod>
-<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"></SignatureMethod>
-<Reference URI="author-signature.xml">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>opfWp60FUsKzpdQBgTp3x31PB1GzC9mS6M7B6n2m63c=</DigestValue>
-</Reference>
-<Reference URI="config.xml">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>iEX0LuZs81Q6Du/SkXgbMd+Qa6puMxgyRUCLqhrfpJ8=</DigestValue>
-</Reference>
-<Reference URI="icon.png">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs=</DigestValue>
-</Reference>
-<Reference URI="index.html">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>rJOIi81O4OG/Gar/hwrjvD623MpScv6TMdurRZgzDf0=</DigestValue>
-</Reference>
-<Reference URI="version.txt">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>MjYb9c/C/J56bHY6rlIjfDqkpjFtsUBjLLkco/rcfFY=</DigestValue>
-</Reference>
-<Reference URI="#prop">
-<Transforms>
-<Transform Algorithm="http://www.w3.org/2006/12/xml-c14n11"></Transform>
-</Transforms>
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>u/jU3U4Zm5ihTMSjKGlGYbWzDfRkGphPPHx3gJIYEJ4=</DigestValue>
-</Reference>
-</SignedInfo>
-<SignatureValue>
-O6yHkXzPKe+8nGxjh06ivDImxKSKygVOgvZzmKKHVWn879K2K8vY08/f7FXKG+zRXEouXbZd7aip
-IGyOCpulXUzESCQMIiffzMVgTV0Ho+kXx44xbME/XKy7DJYpZOvZFXX1S9ZXvU2BmmgHtWWLS/gc
-sFiYVHpRxLnify3npXE=
-</SignatureValue>
-<KeyInfo>
-<X509Data>
-<X509Certificate>
-MIICmzCCAgQCCQDXI7WLdVZwiTANBgkqhkiG9w0BAQUFADCBjzELMAkGA1UEBhMCS1IxDjAMBgNV
-BAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6ZW4gVGVzdCBDQTEiMCAGA1UE
-CwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwbVGl6ZW4gUHVibGljIERpc3Ry
-aWJ1dG9yIENBMB4XDTEyMTAyOTEzMDMwNFoXDTIyMTAyNzEzMDMwNFowgZMxCzAJBgNVBAYTAktS
-MQ4wDAYDVQQIDAVTdXdvbjEOMAwGA1UEBwwFU3V3b24xFjAUBgNVBAoMDVRpemVuIFRlc3QgQ0Ex
-IjAgBgNVBAsMGVRpemVuIERpc3RyaWJ1dG9yIFRlc3QgQ0ExKDAmBgNVBAMMH1RpemVuIFB1Ymxp
-YyBEaXN0cmlidXRvciBTaWduZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALtMvlc5hENK
-90ZdA+y66+Sy0enD1gpZDBh5T9RP0oRsptJv5jjNTseQbQi0SZOdOXb6J7iQdlBCtR343RpIEz8H
-mrBy7mSY7mgwoU4EPpp4CTSUeAuKcmvrNOngTp5Hv7Ngf02TTHOLK3hZLpGayaDviyNZB5PdqQdB
-hokKjzAzAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAvGp1gxxAIlFfhJH1efjb9BJK/rtRkbYn9+Ez
-GEbEULg1svsgnyWisFimI3uFvgI/swzr1eKVY3Sc8MQ3+Fdy3EkbDZ2+WAubhcEkorTWjzWz2fL1
-vKaYjeIsuEX6TVRUugHWudPzcEuQRLQf8ibZWjbQdBmpeQYBMg5x+xKLCJc=
-</X509Certificate>
-<X509Certificate>
-MIICtDCCAh2gAwIBAgIJAMDbehElPNKvMA0GCSqGSIb3DQEBBQUAMIGVMQswCQYDVQQGEwJLUjEO
-MAwGA1UECAwFU3V3b24xDjAMBgNVBAcMBVN1d29uMRYwFAYDVQQKDA1UaXplbiBUZXN0IENBMSMw
-IQYDVQQLDBpUVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEpMCcGA1UEAwwgVGl6ZW4gUHVibGlj
-IERpc3RyaWJ1dG9yIFJvb3QgQ0EwHhcNMTIxMDI5MTMwMjUwWhcNMjIxMDI3MTMwMjUwWjCBjzEL
-MAkGA1UEBhMCS1IxDjAMBgNVBAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6
-ZW4gVGVzdCBDQTEiMCAGA1UECwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwb
-VGl6ZW4gUHVibGljIERpc3RyaWJ1dG9yIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDe
-OTS/3nXvkDEmsFCJIvRlQ3RKDcxdWJJp625pFqHdmoJBdV+x6jl1raGK2Y1sp2Gdvpjc/z92yzAp
-bE/UVLPh/tRNZPeGhzU4ejDDm7kzdr2f7Ia0U98K+OoY12ucwg7TYNItj9is7Cj4blGfuMDzd2ah
-2AgnCGlwNwV/pv+uVQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACqJ
-KO33YdoGudwanZIxMdXuxnnD9R6u72ltKk1S4zPfMJJv482CRGCI4FK6djhlsI4i0Lt1SVIJEed+
-yc3qckGm19dW+4xdlkekon7pViEBWuyHw8OWv3RXtTum1+PGHjBJ2eYY4ZKIpz73U/1NC16sTB/0
-VhfnkHwPltmrpYVe
-</X509Certificate>
-</X509Data>
-</KeyInfo>
-<Object Id="prop"><SignatureProperties xmlns:dsp="http://www.w3.org/2009/xmldsig-properties"><SignatureProperty Id="profile" Target="#DistributorSignature"><dsp:Profile URI="http://www.w3.org/ns/widgets-digsig#profile"></dsp:Profile></SignatureProperty><SignatureProperty Id="role" Target="#DistributorSignature"><dsp:Role URI="http://www.w3.org/ns/widgets-digsig#role-distributor"></dsp:Role></SignatureProperty><SignatureProperty Id="identifier" Target="#DistributorSignature"><dsp:Identifier></dsp:Identifier></SignatureProperty></SignatureProperties></Object>
-</Signature>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<manifest xmlns="http://tizen.org/ns/packages" api-version="2.3" package="org.tizen.testapp" version="1.0.0">
- <author email="tester@samsung.com" href="www.tizen.org">tester</author>
- <description>This is default description</description>
- <description xml:lang="en-us">This is test description</description>
- <ui-application appid="org.tizen.testapp" exec="testapp" multiple="false" nodisplay="false" taskmanage="true" type="capp">
- <label>testapp</label>
- <label xml:lang="en-us">Test</label>
- <icon>testapp.png</icon>
- <app-control>
- <mime name="EditMime"/>
- <operation name="http://tizen.org/appcontrol/operation/edit"/>
- <uri name="EditUri"/>
- </app-control>
- <app-control>
- <operation name="http://tizen.org/appcontrol/operation/view"/>
- <uri name="ViewUri"/>
- <mime name="ViewMime"/>
- </app-control>
- <metadata key="metakey1" value="metaval1"/>
- <metadata key="metakey2" value="metaval2"/>
- <datacontrol access="ReadOnly" providerid="http://testapp.com/datacontrol/provider/testapp" type="Sql"/>
- <datacontrol access="ReadOnly" providerid="http://testapp.com/datacontrol/provider/testapp" type="Map"/>
- </ui-application>
- <account>
- <account-provider appid="org.tizen.testapp" multiple-accounts-support="false" providerid="com.samsung">
- <icon section="account">testapp.png</icon>
- <icon section="account-small">testapp.png</icon>
- <label xml:lang="en-gb">account icon</label>
- <label>Samsung</label>
- <capability>http://tizen.org/account/capability/calendar</capability>
- <capability>http://tizen.org/account/capability/photo</capability>
- </account-provider>
- </account>
- <privileges>
- <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
- <privilege>http://tizen.org/privilege/packagemanager.info</privilege>
- </privileges>
- <feature name="http://tizen.org/feature/camera.front.flash">true</feature>
- <feature name="http://tizen.org/feature/camera">true</feature>
- <feature name="http://tizen.org/feature/camera.back.flash">true</feature>
- <feature name="http://tizen.org/feature/camera.front">true</feature>
-</manifest>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:account multiple-account-support="false">
- <tizen:display-name>name</tizen:display-name>
- <tizen:icon section="Account">icon</tizen:icon>
- <tizen:capability>cap1</tizen:capability>
- <tizen:capability>cap2</tizen:capability>
- <tizen:capability>cap3</tizen:capability>
- </tizen:account>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:account multiple-account-support="false">
- <tizen:display-name>name</tizen:display-name>
- <tizen:icon section="Account">icon</tizen:icon>
- <tizen:capability>cap1</tizen:capability>
- </tizen:account>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:account multiple-account-support="false">
- <tizen:display-name>name</tizen:display-name>
- </tizen:account>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:account multiple-account-support="false">
- <tizen:display-name>name</tizen:display-name>
- <tizen:icon section="Account">icon</tizen:icon>
- <tizen:icon section="AccountSmall">icon2</tizen:icon>
- </tizen:account>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:account multiple-account-support="false">
- <tizen:display-name>name</tizen:display-name>
- <tizen:icon section="Account">icon</tizen:icon>
- </tizen:account>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:account>
- <tizen:display-name>name</tizen:display-name>
- <tizen:icon section="Account">icon</tizen:icon>
- </tizen:account>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:account multiple-account-support="true">
- <tizen:display-name>name</tizen:display-name>
- <tizen:icon section="Account">icon</tizen:icon>
- </tizen:account>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:account multiple-account-support="wrong">
- <tizen:display-name>name</tizen:display-name>
- <tizen:icon section="Account">icon</tizen:icon>
- </tizen:account>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:account multiple-account-support="false">
- <tizen:display-name>name</tizen:display-name>
- <tizen:display-name xml:lang="en-GB">name_en_gb</tizen:display-name>
- <tizen:icon section="Account">icon</tizen:icon>
- </tizen:account>
- <tizen:account multiple-account-support="true">
- <tizen:display-name>name2</tizen:display-name>
- <tizen:icon section="Account">icon2</tizen:icon>
- <tizen:icon section="AccountSmall">icon2s</tizen:icon>
- </tizen:account>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:account multiple-account-support="false">
- <tizen:icon section="Account">icon</tizen:icon>
- </tizen:account>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:account multiple-account-support="false">
- <tizen:display-name>name</tizen:display-name>
- <tizen:display-name xml:lang="en">name_en</tizen:display-name>
- <tizen:display-name xml:lang="de">name_de</tizen:display-name>
- <tizen:display-name xml:lang="ru">name_ru</tizen:display-name>
- <tizen:icon section="Account">icon</tizen:icon>
- </tizen:account>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:account multiple-account-support="false">
- <tizen:display-name>name</tizen:display-name>
- <tizen:icon section="Account">icon</tizen:icon>
- </tizen:account>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:addon required_version="5.5">
- </tizen:addon>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:addon package="package0id">
- </tizen:addon>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:addon package="package0id" required_version="5.5">
- </tizen:addon>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:addon package="package0id" required_version="5.5">
- </tizen:addon>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:addon package="package0id" required_version="5.5">
- </tizen:addon>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa100.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa100.dbox1" package="aaaaaaa100" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa102.dbox1.default" primary="true" update-period="2000.0" auto-launch="ab12">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa102.dbox1" package="aaaaaaa102" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa106.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:box-size>3x3</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa106.dbox1" package="aaaaaaa106" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa108.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa108.dbox1" package="aaaaaaa108" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa110.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="ab12">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa110.dbox1" package="aaaaaaa110" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa111.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="ab12" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa111.dbox1" package="aaaaaaa111" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa103.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa103.dbox1" package="aaaaaaa103" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa112.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="abc"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa112.dbox1" package="aaaaaaa112" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa113.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="-500"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa113.dbox1" package="aaaaaaa113" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa114.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa114.dbox1" package="aaaaaaa114" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa115.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="abc" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa115.dbox1" package="aaaaaaa115" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa116.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa116.dbox1" package="aaaaaaa116" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa117.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="ab12">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa117.dbox1" package="aaaaaaa117" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa105.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- <tizen:box-content src="box/index.html" mouse-event="false" touch-effect="true">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="true">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="730" height="300"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa105.dbox1" package="aaaaaaa105" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa133.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa133.dbox1" package="aaaaaaa133" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa120.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa120.dbox1" package="aaaaaaa120" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa119.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa119.dbox1" package="aaaaaaa119" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa121.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa121.dbox1" package="aaaaaaa121" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="9999999123.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa123.dbox1" package="aaaaaaa123" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa124.dbox1.the-default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa124.dbox1" package="aaaaaaa124" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa125.dbox1" package="aaaaaaa125" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa128.dbox1.default" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa128.dbox1" package="aaaaaaa128" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa129.dbox1.default" primary="ab12" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa129.dbox1" package="aaaaaaa129" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa130.dbox1.default" primary="true" update-period="ab12" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa130.dbox1" package="aaaaaaa130" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
- <tizen:app-widget id="aaaaaaa131.dbox1.default" primary="true" update-period="1000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa131.dbox1" package="aaaaaaa131" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox1</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox2" version="1.0.0">
- <tizen:app-widget id="aaaaaaa200.dbox2.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox2 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox2 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox2 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:app-widget id="aaaaaaa200.dbox2.second" primary="false" update-period="4000.0" auto-launch="false">
- <tizen:box-label>dbox2 default label 2</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox2 pl label 2</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox2 en label 2</tizen:box-label>
- <tizen:box-icon src="icon2.png"/>
- <tizen:box-content src="box/index2.html" mouse-event="false" touch-effect="true">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon2.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="true">2x2</tizen:box-size>
- <tizen:pd src="pd/index2.html" width="740" height="300"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa200.dbox2" package="aaaaaaa200" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox2</name>
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox2" version="1.0.0">
- <tizen:app-widget id="aaaaaaa201.dbox2.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox2 default label</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox2 pl label</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox2 en label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="false">2x2</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:app-widget id="aaaaaaa201.dbox2.second" primary="true" update-period="4000.0" auto-launch="false">
- <tizen:box-label>dbox2 default label 2</tizen:box-label>
- <tizen:box-label xml:lang="pl">dbox2 pl label 2</tizen:box-label>
- <tizen:box-label xml:lang="en">dbox2 en label 2</tizen:box-label>
- <tizen:box-icon src="icon2.png"/>
- <tizen:box-content src="box/index2.html" mouse-event="false" touch-effect="true">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:box-size preview="icon2.png">2x1</tizen:box-size>
- <tizen:box-size use-decoration="true">2x2</tizen:box-size>
- <tizen:pd src="pd/index2.html" width="740" height="300"/>
- </tizen:box-content>
- </tizen:app-widget>
- <tizen:application id="aaaaaaa201.dbox2" package="aaaaaaa201" required_version="2.2"/>
- <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
- <icon src="icon.png"/>
- <name>dbox2</name>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <content-security-policy>script-src 'self'</content-security-policy>
- <content-security-policy-report-only>script-src 'self'; report-uri="http://example.com/report.cgi"</content-security-policy-report-only>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:content-security-policy>script-src 'self'</tizen:content-security-policy>
- <tizen:content-security-policy>ignore me</tizen:content-security-policy>
- <tizen:content-security-policy-report-only>script-src 'self'; report-uri="http://example.com/report.cgi"</tizen:content-security-policy-report-only>
- <tizen:content-security-policy-report-only>ignore me</tizen:content-security-policy-report-only>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:launch_screen>
- </tizen:launch_screen>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <launch_screen ready_when="first-paint">
- <tizen:ls_default background_color="#ff0000"/>
- </launch_screen>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:launch_screen ready_when="invalid-option">
- <tizen:ls_default background_color="#ff0000"/>
- </tizen:launch_screen>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:launch_screen ready_when="first-paint">
- <tizen:ls_default background_color="#ff0000" background_image="bg_image.png"
- image="default_image.gif"
- image_border="30px 30px 20px 10px repeat round"/>
- </tizen:launch_screen>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:launch_screen ready_when="first-paint">
- <tizen:ls_default background_color="#ff0000" background_image="bg_image.png 1x, bg_image2x.bmp 2x"
- image="default_image.gif 1x, default_image2x.jpg 2x"
- image_border="30px 30px 20px 10px repeat round"/>
- <tizen:ls_portrait background_color="#00ff00" background_image="bg_image.png"
- image="portrait_image.png" image_border="repeat"/>
- <tizen:ls_landscape background_color="#0000ff" background_image="bg_image.png"
- image="landscape_image.gif" image_border="repeat"/>
- </tizen:launch_screen>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:launch_screen ready_when="first-paint">
- <tizen:ls_default background_image="bg_image.png 1x, bg_image2x.bmp 2x"/>
- </tizen:launch_screen>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:launch_screen ready_when="first-paint">
- <tizen:ls_default image="default_image.gif 1x, default_image2x.jpg 2x"/>
- </tizen:launch_screen>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:launch_screen ready_when="first-paint">
- <tizen:ls_default background_color="#ff0000"/>
- <tizen:ls_portrait background_color="#00ff00"/>
- <tizen:ls_landscape background_color="#0000ff"/>
- </tizen:launch_screen>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <splash src="splash.html" />
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:splash />
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:splash src="splash.html"/>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <tizen:access origin="http://www.myhost.com" />
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <access origin="http://www.user@myhost.com" />
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <access origin="http://" />
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <access origin="invalid" />
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <access origin="http://www.myhost.com" subdomains="false" />
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <access origin="http://www.myhost.com" subdomains="invalid" />
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <access origin="http://www.myhost.com" subdomains="true" />
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <access origin="http://www.myhost.com" />
- <access origin="http://www.mywebsite.com" subdomains="true"/>
- <access origin="http://www.sub.mydomain.com"/>
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <access origin="http://www.myhost.com" />
-</widget>
+++ /dev/null
-<?xml version="1.0"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <access origin="*" />
-</widget>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- all long values here are 10000+ characters long -->
-<widget xmlns:tizen="http://tizen.org/ns/widgets" xmlns="http://www.w3.org/ns/widgets">
- <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
- <!-- value (of attribute): 8192 limit -->
- <content src="1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.html"/>
- <feature name="http://tizen.org/feature/screen.size.all"/>
- <!-- value (of attribute): 8192 limit -->
- <icon src="1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.png"/>
- <!-- value (of key): 8192 limit -->
- <name>1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890</name>
- <tizen:profile name="mobile"/>
- <!-- key: 80 limit -->
- <_keyname10_abcdefg20_abcdefg30_abcdefg40_abcdefg50_abcdefg60_abcdefg70_abcdefg80_234567>value_a</_keyname10_abcdefg20_abcdefg30_abcdefg40_abcdefg50_abcdefg60_abcdefg70_abcdefg80_234567>
- <!-- attribute: 2048 limit -->
- <key_attribute attr1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890="value_b"/>
- <!-- metadata: key2048 limit -->
- <tizen:metadata key="_keyname10_abcdefg20_abcdefg30_abcdefg40_abcdefg50_abcdefg60_abcdefg70_abcdefg80_234567" value="attr1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"/>
- <tizen:app-widget id="package0id.appid.default" primary="true" update-period="2000.0" auto-launch="true">
- <tizen:box-label>dbox1 default label</tizen:box-label>
- <tizen:box-icon src="icon.png"/>
- <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
- <tizen:box-size>1x1</tizen:box-size>
- <tizen:pd src="pd/index.html" width="720" height="200"/>
- </tizen:box-content>
- <tizen:widget-metadata key="_keyname10_abcdefg20_abcdefg30_abcdefg40_abcdefg50_abcdefg60_abcdefg70_abcdefg80_234567" value="attr1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"/>
- </tizen:app-widget>
- <preference name="Akeyname10_abcdefg20_abcdefg30_abcdefg40_abcdefg50_abcdefg60_abcdefg70_abcdefg80_234567" value="Aattr1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"/>
- <preference name="Bkeyname10_abcdefg20_abcdefg30_abcdefg40_abcdefg50_abcdefg60_abcdefg70_abcdefg80_234567" value="Battr1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"/>
- <preference name="Ckeyname10_abcdefg20_abcdefg30_abcdefg40_abcdefg50_abcdefg60_abcdefg70_abcdefg80_234567" value="Cattr1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"/>
-</widget>
+++ /dev/null
-// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
-// Use of this source code is governed by an apache 2.0 license that can be
-// found in the LICENSE file.
-
-#include <boost/filesystem/path.hpp>
-
-#include <gtest/gtest.h>
-
-#include <manifest_parser/manifest.h>
-#include <manifest_parser/manifest_util.h>
-
-#include <memory>
-#include <vector>
-
-#include "unit_tests/base_test.h"
-#include "wgt_manifest_handlers/warp_handler.h"
-
-namespace bf = boost::filesystem;
-
-namespace {
-
-const bf::path kXmlDirectory("/usr/share/manifest-parser-ut/test_samples/xmls");
-
-struct RegistryPolicyForWarp {
- static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
- std::unique_ptr<parser::ManifestHandlerRegistry> registry;
- registry.reset(new parser::ManifestHandlerRegistry());
- registry->RegisterManifestHandler(new wgt::parse::WarpHandler());
- return registry;
- }
-};
-
-} // namespace
-
-namespace parser {
-
-class WarpHandlerTest : public BaseTest<RegistryPolicyForWarp> {
- void SetUp() override {
- BaseTest<RegistryPolicyForWarp>::SetUp();
- std::string error;
- bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
- std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- }
-};
-
-#define WARP_IGNORE_TEST(TEST_NAME) \
- TEST_F(WarpHandlerTest, TEST_NAME) { \
- ASSERT_TRUE(ParseAppManifest()); \
- ASSERT_TRUE(ValidateAppManifest()); \
- std::shared_ptr<const wgt::parse::WarpInfo> data = \
- std::static_pointer_cast<const wgt::parse::WarpInfo>( \
- GetManifestData(wgt::parse::WarpInfo::Key())); \
- ASSERT_TRUE(!data); \
- } \
-
-WARP_IGNORE_TEST(InvalidNamespace)
-
-TEST_F(WarpHandlerTest, ValidURL) {
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::WarpInfo> data =
- std::static_pointer_cast<const wgt::parse::WarpInfo>(
- GetManifestData(wgt::parse::WarpInfo::Key()));
- ASSERT_TRUE(!!data);
- auto access_map = data->access_map();
- ASSERT_EQ(access_map.size(), 1);
- ASSERT_EQ(access_map[0].first, "http://www.myhost.com");
- ASSERT_FALSE(access_map[0].second);
-}
-
-TEST_F(WarpHandlerTest, ValidWildcard) {
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::WarpInfo> data =
- std::static_pointer_cast<const wgt::parse::WarpInfo>(
- GetManifestData(wgt::parse::WarpInfo::Key()));
- ASSERT_TRUE(!!data);
- auto access_map = data->access_map();
- ASSERT_EQ(access_map.size(), 1);
- ASSERT_EQ(access_map[0].first, "*");
- ASSERT_TRUE(access_map[0].second);
-}
-
-WARP_IGNORE_TEST(InvalidURL_NotURL)
-WARP_IGNORE_TEST(InvalidURL_AuthorizationPart)
-WARP_IGNORE_TEST(InvalidURL_NoHost)
-
-TEST_F(WarpHandlerTest, SubdomainTrue) {
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::WarpInfo> data =
- std::static_pointer_cast<const wgt::parse::WarpInfo>(
- GetManifestData(wgt::parse::WarpInfo::Key()));
- ASSERT_TRUE(!!data);
- auto access_map = data->access_map();
- ASSERT_EQ(access_map.size(), 1);
- ASSERT_TRUE(access_map[0].second);
-}
-
-TEST_F(WarpHandlerTest, SubdomainFalse) {
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::WarpInfo> data =
- std::static_pointer_cast<const wgt::parse::WarpInfo>(
- GetManifestData(wgt::parse::WarpInfo::Key()));
- ASSERT_TRUE(!!data);
- auto access_map = data->access_map();
- ASSERT_EQ(access_map.size(), 1);
- ASSERT_FALSE(access_map[0].second);
-}
-
-TEST_F(WarpHandlerTest, SubdomainInvalid) {
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::WarpInfo> data =
- std::static_pointer_cast<const wgt::parse::WarpInfo>(
- GetManifestData(wgt::parse::WarpInfo::Key()));
- ASSERT_TRUE(!!data);
- auto access_map = data->access_map();
- ASSERT_EQ(access_map.size(), 1);
- ASSERT_FALSE(access_map[0].second);
-}
-
-TEST_F(WarpHandlerTest, ValidMultiple) {
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::WarpInfo> data =
- std::static_pointer_cast<const wgt::parse::WarpInfo>(
- GetManifestData(wgt::parse::WarpInfo::Key()));
- ASSERT_TRUE(!!data);
- auto access_map = data->access_map();
- ASSERT_EQ(access_map.size(), 3);
- ASSERT_EQ(access_map[0].first, "http://www.myhost.com");
- ASSERT_FALSE(access_map[0].second);
- ASSERT_EQ(access_map[1].first, "http://www.mywebsite.com");
- ASSERT_TRUE(access_map[1].second);
- ASSERT_EQ(access_map[2].first, "http://www.sub.mydomain.com");
- ASSERT_FALSE(access_map[2].second);
-}
-
-} // namespace parser
+++ /dev/null
-// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
-// Use of this source code is governed by an apache 2.0 license that can be
-// found in the LICENSE file.
-
-#include <boost/filesystem/path.hpp>
-
-#include <gtest/gtest.h>
-
-#include <manifest_parser/manifest.h>
-#include <manifest_parser/manifest_util.h>
-
-#include <memory>
-
-#include "unit_tests/base_test.h"
-#include "wgt_manifest_handlers/application_icons_handler.h"
-#include "wgt_manifest_handlers/application_manifest_constants.h"
-#include "wgt_manifest_handlers/appwidget_handler.h"
-#include "wgt_manifest_handlers/content_handler.h"
-#include "wgt_manifest_handlers/metadata_handler.h"
-#include "wgt_manifest_handlers/tizen_application_handler.h"
-#include "wgt_manifest_handlers/widget_handler.h"
-
-namespace bf = boost::filesystem;
-
-namespace {
-
-const bf::path kXmlDirectory("/usr/share/manifest-parser-ut/test_samples/xmls");
-
-struct RegistryPolicyForNormalization {
- static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
- std::unique_ptr<parser::ManifestHandlerRegistry> registry;
- registry.reset(new parser::ManifestHandlerRegistry());
- registry->RegisterManifestHandler(new wgt::parse::WidgetHandler());
- registry->RegisterManifestHandler(
- new wgt::parse::TizenApplicationHandler());
- registry->RegisterManifestHandler(new wgt::parse::MetaDataHandler());
- registry->RegisterManifestHandler(new wgt::parse::ContentHandler());
- registry->RegisterManifestHandler(new wgt::parse::AppWidgetHandler());
- registry->RegisterManifestHandler(
- new wgt::parse::ApplicationIconsHandler());
- return registry;
- }
-};
-
-} // namespace
-
-namespace parser {
-
-class NormalizationHandlerTest :
- public BaseTest<RegistryPolicyForNormalization> {
- void SetUp() override {
- BaseTest<RegistryPolicyForNormalization>::SetUp();
-
- std::shared_ptr<ManifestConstraints> constraints(new ManifestConstraints());
- constraints->set_max_attr_element_length(wgt::kMaxAttrElementLength);
- constraints->set_element_exceptions(
- wgt::GetElementsWithDifferentAttributeLength());
- std::string error;
- bf::path xml = kXmlDirectory / "XmlNormalization" / "config.xml";
- std::shared_ptr<Manifest> manifest(
- LoadManifest(xml.string(), &error, constraints));
- ASSERT_FALSE(!manifest);
- SetManifest(manifest);
- }
-};
-
-TEST_F(NormalizationHandlerTest, NormalizeAttributeValue) {
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::ContentInfo> data =
- std::static_pointer_cast<const wgt::parse::ContentInfo>(
- GetManifestData(wgt::parse::ContentInfo::Key()));
- ASSERT_TRUE(!!data);
- ASSERT_EQ(data->src().size(), 2048);
- std::shared_ptr<const wgt::parse::ApplicationIconsInfo> idata =
- std::static_pointer_cast<const wgt::parse::ApplicationIconsInfo>(
- GetManifestData(wgt::parse::ApplicationIconsInfo::Key()));
- ASSERT_TRUE(!!idata);
- ASSERT_EQ(idata->icons().size(), 1);
- auto& icons = idata->icons();
- ASSERT_EQ(icons.begin()->path().size(), 2048);
-}
-
-TEST_F(NormalizationHandlerTest, NormalizeMetadata) {
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::MetaDataInfo> data =
- std::static_pointer_cast<const wgt::parse::MetaDataInfo>(
- GetManifestData(wgt::parse::MetaDataInfo::Key()));
- ASSERT_TRUE(!!data);
- ASSERT_EQ(data->metadata().size(), 1);
- auto& metadata = data->metadata();
- ASSERT_EQ(metadata.begin()->first.size(), 80);
- ASSERT_EQ(metadata.begin()->second.size(), 8192);
-}
-
-TEST_F(NormalizationHandlerTest, NormalizeWidgetMetadata) {
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::AppWidgetInfo> data =
- std::static_pointer_cast<const wgt::parse::AppWidgetInfo>(
- GetManifestData(wgt::parse::AppWidgetInfo::Key()));
- ASSERT_TRUE(!!data);
- ASSERT_EQ(data->app_widgets().size(), 1);
- auto& app_widgets = data->app_widgets();
- ASSERT_EQ(app_widgets.begin()->metadata.size(), 1);
- auto& metadata = app_widgets.begin()->metadata;
- ASSERT_EQ(metadata.begin()->first.size(), 80);
- ASSERT_EQ(metadata.begin()->second.size(), 8192);
-}
-
-TEST_F(NormalizationHandlerTest, NormalizePreferences) {
- ASSERT_TRUE(ParseAppManifest());
- ASSERT_TRUE(ValidateAppManifest());
- std::shared_ptr<const wgt::parse::WidgetInfo> data =
- std::static_pointer_cast<const wgt::parse::WidgetInfo>(
- GetManifestData(wgt::parse::WidgetInfo::Key()));
- ASSERT_TRUE(!!data);
- ASSERT_EQ(data->preferences().size(), 3);
- for (auto& item : data->preferences()) {
- ASSERT_EQ(item->Name().size(), 80);
- ASSERT_EQ(item->Value().size(), 8192);
- }
-}
-
-} // namespace parser
--- /dev/null
+ADD_SUBDIRECTORY(unit_tests)
--- /dev/null
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/ UNIT_TESTS_SRCS)
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/mock/ UNIT_TESTS_SRCS)
+
+ADD_EXECUTABLE(${TARGET_WGT_MANIFEST_HANDLERS_UNIT_TEST}
+ ${UNIT_TESTS_SRCS}
+)
+
+TARGET_INCLUDE_DIRECTORIES(${TARGET_WGT_MANIFEST_HANDLERS_UNIT_TEST} PUBLIC
+ "${CMAKE_CURRENT_SOURCE_DIR}/../"
+ "${CMAKE_CURRENT_SOURCE_DIR}/../../src"
+)
+
+APPLY_PKG_CONFIG(${TARGET_WGT_MANIFEST_HANDLERS_UNIT_TEST} PUBLIC
+ GMOCK_DEPS
+ MANIFEST_PARSER_UTILS_DEPS
+ MANIFEST_PARSER_DEPS
+)
+
+TARGET_LINK_LIBRARIES(${TARGET_WGT_MANIFEST_HANDLERS_UNIT_TEST} PRIVATE ${TARGET_LIBNAME_WGT_MANIFEST_HANDLERS})
+SET_TARGET_PROPERTIES(${TARGET_WGT_MANIFEST_HANDLERS_UNIT_TEST} PROPERTIES COMPILE_FLAGS "-fPIE")
+SET_TARGET_PROPERTIES(${TARGET_WGT_MANIFEST_HANDLERS_UNIT_TEST} PROPERTIES LINK_FLAGS "-pie")
+
+ADD_TEST(
+ NAME ${TARGET_WGT_MANIFEST_HANDLERS_UNIT_TEST}
+ COMMAND ${TARGET_WGT_MANIFEST_HANDLERS_UNIT_TEST}
+)
+
+
+#SET(PRJ_PATH ..)
+
+#SET(TESTS
+# parser_manifest_util_unittest
+# service_handler_unittest
+# content_handler_unittest
+# appwidget_handler_unittest
+# warp_handler_unittest
+# csp_handler_unittest
+# account_handler_unittest
+# launch_screen_handler_unittest
+# splash_handler_unittest
+# xml_normalization_unittest
+# addon_handler_unittest
+#)
+#SET(DESTINATION_DIR manifest-parser-ut)
+
+#INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../)
+
+#INSTALL(DIRECTORY test_samples/ DESTINATION ${SHAREDIR}/${DESTINATION_DIR}/test_samples)
+
+#FOREACH(test ${TESTS})
+# ADD_EXECUTABLE(${test} "${test}.cc")
+
+# APPLY_PKG_CONFIG(${test} PUBLIC
+# Boost
+# GMOCK_DEPS
+# MANIFEST_PARSER_DEPS
+# MANIFEST_PARSER_UTILS_DEPS
+# )
+
+# INSTALL(TARGETS ${test} DESTINATION ${BINDIR}/${DESTINATION_DIR})
+# # FindGTest module do not sets all needed libraries in GTEST_LIBRARIES and
+# # GTest main libraries is still missing, so additional linking of
+# # GTEST_MAIN_LIBRARIES is needed.
+# TARGET_LINK_LIBRARIES(${test} PUBLIC ${TARGET_LIBNAME_PARSER}
+# ${TARGET_LIBNAME_WGT_MANIFEST_HANDLERS} ${GTEST_MAIN_LIBRARIES})
+#ENDFOREACH(test)
--- /dev/null
+// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by an apache 2.0 license that can be
+// found in the LICENSE file.
+
+
+#include <boost/filesystem/path.hpp>
+
+#include <gtest/gtest.h>
+
+#include <manifest_parser/manifest.h>
+#include <manifest_parser/manifest_util.h>
+
+#include <memory>
+
+#include "unit_tests/base_test.h"
+#include "wgt_manifest_handlers/account_handler.h"
+
+namespace bf = boost::filesystem;
+
+namespace {
+
+const bf::path kXmlDirectory("test_samples/xmls");
+
+struct RegistryPolicyForAccount {
+ static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
+ using wgt::parse::AccountHandler;
+ std::unique_ptr<parser::ManifestHandlerRegistry> registry;
+ registry.reset(new parser::ManifestHandlerRegistry());
+ registry->RegisterManifestHandler(new AccountHandler());
+ return registry;
+ }
+};
+
+} // namespace
+
+namespace parser {
+
+class AccountHandlerTest : public BaseTest<RegistryPolicyForAccount> {
+ void SetUp() override {
+ BaseTest<RegistryPolicyForAccount>::SetUp();
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ }
+};
+
+TEST_F(AccountHandlerTest, Valid) {
+ ASSERT_TRUE(ParseAppManifest()) << GetError();
+ ASSERT_TRUE(ValidateAppManifest()) << GetError();
+ std::shared_ptr<const wgt::parse::AccountInfo> data =
+ std::static_pointer_cast<const wgt::parse::AccountInfo>(
+ GetManifestData(wgt::parse::AccountInfo::Key()));
+ ASSERT_TRUE(!!data);
+ ASSERT_EQ(data->accounts().size(), 1);
+ auto account = data->accounts()[0];
+ ASSERT_EQ(account.names.size(), 1);
+ ASSERT_EQ(account.names[0].first, "name");
+ ASSERT_EQ(account.names[0].second, "");
+ ASSERT_EQ(account.icon_paths.size(), 1);
+ ASSERT_EQ(account.icon_paths[0].first, "Account");
+ ASSERT_EQ(account.icon_paths[0].second, "icon");
+ ASSERT_EQ(account.capabilities.size(), 0);
+}
+
+TEST_F(AccountHandlerTest, Many) {
+ ASSERT_TRUE(ParseAppManifest()) << GetError();
+ ASSERT_TRUE(ValidateAppManifest()) << GetError();
+ std::shared_ptr<const wgt::parse::AccountInfo> data =
+ std::static_pointer_cast<const wgt::parse::AccountInfo>(
+ GetManifestData(wgt::parse::AccountInfo::Key()));
+ ASSERT_TRUE(!!data);
+ ASSERT_EQ(data->accounts().size(), 2);
+
+ auto account1 = data->accounts()[0];
+ ASSERT_EQ(account1.names.size(), 2);
+ ASSERT_EQ(account1.names[0].first, "name");
+ ASSERT_EQ(account1.names[0].second, "");
+ ASSERT_EQ(account1.names[1].first, "name_en_gb");
+ ASSERT_EQ(account1.names[1].second, "en-GB");
+ ASSERT_EQ(account1.icon_paths.size(), 1);
+ ASSERT_EQ(account1.icon_paths[0].first, "Account");
+ ASSERT_EQ(account1.icon_paths[0].second, "icon");
+ ASSERT_EQ(account1.capabilities.size(), 0);
+ ASSERT_FALSE(account1.multiple_account_support);
+
+ auto account2 = data->accounts()[1];
+ ASSERT_EQ(account2.names.size(), 1);
+ ASSERT_EQ(account2.names[0].first, "name2");
+ ASSERT_EQ(account2.names[0].second, "");
+ ASSERT_EQ(account2.icon_paths.size(), 2);
+ ASSERT_EQ(account2.icon_paths[0].first, "Account");
+ ASSERT_EQ(account2.icon_paths[0].second, "icon2");
+ ASSERT_EQ(account2.icon_paths[1].first, "AccountSmall");
+ ASSERT_EQ(account2.icon_paths[1].second, "icon2s");
+ ASSERT_EQ(account2.capabilities.size(), 0);
+ ASSERT_TRUE(account2.multiple_account_support);
+}
+
+TEST_F(AccountHandlerTest, MAS_False) {
+ ASSERT_TRUE(ParseAppManifest()) << GetError();
+ ASSERT_TRUE(ValidateAppManifest()) << GetError();
+ std::shared_ptr<const wgt::parse::AccountInfo> data =
+ std::static_pointer_cast<const wgt::parse::AccountInfo>(
+ GetManifestData(wgt::parse::AccountInfo::Key()));
+ ASSERT_TRUE(!!data);
+ ASSERT_EQ(data->accounts().size(), 1);
+ auto account = data->accounts()[0];
+ ASSERT_FALSE(account.multiple_account_support);
+}
+
+TEST_F(AccountHandlerTest, MAS_True) {
+ ASSERT_TRUE(ParseAppManifest()) << GetError();
+ ASSERT_TRUE(ValidateAppManifest()) << GetError();
+ std::shared_ptr<const wgt::parse::AccountInfo> data =
+ std::static_pointer_cast<const wgt::parse::AccountInfo>(
+ GetManifestData(wgt::parse::AccountInfo::Key()));
+ ASSERT_TRUE(!!data);
+ ASSERT_EQ(data->accounts().size(), 1);
+ auto account = data->accounts()[0];
+ ASSERT_TRUE(account.multiple_account_support);
+}
+
+TEST_F(AccountHandlerTest, MAS_Missing) {
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AccountHandlerTest, MAS_Wrong) {
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AccountHandlerTest, Capability_One) {
+ ASSERT_TRUE(ParseAppManifest()) << GetError();
+ ASSERT_TRUE(ValidateAppManifest()) << GetError();
+ std::shared_ptr<const wgt::parse::AccountInfo> data =
+ std::static_pointer_cast<const wgt::parse::AccountInfo>(
+ GetManifestData(wgt::parse::AccountInfo::Key()));
+ ASSERT_TRUE(!!data);
+ ASSERT_EQ(data->accounts().size(), 1);
+ auto account = data->accounts()[0];
+ ASSERT_EQ(account.capabilities.size(), 1);
+ ASSERT_EQ(account.capabilities[0], "cap1");
+}
+
+TEST_F(AccountHandlerTest, Capability_Many) {
+ ASSERT_TRUE(ParseAppManifest()) << GetError();
+ ASSERT_TRUE(ValidateAppManifest()) << GetError();
+ std::shared_ptr<const wgt::parse::AccountInfo> data =
+ std::static_pointer_cast<const wgt::parse::AccountInfo>(
+ GetManifestData(wgt::parse::AccountInfo::Key()));
+ ASSERT_TRUE(!!data);
+ ASSERT_EQ(data->accounts().size(), 1);
+ auto account = data->accounts()[0];
+ ASSERT_EQ(account.capabilities.size(), 3);
+ ASSERT_EQ(account.capabilities[0], "cap1");
+ ASSERT_EQ(account.capabilities[1], "cap2");
+ ASSERT_EQ(account.capabilities[2], "cap3");
+}
+
+TEST_F(AccountHandlerTest, Name_Missing) {
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AccountHandlerTest, Name_More) {
+ ASSERT_TRUE(ParseAppManifest()) << GetError();
+ ASSERT_TRUE(ValidateAppManifest()) << GetError();
+ std::shared_ptr<const wgt::parse::AccountInfo> data =
+ std::static_pointer_cast<const wgt::parse::AccountInfo>(
+ GetManifestData(wgt::parse::AccountInfo::Key()));
+ ASSERT_TRUE(!!data);
+ ASSERT_EQ(data->accounts().size(), 1);
+ auto account = data->accounts()[0];
+ ASSERT_EQ(account.names.size(), 4);
+ ASSERT_EQ(account.names[0].first, "name");
+ ASSERT_EQ(account.names[0].second, "");
+ ASSERT_EQ(account.names[1].first, "name_en");
+ ASSERT_EQ(account.names[1].second, "en");
+ ASSERT_EQ(account.names[2].first, "name_de");
+ ASSERT_EQ(account.names[2].second, "de");
+ ASSERT_EQ(account.names[3].first, "name_ru");
+ ASSERT_EQ(account.names[3].second, "ru");
+}
+
+TEST_F(AccountHandlerTest, Icon_Missing) {
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AccountHandlerTest, Icon_More) {
+ ASSERT_TRUE(ParseAppManifest()) << GetError();
+ ASSERT_TRUE(ValidateAppManifest()) << GetError();
+ std::shared_ptr<const wgt::parse::AccountInfo> data =
+ std::static_pointer_cast<const wgt::parse::AccountInfo>(
+ GetManifestData(wgt::parse::AccountInfo::Key()));
+ ASSERT_TRUE(!!data);
+ ASSERT_EQ(data->accounts().size(), 1);
+ auto account = data->accounts()[0];
+ ASSERT_EQ(account.icon_paths.size(), 2);
+ ASSERT_EQ(account.icon_paths[0].first, "Account");
+ ASSERT_EQ(account.icon_paths[0].second, "icon");
+ ASSERT_EQ(account.icon_paths[1].first, "AccountSmall");
+ ASSERT_EQ(account.icon_paths[1].second, "icon2");
+}
+
+} // namespace parser
--- /dev/null
+// Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by an apache 2.0 license that can be
+// found in the LICENSE file.
+
+
+#include <boost/filesystem/path.hpp>
+
+#include <gtest/gtest.h>
+
+#include <manifest_parser/manifest.h>
+#include <manifest_parser/manifest_util.h>
+
+#include <memory>
+
+#include "unit_tests/base_test.h"
+#include "wgt_manifest_handlers/addon_handler.h"
+
+namespace bf = boost::filesystem;
+
+namespace {
+
+const bf::path kXmlDirectory("test_samples/xmls");
+
+struct RegistryPolicyForAddon {
+ static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
+ using wgt::parse::AddonHandler;
+ std::unique_ptr<parser::ManifestHandlerRegistry> registry;
+ registry.reset(new parser::ManifestHandlerRegistry());
+ registry->RegisterManifestHandler(new AddonHandler());
+ return registry;
+ }
+};
+
+} // namespace
+
+namespace parser {
+
+class AddonHandlerTest : public BaseTest<RegistryPolicyForAddon> {
+ void SetUp() override {
+ BaseTest<RegistryPolicyForAddon>::SetUp();
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ }
+};
+
+TEST_F(AddonHandlerTest, Valid) {
+ ASSERT_TRUE(ParseAppManifest()) << GetError();
+ ASSERT_TRUE(ValidateAppManifest()) << GetError();
+ std::shared_ptr<const wgt::parse::AddonInfo> data =
+ std::static_pointer_cast<const wgt::parse::AddonInfo>(
+ GetManifestData(wgt::parse::AddonInfo::Key()));
+ EXPECT_TRUE(!!data);
+}
+
+TEST_F(AddonHandlerTest, PackageNameTest) {
+ ASSERT_TRUE(ParseAppManifest()) << GetError();
+ ASSERT_TRUE(ValidateAppManifest()) << GetError();
+ std::shared_ptr<const wgt::parse::AddonInfo> data =
+ std::static_pointer_cast<const wgt::parse::AddonInfo>(
+ GetManifestData(wgt::parse::AddonInfo::Key()));
+ ASSERT_TRUE(!!data);
+ EXPECT_EQ(data->package(), "package0id");
+}
+
+TEST_F(AddonHandlerTest, RequiredVersionTest) {
+ ASSERT_TRUE(ParseAppManifest()) << GetError();
+ ASSERT_TRUE(ValidateAppManifest()) << GetError();
+ std::shared_ptr<const wgt::parse::AddonInfo> data =
+ std::static_pointer_cast<const wgt::parse::AddonInfo>(
+ GetManifestData(wgt::parse::AddonInfo::Key()));
+ ASSERT_TRUE(!!data);
+ EXPECT_EQ(data->required_version(), "5.5");
+}
+
+TEST_F(AddonHandlerTest, NoPackageNameTest) {
+ ASSERT_TRUE(ParseAppManifest()) << GetError();
+ EXPECT_FALSE(ValidateAppManifest());
+}
+
+TEST_F(AddonHandlerTest, NoRequiredVersionTest) {
+ ASSERT_TRUE(ParseAppManifest()) << GetError();
+ EXPECT_FALSE(ValidateAppManifest());
+}
+
+} // namespace parser
--- /dev/null
+// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by an apache 2.0 license that can be
+// found in the LICENSE file.
+
+#include <boost/filesystem/path.hpp>
+
+#include <gtest/gtest.h>
+
+#include <manifest_parser/manifest.h>
+#include <manifest_parser/manifest_util.h>
+
+#include <algorithm>
+#include <memory>
+#include <vector>
+
+#include "unit_tests/base_test.h"
+#include "wgt_manifest_handlers/application_manifest_constants.h"
+#include "wgt_manifest_handlers/appwidget_handler.h"
+#include "wgt_manifest_handlers/tizen_application_handler.h"
+
+namespace bf = boost::filesystem;
+
+namespace {
+
+const bf::path kXmlDirectory("test_samples/xmls");
+
+struct RegistryPolicyForAppWidget {
+ static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
+ std::unique_ptr<parser::ManifestHandlerRegistry> registry;
+ registry.reset(new parser::ManifestHandlerRegistry());
+ registry->RegisterManifestHandler(
+ new wgt::parse::TizenApplicationHandler());
+ registry->RegisterManifestHandler(
+ new wgt::parse::AppWidgetHandler());
+ return registry;
+ }
+};
+
+} // namespace
+
+namespace parser {
+
+class AppWidgetHandlerTest : public BaseTest<RegistryPolicyForAppWidget> {
+};
+
+TEST_F(AppWidgetHandlerTest, dbox1) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::AppWidgetInfo> data =
+ std::static_pointer_cast<const wgt::parse::AppWidgetInfo>(
+ GetManifestData(
+ wgt::application_widget_keys::kTizenAppWidgetFullKey));
+ ASSERT_EQ(data->app_widgets().size(), 1);
+ const wgt::parse::AppWidget& app_widget = *data->app_widgets().begin();
+ ASSERT_EQ(app_widget.auto_launch, true);
+ ASSERT_EQ(app_widget.content_mouse_event, true);
+ ASSERT_EQ(app_widget.content_touch_effect, false);
+ ASSERT_EQ(app_widget.content_src, "box/index.html");
+ ASSERT_EQ(app_widget.id, "aaaaaaa100.dbox1.default");
+ ASSERT_EQ(app_widget.primary, true);
+ ASSERT_EQ(app_widget.label.default_value, "dbox1 default label");
+ ASSERT_EQ(app_widget.label.lang_value_map.size(), 2);
+ ASSERT_EQ(app_widget.label.lang_value_map.count("pl"), 1);
+ ASSERT_EQ(app_widget.label.lang_value_map.find("pl")->second,
+ "dbox1 pl label");
+ ASSERT_EQ(app_widget.label.lang_value_map.count("en"), 1);
+ ASSERT_EQ(app_widget.label.lang_value_map.find("en")->second,
+ "dbox1 en label");
+ ASSERT_EQ(app_widget.icon_src, "icon.png");
+ ASSERT_EQ(app_widget.max_instance, 0);
+ ASSERT_EQ(app_widget.update_period.size(), 1);
+ ASSERT_EQ(app_widget.update_period.at(0), 2000.0);
+
+ ASSERT_EQ(app_widget.content_size.size(), 3);
+ auto size1 = std::find_if(app_widget.content_size.begin(),
+ app_widget.content_size.end(),
+ [](const wgt::parse::AppWidgetSize& size) {
+ return size.type == wgt::parse::k1x1;
+ });
+ auto size2 = std::find_if(app_widget.content_size.begin(),
+ app_widget.content_size.end(),
+ [](const wgt::parse::AppWidgetSize& size) {
+ return size.type == wgt::parse::k2x1;
+ });
+ auto size3 = std::find_if(app_widget.content_size.begin(),
+ app_widget.content_size.end(),
+ [](const wgt::parse::AppWidgetSize& size) {
+ return size.type == wgt::parse::k2x2;
+ });
+ ASSERT_NE(size1, app_widget.content_size.end());
+ ASSERT_NE(size2, app_widget.content_size.end());
+ ASSERT_NE(size3, app_widget.content_size.end());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_icon_none) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::AppWidgetInfo> data =
+ std::static_pointer_cast<const wgt::parse::AppWidgetInfo>(
+ GetManifestData(
+ wgt::application_widget_keys::kTizenAppWidgetFullKey));
+ ASSERT_EQ(data->app_widgets().size(), 1);
+ const wgt::parse::AppWidget& app_widget = *data->app_widgets().begin();
+ ASSERT_TRUE(app_widget.icon_src.empty());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox2) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::AppWidgetInfo> data =
+ std::static_pointer_cast<const wgt::parse::AppWidgetInfo>(
+ GetManifestData(
+ wgt::application_widget_keys::kTizenAppWidgetFullKey));
+ ASSERT_EQ(data->app_widgets().size(), 2);
+ auto result1 = std::find_if(data->app_widgets().begin(),
+ data->app_widgets().end(),
+ [](const wgt::parse::AppWidget& candidate) {
+ return candidate.id == "aaaaaaa200.dbox2.default";
+ });
+ auto result2 = std::find_if(data->app_widgets().begin(),
+ data->app_widgets().end(),
+ [](const wgt::parse::AppWidget& candidate) {
+ return candidate.id == "aaaaaaa200.dbox2.second";
+ });
+ ASSERT_NE(result1, data->app_widgets().end());
+ ASSERT_NE(result2, data->app_widgets().end());
+
+ const wgt::parse::AppWidget& app_widget1 = *result1;
+ ASSERT_EQ(app_widget1.auto_launch, true);
+ ASSERT_EQ(app_widget1.content_mouse_event, true);
+ ASSERT_EQ(app_widget1.content_touch_effect, false);
+ ASSERT_EQ(app_widget1.content_src, "box/index.html");
+ ASSERT_EQ(app_widget1.id, "aaaaaaa200.dbox2.default");
+ ASSERT_EQ(app_widget1.primary, true);
+ ASSERT_EQ(app_widget1.label.default_value, "dbox2 default label");
+ ASSERT_EQ(app_widget1.label.lang_value_map.size(), 2);
+ ASSERT_EQ(app_widget1.label.lang_value_map.count("pl"), 1);
+ ASSERT_EQ(app_widget1.label.lang_value_map.find("pl")->second,
+ "dbox2 pl label");
+ ASSERT_EQ(app_widget1.label.lang_value_map.count("en"), 1);
+ ASSERT_EQ(app_widget1.label.lang_value_map.find("en")->second,
+ "dbox2 en label");
+ ASSERT_EQ(app_widget1.icon_src, "icon.png");
+ ASSERT_EQ(app_widget1.max_instance, 0);
+ ASSERT_EQ(app_widget1.update_period.size(), 1);
+ ASSERT_EQ(app_widget1.update_period.at(0), 2000.0);
+
+ const wgt::parse::AppWidget& app_widget2 = *result2;
+ ASSERT_EQ(app_widget2.auto_launch, false);
+ ASSERT_EQ(app_widget2.content_mouse_event, false);
+ ASSERT_EQ(app_widget2.content_touch_effect, true);
+ ASSERT_EQ(app_widget2.content_src, "box/index2.html");
+ ASSERT_EQ(app_widget2.id, "aaaaaaa200.dbox2.second");
+ ASSERT_EQ(app_widget2.primary, false);
+ ASSERT_EQ(app_widget2.label.default_value, "dbox2 default label 2");
+ ASSERT_EQ(app_widget2.label.lang_value_map.size(), 2);
+ ASSERT_EQ(app_widget2.label.lang_value_map.count("pl"), 1);
+ ASSERT_EQ(app_widget2.label.lang_value_map.find("pl")->second,
+ "dbox2 pl label 2");
+ ASSERT_EQ(app_widget2.label.lang_value_map.count("en"), 1);
+ ASSERT_EQ(app_widget2.label.lang_value_map.find("en")->second,
+ "dbox2 en label 2");
+ ASSERT_EQ(app_widget2.icon_src, "icon2.png");
+ ASSERT_EQ(app_widget2.max_instance, 0);
+ ASSERT_EQ(app_widget2.update_period.size(), 1);
+ ASSERT_EQ(app_widget2.update_period.at(0), 4000.0);
+}
+
+TEST_F(AppWidgetHandlerTest, dbox2_app_widget_primary_two_true) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::AppWidgetInfo> data =
+ std::static_pointer_cast<const wgt::parse::AppWidgetInfo>(
+ GetManifestData(
+ wgt::application_widget_keys::kTizenAppWidgetFullKey));
+ ASSERT_EQ(data->app_widgets().size(), 2);
+ auto result1 = std::find_if(data->app_widgets().begin(),
+ data->app_widgets().end(),
+ [](const wgt::parse::AppWidget& candidate) {
+ return candidate.id == "aaaaaaa201.dbox2.default";
+ });
+ auto result2 = std::find_if(data->app_widgets().begin(),
+ data->app_widgets().end(),
+ [](const wgt::parse::AppWidget& candidate) {
+ return candidate.id == "aaaaaaa201.dbox2.second";
+ });
+ ASSERT_NE(result1, data->app_widgets().end());
+ ASSERT_NE(result2, data->app_widgets().end());
+
+ const wgt::parse::AppWidget& app_widget1 = *result1;
+ ASSERT_EQ(app_widget1.primary, true);
+
+ const wgt::parse::AppWidget& app_widget2 = *result2;
+ ASSERT_EQ(app_widget2.primary, true);
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_auto_launch_not_bool) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_content_box_size_invalid) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_content_box_size_none) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest,
+ dbox1_app_widget_box_content_box_size_use_decoration_invalid) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest,
+ dbox1_app_widget_box_content_mouse_event_not_bool) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_content_none) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_content_pd_height_invalid) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_content_pd_height_ood) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_content_pd_src_none) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_content_pd_width_invalid) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_content_src_none) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest,
+ dbox1_app_widget_box_content_touch_effect_not_bool) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_content_two) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_icon_src_none) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_icon_two) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_box_label_none) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_id_invalid_1) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_id_invalid_2) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_id_none) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_primary_none) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_primary_not_bool) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_update_period_invalid) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(AppWidgetHandlerTest, dbox1_app_widget_update_period_ood) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+} // namespace parser
--- /dev/null
+// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by an apache 2.0 license that can be
+// found in the LICENSE file.
+
+#ifndef UNIT_TESTS_BASE_TEST_H_
+#define UNIT_TESTS_BASE_TEST_H_
+
+#include <gtest/gtest.h>
+
+#include <manifest_parser/manifest_parser_impl.h>
+#include <manifest_parser/manifest_parser.h>
+
+#include <memory>
+#include <string>
+
+namespace parser {
+
+/**
+ * Base class for unittests of handlers
+ *
+ * Requires policy class parameter implementing static method:
+ * - std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry();
+ * which must return valid registry for given tests.
+ */
+template<typename RegistryPolicy>
+class BaseTest : public testing::Test {
+ public:
+ void SetUp() override {
+ parser_.reset(new ManifestParserImpl(RegistryPolicy::GetRegistry()));
+ }
+ void TearDown() override { parser_.reset(); }
+ void SetManifest(std::shared_ptr<Manifest> manifest) {
+ parser_->SetManifest(manifest);
+ }
+ bool ParseAppManifest() {
+ return parser_->ParseAppManifest(&error_);
+ }
+ bool ValidateAppManifest() {
+ return parser_->ValidateAppManifest(&error_);
+ }
+ std::shared_ptr<const ManifestData> GetManifestData(const std::string& key) {
+ return parser_->GetManifestData(key);
+ }
+
+ std::string GetMyName() const {
+ std::string suite =
+ testing::UnitTest::GetInstance()->current_test_info()->test_case_name();
+ std::string case_name =
+ testing::UnitTest::GetInstance()->current_test_info()->name();
+ return suite + '.' + case_name;
+ }
+
+ const std::string& GetError() const {
+ return error_;
+ }
+
+ private:
+ std::unique_ptr<ManifestParserImpl> parser_;
+ std::string error_;
+};
+
+} // namespace parser
+
+#endif // UNIT_TESTS_BASE_TEST_H_
--- /dev/null
+// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by a apache-2.0 license that can be
+// found in the LICENSE file.
+
+#include <boost/filesystem/path.hpp>
+
+#include <gtest/gtest.h>
+
+#include <manifest_parser/manifest.h>
+#include <manifest_parser/manifest_util.h>
+
+#include <memory>
+#include <vector>
+
+#include "unit_tests/base_test.h"
+#include "wgt_manifest_handlers/application_manifest_constants.h"
+#include "wgt_manifest_handlers/content_handler.h"
+
+namespace bf = boost::filesystem;
+
+namespace {
+
+const char kWidgetKey[] = "widget";
+const char kNamespaceKey[] = "@namespace";
+const char kTizenContentTagKey[] = "content";
+const char kTizenNamespacePrefix[] = "http://tizen.org/ns/widgets";
+const char kWidgetNamespacePrefix[] = "http://www.w3.org/ns/widgets";
+const char kTizenContentEncodingKey[] = "@encoding";
+const char kTizenContentTypeKey[] = "@type";
+const char kTizenContentKey[] = "widget.content";
+const char kMimeMainComponent[] = "";
+const char kMimeCharsetComponent[] = "charset";
+const char kDefaultMimeType[] = "text/html";
+const char kDefaultEncoding[] = "UTF-8";
+const char kTizenContentSrcKey[] = "@src";
+
+struct RegistryPolicyForContent {
+ static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
+ std::unique_ptr<parser::ManifestHandlerRegistry> registry;
+ registry.reset(new parser::ManifestHandlerRegistry());
+ registry->RegisterManifestHandler(new wgt::parse::ContentHandler());
+ return registry;
+ }
+};
+
+} // namespace
+
+namespace parser {
+
+class ContentHandlerTest : public BaseTest<RegistryPolicyForContent> {
+};
+
+TEST_F(ContentHandlerTest, NoContentEntry) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ ASSERT_TRUE(!GetManifestData(kTizenContentKey));
+}
+
+TEST_F(ContentHandlerTest, SingleContentEntry) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ content->SetString(kTizenContentSrcKey, "my_index.html");
+ widget->Set(kTizenContentTagKey, content.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::ContentInfo> content_info =
+ std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
+ GetManifestData(kTizenContentKey));
+ ASSERT_TRUE(!!content_info);
+ ASSERT_EQ(content_info->is_tizen_content(), false);
+ ASSERT_EQ(content_info->src(), "my_index.html");
+}
+
+TEST_F(ContentHandlerTest, SingleContentEntrySrcEmpty) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ content->SetString(kTizenContentSrcKey, "");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kTizenContentTagKey, content.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check empty
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::ContentInfo> content_info =
+ std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
+ GetManifestData(kTizenContentKey));
+ ASSERT_FALSE(!!content_info);
+}
+
+TEST_F(ContentHandlerTest, SingleTizenContentEntry) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ content->SetString(kTizenContentSrcKey, "http://www.tizen.app/my_index.html");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kTizenContentTagKey, content.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::ContentInfo> content_info =
+ std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
+ GetManifestData(kTizenContentKey));
+ ASSERT_TRUE(!!content_info);
+ ASSERT_EQ(content_info->is_tizen_content(), true);
+ ASSERT_EQ(content_info->src(), "http://www.tizen.app/my_index.html");
+}
+
+TEST_F(ContentHandlerTest, SingleTizenContentEntryNotURL) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ content->SetString(kTizenContentSrcKey, "relative_NOT_url");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kTizenContentTagKey, content.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check error
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::ContentInfo> content_info =
+ std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
+ GetManifestData(kTizenContentKey));
+ ASSERT_TRUE(!!content_info);
+ ASSERT_EQ(content_info->is_tizen_content(), true);
+ ASSERT_EQ(content_info->src(), "relative_NOT_url");
+}
+
+TEST_F(ContentHandlerTest, MultipleContentEntryW3CTakeFirst) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<ListValue> list(new ListValue());
+ std::unique_ptr<DictionaryValue> content1(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content2(new DictionaryValue());
+ content1->SetString(kTizenContentSrcKey, "w3c_1_index.html");
+ content2->SetString(kTizenContentSrcKey, "w3c_2_index.html");
+ list->Append(content1.release());
+ list->Append(content2.release());
+ widget->Set(kTizenContentTagKey, list.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::ContentInfo> content_info =
+ std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
+ GetManifestData(kTizenContentKey));
+ ASSERT_TRUE(!!content_info);
+ ASSERT_EQ(content_info->is_tizen_content(), false);
+ ASSERT_EQ(content_info->src(), "w3c_1_index.html");
+}
+
+TEST_F(ContentHandlerTest, MultipleContentEntryTizenTakeFirst) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<ListValue> list(new ListValue());
+ std::unique_ptr<DictionaryValue> content1(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content2(new DictionaryValue());
+ content1->SetString(kTizenContentSrcKey,
+ "http://www.tizen.app/tizen_1_index.html");
+ content1->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ content2->SetString(kTizenContentSrcKey,
+ "http://www.tizen.app/tizen_2_index.html");
+ content2->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ list->Append(content1.release());
+ list->Append(content2.release());
+ widget->Set(kTizenContentTagKey, list.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::ContentInfo> content_info =
+ std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
+ GetManifestData(kTizenContentKey));
+ ASSERT_TRUE(!!content_info);
+ ASSERT_EQ(content_info->is_tizen_content(), true);
+ ASSERT_EQ(content_info->src(), "http://www.tizen.app/tizen_1_index.html");
+}
+
+TEST_F(ContentHandlerTest, MultipleContentEntryTizenPrioritizedAsFirst) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<ListValue> list(new ListValue());
+ std::unique_ptr<DictionaryValue> content1(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content2(new DictionaryValue());
+ content1->SetString(kTizenContentSrcKey,
+ "http://www.tizen.app/tizen_index.html");
+ content1->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ content2->SetString(kTizenContentSrcKey, "my_index.html");
+ list->Append(content1.release());
+ list->Append(content2.release());
+ widget->Set(kTizenContentTagKey, list.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::ContentInfo> content_info =
+ std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
+ GetManifestData(kTizenContentKey));
+ ASSERT_TRUE(!!content_info);
+ ASSERT_EQ(content_info->is_tizen_content(), true);
+ ASSERT_EQ(content_info->src(), "http://www.tizen.app/tizen_index.html");
+}
+
+TEST_F(ContentHandlerTest, MultipleContentEntryTizenPrioritizedAsSecond) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<ListValue> list(new ListValue());
+ std::unique_ptr<DictionaryValue> content1(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content2(new DictionaryValue());
+ content1->SetString(kTizenContentSrcKey, "my_index.html");
+ content2->SetString(kTizenContentSrcKey,
+ "http://www.tizen.app/tizen_index.html");
+ content2->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ list->Append(content1.release());
+ list->Append(content2.release());
+ widget->Set(kTizenContentTagKey, list.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::ContentInfo> content_info =
+ std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
+ GetManifestData(kTizenContentKey));
+ ASSERT_TRUE(!!content_info);
+ ASSERT_EQ(content_info->is_tizen_content(), true);
+ ASSERT_EQ(content_info->src(), "http://www.tizen.app/tizen_index.html");
+}
+
+TEST_F(ContentHandlerTest, MultipleContentEntryW3CIgnoreIfNotFirst) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<ListValue> list(new ListValue());
+ std::unique_ptr<DictionaryValue> content1(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content2(new DictionaryValue());
+ content2->SetString(kTizenContentSrcKey, "w3c_2_index.html");
+ list->Append(content1.release());
+ list->Append(content2.release());
+ widget->Set(kTizenContentTagKey, list.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check empty
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::ContentInfo> content_info =
+ std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
+ GetManifestData(kTizenContentKey));
+ ASSERT_FALSE(!!content_info);
+}
+
+TEST_F(ContentHandlerTest, MultipleContentEntryW3CIgnoreIfFirstEmpty) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<ListValue> list(new ListValue());
+ std::unique_ptr<DictionaryValue> content1(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content2(new DictionaryValue());
+ content1->SetString(kTizenContentSrcKey, "");
+ content2->SetString(kTizenContentSrcKey, "w3c_2_index.html");
+ list->Append(content1.release());
+ list->Append(content2.release());
+ widget->Set(kTizenContentTagKey, list.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check empty
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::ContentInfo> content_info =
+ std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
+ GetManifestData(kTizenContentKey));
+ ASSERT_FALSE(!!content_info);
+}
+
+TEST_F(ContentHandlerTest, MultipleContentBackToW3CWhenTizenEntryBroken) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<ListValue> list(new ListValue());
+ std::unique_ptr<DictionaryValue> content1(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content2(new DictionaryValue());
+ content1->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ content2->SetString(kTizenContentSrcKey, "w3c_1_index.html");
+ list->Append(content1.release());
+ list->Append(content2.release());
+ widget->Set(kTizenContentTagKey, list.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check w3c when tizen:content broken
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::ContentInfo> content_info =
+ std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
+ GetManifestData(kTizenContentKey));
+ ASSERT_TRUE(!!content_info);
+ ASSERT_EQ(content_info->is_tizen_content(), false);
+ ASSERT_EQ(content_info->src(), "w3c_1_index.html");
+}
+
+TEST_F(ContentHandlerTest, MultipleMoreContentEntry) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<ListValue> list(new ListValue());
+ std::unique_ptr<DictionaryValue> content1(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content2(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content3(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content4(new DictionaryValue());
+ content1->SetString(kTizenContentSrcKey, "w3c_1_index.html");
+ content2->SetString(kTizenContentSrcKey, "w3c_2_index.html");
+ content3->SetString(kTizenContentSrcKey,
+ "http://www.tizen.app/tizen_3_index.html");
+ content3->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ content4->SetString(kTizenContentSrcKey,
+ "http://www.tizen.app/tizen_4_index.html");
+ content4->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ list->Append(content1.release());
+ list->Append(content2.release());
+ list->Append(content3.release());
+ list->Append(content4.release());
+ widget->Set(kTizenContentTagKey, list.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::ContentInfo> content_info =
+ std::dynamic_pointer_cast<const wgt::parse::ContentInfo>(
+ GetManifestData(kTizenContentKey));
+ ASSERT_TRUE(!!content_info);
+ ASSERT_EQ(content_info->is_tizen_content(), true);
+ ASSERT_EQ(content_info->src(), "http://www.tizen.app/tizen_3_index.html");
+}
+
+} // namespace parser
--- /dev/null
+// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by an apache 2.0 license that can be
+// found in the LICENSE file.
+
+#include <boost/filesystem/path.hpp>
+
+#include <gtest/gtest.h>
+
+#include <manifest_parser/manifest.h>
+#include <manifest_parser/manifest_util.h>
+
+#include <memory>
+
+#include "unit_tests/base_test.h"
+#include "wgt_manifest_handlers/csp_handler.h"
+
+namespace bf = boost::filesystem;
+
+namespace {
+
+const bf::path kXmlDirectory("test_samples/xmls");
+
+struct RegistryPolicyForCSP {
+ static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
+ using wgt::parse::CSPHandler;
+ std::unique_ptr<parser::ManifestHandlerRegistry> registry;
+ registry.reset(new parser::ManifestHandlerRegistry());
+ registry->RegisterManifestHandler(
+ new CSPHandler(CSPHandler::SecurityType::CSP));
+ registry->RegisterManifestHandler(
+ new CSPHandler(CSPHandler::SecurityType::CSP_REPORT_ONLY));
+ return registry;
+ }
+};
+
+} // namespace
+
+namespace parser {
+
+class CSPHandlerTest : public BaseTest<RegistryPolicyForCSP> {
+ void SetUp() override {
+ BaseTest<RegistryPolicyForCSP>::SetUp();
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ }
+};
+
+TEST_F(CSPHandlerTest, InvalidNamespace) {
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::CSPInfo> data =
+ std::static_pointer_cast<const wgt::parse::CSPInfo>(
+ GetManifestData(wgt::parse::CSPInfo::Key()));
+ ASSERT_TRUE(!data);
+ std::shared_ptr<const wgt::parse::CSPInfo> data_report_only =
+ std::static_pointer_cast<const wgt::parse::CSPInfo>(
+ GetManifestData(wgt::parse::CSPInfo::Report_only_key()));
+ ASSERT_TRUE(!data_report_only);
+}
+
+TEST_F(CSPHandlerTest, Valid) {
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::CSPInfo> data =
+ std::static_pointer_cast<const wgt::parse::CSPInfo>(
+ GetManifestData(wgt::parse::CSPInfo::Key()));
+ ASSERT_TRUE(!!data);
+ ASSERT_EQ(data->security_rules(), "script-src 'self'");
+ std::shared_ptr<const wgt::parse::CSPInfo> data_report_only =
+ std::static_pointer_cast<const wgt::parse::CSPInfo>(
+ GetManifestData(wgt::parse::CSPInfo::Report_only_key()));
+ ASSERT_TRUE(!!data_report_only);
+ ASSERT_EQ(data_report_only->security_rules(),
+ "script-src 'self'; report-uri=\"http://example.com/report.cgi\"");
+}
+
+} // namespace parser
--- /dev/null
+// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by an apache 2.0 license that can be
+// found in the LICENSE file.
+
+#include <boost/filesystem/path.hpp>
+
+#include <gtest/gtest.h>
+
+#include <manifest_parser/manifest.h>
+#include <manifest_parser/manifest_util.h>
+
+#include <memory>
+#include <vector>
+
+#include "unit_tests/base_test.h"
+#include "wgt_manifest_handlers/application_manifest_constants.h"
+#include "wgt_manifest_handlers/launch_screen_handler.h"
+
+namespace bf = boost::filesystem;
+
+namespace {
+
+const bf::path kXmlDirectory("test_samples/xmls");
+
+struct RegistryPolicyForLaunchScreen {
+ static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
+ std::unique_ptr<parser::ManifestHandlerRegistry> registry;
+ registry.reset(new parser::ManifestHandlerRegistry());
+ registry->RegisterManifestHandler(new wgt::parse::LaunchScreenHandler());
+ return registry;
+ }
+};
+
+} // namespace
+
+namespace parser {
+
+class LaunchScreenHandlerTest : public BaseTest<RegistryPolicyForLaunchScreen> {
+};
+
+TEST_F(LaunchScreenHandlerTest, Valid) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+
+ std::shared_ptr<const wgt::parse::LaunchScreenInfo> data =
+ std::static_pointer_cast<const wgt::parse::LaunchScreenInfo>(
+ GetManifestData(wgt::parse::LaunchScreenInfo::Key()));
+ ASSERT_EQ(wgt::parse::ReadyWhen::FIRSTPAINT, data->ready_when());
+
+ std::map<wgt::parse::ScreenOrientation, wgt::parse::LaunchScreenData>
+ testData = data->launch_screen_data();
+ ASSERT_EQ(1, testData.size());
+
+ wgt::parse::LaunchScreenData launchData =
+ testData.find(wgt::parse::ScreenOrientation::AUTO)->second;
+ std::vector<std::pair<std::string, boost::optional<int>>> strPair =
+ launchData.background_images;
+ ASSERT_EQ(1, strPair.size());
+ ASSERT_EQ("bg_image.png", strPair[0].first);
+ ASSERT_EQ(boost::none, strPair[0].second);
+
+ ASSERT_EQ(255, launchData.background_color.get()->red);
+ ASSERT_EQ(0, launchData.background_color.get()->green);
+ ASSERT_EQ(0, launchData.background_color.get()->blue);
+
+ strPair = launchData.images;
+ ASSERT_EQ(1, strPair.size());
+ ASSERT_EQ("default_image.gif", strPair[0].first);
+ ASSERT_EQ(boost::none, strPair[0].second);
+
+ std::vector<std::string> strData = launchData.image_border;
+ ASSERT_EQ(6, strData.size());
+ ASSERT_EQ("30px", strData[0]);
+ ASSERT_EQ("30px", strData[1]);
+ ASSERT_EQ("20px", strData[2]);
+ ASSERT_EQ("10px", strData[3]);
+ ASSERT_EQ("repeat", strData[4]);
+ ASSERT_EQ("round", strData[5]);
+}
+
+TEST_F(LaunchScreenHandlerTest, ValidMultiScreenOrientation) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+
+ std::shared_ptr<const wgt::parse::LaunchScreenInfo> data =
+ std::static_pointer_cast<const wgt::parse::LaunchScreenInfo>(
+ GetManifestData(wgt::parse::LaunchScreenInfo::Key()));
+ ASSERT_EQ(wgt::parse::ReadyWhen::FIRSTPAINT, data->ready_when());
+
+ std::map<wgt::parse::ScreenOrientation, wgt::parse::LaunchScreenData>
+ testData = data->launch_screen_data();
+ ASSERT_EQ(3, testData.size());
+
+ wgt::parse::LaunchScreenData launchData =
+ testData.find(wgt::parse::ScreenOrientation::AUTO)->second;
+ ASSERT_EQ(255, launchData.background_color.get()->red);
+ ASSERT_EQ(0, launchData.background_color.get()->green);
+ ASSERT_EQ(0, launchData.background_color.get()->blue);
+
+ launchData = testData.find(wgt::parse::ScreenOrientation::PORTRAIT)->second;
+ ASSERT_EQ(0, launchData.background_color.get()->red);
+ ASSERT_EQ(255, launchData.background_color.get()->green);
+ ASSERT_EQ(0, launchData.background_color.get()->blue);
+
+ launchData = testData.find(wgt::parse::ScreenOrientation::LANDSCAPE)->second;
+ ASSERT_EQ(0, launchData.background_color.get()->red);
+ ASSERT_EQ(0, launchData.background_color.get()->green);
+ ASSERT_EQ(255, launchData.background_color.get()->blue);
+}
+
+TEST_F(LaunchScreenHandlerTest, ValidMultiImages) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+
+ std::shared_ptr<const wgt::parse::LaunchScreenInfo> data =
+ std::static_pointer_cast<const wgt::parse::LaunchScreenInfo>(
+ GetManifestData(wgt::parse::LaunchScreenInfo::Key()));
+ ASSERT_EQ(wgt::parse::ReadyWhen::FIRSTPAINT, data->ready_when());
+
+ std::map<wgt::parse::ScreenOrientation, wgt::parse::LaunchScreenData>
+ testData = data->launch_screen_data();
+ ASSERT_EQ(1, testData.size());
+
+ wgt::parse::LaunchScreenData launchData =
+ testData.find(wgt::parse::ScreenOrientation::AUTO)->second;
+ std::vector<std::pair<std::string, boost::optional<int>>> strPair =
+ launchData.images;
+ ASSERT_EQ(2, strPair.size());
+ ASSERT_EQ("default_image.gif", strPair[0].first);
+ ASSERT_EQ(1, strPair[0].second);
+ ASSERT_EQ("default_image2x.jpg", strPair[1].first);
+ ASSERT_EQ(2, strPair[1].second);
+}
+
+TEST_F(LaunchScreenHandlerTest, ValidMultiBackgroundImages) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+
+ std::shared_ptr<const wgt::parse::LaunchScreenInfo> data =
+ std::static_pointer_cast<const wgt::parse::LaunchScreenInfo>(
+ GetManifestData(wgt::parse::LaunchScreenInfo::Key()));
+ ASSERT_EQ(wgt::parse::ReadyWhen::FIRSTPAINT, data->ready_when());
+
+ std::map<wgt::parse::ScreenOrientation, wgt::parse::LaunchScreenData>
+ testData = data->launch_screen_data();
+ ASSERT_EQ(1, testData.size());
+
+ wgt::parse::LaunchScreenData launchData =
+ testData.find(wgt::parse::ScreenOrientation::AUTO)->second;
+ std::vector<std::pair<std::string, boost::optional<int>>> strPair =
+ launchData.background_images;
+ ASSERT_EQ(2, strPair.size());
+ ASSERT_EQ("bg_image.png", strPair[0].first);
+ ASSERT_EQ(1, strPair[0].second);
+ ASSERT_EQ("bg_image2x.bmp", strPair[1].first);
+ ASSERT_EQ(2, strPair[1].second);
+}
+
+TEST_F(LaunchScreenHandlerTest, ValidComplex) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+
+ std::shared_ptr<const wgt::parse::LaunchScreenInfo> data =
+ std::static_pointer_cast<const wgt::parse::LaunchScreenInfo>(
+ GetManifestData(wgt::parse::LaunchScreenInfo::Key()));
+ ASSERT_EQ(wgt::parse::ReadyWhen::FIRSTPAINT, data->ready_when());
+
+ std::map<wgt::parse::ScreenOrientation, wgt::parse::LaunchScreenData>
+ testData = data->launch_screen_data();
+ ASSERT_EQ(3, testData.size());
+
+ wgt::parse::LaunchScreenData launchData =
+ testData.find(wgt::parse::ScreenOrientation::AUTO)->second;
+ std::vector<std::pair<std::string, boost::optional<int>>> strPair =
+ launchData.background_images;
+ ASSERT_EQ(2, strPair.size());
+ ASSERT_EQ("bg_image.png", strPair[0].first);
+ ASSERT_EQ(1, strPair[0].second);
+ ASSERT_EQ("bg_image2x.bmp", strPair[1].first);
+ ASSERT_EQ(2, strPair[1].second);
+
+ ASSERT_EQ(255, launchData.background_color.get()->red);
+ ASSERT_EQ(0, launchData.background_color.get()->green);
+ ASSERT_EQ(0, launchData.background_color.get()->blue);
+
+ strPair = launchData.images;
+ ASSERT_EQ(2, strPair.size());
+ ASSERT_EQ("default_image.gif", strPair[0].first);
+ ASSERT_EQ(1, strPair[0].second);
+ ASSERT_EQ("default_image2x.jpg", strPair[1].first);
+ ASSERT_EQ(2, strPair[1].second);
+
+ std::vector<std::string> strData = launchData.image_border;
+ ASSERT_EQ(6, strData.size());
+ ASSERT_EQ("30px", strData[0]);
+ ASSERT_EQ("30px", strData[1]);
+ ASSERT_EQ("20px", strData[2]);
+ ASSERT_EQ("10px", strData[3]);
+ ASSERT_EQ("repeat", strData[4]);
+ ASSERT_EQ("round", strData[5]);
+
+ launchData = testData.find(wgt::parse::ScreenOrientation::PORTRAIT)->second;
+ strPair = launchData.background_images;
+ ASSERT_EQ(1, strPair.size());
+ ASSERT_EQ("bg_image.png", strPair[0].first);
+ ASSERT_EQ(boost::none, strPair[0].second);
+
+ ASSERT_EQ(0, launchData.background_color.get()->red);
+ ASSERT_EQ(255, launchData.background_color.get()->green);
+ ASSERT_EQ(0, launchData.background_color.get()->blue);
+
+ strPair = launchData.images;
+ ASSERT_EQ(1, strPair.size());
+ ASSERT_EQ("portrait_image.png", strPair[0].first);
+ ASSERT_EQ(boost::none, strPair[0].second);
+
+ strData = launchData.image_border;
+ ASSERT_EQ(1, strData.size());
+ ASSERT_EQ("repeat", strData[0]);
+
+ launchData = testData.find(wgt::parse::ScreenOrientation::LANDSCAPE)->second;
+ strPair = launchData.background_images;
+ ASSERT_EQ(1, strPair.size());
+ ASSERT_EQ("bg_image.png", strPair[0].first);
+ ASSERT_EQ(boost::none, strPair[0].second);
+
+ ASSERT_EQ(0, launchData.background_color.get()->red);
+ ASSERT_EQ(0, launchData.background_color.get()->green);
+ ASSERT_EQ(255, launchData.background_color.get()->blue);
+
+ strPair = launchData.images;
+ ASSERT_EQ(1, strPair.size());
+ ASSERT_EQ("landscape_image.gif", strPair[0].first);
+ ASSERT_EQ(boost::none, strPair[0].second);
+
+ strData = launchData.image_border;
+ ASSERT_EQ(1, strData.size());
+ ASSERT_EQ("repeat", strData[0]);
+}
+
+TEST_F(LaunchScreenHandlerTest, InvalidNamespace) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+
+ ASSERT_FALSE(ParseAppManifest());
+}
+
+TEST_F(LaunchScreenHandlerTest, Empty) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+
+ std::shared_ptr<const wgt::parse::LaunchScreenInfo> data =
+ std::static_pointer_cast<const wgt::parse::LaunchScreenInfo>(
+ GetManifestData(wgt::parse::LaunchScreenInfo::Key()));
+ ASSERT_EQ(wgt::parse::ReadyWhen::FIRSTPAINT, data->ready_when());
+
+ std::map<wgt::parse::ScreenOrientation, wgt::parse::LaunchScreenData>
+ testData = data->launch_screen_data();
+ ASSERT_EQ(0, testData.size());
+}
+
+TEST_F(LaunchScreenHandlerTest, InvalidReadyWhen) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+
+ ASSERT_FALSE(ParseAppManifest());
+}
+
+} // namespace parser
--- /dev/null
+// Copyright (c) 2020 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by a apache 2.0 license that can be
+// found in the LICENSE file.
+
+#include <gtest/gtest.h>
+#include <gmock/gmock.h>
+
+int main(int argc, char** argv) {
+ int ret = -1;
+ try {
+ testing::InitGoogleTest(&argc, argv);
+ } catch(...) {
+ std::cout << "Exception occurred" << std::endl;
+ }
+
+ try {
+ ret = RUN_ALL_TESTS();
+ } catch (const ::testing::internal::GoogleTestFailureException& e) {
+ ret = -1;
+ std::cout << "GoogleTestFailureException was thrown:" << e.what()
+ << std::endl;
+ }
+
+ return ret;
+}
--- /dev/null
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE-xwalk file.
+
+#include <boost/filesystem/fstream.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <gtest/gtest.h>
+
+#include "manifest_parser/manifest.h"
+#include "manifest_parser/manifest_util.h"
+#include "wgt_manifest_handlers/application_manifest_constants.h"
+
+namespace bf = boost::filesystem;
+
+namespace parser {
+
+class ManifestUtilTest : public testing::Test {
+};
+
+TEST_F(ManifestUtilTest, LoadApplicationWithValidPath) {
+ boost::filesystem::path install_dir("test_samples");
+ ASSERT_TRUE(&install_dir);
+ install_dir /= "good_manifest.xml";
+
+ std::string error;
+ std::shared_ptr<Manifest> manifest(
+ LoadManifest(install_dir.string(), &error));
+ ASSERT_TRUE(error.empty());
+ EXPECT_TRUE(manifest.get());
+
+ std::string app_id;
+ manifest->GetString("widget.application.@id", &app_id);
+ EXPECT_STREQ("nNBDOItqjN.WebSettingSample", app_id.c_str());
+}
+
+TEST_F(ManifestUtilTest,
+ LoadApplicationGivesHelpfullErrorOnMissingManifest) {
+ boost::filesystem::path install_dir("test_samples");
+ ASSERT_TRUE(&install_dir);
+ install_dir /= "bad_manifest.xml";
+ std::string error;
+ std::shared_ptr<Manifest> manifest(
+ LoadManifest(install_dir.string(), &error));
+ ASSERT_FALSE(error.empty());
+ ASSERT_STREQ("Manifest file is missing or unreadable.", error.c_str());
+ EXPECT_FALSE(manifest.get());
+}
+
+// Tests IsPropSupportDir method
+TEST_F(ManifestUtilTest, IsPropSupportDirTest) {
+ xmlChar kWidgetNodeKey[] = "widget";
+ xmlChar kNameNodeKey[] = "name";
+ xmlChar kVersionAttributeKey[] = "version";
+ xmlChar kShortAttributeKey[] = "short";
+ xmlNode node, sec_node;
+ node.name = kWidgetNodeKey;
+ sec_node.name = kNameNodeKey;
+ xmlAttr attr, sec_attr;
+ attr.name = kVersionAttributeKey;
+ sec_attr.name = kShortAttributeKey;
+ ASSERT_TRUE(IsPropSupportDir(&node, &attr));
+ ASSERT_TRUE(IsPropSupportDir(&sec_node, &sec_attr));
+ ASSERT_TRUE(!IsPropSupportDir(&node, &sec_attr));
+ ASSERT_TRUE(!IsPropSupportDir(&sec_node, &attr));
+ ASSERT_TRUE(!IsPropSupportDir(&node, &sec_attr));
+}
+
+// Tests IsElementSupportSpanAndDir method
+TEST_F(ManifestUtilTest, IsElementSupportSpanAndDirTest) {
+ std::map <const char*, bool> nodeNames = {
+ { "name", true },
+ { "description", true },
+ { "author", true },
+ { "license", true },
+ { "badlicense", false }
+ };
+ xmlNode node;
+ for (const auto& p : nodeNames) {
+ node.name = reinterpret_cast<xmlChar*>(const_cast<char*>(p.first));
+ EXPECT_TRUE(IsElementSupportSpanAndDir(&node) == p.second);
+ }
+}
+
+// Tests IsTrimRequiredForElement
+TEST_F(ManifestUtilTest, IsTrimRequiredForElementTest) {
+ std::map<const char*, bool> elements {
+ { "name", true },
+ { "author", true },
+ { "badname", false },
+ { "badauthor", false }
+ };
+ xmlNode node;
+ for (const auto& p : elements) {
+ node.name = reinterpret_cast<xmlChar*>(const_cast<char*>(p.first));
+ EXPECT_TRUE(IsTrimRequiredForElement(&node) == p.second);
+ }
+}
+
+// Tests IsTrimRequiredForProp method
+TEST_F(ManifestUtilTest, IsTrimRequiredForPropTest) {
+ struct node{
+ bool operator <(const node& rhs) const {
+ return node_name_ < rhs.node_name_;
+ }
+ const char* node_name_;
+ const char* attr_name_;
+ };
+
+ std::map<node, bool> nodes = {
+ { {"widget", "id"}, true },
+ { {"widget", "version"}, true },
+ { {"widget", "defaultlocale"}, true },
+ { {"name", "short"}, true },
+ { {"author", "email"}, true },
+ { {"author", "href"}, true },
+ { {"license", "href"}, true },
+ { {"icon", "path"}, true },
+ { {"widget", "email"}, false },
+ { {"name", "path"}, false },
+ { {"author", "id"}, false }
+ };
+
+ xmlNode node;
+ xmlAttr attr;
+ for (const auto& p : nodes) {
+ node.name =
+ reinterpret_cast<xmlChar*>(const_cast<char*>(p.first.node_name_));
+ attr.name =
+ reinterpret_cast<xmlChar*>(const_cast<char*>(p.first.attr_name_));
+ EXPECT_TRUE(IsTrimRequiredForProp(&node, &attr) == p.second);
+ }
+}
+
+// Tests GetNodeDir method with proper values
+TEST_F(ManifestUtilTest, GetNodeDirTestProperValues) {
+ const char* xml = "<widget dir=\"rtl\">"
+ "<name>ppa emoS</name>"
+ "</widget>";
+ xmlDoc* doc = xmlParseMemory(xml, strlen(xml));
+ ASSERT_TRUE(doc);
+ xmlNode* root = doc->children;
+ ASSERT_TRUE(root);
+ std::string inherit_dir("ltr");
+ EXPECT_STREQ("rtl", GetNodeDir(root, inherit_dir).c_str());
+}
+
+// Tests GetNodeDir method with default dir
+TEST_F(ManifestUtilTest, GetNodeDirTestDefaultValues) {
+ const char* xml = "<widget>"
+ "<name>Some app</name>"
+ "</widget>";
+ xmlDoc* doc = xmlParseMemory(xml, strlen(xml));
+ ASSERT_TRUE(doc);
+ xmlNode* root = doc->children;
+ ASSERT_TRUE(root);
+ std::string inherit_dir("ltr");
+ EXPECT_STREQ("ltr", GetNodeDir(root, inherit_dir).c_str());
+}
+
+// Tests GetNodeText method with rtl text direction
+TEST_F(ManifestUtilTest, GetNodeTextTestXmlElementNode) {
+ const char* xml = "<widget dir=\"rtl\">"
+ "<name>ppa emoS</name>"
+ "</widget>";
+ std::map<int, char> control_chars = {
+ { 0, '\xe2' }, { 1, '\x80' }, { 2, '\xab' },
+ { 14, '\xe2' }, { 15, '\x80' }, { 16, '\xac' },
+ };
+ xmlDoc* doc = xmlParseMemory(xml, strlen(xml));
+ ASSERT_TRUE(doc);
+ xmlNode* root = doc->children;
+ ASSERT_TRUE(root);
+ std::string inherit_dir("ltr");
+ std::string s = GetNodeText(root, inherit_dir);
+ for (const auto& p : control_chars)
+ EXPECT_EQ(p.second, s[p.first]);
+}
+
+// Tests GetNodeText method with rtl and ltr text direction
+TEST_F(ManifestUtilTest, GetNodeTextTestTwoXmlElementNodes) {
+ const char* xml = "<widget dir=\"rtl\">"
+ "<name>ppa emoS</name>"
+ "<description dir=\"ltr\">Desc</description>"
+ "</widget>";
+ std::map<int, char> control_chars = {
+ { 0, '\xe2' }, { 1, '\x80' }, { 2, '\xab' },
+ { 14, '\xe2' }, { 15, '\x80' }, { 16, '\xac' },
+ { 17, '\xe2' }, { 18, '\x80' }, { 19, '\xaa' },
+ { 24, '\xe2' }, { 25, '\x80' }, { 26, '\xac' }
+ };
+ xmlDoc* doc = xmlParseMemory(xml, strlen(xml));
+ ASSERT_TRUE(doc);
+ xmlNode* root = doc->children;
+ ASSERT_TRUE(root);
+ std::string inherit_dir("ltr");
+ std::string s = GetNodeText(root, inherit_dir);
+ for (const auto& p : control_chars)
+ EXPECT_EQ(p.second, s[p.first]);
+}
+
+// Tests LoadXMLNode method with proper xml tree
+TEST_F(ManifestUtilTest, LoadXMLNodeTestProperXMLTree) {
+ const char* xml = "<root>"
+ "<widget dir=\"ltr\">"
+ "<name short=\"SA\">Some app</name>"
+ "<description>Desc</description>"
+ "<author dir=\"rtl\">enoemoS</author>"
+ "</widget>"
+ "</root>";
+ std::map<std::string, std::string> expected_vals = {
+ { "widget.@dir", "ltr" },
+ { "widget.name.@short",
+ std::string("\xE2\x80\xAA") + "SA" + "\xE2\x80\xAC" },
+ { "widget.name.#text",
+ std::string("\xE2\x80\xAA") + "Some app" + "\xE2\x80\xAC" },
+ { "widget.description.#text",
+ std::string("\xE2\x80\xAA") + "Desc" + "\xE2\x80\xAC" },
+ { "widget.author.@dir", "rtl" },
+ { "widget.author.#text",
+ std::string("\xE2\x80\xAB") + "enoemoS" + "\xE2\x80\xAC" }
+ };
+
+ xmlDoc* doc = xmlParseMemory(xml, strlen(xml));
+ ASSERT_TRUE(doc);
+ xmlNode* root = doc->children;
+ std::unique_ptr<DictionaryValue> val = LoadXMLNode(root);
+
+ std::string test_str;
+ for (const auto& p : expected_vals) {
+ ASSERT_TRUE(val->GetString(p.first, &test_str));
+ EXPECT_STREQ(p.second.c_str(), test_str.c_str());
+ }
+}
+
+} // namespace parser
--- /dev/null
+// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by a apache-2.0 license that can be
+// found in the LICENSE file.
+
+#include <boost/filesystem/path.hpp>
+
+#include <gtest/gtest.h>
+
+#include <manifest_parser/manifest.h>
+#include <manifest_parser/manifest_util.h>
+
+#include <memory>
+#include <vector>
+
+#include "unit_tests/base_test.h"
+#include "wgt_manifest_handlers/application_manifest_constants.h"
+#include "wgt_manifest_handlers/service_handler.h"
+
+namespace bf = boost::filesystem;
+
+namespace {
+
+const char kWidgetKey[] = "widget";
+const char kTizenServiceKey[] = "widget.service";
+const char kTizenServiceContentKey[] = "content";
+const char kTizenServiceContentSrcKey[] = "@src";
+const char kTizenServiceIdKey[] = "@id";
+const char kTizenNamespacePrefix[] = "http://tizen.org/ns/widgets";
+const char kTizenServiceOnBootKey[] = "@on-boot";
+const char kTizenServiceNameKey[] = "name";
+const char kTizenServiceCategoryNameKey[] = "@name";
+const char kTizenServiceCategoryKey[] = "category";
+const char kTizenServiceIconKey[] = "icon";
+const char kNamespaceKey[] = "@namespace";
+const char kServiceKey[] = "service";
+const char kTizenServiceAutoRestartKey[] = "@auto-restart";
+const char kTizenServiceIconSrcKey[] = "@src";
+const char kTizenServiceDescriptionKey[] = "description";
+const char kTizenServiceMetadataKeyKey[] = "@key";
+const char kTizenServiceMetadataValueKey[] = "@value";
+const char kTizenServiceMetadataKey[] = "metadata";
+const char kXmlLangKey[] = "@lang";
+const char kXmlTextKey[] = "#text";
+
+
+struct RegistryPolicyForService {
+ static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
+ std::unique_ptr<parser::ManifestHandlerRegistry> registry;
+ registry.reset(new parser::ManifestHandlerRegistry());
+ registry->RegisterManifestHandler(new wgt::parse::ServiceHandler());
+ return registry;
+ }
+};
+
+} // namespace
+
+namespace parser {
+
+class ServiceHandlerTest : public BaseTest<RegistryPolicyForService> {
+};
+
+TEST_F(ServiceHandlerTest, NoServiceEntry) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntryDefault) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+ service->Set(kTizenServiceContentKey, content.release());
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetString(kTizenServiceIdKey, "correct001.appId");
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
+ std::shared_ptr<const wgt::parse::ServiceList> service_list =
+ std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
+ GetManifestData(kTizenServiceKey));
+ ASSERT_TRUE(!!service_list);
+ ASSERT_EQ(service_list->services.size(), 1);
+ ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
+ ASSERT_EQ(service_list->services[0].auto_restart(), false);
+ ASSERT_EQ(service_list->services[0].on_boot(), false);
+ ASSERT_EQ(service_list->services[0].content(), "service.js");
+ ASSERT_EQ(service_list->services[0].names().size(), 1);
+ ASSERT_EQ(service_list->services[0].names()[0].second, "name");
+ ASSERT_EQ(service_list->services[0].categories().size(), 0);
+ ASSERT_EQ(service_list->services[0].metadata_set().size(), 0);
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntryOnBootOn) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(::kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+ service->Set(kTizenServiceContentKey, content.release());
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetString(kTizenServiceIdKey, "correct002.appId");
+ service->SetString(kTizenServiceOnBootKey, "true");
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
+ std::shared_ptr<const wgt::parse::ServiceList> service_list =
+ std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
+ GetManifestData(kTizenServiceKey));
+ ASSERT_TRUE(!!service_list);
+ ASSERT_EQ(service_list->services.size(), 1);
+ ASSERT_EQ(service_list->services[0].id(), "correct002.appId");
+ ASSERT_EQ(service_list->services[0].auto_restart(), false);
+ ASSERT_EQ(service_list->services[0].on_boot(), true);
+ ASSERT_EQ(service_list->services[0].content(), "service.js");
+ ASSERT_EQ(service_list->services[0].names().size(), 1);
+ ASSERT_EQ(service_list->services[0].names()[0].second, "name");
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntryAutoRestartOn) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+ service->Set(kTizenServiceContentKey, content.release());
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetString(kTizenServiceIdKey, "correct003.appId");
+ service->SetString(kTizenServiceOnBootKey, "false");
+ service->SetString(kTizenServiceAutoRestartKey, "true");
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
+ std::shared_ptr<const wgt::parse::ServiceList> service_list =
+ std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
+ GetManifestData(kTizenServiceKey));
+ ASSERT_TRUE(!!service_list);
+ ASSERT_EQ(service_list->services.size(), 1);
+ ASSERT_EQ(service_list->services[0].id(), "correct003.appId");
+ ASSERT_EQ(service_list->services[0].auto_restart(), true);
+ ASSERT_EQ(service_list->services[0].on_boot(), false);
+ ASSERT_EQ(service_list->services[0].content(), "service.js");
+ ASSERT_EQ(service_list->services[0].names().size(), 1);
+ ASSERT_EQ(service_list->services[0].names()[0].second, "name");
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntryWrongId) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+ service->Set(kTizenServiceContentKey, content.release());
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetString(kTizenServiceIdKey, "wrongid.appId");
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_FALSE(ValidateAppManifest());
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntryIdTypeMismatch) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+ service->Set(kTizenServiceContentKey, content.release());
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetInteger(kTizenServiceIdKey, 1410);
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_FALSE(ParseAppManifest());
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntryNameMissing) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ service->Set(kTizenServiceContentKey, content.release());
+ service->SetInteger(kTizenServiceIdKey, 1410);
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_FALSE(ParseAppManifest());
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntryIdSingleNameNotInTizen) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+ service->Set(kTizenServiceContentKey, content.release());
+ service->SetInteger(kTizenServiceIdKey, 1410);
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_FALSE(ParseAppManifest());
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntryMultipleNames) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+
+ std::unique_ptr<ListValue> name_list(new ListValue());
+ for (auto& pair : {std::make_pair(std::string(), "first"),
+ std::make_pair(std::string("en"), "second"),
+ std::make_pair(std::string("de"), "third")}) {
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ if (!pair.first.empty()) name->SetString(kXmlLangKey, pair.first);
+ name->SetString(kXmlTextKey, pair.second);
+ name_list->Append(name.release());
+ }
+ service->Set(kTizenServiceNameKey, name_list.release());
+
+ service->Set(kTizenServiceContentKey, content.release());
+ service->SetString(kTizenServiceIdKey, "correct003.appId");
+ service->SetString(kTizenServiceOnBootKey, "false");
+ service->SetString(kTizenServiceAutoRestartKey, "true");
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
+ std::shared_ptr<const wgt::parse::ServiceList> service_list =
+ std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
+ GetManifestData(kTizenServiceKey));
+ ASSERT_TRUE(!!service_list);
+ ASSERT_EQ(service_list->services.size(), 1);
+ ASSERT_EQ(service_list->services[0].id(), "correct003.appId");
+ ASSERT_EQ(service_list->services[0].auto_restart(), true);
+ ASSERT_EQ(service_list->services[0].on_boot(), false);
+ ASSERT_EQ(service_list->services[0].content(), "service.js");
+ ASSERT_EQ(service_list->services[0].names().size(), 3);
+ ASSERT_EQ(service_list->services[0].names()[0].first, "");
+ ASSERT_EQ(service_list->services[0].names()[0].second, "first");
+ ASSERT_EQ(service_list->services[0].names()[1].first, "en");
+ ASSERT_EQ(service_list->services[0].names()[1].second, "second");
+ ASSERT_EQ(service_list->services[0].names()[2].first, "de");
+ ASSERT_EQ(service_list->services[0].names()[2].second, "third");
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntryIdSingleContentNotInTizen) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetInteger(kTizenServiceIdKey, 1410);
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_FALSE(ParseAppManifest());
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntryContentMissing) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetInteger(kTizenServiceIdKey, 1410);
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_FALSE(ParseAppManifest());
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntryMultipleContents) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+
+ std::unique_ptr<ListValue> content_list(new ListValue());
+ for (auto& start_file : {"content1.js", "content2.js"}) {
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, start_file);
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ content_list->Append(content.release());
+ }
+ service->Set(kTizenServiceContentKey, content_list.release());
+
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetInteger(kTizenServiceIdKey, 1410);
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_FALSE(ParseAppManifest());
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntrySingleIcon) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> icon(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+ icon->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ icon->SetString(kTizenServiceIconSrcKey, "my_icon.png");
+ service->Set(kTizenServiceIconKey, icon.release());
+ service->Set(kTizenServiceContentKey, content.release());
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetString(kTizenServiceIdKey, "correct001.appId");
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
+ std::shared_ptr<const wgt::parse::ServiceList> service_list =
+ std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
+ GetManifestData(kTizenServiceKey));
+ ASSERT_TRUE(!!service_list);
+ ASSERT_EQ(service_list->services.size(), 1);
+ ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
+ ASSERT_EQ(service_list->services[0].auto_restart(), false);
+ ASSERT_EQ(service_list->services[0].on_boot(), false);
+ ASSERT_EQ(service_list->services[0].content(), "service.js");
+ ASSERT_EQ(service_list->services[0].names().size(), 1);
+ ASSERT_EQ(service_list->services[0].names()[0].second, "name");
+ ASSERT_EQ(service_list->services[0].icon(), "my_icon.png");
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntrySingleIconNotInTizen) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> icon(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+ icon->SetString(kTizenServiceIconSrcKey, "my_icon.png");
+ service->Set(kTizenServiceIconKey, icon.release());
+ service->Set(kTizenServiceContentKey, content.release());
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetString(kTizenServiceIdKey, "correct001.appId");
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
+ std::shared_ptr<const wgt::parse::ServiceList> service_list =
+ std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
+ GetManifestData(kTizenServiceKey));
+ ASSERT_TRUE(!!service_list);
+ ASSERT_EQ(service_list->services.size(), 1);
+ ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
+ ASSERT_EQ(service_list->services[0].auto_restart(), false);
+ ASSERT_EQ(service_list->services[0].on_boot(), false);
+ ASSERT_EQ(service_list->services[0].content(), "service.js");
+ ASSERT_EQ(service_list->services[0].names().size(), 1);
+ ASSERT_EQ(service_list->services[0].names()[0].second, "name");
+ ASSERT_EQ(service_list->services[0].icon(), "");
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntryMultipleIcon) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+
+ std::unique_ptr<ListValue> icon_list(new ListValue());
+ for (auto& icon_value : {"icon1.png", "icon2.png"}) {
+ std::unique_ptr<DictionaryValue> icon(new DictionaryValue());
+ icon->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ icon->SetString(kTizenServiceIconSrcKey, icon_value);
+ icon_list->Append(icon.release());
+ }
+
+ service->Set(kTizenServiceIconKey, icon_list.release());
+ service->Set(kTizenServiceContentKey, content.release());
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetString(kTizenServiceIdKey, "correct001.appId");
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_FALSE(ParseAppManifest());
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntrySingleDescription) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> description(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+ description->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ description->SetString(kXmlTextKey, "my description");
+ service->Set(kTizenServiceDescriptionKey, description.release());
+ service->Set(kTizenServiceContentKey, content.release());
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetString(kTizenServiceIdKey, "correct001.appId");
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
+ std::shared_ptr<const wgt::parse::ServiceList> service_list =
+ std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
+ GetManifestData(kTizenServiceKey));
+ ASSERT_TRUE(!!service_list);
+ ASSERT_EQ(service_list->services.size(), 1);
+ ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
+ ASSERT_EQ(service_list->services[0].auto_restart(), false);
+ ASSERT_EQ(service_list->services[0].on_boot(), false);
+ ASSERT_EQ(service_list->services[0].content(), "service.js");
+ ASSERT_EQ(service_list->services[0].names().size(), 1);
+ ASSERT_EQ(service_list->services[0].names()[0].second, "name");
+ ASSERT_EQ(service_list->services[0].description(), "my description");
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntrySingleDescriptionNotInTizen) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> description(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+ description->SetString(kXmlTextKey, "my description");
+ service->Set(kTizenServiceDescriptionKey, description.release());
+ service->Set(kTizenServiceContentKey, content.release());
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetString(kTizenServiceIdKey, "correct001.appId");
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
+ std::shared_ptr<const wgt::parse::ServiceList> service_list =
+ std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
+ GetManifestData(kTizenServiceKey));
+ ASSERT_TRUE(!!service_list);
+ ASSERT_EQ(service_list->services.size(), 1);
+ ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
+ ASSERT_EQ(service_list->services[0].auto_restart(), false);
+ ASSERT_EQ(service_list->services[0].on_boot(), false);
+ ASSERT_EQ(service_list->services[0].content(), "service.js");
+ ASSERT_EQ(service_list->services[0].names().size(), 1);
+ ASSERT_EQ(service_list->services[0].names()[0].second, "name");
+ ASSERT_EQ(service_list->services[0].description(), "");
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntryMultipleDescription) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+
+ std::unique_ptr<ListValue> description_list(new ListValue());
+ for (auto& desc_value : {"1", "2"}) {
+ std::unique_ptr<DictionaryValue> description(new DictionaryValue());
+ description->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ description->SetString(kXmlTextKey, desc_value);
+ description_list->Append(description.release());
+ }
+ service->Set(kTizenServiceDescriptionKey, description_list.release());
+
+ service->Set(kTizenServiceContentKey, content.release());
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetString(kTizenServiceIdKey, "correct001.appId");
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_FALSE(ParseAppManifest());
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntrySingleMetadata) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> metadata(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+ metadata->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ metadata->SetString(kTizenServiceMetadataKeyKey, "unique key");
+ metadata->SetString(kTizenServiceMetadataValueKey, "some value");
+ service->Set(kTizenServiceMetadataKey, metadata.release());
+ service->Set(kTizenServiceContentKey, content.release());
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetString(kTizenServiceIdKey, "correct001.appId");
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
+ std::shared_ptr<const wgt::parse::ServiceList> service_list =
+ std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
+ GetManifestData(kTizenServiceKey));
+ ASSERT_TRUE(!!service_list);
+ ASSERT_EQ(service_list->services.size(), 1);
+ ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
+ ASSERT_EQ(service_list->services[0].auto_restart(), false);
+ ASSERT_EQ(service_list->services[0].on_boot(), false);
+ ASSERT_EQ(service_list->services[0].content(), "service.js");
+ ASSERT_EQ(service_list->services[0].names().size(), 1);
+ ASSERT_EQ(service_list->services[0].names()[0].second, "name");
+ ASSERT_EQ(service_list->services[0].metadata_set().size(), 1);
+ ASSERT_EQ(service_list->services[0].metadata_set()[0].first, "unique key");
+ ASSERT_EQ(service_list->services[0].metadata_set()[0].second, "some value");
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntrySingleMetadataNotInTizen) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> metadata(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+ metadata->SetString(kTizenServiceMetadataKeyKey, "unique key");
+ metadata->SetString(kTizenServiceMetadataValueKey, "some value");
+ service->Set(kTizenServiceMetadataKey, metadata.release());
+ service->Set(kTizenServiceContentKey, content.release());
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetString(kTizenServiceIdKey, "correct001.appId");
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
+ std::shared_ptr<const wgt::parse::ServiceList> service_list =
+ std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
+ GetManifestData(kTizenServiceKey));
+ ASSERT_TRUE(!!service_list);
+ ASSERT_EQ(service_list->services.size(), 1);
+ ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
+ ASSERT_EQ(service_list->services[0].auto_restart(), false);
+ ASSERT_EQ(service_list->services[0].on_boot(), false);
+ ASSERT_EQ(service_list->services[0].content(), "service.js");
+ ASSERT_EQ(service_list->services[0].names().size(), 1);
+ ASSERT_EQ(service_list->services[0].names()[0].second, "name");
+ ASSERT_EQ(service_list->services[0].metadata_set().size(), 0);
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntryMultipleMetadata) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+
+ std::unique_ptr<ListValue> metadata_list(new ListValue());
+ std::unique_ptr<DictionaryValue> metadata(new DictionaryValue());
+ metadata->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ metadata->SetString(kTizenServiceMetadataKeyKey, "unique key");
+ metadata->SetString(kTizenServiceMetadataValueKey, "some value");
+ metadata_list->Append(metadata.release());
+ std::unique_ptr<DictionaryValue> metadata2(new DictionaryValue());
+ metadata2->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ metadata2->SetString(kTizenServiceMetadataKeyKey, "unique key 2");
+ metadata_list->Append(metadata2.release());
+ service->Set(kTizenServiceMetadataKey, metadata_list.release());
+
+ service->Set(kTizenServiceContentKey, content.release());
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetString(kTizenServiceIdKey, "correct001.appId");
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
+ std::shared_ptr<const wgt::parse::ServiceList> service_list =
+ std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
+ GetManifestData(kTizenServiceKey));
+ ASSERT_TRUE(!!service_list);
+ ASSERT_EQ(service_list->services.size(), 1);
+ ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
+ ASSERT_EQ(service_list->services[0].auto_restart(), false);
+ ASSERT_EQ(service_list->services[0].on_boot(), false);
+ ASSERT_EQ(service_list->services[0].content(), "service.js");
+ ASSERT_EQ(service_list->services[0].names().size(), 1);
+ ASSERT_EQ(service_list->services[0].names()[0].second, "name");
+ ASSERT_EQ(service_list->services[0].metadata_set().size(), 2);
+ ASSERT_EQ(service_list->services[0].metadata_set()[0].first, "unique key");
+ ASSERT_EQ(service_list->services[0].metadata_set()[0].second, "some value");
+ ASSERT_EQ(service_list->services[0].metadata_set()[1].first, "unique key 2");
+ ASSERT_EQ(service_list->services[0].metadata_set()[1].second, "");
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntryMultipleMetadataMixedNamespaces) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+
+ std::unique_ptr<ListValue> metadata_list(new ListValue());
+
+ std::unique_ptr<DictionaryValue> metadata(new DictionaryValue());
+ metadata->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ metadata->SetString(kTizenServiceMetadataKeyKey, "unique key");
+ metadata->SetString(kTizenServiceMetadataValueKey, "some value");
+ metadata_list->Append(metadata.release());
+
+ std::unique_ptr<DictionaryValue> metadata2(new DictionaryValue());
+ metadata2->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ metadata2->SetString(kTizenServiceMetadataKeyKey, "unique key 2");
+ metadata_list->Append(metadata2.release());
+
+ std::unique_ptr<DictionaryValue> metadata3(new DictionaryValue());
+ metadata3->SetString(kTizenServiceMetadataKeyKey, "unique key 3");
+ metadata_list->Append(metadata3.release());
+
+ service->Set(kTizenServiceMetadataKey, metadata_list.release());
+
+ service->Set(kTizenServiceContentKey, content.release());
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetString(kTizenServiceIdKey, "correct001.appId");
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
+ std::shared_ptr<const wgt::parse::ServiceList> service_list =
+ std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
+ GetManifestData(kTizenServiceKey));
+ ASSERT_TRUE(!!service_list);
+ ASSERT_EQ(service_list->services.size(), 1);
+ ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
+ ASSERT_EQ(service_list->services[0].auto_restart(), false);
+ ASSERT_EQ(service_list->services[0].on_boot(), false);
+ ASSERT_EQ(service_list->services[0].content(), "service.js");
+ ASSERT_EQ(service_list->services[0].names().size(), 1);
+ ASSERT_EQ(service_list->services[0].names()[0].second, "name");
+ ASSERT_EQ(service_list->services[0].metadata_set().size(), 2);
+ ASSERT_EQ(service_list->services[0].metadata_set()[0].first, "unique key");
+ ASSERT_EQ(service_list->services[0].metadata_set()[0].second, "some value");
+ ASSERT_EQ(service_list->services[0].metadata_set()[1].first, "unique key 2");
+ ASSERT_EQ(service_list->services[0].metadata_set()[1].second, "");
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntrySingleCategory) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> category(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+ category->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ category->SetString(kTizenServiceCategoryNameKey, "category name");
+ service->Set(kTizenServiceCategoryKey, category.release());
+ service->Set(kTizenServiceContentKey, content.release());
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetString(kTizenServiceIdKey, "correct001.appId");
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
+ std::shared_ptr<const wgt::parse::ServiceList> service_list =
+ std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
+ GetManifestData(kTizenServiceKey));
+ ASSERT_TRUE(!!service_list);
+ ASSERT_EQ(service_list->services.size(), 1);
+ ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
+ ASSERT_EQ(service_list->services[0].auto_restart(), false);
+ ASSERT_EQ(service_list->services[0].on_boot(), false);
+ ASSERT_EQ(service_list->services[0].content(), "service.js");
+ ASSERT_EQ(service_list->services[0].names().size(), 1);
+ ASSERT_EQ(service_list->services[0].names()[0].second, "name");
+ ASSERT_EQ(service_list->services[0].categories().size(), 1);
+ ASSERT_EQ(service_list->services[0].categories()[0], "category name");
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntrySingleCategoryNotInTizen) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> category(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+ category->SetString(kTizenServiceCategoryNameKey, "category name");
+ service->Set(kTizenServiceCategoryKey, category.release());
+ service->Set(kTizenServiceContentKey, content.release());
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetString(kTizenServiceIdKey, "correct001.appId");
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
+ std::shared_ptr<const wgt::parse::ServiceList> service_list =
+ std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
+ GetManifestData(kTizenServiceKey));
+ ASSERT_TRUE(!!service_list);
+ ASSERT_EQ(service_list->services.size(), 1);
+ ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
+ ASSERT_EQ(service_list->services[0].auto_restart(), false);
+ ASSERT_EQ(service_list->services[0].on_boot(), false);
+ ASSERT_EQ(service_list->services[0].content(), "service.js");
+ ASSERT_EQ(service_list->services[0].names().size(), 1);
+ ASSERT_EQ(service_list->services[0].names()[0].second, "name");
+ ASSERT_EQ(service_list->services[0].categories().size(), 0);
+}
+
+TEST_F(ServiceHandlerTest, SingleServiceEntryMultipleCategory) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+
+ std::unique_ptr<ListValue> catogory_list(new ListValue());
+ for (auto& name : {"category name 1", "category name 2", "category name 3"}) {
+ std::unique_ptr<DictionaryValue> category(new DictionaryValue());
+ category->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ category->SetString(kTizenServiceCategoryNameKey, name);
+ catogory_list->Append(category.release());
+ }
+ service->Set(kTizenServiceCategoryKey, catogory_list.release());
+
+ service->Set(kTizenServiceContentKey, content.release());
+ service->Set(kTizenServiceNameKey, name.release());
+ service->SetString(kTizenServiceIdKey, "correct001.appId");
+ service->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ widget->Set(kServiceKey, service.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
+ std::shared_ptr<const wgt::parse::ServiceList> service_list =
+ std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
+ GetManifestData(kTizenServiceKey));
+ ASSERT_TRUE(!!service_list);
+ ASSERT_EQ(service_list->services.size(), 1);
+ ASSERT_EQ(service_list->services[0].id(), "correct001.appId");
+ ASSERT_EQ(service_list->services[0].auto_restart(), false);
+ ASSERT_EQ(service_list->services[0].on_boot(), false);
+ ASSERT_EQ(service_list->services[0].content(), "service.js");
+ ASSERT_EQ(service_list->services[0].names().size(), 1);
+ ASSERT_EQ(service_list->services[0].names()[0].second, "name");
+ ASSERT_EQ(service_list->services[0].categories().size(), 3);
+ ASSERT_EQ(service_list->services[0].categories()[0], "category name 1");
+ ASSERT_EQ(service_list->services[0].categories()[1], "category name 2");
+ ASSERT_EQ(service_list->services[0].categories()[2], "category name 3");
+}
+
+TEST_F(ServiceHandlerTest, MultipleServiceEntry) {
+ // Set test values
+ std::unique_ptr<DictionaryValue> value(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> widget(new DictionaryValue());
+ std::unique_ptr<ListValue> list(new ListValue());
+ std::unique_ptr<DictionaryValue> service1(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> service2(new DictionaryValue());
+ service1->SetString(kTizenServiceIdKey, "correct004.appId");
+ service1->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ service2->SetString(kTizenServiceIdKey, "correct005.appId");
+ service2->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ for (auto& service : {service1.get(), service2.get()}) {
+ std::unique_ptr<DictionaryValue> content(new DictionaryValue());
+ std::unique_ptr<DictionaryValue> name(new DictionaryValue());
+ content->SetString(kTizenServiceContentSrcKey, "service.js");
+ content->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kNamespaceKey, kTizenNamespacePrefix);
+ name->SetString(kXmlTextKey, "name");
+ service->Set(kTizenServiceContentKey, content.release());
+ service->Set(kTizenServiceNameKey, name.release());
+ }
+ list->Append(service1.release());
+ list->Append(service2.release());
+ widget->Set(kServiceKey, list.release());
+ value->Set(kWidgetKey, widget.release());
+ std::shared_ptr<Manifest> manifest(new Manifest(std::move(value)));
+ SetManifest(manifest);
+ // Check correctness
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ ASSERT_TRUE(!!GetManifestData(kTizenServiceKey));
+ std::shared_ptr<const wgt::parse::ServiceList> service_list =
+ std::dynamic_pointer_cast<const wgt::parse::ServiceList>(
+ GetManifestData(wgt::parse::ServiceInfo::Key()));
+ ASSERT_TRUE(!!service_list);
+ ASSERT_EQ(service_list->services.size(), 2);
+ ASSERT_EQ(service_list->services[0].id(), "correct004.appId");
+ ASSERT_EQ(service_list->services[1].id(), "correct005.appId");
+ ASSERT_EQ(service_list->services[0].content(), "service.js");
+ ASSERT_EQ(service_list->services[0].names().size(), 1);
+ ASSERT_EQ(service_list->services[0].names()[0].second, "name");
+ ASSERT_EQ(service_list->services[1].content(), "service.js");
+ ASSERT_EQ(service_list->services[1].names().size(), 1);
+ ASSERT_EQ(service_list->services[1].names()[0].second, "name");
+}
+
+} // namespace parser
--- /dev/null
+// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by an apache 2.0 license that can be
+// found in the LICENSE file.
+
+#include <boost/filesystem/path.hpp>
+
+#include <gtest/gtest.h>
+
+#include <manifest_parser/manifest.h>
+#include <manifest_parser/manifest_util.h>
+
+#include <memory>
+#include <vector>
+
+#include "unit_tests/base_test.h"
+#include "wgt_manifest_handlers/application_manifest_constants.h"
+#include "wgt_manifest_handlers/splash_screen_handler.h"
+
+namespace bf = boost::filesystem;
+
+namespace {
+
+const bf::path kXmlDirectory("test_samples/xmls");
+
+struct RegistryPolicyForSplash {
+ static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
+ std::unique_ptr<parser::ManifestHandlerRegistry> registry;
+ registry.reset(new parser::ManifestHandlerRegistry());
+ registry->RegisterManifestHandler(new wgt::parse::SplashScreenHandler());
+ return registry;
+ }
+};
+
+} // namespace
+
+namespace parser {
+
+class SplashHandlerTest : public BaseTest<RegistryPolicyForSplash> {
+};
+
+TEST_F(SplashHandlerTest, InvalidNamespace) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::SplashScreenInfo> data =
+ std::static_pointer_cast<const wgt::parse::SplashScreenInfo>(
+ GetManifestData(wgt::parse::SplashScreenInfo::Key()));
+ ASSERT_TRUE(!data);
+}
+
+TEST_F(SplashHandlerTest, NoSrc) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_FALSE(ParseAppManifest() && ValidateAppManifest());
+}
+
+TEST_F(SplashHandlerTest, Valid) {
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::SplashScreenInfo> data =
+ std::static_pointer_cast<const wgt::parse::SplashScreenInfo>(
+ GetManifestData(wgt::parse::SplashScreenInfo::Key()));
+ ASSERT_EQ(data->src(), "splash.html");
+}
+
+} // namespace parser
--- /dev/null
+<widget id="http://yourdomain/WebSettingSample" version="1.0.0" viewmodes="maximized">
+ <tizen:application id="nNBDOItqjN.WebSettingSample" package="nNBDOItqjN" required_version="2.2"/>
+ <content>index.html</content>
+ <feature>http://tizen.org/feature/screen.size.all</content>
+ <icon>icon.png</icon>
+ <name name="WebSettingSample"/>
+ <tizen:privilege>http://tizen.org/privilege/websetting</tizen:privilege>
+</widget>
--- /dev/null
+<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="AuthorSignature">
+<SignedInfo>
+<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></CanonicalizationMethod>
+<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"></SignatureMethod>
+<Reference URI="config.xml">
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>iEX0LuZs81Q6Du/SkXgbMd+Qa6puMxgyRUCLqhrfpJ8=</DigestValue>
+</Reference>
+<Reference URI="icon.png">
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs=</DigestValue>
+</Reference>
+<Reference URI="index.html">
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>rJOIi81O4OG/Gar/hwrjvD623MpScv6TMdurRZgzDf0=</DigestValue>
+</Reference>
+<Reference URI="version.txt">
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>MjYb9c/C/J56bHY6rlIjfDqkpjFtsUBjLLkco/rcfFY=</DigestValue>
+</Reference>
+<Reference URI="#prop">
+<Transforms>
+<Transform Algorithm="http://www.w3.org/2006/12/xml-c14n11"></Transform>
+</Transforms>
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>lpo8tUDs054eLlBQXiDPVDVKfw30ZZdtkRs1jd7H5K8=</DigestValue>
+</Reference>
+</SignedInfo>
+<SignatureValue>
+c7Jd7btw6Bi9MxzKVv6JY9xcegxv42DhOzZhyrjz3EMN/60dhcGJClfKBY39FwH6exMajoThyFIW
+djtnp7pqIiQJCJkGRs0vAQThcm8JniVSbUwHMcMw7WjAW5VPsLQZKmEe16YW00YkoT6KfZLC1ySw
+48WNrHrCrTcj6LZRrld=
+</SignatureValue>
+<KeyInfo>
+<X509Data>
+<X509Certificate>
+MIIC2zCCAcOgAwIBAgIGAUudC0tkMA0GCSqGSIb3DQEBBQUAMFYxGjAYBgNVBAoMEVRpemVuIEFz
+c29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4gRGV2
+ZWxvcGVycyBDQTAeFw0xMjExMDEwMDAwMDBaFw0xOTAxMDEwMDAwMDBaMFcxCzAJBgNVBAYTAlBM
+MQ8wDQYDVQQHDAZXYXJzYXcxEDAOBgNVBAoMB1NhbXN1bmcxFDASBgNVBAsMC1dlYlBsYXRmb3Jt
+MQ8wDQYDVQQDDAZhdXRob3IwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM0kQ8aPoKnJaBjk
+3ET7XdOS5C3ueSemfA8tYNihWQ3VX95CKX38ARLpaAGRSfOdo2L1vTIBtaO/UWEEl/XKQzqwem22
+A9UuLwl0rJNDeoq5Xz5oJD1z9eA+uuNde6cAcPmxRQDsilnVZNHlpATdDOeKUSs8+Y5UxPDz1c6j
+kUTpAgMBAAGjMjAwMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUF
+BwMDMA0GCSqGSIb3DQEBBQUAA4IBAQC2kGzwMPMgxRrAi3ZaRu+i8x2ApZEWW4Y5uaZ9s7p4483A
+l+RBZ1/zHhkmZaekhCm2YwOpWIkXLiQc2wm9YRq+W1OorrArl/wgxtpO7hajlCxDS3X8GgJqCy7v
+8vQYTBvNXayQaRB496mC9lLZDjRL9ycYnPk55eimL3HEYclbibDjOvks4bdN/fedA8jovir+wA+b
+tIC+GGkiwGco6URdxigydxdpNEwRECCl78YVybf9agKeowXL08kwDZN9DAHCixu76kw1qtpfwm3T
+t/lz7VB1pDFhjzfuG6runH4H257bBYLkJnSBchiNItMuK2zvTVP8HsQmBeOLAFGtsoas
+</X509Certificate>
+<X509Certificate>
+MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMRowGAYDVQQKDBFUaXplbiBBc3NvY2lh
+dGlvbjEaMBgGA1UECwwRVGl6ZW4gQXNzb2NpYXRpb24xHjAcBgNVBAMMFVRpemVuIERldmVsb3Bl
+cnMgUm9vdDAeFw0xMjAxMDEwMDAwMDBaFw0yNzAxMDEwMDAwMDBaMFYxGjAYBgNVBAoMEVRpemVu
+IEFzc29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4g
+RGV2ZWxvcGVycyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANVGhRGmMIUyBA7o
+PCz8Sxut6z6HNkF4oDIuzuKaMzRYPeWodwe9O0gmqAkToQHfwg2giRhE5GoPld0fq+OYMMwSasCu
+g8dwODx1eDeSYVuOLWRxpAmbTXOsSFi6VoWeyaPEm18JBHvZBsU5YQtgZ6Kp7MqzvQg3pXOxtajj
+vyHxiatJl+xXrHgcXC1wgyG3buty7u/Fi2mvKXJ0PRJcCjjK81dqe/Vr20sRUCrbk02zbm5ggFt/
+jIEhV8wbFRQpliobc7J4dSTKhFfrqGM8rdd54LYhD7gSI1CFSe16pUXfcVR7FhJztRaiGLnCrwBE
+dyTZ248+D4L/qR/D0axb3jcCAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOC
+AQEAnOXXQ/1O/QTDHyrmQDtFziqPY3xWlJBqJtEqXiT7Y+Ljpe66e+Ee/OjQMlZe8gu21/8cKklH
+95RxjopMWCVedXDUbWdvS2+CdyvVW/quT2E0tjqIzXDekUTYwwhlPWlGxvfj3VsxqSFq3p8Brl04
+1Gx5RKAGyKVsMfTLhbbwSWwApuBUxYfcNpKwLWGPXkysu+HctY03OKv4/xKBnVWiN8ex/Sgesi0M
++OBAOMdZMPK32uJBTeKFx1xZgTLIhk45V0hPOomPjZloiv0LSS11eyd451ufjW0iHRE7WlpR6EvI
+W6TFyZgMpQq+kg4hWl2SBTf3s2VI8Ygz7gj8TMlClg==
+</X509Certificate>
+</X509Data>
+</KeyInfo>
+<Object Id="prop"><SignatureProperties xmlns:dsp="http://www.w3.org/2009/xmldsig-properties"><SignatureProperty Id="profile" Target="#AuthorSignature"><dsp:Profile URI="http://www.w3.org/ns/widgets-digsig#profile"></dsp:Profile></SignatureProperty><SignatureProperty Id="role" Target="#AuthorSignature"><dsp:Role URI="http://www.w3.org/ns/widgets-digsig#role-author"></dsp:Role></SignatureProperty><SignatureProperty Id="identifier" Target="#AuthorSignature"><dsp:Identifier></dsp:Identifier></SignatureProperty></SignatureProperties></Object>
+</Signature>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/AppInstallersTest" version="1.0.0" viewmodes="maximized">
+ <tizen:application id="ZK6wgb4nwt.AppInstallersTest" package="ZK6wgb4nwt" required_version="2.3"/>
+ <content src="index.html"/>
+ <feature name="http://tizen.org/feature/screen.size.all"/>
+ <icon src="icon.png"/>
+ <name>AppInstallersTest</name>
+ <tizen:profile name="mobile"/>
+</widget>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
+ <meta name="description" content="Tizen basic template generated by Tizen Web IDE"/>
+
+ <title>Tizen Web IDE - Tizen - Tizen basic Application</title>
+</head>
+
+<body>
+ <header>
+ <hgroup>
+ <h1>Tizen app</h1>
+ <h2>An empty template of tizen</h2>
+ </hgroup>
+ </header>
+
+ <nav>
+ <ul>
+ <li><a href="#">Home</a></li>
+ <li><a href="#">About Us</a></li>
+ <li><a href="#">Contact Us</a></li>
+ </ul>
+ </nav>
+
+ <article>
+ <p>This is an empty template of Tizen Web Application. Tizen will support multiple device categories:</p>
+ <ul>
+ <li>smartphones, tablets and smart TVs
+ <li>netbooks, in-vehicle infotainment devices
+ </ul>
+ <section>
+ <p>This is a basic section of a document.</p>
+ <p>The following button displays a time using JavaScript.</p>
+ <div id="divbutton1">
+ <button>Clock</button>
+ </div>
+ </section>
+ </article>
+
+ <footer>
+ <p>© 2012 Company Name. All rights reserved.</p>
+ </footer>
+</body>
+</html>
--- /dev/null
+<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="DistributorSignature">
+<SignedInfo>
+<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></CanonicalizationMethod>
+<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"></SignatureMethod>
+<Reference URI="author-signature.xml">
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>opfWp60FUsKzpdQBgTp3x31PB1GzC9mS6M7B6n2m63c=</DigestValue>
+</Reference>
+<Reference URI="config.xml">
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>iEX0LuZs81Q6Du/SkXgbMd+Qa6puMxgyRUCLqhrfpJ8=</DigestValue>
+</Reference>
+<Reference URI="icon.png">
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs=</DigestValue>
+</Reference>
+<Reference URI="index.html">
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>rJOIi81O4OG/Gar/hwrjvD623MpScv6TMdurRZgzDf0=</DigestValue>
+</Reference>
+<Reference URI="version.txt">
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>MjYb9c/C/J56bHY6rlIjfDqkpjFtsUBjLLkco/rcfFY=</DigestValue>
+</Reference>
+<Reference URI="#prop">
+<Transforms>
+<Transform Algorithm="http://www.w3.org/2006/12/xml-c14n11"></Transform>
+</Transforms>
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>u/jU3U4Zm5ihTMSjKGlGYbWzDfRkGphPPHx3gJIYEJ4=</DigestValue>
+</Reference>
+</SignedInfo>
+<SignatureValue>
+O6yHkXzPKe+8nGxjh06ivDImxKSKygVOgvZzmKKHVWn879K2K8vY08/f7FXKG+zRXEouXbZd7aip
+IGyOCpulXUzESCQMIiffzMVgTV0Ho+kXx44xbME/XKy7DJYpZOvZFXX1S9ZXvU2BmmgHtWWLS/gc
+sFiYVHpRxLnify3npXF=
+</SignatureValue>
+<KeyInfo>
+<X509Data>
+<X509Certificate>
+MIICmzCCAgQCCQDXI7WLdVZwiTANBgkqhkiG9w0BAQUFADCBjzELMAkGA1UEBhMCS1IxDjAMBgNV
+BAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6ZW4gVGVzdCBDQTEiMCAGA1UE
+CwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwbVGl6ZW4gUHVibGljIERpc3Ry
+aWJ1dG9yIENBMB4XDTEyMTAyOTEzMDMwNFoXDTIyMTAyNzEzMDMwNFowgZMxCzAJBgNVBAYTAktS
+MQ4wDAYDVQQIDAVTdXdvbjEOMAwGA1UEBwwFU3V3b24xFjAUBgNVBAoMDVRpemVuIFRlc3QgQ0Ex
+IjAgBgNVBAsMGVRpemVuIERpc3RyaWJ1dG9yIFRlc3QgQ0ExKDAmBgNVBAMMH1RpemVuIFB1Ymxp
+YyBEaXN0cmlidXRvciBTaWduZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALtMvlc5hENK
+90ZdA+y66+Sy0enD1gpZDBh5T9RP0oRsptJv5jjNTseQbQi0SZOdOXb6J7iQdlBCtR343RpIEz8H
+mrBy7mSY7mgwoU4EPpp4CTSUeAuKcmvrNOngTp5Hv7Ngf02TTHOLK3hZLpGayaDviyNZB5PdqQdB
+hokKjzAzAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAvGp1gxxAIlFfhJH1efjb9BJK/rtRkbYn9+Ez
+GEbEULg1svsgnyWisFimI3uFvgI/swzr1eKVY3Sc8MQ3+Fdy3EkbDZ2+WAubhcEkorTWjzWz2fL1
+vKaYjeIsuEX6TVRUugHWudPzcEuQRLQf8ibZWjbQdBmpeQYBMg5x+xKLCJc=
+</X509Certificate>
+<X509Certificate>
+MIICtDCCAh2gAwIBAgIJAMDbehElPNKvMA0GCSqGSIb3DQEBBQUAMIGVMQswCQYDVQQGEwJLUjEO
+MAwGA1UECAwFU3V3b24xDjAMBgNVBAcMBVN1d29uMRYwFAYDVQQKDA1UaXplbiBUZXN0IENBMSMw
+IQYDVQQLDBpUVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEpMCcGA1UEAwwgVGl6ZW4gUHVibGlj
+IERpc3RyaWJ1dG9yIFJvb3QgQ0EwHhcNMTIxMDI5MTMwMjUwWhcNMjIxMDI3MTMwMjUwWjCBjzEL
+MAkGA1UEBhMCS1IxDjAMBgNVBAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6
+ZW4gVGVzdCBDQTEiMCAGA1UECwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwb
+VGl6ZW4gUHVibGljIERpc3RyaWJ1dG9yIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDe
+OTS/3nXvkDEmsFCJIvRlQ3RKDcxdWJJp625pFqHdmoJBdV+x6jl1raGK2Y1sp2Gdvpjc/z92yzAp
+bE/UVLPh/tRNZPeGhzU4ejDDm7kzdr2f7Ia0U98K+OoY12ucwg7TYNItj9is7Cj4blGfuMDzd2ah
+2AgnCGlwNwV/pv+uVQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACqJ
+KO33YdoGudwanZIxMdXuxnnD9R6u72ltKk1S4zPfMJJv482CRGCI4FK6djhlsI4i0Lt1SVIJEed+
+yc3qckGm19dW+4xdlkekon7pViEBWuyHw8OWv3RXtTum1+PGHjBJ2eYY4ZKIpz73U/1NC16sTB/0
+VhfnkHwPltmrpYVe
+</X509Certificate>
+</X509Data>
+</KeyInfo>
+<Object Id="prop"><SignatureProperties xmlns:dsp="http://www.w3.org/2009/xmldsig-properties"><SignatureProperty Id="profile" Target="#DistributorSignature"><dsp:Profile URI="http://www.w3.org/ns/widgets-digsig#profile"></dsp:Profile></SignatureProperty><SignatureProperty Id="role" Target="#DistributorSignature"><dsp:Role URI="http://www.w3.org/ns/widgets-digsig#role-distributor"></dsp:Role></SignatureProperty><SignatureProperty Id="identifier" Target="#DistributorSignature"><dsp:Identifier></dsp:Identifier></SignatureProperty></SignatureProperties></Object>
+</Signature>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets"
+ id="http://yourdomain/WebSettingSample" version="1.0.0" viewmodes="maximized">
+ <tizen:application id="nNBDOItqjN.WebSettingSample" package="nNBDOItqjN" required_version="2.2"/>
+ <content src="index.html"/>
+ <feature name="http://tizen.org/feature/screen.size.all"/>
+ <icon src="icon.png"/>
+ <name>WebSettingSample</name>
+ <tizen:privilege name="http://tizen.org/privilege/websetting"/>
+</widget>
--- /dev/null
+<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="AuthorSignature">
+<SignedInfo>
+<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></CanonicalizationMethod>
+<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"></SignatureMethod>
+<Reference URI="config.xml">
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>iEX0LuZs81Q6Du/SkXgbMd+Qa6puMxgyRUCLqhrfpJ8=</DigestValue>
+</Reference>
+<Reference URI="icon.png">
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs=</DigestValue>
+</Reference>
+<Reference URI="index.html">
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>rJOIi81O4OG/Gar/hwrjvD623MpScv6TMdurRZgzDf0=</DigestValue>
+</Reference>
+<Reference URI="version.txt">
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>MjYb9c/C/J56bHY6rlIjfDqkpjFtsUBjLLkco/rcfFY=</DigestValue>
+</Reference>
+<Reference URI="#prop">
+<Transforms>
+<Transform Algorithm="http://www.w3.org/2006/12/xml-c14n11"></Transform>
+</Transforms>
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>lpo8tUDs054eLlBQXiDPVDVKfw30ZZdtkRs1jd7H5K8=</DigestValue>
+</Reference>
+</SignedInfo>
+<SignatureValue>
+c7Jd7btw6Bi9MxzKVv6JY9xcegxv42DhOzZhyrjz3EMN/60dhcGJClfKBY39FwH6exMajoThyFIW
+djtnp7pqIiQJCJkGRs0vAQThcm8JniVSbUwHMcMw7WjAW5VPsLQZKmEe16YW00YkoT6KfZLC1ySw
+48WNrHrCrTcj6LZRrlc=
+</SignatureValue>
+<KeyInfo>
+<X509Data>
+<X509Certificate>
+MIIC2zCCAcOgAwIBAgIGAUudC0tkMA0GCSqGSIb3DQEBBQUAMFYxGjAYBgNVBAoMEVRpemVuIEFz
+c29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4gRGV2
+ZWxvcGVycyBDQTAeFw0xMjExMDEwMDAwMDBaFw0xOTAxMDEwMDAwMDBaMFcxCzAJBgNVBAYTAlBM
+MQ8wDQYDVQQHDAZXYXJzYXcxEDAOBgNVBAoMB1NhbXN1bmcxFDASBgNVBAsMC1dlYlBsYXRmb3Jt
+MQ8wDQYDVQQDDAZhdXRob3IwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM0kQ8aPoKnJaBjk
+3ET7XdOS5C3ueSemfA8tYNihWQ3VX95CKX38ARLpaAGRSfOdo2L1vTIBtaO/UWEEl/XKQzqwem22
+A9UuLwl0rJNDeoq5Xz5oJD1z9eA+uuNde6cAcPmxRQDsilnVZNHlpATdDOeKUSs8+Y5UxPDz1c6j
+kUTpAgMBAAGjMjAwMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUF
+BwMDMA0GCSqGSIb3DQEBBQUAA4IBAQC2kGzwMPMgxRrAi3ZaRu+i8x2ApZEWW4Y5uaZ9s7p4483A
+l+RBZ1/zHhkmZaekhCm2YwOpWIkXLiQc2wm9YRq+W1OorrArl/wgxtpO7hajlCxDS3X8GgJqCy7v
+8vQYTBvNXayQaRB496mC9lLZDjRL9ycYnPk55eimL3HEYclbibDjOvks4bdN/fedA8jovir+wA+b
+tIC+GGkiwGco6URdxigydxdpNEwRECCl78YVybf9agKeowXL08kwDZN9DAHCixu76kw1qtpfwm3T
+t/lz7VB1pDFhjzfuG6runH4H257bBYLkJnSBchiNItMuK2zvTVP8HsQmBeOLAFGtsoas
+</X509Certificate>
+<X509Certificate>
+MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMRowGAYDVQQKDBFUaXplbiBBc3NvY2lh
+dGlvbjEaMBgGA1UECwwRVGl6ZW4gQXNzb2NpYXRpb24xHjAcBgNVBAMMFVRpemVuIERldmVsb3Bl
+cnMgUm9vdDAeFw0xMjAxMDEwMDAwMDBaFw0yNzAxMDEwMDAwMDBaMFYxGjAYBgNVBAoMEVRpemVu
+IEFzc29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4g
+RGV2ZWxvcGVycyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANVGhRGmMIUyBA7o
+PCz8Sxut6z6HNkF4oDIuzuKaMzRYPeWodwe9O0gmqAkToQHfwg2giRhE5GoPld0fq+OYMMwSasCu
+g8dwODx1eDeSYVuOLWRxpAmbTXOsSFi6VoWeyaPEm18JBHvZBsU5YQtgZ6Kp7MqzvQg3pXOxtajj
+vyHxiatJl+xXrHgcXC1wgyG3buty7u/Fi2mvKXJ0PRJcCjjK81dqe/Vr20sRUCrbk02zbm5ggFt/
+jIEhV8wbFRQpliobc7J4dSTKhFfrqGM8rdd54LYhD7gSI1CFSe16pUXfcVR7FhJztRaiGLnCrwBE
+dyTZ248+D4L/qR/D0axb3jcCAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOC
+AQEAnOXXQ/1O/QTDHyrmQDtFziqPY3xWlJBqJtEqXiT7Y+Ljpe66e+Ee/OjQMlZe8gu21/8cKklH
+95RxjopMWCVedXDUbWdvS2+CdyvVW/quT2E0tjqIzXDekUTYwwhlPWlGxvfj3VsxqSFq3p8Brl04
+1Gx5RKAGyKVsMfTLhbbwSWwApuBUxYfcNpKwLWGPXkysu+HctY03OKv4/xKBnVWiN8ex/Sgesi0M
++OBAOMdZMPK32uJBTeKFx1xZgTLIhk45V0hPOomPjZloiv0LSS11eyd451ufjW0iHRE7WlpR6EvI
+W6TFyZgMpQq+kg4hWl2SBTf3s2VI8Ygz7gj8TMlClg==
+</X509Certificate>
+</X509Data>
+</KeyInfo>
+<Object Id="prop"><SignatureProperties xmlns:dsp="http://www.w3.org/2009/xmldsig-properties"><SignatureProperty Id="profile" Target="#AuthorSignature"><dsp:Profile URI="http://www.w3.org/ns/widgets-digsig#profile"></dsp:Profile></SignatureProperty><SignatureProperty Id="role" Target="#AuthorSignature"><dsp:Role URI="http://www.w3.org/ns/widgets-digsig#role-author"></dsp:Role></SignatureProperty><SignatureProperty Id="identifier" Target="#AuthorSignature"><dsp:Identifier></dsp:Identifier></SignatureProperty></SignatureProperties></Object>
+</Signature>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/AppInstallersTest" version="1.0.0" viewmodes="maximized">
+ <tizen:application id="ZK6wgb4nwt.AppInstallersTest" package="ZK6wgb4nwt" required_version="2.3"/>
+ <content src="index.html"/>
+ <feature name="http://tizen.org/feature/screen.size.all"/>
+ <icon src="icon.png"/>
+ <name>AppInstallersTest</name>
+ <tizen:profile name="mobile"/>
+</widget>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
+ <meta name="description" content="Tizen basic template generated by Tizen Web IDE"/>
+
+ <title>Tizen Web IDE - Tizen - Tizen basic Application</title>
+</head>
+
+<body>
+ <header>
+ <hgroup>
+ <h1>Tizen app</h1>
+ <h2>An empty template of tizen</h2>
+ </hgroup>
+ </header>
+
+ <nav>
+ <ul>
+ <li><a href="#">Home</a></li>
+ <li><a href="#">About Us</a></li>
+ <li><a href="#">Contact Us</a></li>
+ </ul>
+ </nav>
+
+ <article>
+ <p>This is an empty template of Tizen Web Application. Tizen will support multiple device categories:</p>
+ <ul>
+ <li>smartphones, tablets and smart TVs
+ <li>netbooks, in-vehicle infotainment devices
+ </ul>
+ <section>
+ <p>This is a basic section of a document.</p>
+ <p>The following button displays a time using JavaScript.</p>
+ <div id="divbutton1">
+ <button>Clock</button>
+ </div>
+ </section>
+ </article>
+
+ <footer>
+ <p>© 2012 Company Name. All rights reserved.</p>
+ </footer>
+</body>
+</html>
--- /dev/null
+<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="DistributorSignature">
+<SignedInfo>
+<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></CanonicalizationMethod>
+<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"></SignatureMethod>
+<Reference URI="author-signature.xml">
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>opfWp60FUsKzpdQBgTp3x31PB1GzC9mS6M7B6n2m63c=</DigestValue>
+</Reference>
+<Reference URI="config.xml">
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>iEX0LuZs81Q6Du/SkXgbMd+Qa6puMxgyRUCLqhrfpJ8=</DigestValue>
+</Reference>
+<Reference URI="icon.png">
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs=</DigestValue>
+</Reference>
+<Reference URI="index.html">
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>rJOIi81O4OG/Gar/hwrjvD623MpScv6TMdurRZgzDf0=</DigestValue>
+</Reference>
+<Reference URI="version.txt">
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>MjYb9c/C/J56bHY6rlIjfDqkpjFtsUBjLLkco/rcfFY=</DigestValue>
+</Reference>
+<Reference URI="#prop">
+<Transforms>
+<Transform Algorithm="http://www.w3.org/2006/12/xml-c14n11"></Transform>
+</Transforms>
+<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
+<DigestValue>u/jU3U4Zm5ihTMSjKGlGYbWzDfRkGphPPHx3gJIYEJ4=</DigestValue>
+</Reference>
+</SignedInfo>
+<SignatureValue>
+O6yHkXzPKe+8nGxjh06ivDImxKSKygVOgvZzmKKHVWn879K2K8vY08/f7FXKG+zRXEouXbZd7aip
+IGyOCpulXUzESCQMIiffzMVgTV0Ho+kXx44xbME/XKy7DJYpZOvZFXX1S9ZXvU2BmmgHtWWLS/gc
+sFiYVHpRxLnify3npXE=
+</SignatureValue>
+<KeyInfo>
+<X509Data>
+<X509Certificate>
+MIICmzCCAgQCCQDXI7WLdVZwiTANBgkqhkiG9w0BAQUFADCBjzELMAkGA1UEBhMCS1IxDjAMBgNV
+BAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6ZW4gVGVzdCBDQTEiMCAGA1UE
+CwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwbVGl6ZW4gUHVibGljIERpc3Ry
+aWJ1dG9yIENBMB4XDTEyMTAyOTEzMDMwNFoXDTIyMTAyNzEzMDMwNFowgZMxCzAJBgNVBAYTAktS
+MQ4wDAYDVQQIDAVTdXdvbjEOMAwGA1UEBwwFU3V3b24xFjAUBgNVBAoMDVRpemVuIFRlc3QgQ0Ex
+IjAgBgNVBAsMGVRpemVuIERpc3RyaWJ1dG9yIFRlc3QgQ0ExKDAmBgNVBAMMH1RpemVuIFB1Ymxp
+YyBEaXN0cmlidXRvciBTaWduZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALtMvlc5hENK
+90ZdA+y66+Sy0enD1gpZDBh5T9RP0oRsptJv5jjNTseQbQi0SZOdOXb6J7iQdlBCtR343RpIEz8H
+mrBy7mSY7mgwoU4EPpp4CTSUeAuKcmvrNOngTp5Hv7Ngf02TTHOLK3hZLpGayaDviyNZB5PdqQdB
+hokKjzAzAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAvGp1gxxAIlFfhJH1efjb9BJK/rtRkbYn9+Ez
+GEbEULg1svsgnyWisFimI3uFvgI/swzr1eKVY3Sc8MQ3+Fdy3EkbDZ2+WAubhcEkorTWjzWz2fL1
+vKaYjeIsuEX6TVRUugHWudPzcEuQRLQf8ibZWjbQdBmpeQYBMg5x+xKLCJc=
+</X509Certificate>
+<X509Certificate>
+MIICtDCCAh2gAwIBAgIJAMDbehElPNKvMA0GCSqGSIb3DQEBBQUAMIGVMQswCQYDVQQGEwJLUjEO
+MAwGA1UECAwFU3V3b24xDjAMBgNVBAcMBVN1d29uMRYwFAYDVQQKDA1UaXplbiBUZXN0IENBMSMw
+IQYDVQQLDBpUVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEpMCcGA1UEAwwgVGl6ZW4gUHVibGlj
+IERpc3RyaWJ1dG9yIFJvb3QgQ0EwHhcNMTIxMDI5MTMwMjUwWhcNMjIxMDI3MTMwMjUwWjCBjzEL
+MAkGA1UEBhMCS1IxDjAMBgNVBAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6
+ZW4gVGVzdCBDQTEiMCAGA1UECwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwb
+VGl6ZW4gUHVibGljIERpc3RyaWJ1dG9yIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDe
+OTS/3nXvkDEmsFCJIvRlQ3RKDcxdWJJp625pFqHdmoJBdV+x6jl1raGK2Y1sp2Gdvpjc/z92yzAp
+bE/UVLPh/tRNZPeGhzU4ejDDm7kzdr2f7Ia0U98K+OoY12ucwg7TYNItj9is7Cj4blGfuMDzd2ah
+2AgnCGlwNwV/pv+uVQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACqJ
+KO33YdoGudwanZIxMdXuxnnD9R6u72ltKk1S4zPfMJJv482CRGCI4FK6djhlsI4i0Lt1SVIJEed+
+yc3qckGm19dW+4xdlkekon7pViEBWuyHw8OWv3RXtTum1+PGHjBJ2eYY4ZKIpz73U/1NC16sTB/0
+VhfnkHwPltmrpYVe
+</X509Certificate>
+</X509Data>
+</KeyInfo>
+<Object Id="prop"><SignatureProperties xmlns:dsp="http://www.w3.org/2009/xmldsig-properties"><SignatureProperty Id="profile" Target="#DistributorSignature"><dsp:Profile URI="http://www.w3.org/ns/widgets-digsig#profile"></dsp:Profile></SignatureProperty><SignatureProperty Id="role" Target="#DistributorSignature"><dsp:Role URI="http://www.w3.org/ns/widgets-digsig#role-distributor"></dsp:Role></SignatureProperty><SignatureProperty Id="identifier" Target="#DistributorSignature"><dsp:Identifier></dsp:Identifier></SignatureProperty></SignatureProperties></Object>
+</Signature>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<manifest xmlns="http://tizen.org/ns/packages" api-version="2.3" package="org.tizen.testapp" version="1.0.0">
+ <author email="tester@samsung.com" href="www.tizen.org">tester</author>
+ <description>This is default description</description>
+ <description xml:lang="en-us">This is test description</description>
+ <ui-application appid="org.tizen.testapp" exec="testapp" multiple="false" nodisplay="false" taskmanage="true" type="capp">
+ <label>testapp</label>
+ <label xml:lang="en-us">Test</label>
+ <icon>testapp.png</icon>
+ <app-control>
+ <mime name="EditMime"/>
+ <operation name="http://tizen.org/appcontrol/operation/edit"/>
+ <uri name="EditUri"/>
+ </app-control>
+ <app-control>
+ <operation name="http://tizen.org/appcontrol/operation/view"/>
+ <uri name="ViewUri"/>
+ <mime name="ViewMime"/>
+ </app-control>
+ <metadata key="metakey1" value="metaval1"/>
+ <metadata key="metakey2" value="metaval2"/>
+ <datacontrol access="ReadOnly" providerid="http://testapp.com/datacontrol/provider/testapp" type="Sql"/>
+ <datacontrol access="ReadOnly" providerid="http://testapp.com/datacontrol/provider/testapp" type="Map"/>
+ </ui-application>
+ <account>
+ <account-provider appid="org.tizen.testapp" multiple-accounts-support="false" providerid="com.samsung">
+ <icon section="account">testapp.png</icon>
+ <icon section="account-small">testapp.png</icon>
+ <label xml:lang="en-gb">account icon</label>
+ <label>Samsung</label>
+ <capability>http://tizen.org/account/capability/calendar</capability>
+ <capability>http://tizen.org/account/capability/photo</capability>
+ </account-provider>
+ </account>
+ <privileges>
+ <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
+ <privilege>http://tizen.org/privilege/packagemanager.info</privilege>
+ </privileges>
+ <feature name="http://tizen.org/feature/camera.front.flash">true</feature>
+ <feature name="http://tizen.org/feature/camera">true</feature>
+ <feature name="http://tizen.org/feature/camera.back.flash">true</feature>
+ <feature name="http://tizen.org/feature/camera.front">true</feature>
+</manifest>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:account multiple-account-support="false">
+ <tizen:display-name>name</tizen:display-name>
+ <tizen:icon section="Account">icon</tizen:icon>
+ <tizen:capability>cap1</tizen:capability>
+ <tizen:capability>cap2</tizen:capability>
+ <tizen:capability>cap3</tizen:capability>
+ </tizen:account>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:account multiple-account-support="false">
+ <tizen:display-name>name</tizen:display-name>
+ <tizen:icon section="Account">icon</tizen:icon>
+ <tizen:capability>cap1</tizen:capability>
+ </tizen:account>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:account multiple-account-support="false">
+ <tizen:display-name>name</tizen:display-name>
+ </tizen:account>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:account multiple-account-support="false">
+ <tizen:display-name>name</tizen:display-name>
+ <tizen:icon section="Account">icon</tizen:icon>
+ <tizen:icon section="AccountSmall">icon2</tizen:icon>
+ </tizen:account>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:account multiple-account-support="false">
+ <tizen:display-name>name</tizen:display-name>
+ <tizen:icon section="Account">icon</tizen:icon>
+ </tizen:account>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:account>
+ <tizen:display-name>name</tizen:display-name>
+ <tizen:icon section="Account">icon</tizen:icon>
+ </tizen:account>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:account multiple-account-support="true">
+ <tizen:display-name>name</tizen:display-name>
+ <tizen:icon section="Account">icon</tizen:icon>
+ </tizen:account>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:account multiple-account-support="wrong">
+ <tizen:display-name>name</tizen:display-name>
+ <tizen:icon section="Account">icon</tizen:icon>
+ </tizen:account>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:account multiple-account-support="false">
+ <tizen:display-name>name</tizen:display-name>
+ <tizen:display-name xml:lang="en-GB">name_en_gb</tizen:display-name>
+ <tizen:icon section="Account">icon</tizen:icon>
+ </tizen:account>
+ <tizen:account multiple-account-support="true">
+ <tizen:display-name>name2</tizen:display-name>
+ <tizen:icon section="Account">icon2</tizen:icon>
+ <tizen:icon section="AccountSmall">icon2s</tizen:icon>
+ </tizen:account>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:account multiple-account-support="false">
+ <tizen:icon section="Account">icon</tizen:icon>
+ </tizen:account>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:account multiple-account-support="false">
+ <tizen:display-name>name</tizen:display-name>
+ <tizen:display-name xml:lang="en">name_en</tizen:display-name>
+ <tizen:display-name xml:lang="de">name_de</tizen:display-name>
+ <tizen:display-name xml:lang="ru">name_ru</tizen:display-name>
+ <tizen:icon section="Account">icon</tizen:icon>
+ </tizen:account>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:account multiple-account-support="false">
+ <tizen:display-name>name</tizen:display-name>
+ <tizen:icon section="Account">icon</tizen:icon>
+ </tizen:account>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:addon required_version="5.5">
+ </tizen:addon>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:addon package="package0id">
+ </tizen:addon>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:addon package="package0id" required_version="5.5">
+ </tizen:addon>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:addon package="package0id" required_version="5.5">
+ </tizen:addon>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:addon package="package0id" required_version="5.5">
+ </tizen:addon>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa100.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa100.dbox1" package="aaaaaaa100" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa102.dbox1.default" primary="true" update-period="2000.0" auto-launch="ab12">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa102.dbox1" package="aaaaaaa102" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa106.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:box-size>3x3</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa106.dbox1" package="aaaaaaa106" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa108.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa108.dbox1" package="aaaaaaa108" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa110.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="ab12">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa110.dbox1" package="aaaaaaa110" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa111.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="ab12" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa111.dbox1" package="aaaaaaa111" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa103.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa103.dbox1" package="aaaaaaa103" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa112.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="abc"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa112.dbox1" package="aaaaaaa112" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa113.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="-500"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa113.dbox1" package="aaaaaaa113" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa114.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa114.dbox1" package="aaaaaaa114" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa115.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="abc" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa115.dbox1" package="aaaaaaa115" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa116.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa116.dbox1" package="aaaaaaa116" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa117.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="ab12">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa117.dbox1" package="aaaaaaa117" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa105.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ <tizen:box-content src="box/index.html" mouse-event="false" touch-effect="true">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="true">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="730" height="300"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa105.dbox1" package="aaaaaaa105" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa133.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa133.dbox1" package="aaaaaaa133" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa120.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa120.dbox1" package="aaaaaaa120" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa119.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa119.dbox1" package="aaaaaaa119" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa121.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa121.dbox1" package="aaaaaaa121" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="9999999123.dbox1.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa123.dbox1" package="aaaaaaa123" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa124.dbox1.the-default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa124.dbox1" package="aaaaaaa124" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa125.dbox1" package="aaaaaaa125" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa128.dbox1.default" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa128.dbox1" package="aaaaaaa128" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa129.dbox1.default" primary="ab12" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa129.dbox1" package="aaaaaaa129" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa130.dbox1.default" primary="true" update-period="ab12" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa130.dbox1" package="aaaaaaa130" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox1" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa131.dbox1.default" primary="true" update-period="1000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox1 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox1 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa131.dbox1" package="aaaaaaa131" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox1</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox2" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa200.dbox2.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox2 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox2 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox2 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:app-widget id="aaaaaaa200.dbox2.second" primary="false" update-period="4000.0" auto-launch="false">
+ <tizen:box-label>dbox2 default label 2</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox2 pl label 2</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox2 en label 2</tizen:box-label>
+ <tizen:box-icon src="icon2.png"/>
+ <tizen:box-content src="box/index2.html" mouse-event="false" touch-effect="true">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon2.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="true">2x2</tizen:box-size>
+ <tizen:pd src="pd/index2.html" width="740" height="300"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa200.dbox2" package="aaaaaaa200" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox2</name>
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/dbox2" version="1.0.0">
+ <tizen:app-widget id="aaaaaaa201.dbox2.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox2 default label</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox2 pl label</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox2 en label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="false">2x2</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:app-widget id="aaaaaaa201.dbox2.second" primary="true" update-period="4000.0" auto-launch="false">
+ <tizen:box-label>dbox2 default label 2</tizen:box-label>
+ <tizen:box-label xml:lang="pl">dbox2 pl label 2</tizen:box-label>
+ <tizen:box-label xml:lang="en">dbox2 en label 2</tizen:box-label>
+ <tizen:box-icon src="icon2.png"/>
+ <tizen:box-content src="box/index2.html" mouse-event="false" touch-effect="true">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:box-size preview="icon2.png">2x1</tizen:box-size>
+ <tizen:box-size use-decoration="true">2x2</tizen:box-size>
+ <tizen:pd src="pd/index2.html" width="740" height="300"/>
+ </tizen:box-content>
+ </tizen:app-widget>
+ <tizen:application id="aaaaaaa201.dbox2" package="aaaaaaa201" required_version="2.2"/>
+ <feature name="http://tizen.org/feature/screen.size.normal.720.1280"/>
+ <icon src="icon.png"/>
+ <name>dbox2</name>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <content-security-policy>script-src 'self'</content-security-policy>
+ <content-security-policy-report-only>script-src 'self'; report-uri="http://example.com/report.cgi"</content-security-policy-report-only>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:content-security-policy>script-src 'self'</tizen:content-security-policy>
+ <tizen:content-security-policy>ignore me</tizen:content-security-policy>
+ <tizen:content-security-policy-report-only>script-src 'self'; report-uri="http://example.com/report.cgi"</tizen:content-security-policy-report-only>
+ <tizen:content-security-policy-report-only>ignore me</tizen:content-security-policy-report-only>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:launch_screen>
+ </tizen:launch_screen>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <launch_screen ready_when="first-paint">
+ <tizen:ls_default background_color="#ff0000"/>
+ </launch_screen>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:launch_screen ready_when="invalid-option">
+ <tizen:ls_default background_color="#ff0000"/>
+ </tizen:launch_screen>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:launch_screen ready_when="first-paint">
+ <tizen:ls_default background_color="#ff0000" background_image="bg_image.png"
+ image="default_image.gif"
+ image_border="30px 30px 20px 10px repeat round"/>
+ </tizen:launch_screen>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:launch_screen ready_when="first-paint">
+ <tizen:ls_default background_color="#ff0000" background_image="bg_image.png 1x, bg_image2x.bmp 2x"
+ image="default_image.gif 1x, default_image2x.jpg 2x"
+ image_border="30px 30px 20px 10px repeat round"/>
+ <tizen:ls_portrait background_color="#00ff00" background_image="bg_image.png"
+ image="portrait_image.png" image_border="repeat"/>
+ <tizen:ls_landscape background_color="#0000ff" background_image="bg_image.png"
+ image="landscape_image.gif" image_border="repeat"/>
+ </tizen:launch_screen>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:launch_screen ready_when="first-paint">
+ <tizen:ls_default background_image="bg_image.png 1x, bg_image2x.bmp 2x"/>
+ </tizen:launch_screen>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:launch_screen ready_when="first-paint">
+ <tizen:ls_default image="default_image.gif 1x, default_image2x.jpg 2x"/>
+ </tizen:launch_screen>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:launch_screen ready_when="first-paint">
+ <tizen:ls_default background_color="#ff0000"/>
+ <tizen:ls_portrait background_color="#00ff00"/>
+ <tizen:ls_landscape background_color="#0000ff"/>
+ </tizen:launch_screen>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <splash src="splash.html" />
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:splash />
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:splash src="splash.html"/>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <tizen:access origin="http://www.myhost.com" />
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <access origin="http://www.user@myhost.com" />
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <access origin="http://" />
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <access origin="invalid" />
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <access origin="http://www.myhost.com" subdomains="false" />
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <access origin="http://www.myhost.com" subdomains="invalid" />
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <access origin="http://www.myhost.com" subdomains="true" />
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <access origin="http://www.myhost.com" />
+ <access origin="http://www.mywebsite.com" subdomains="true"/>
+ <access origin="http://www.sub.mydomain.com"/>
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <access origin="http://www.myhost.com" />
+</widget>
--- /dev/null
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <access origin="*" />
+</widget>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- all long values here are 10000+ characters long -->
+<widget xmlns:tizen="http://tizen.org/ns/widgets" xmlns="http://www.w3.org/ns/widgets">
+ <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+ <!-- value (of attribute): 8192 limit -->
+ <content src="1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.html"/>
+ <feature name="http://tizen.org/feature/screen.size.all"/>
+ <!-- value (of attribute): 8192 limit -->
+ <icon src="1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.png"/>
+ <!-- value (of key): 8192 limit -->
+ <name>1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890</name>
+ <tizen:profile name="mobile"/>
+ <!-- key: 80 limit -->
+ <_keyname10_abcdefg20_abcdefg30_abcdefg40_abcdefg50_abcdefg60_abcdefg70_abcdefg80_234567>value_a</_keyname10_abcdefg20_abcdefg30_abcdefg40_abcdefg50_abcdefg60_abcdefg70_abcdefg80_234567>
+ <!-- attribute: 2048 limit -->
+ <key_attribute attr1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890="value_b"/>
+ <!-- metadata: key2048 limit -->
+ <tizen:metadata key="_keyname10_abcdefg20_abcdefg30_abcdefg40_abcdefg50_abcdefg60_abcdefg70_abcdefg80_234567" value="attr1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"/>
+ <tizen:app-widget id="package0id.appid.default" primary="true" update-period="2000.0" auto-launch="true">
+ <tizen:box-label>dbox1 default label</tizen:box-label>
+ <tizen:box-icon src="icon.png"/>
+ <tizen:box-content src="box/index.html" mouse-event="true" touch-effect="false">
+ <tizen:box-size>1x1</tizen:box-size>
+ <tizen:pd src="pd/index.html" width="720" height="200"/>
+ </tizen:box-content>
+ <tizen:widget-metadata key="_keyname10_abcdefg20_abcdefg30_abcdefg40_abcdefg50_abcdefg60_abcdefg70_abcdefg80_234567" value="attr1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"/>
+ </tizen:app-widget>
+ <preference name="Akeyname10_abcdefg20_abcdefg30_abcdefg40_abcdefg50_abcdefg60_abcdefg70_abcdefg80_234567" value="Aattr1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"/>
+ <preference name="Bkeyname10_abcdefg20_abcdefg30_abcdefg40_abcdefg50_abcdefg60_abcdefg70_abcdefg80_234567" value="Battr1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"/>
+ <preference name="Ckeyname10_abcdefg20_abcdefg30_abcdefg40_abcdefg50_abcdefg60_abcdefg70_abcdefg80_234567" value="Cattr1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"/>
+</widget>
--- /dev/null
+// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by an apache 2.0 license that can be
+// found in the LICENSE file.
+
+#include <boost/filesystem/path.hpp>
+
+#include <gtest/gtest.h>
+
+#include <manifest_parser/manifest.h>
+#include <manifest_parser/manifest_util.h>
+
+#include <memory>
+#include <vector>
+
+#include "unit_tests/base_test.h"
+#include "wgt_manifest_handlers/warp_handler.h"
+
+namespace bf = boost::filesystem;
+
+namespace {
+
+const bf::path kXmlDirectory("test_samples/xmls");
+
+struct RegistryPolicyForWarp {
+ static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
+ std::unique_ptr<parser::ManifestHandlerRegistry> registry;
+ registry.reset(new parser::ManifestHandlerRegistry());
+ registry->RegisterManifestHandler(new wgt::parse::WarpHandler());
+ return registry;
+ }
+};
+
+} // namespace
+
+namespace parser {
+
+class WarpHandlerTest : public BaseTest<RegistryPolicyForWarp> {
+ void SetUp() override {
+ BaseTest<RegistryPolicyForWarp>::SetUp();
+ std::string error;
+ bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+ std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ }
+};
+
+#define WARP_IGNORE_TEST(TEST_NAME) \
+ TEST_F(WarpHandlerTest, TEST_NAME) { \
+ ASSERT_TRUE(ParseAppManifest()); \
+ ASSERT_TRUE(ValidateAppManifest()); \
+ std::shared_ptr<const wgt::parse::WarpInfo> data = \
+ std::static_pointer_cast<const wgt::parse::WarpInfo>( \
+ GetManifestData(wgt::parse::WarpInfo::Key())); \
+ ASSERT_TRUE(!data); \
+ } \
+
+WARP_IGNORE_TEST(InvalidNamespace)
+
+TEST_F(WarpHandlerTest, ValidURL) {
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::WarpInfo> data =
+ std::static_pointer_cast<const wgt::parse::WarpInfo>(
+ GetManifestData(wgt::parse::WarpInfo::Key()));
+ ASSERT_TRUE(!!data);
+ auto access_map = data->access_map();
+ ASSERT_EQ(access_map.size(), 1);
+ ASSERT_EQ(access_map[0].first, "http://www.myhost.com");
+ ASSERT_FALSE(access_map[0].second);
+}
+
+TEST_F(WarpHandlerTest, ValidWildcard) {
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::WarpInfo> data =
+ std::static_pointer_cast<const wgt::parse::WarpInfo>(
+ GetManifestData(wgt::parse::WarpInfo::Key()));
+ ASSERT_TRUE(!!data);
+ auto access_map = data->access_map();
+ ASSERT_EQ(access_map.size(), 1);
+ ASSERT_EQ(access_map[0].first, "*");
+ ASSERT_TRUE(access_map[0].second);
+}
+
+WARP_IGNORE_TEST(InvalidURL_NotURL)
+WARP_IGNORE_TEST(InvalidURL_AuthorizationPart)
+WARP_IGNORE_TEST(InvalidURL_NoHost)
+
+TEST_F(WarpHandlerTest, SubdomainTrue) {
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::WarpInfo> data =
+ std::static_pointer_cast<const wgt::parse::WarpInfo>(
+ GetManifestData(wgt::parse::WarpInfo::Key()));
+ ASSERT_TRUE(!!data);
+ auto access_map = data->access_map();
+ ASSERT_EQ(access_map.size(), 1);
+ ASSERT_TRUE(access_map[0].second);
+}
+
+TEST_F(WarpHandlerTest, SubdomainFalse) {
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::WarpInfo> data =
+ std::static_pointer_cast<const wgt::parse::WarpInfo>(
+ GetManifestData(wgt::parse::WarpInfo::Key()));
+ ASSERT_TRUE(!!data);
+ auto access_map = data->access_map();
+ ASSERT_EQ(access_map.size(), 1);
+ ASSERT_FALSE(access_map[0].second);
+}
+
+TEST_F(WarpHandlerTest, SubdomainInvalid) {
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::WarpInfo> data =
+ std::static_pointer_cast<const wgt::parse::WarpInfo>(
+ GetManifestData(wgt::parse::WarpInfo::Key()));
+ ASSERT_TRUE(!!data);
+ auto access_map = data->access_map();
+ ASSERT_EQ(access_map.size(), 1);
+ ASSERT_FALSE(access_map[0].second);
+}
+
+TEST_F(WarpHandlerTest, ValidMultiple) {
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::WarpInfo> data =
+ std::static_pointer_cast<const wgt::parse::WarpInfo>(
+ GetManifestData(wgt::parse::WarpInfo::Key()));
+ ASSERT_TRUE(!!data);
+ auto access_map = data->access_map();
+ ASSERT_EQ(access_map.size(), 3);
+ ASSERT_EQ(access_map[0].first, "http://www.myhost.com");
+ ASSERT_FALSE(access_map[0].second);
+ ASSERT_EQ(access_map[1].first, "http://www.mywebsite.com");
+ ASSERT_TRUE(access_map[1].second);
+ ASSERT_EQ(access_map[2].first, "http://www.sub.mydomain.com");
+ ASSERT_FALSE(access_map[2].second);
+}
+
+} // namespace parser
--- /dev/null
+// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by an apache 2.0 license that can be
+// found in the LICENSE file.
+
+#include <boost/filesystem/path.hpp>
+
+#include <gtest/gtest.h>
+
+#include <manifest_parser/manifest.h>
+#include <manifest_parser/manifest_util.h>
+
+#include <memory>
+
+#include "unit_tests/base_test.h"
+#include "wgt_manifest_handlers/application_icons_handler.h"
+#include "wgt_manifest_handlers/application_manifest_constants.h"
+#include "wgt_manifest_handlers/appwidget_handler.h"
+#include "wgt_manifest_handlers/content_handler.h"
+#include "wgt_manifest_handlers/metadata_handler.h"
+#include "wgt_manifest_handlers/tizen_application_handler.h"
+#include "wgt_manifest_handlers/widget_handler.h"
+
+namespace bf = boost::filesystem;
+
+namespace {
+
+const bf::path kXmlDirectory("test_samples/xmls");
+
+struct RegistryPolicyForNormalization {
+ static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
+ std::unique_ptr<parser::ManifestHandlerRegistry> registry;
+ registry.reset(new parser::ManifestHandlerRegistry());
+ registry->RegisterManifestHandler(new wgt::parse::WidgetHandler());
+ registry->RegisterManifestHandler(
+ new wgt::parse::TizenApplicationHandler());
+ registry->RegisterManifestHandler(new wgt::parse::MetaDataHandler());
+ registry->RegisterManifestHandler(new wgt::parse::ContentHandler());
+ registry->RegisterManifestHandler(new wgt::parse::AppWidgetHandler());
+ registry->RegisterManifestHandler(
+ new wgt::parse::ApplicationIconsHandler());
+ return registry;
+ }
+};
+
+} // namespace
+
+namespace parser {
+
+class NormalizationHandlerTest :
+ public BaseTest<RegistryPolicyForNormalization> {
+ void SetUp() override {
+ BaseTest<RegistryPolicyForNormalization>::SetUp();
+
+ std::shared_ptr<ManifestConstraints> constraints(new ManifestConstraints());
+ constraints->set_max_attr_element_length(wgt::kMaxAttrElementLength);
+ constraints->set_element_exceptions(
+ wgt::GetElementsWithDifferentAttributeLength());
+ std::string error;
+ bf::path xml = kXmlDirectory / "XmlNormalization" / "config.xml";
+ std::shared_ptr<Manifest> manifest(
+ LoadManifest(xml.string(), &error, constraints));
+ ASSERT_FALSE(!manifest);
+ SetManifest(manifest);
+ }
+};
+
+TEST_F(NormalizationHandlerTest, NormalizeAttributeValue) {
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::ContentInfo> data =
+ std::static_pointer_cast<const wgt::parse::ContentInfo>(
+ GetManifestData(wgt::parse::ContentInfo::Key()));
+ ASSERT_TRUE(!!data);
+ ASSERT_EQ(data->src().size(), 2048);
+ std::shared_ptr<const wgt::parse::ApplicationIconsInfo> idata =
+ std::static_pointer_cast<const wgt::parse::ApplicationIconsInfo>(
+ GetManifestData(wgt::parse::ApplicationIconsInfo::Key()));
+ ASSERT_TRUE(!!idata);
+ ASSERT_EQ(idata->icons().size(), 1);
+ auto& icons = idata->icons();
+ ASSERT_EQ(icons.begin()->path().size(), 2048);
+}
+
+TEST_F(NormalizationHandlerTest, NormalizeMetadata) {
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::MetaDataInfo> data =
+ std::static_pointer_cast<const wgt::parse::MetaDataInfo>(
+ GetManifestData(wgt::parse::MetaDataInfo::Key()));
+ ASSERT_TRUE(!!data);
+ ASSERT_EQ(data->metadata().size(), 1);
+ auto& metadata = data->metadata();
+ ASSERT_EQ(metadata.begin()->first.size(), 80);
+ ASSERT_EQ(metadata.begin()->second.size(), 8192);
+}
+
+TEST_F(NormalizationHandlerTest, NormalizeWidgetMetadata) {
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::AppWidgetInfo> data =
+ std::static_pointer_cast<const wgt::parse::AppWidgetInfo>(
+ GetManifestData(wgt::parse::AppWidgetInfo::Key()));
+ ASSERT_TRUE(!!data);
+ ASSERT_EQ(data->app_widgets().size(), 1);
+ auto& app_widgets = data->app_widgets();
+ ASSERT_EQ(app_widgets.begin()->metadata.size(), 1);
+ auto& metadata = app_widgets.begin()->metadata;
+ ASSERT_EQ(metadata.begin()->first.size(), 80);
+ ASSERT_EQ(metadata.begin()->second.size(), 8192);
+}
+
+TEST_F(NormalizationHandlerTest, NormalizePreferences) {
+ ASSERT_TRUE(ParseAppManifest());
+ ASSERT_TRUE(ValidateAppManifest());
+ std::shared_ptr<const wgt::parse::WidgetInfo> data =
+ std::static_pointer_cast<const wgt::parse::WidgetInfo>(
+ GetManifestData(wgt::parse::WidgetInfo::Key()));
+ ASSERT_TRUE(!!data);
+ ASSERT_EQ(data->preferences().size(), 3);
+ for (auto& item : data->preferences()) {
+ ASSERT_EQ(item->Name().size(), 80);
+ ASSERT_EQ(item->Value().size(), 8192);
+ }
+}
+
+} // namespace parser