#include "theme/loader/theme_info.h"
+#include <algorithm>
#include <string>
+#include <vector>
+
+#include "theme/utils/logging.h"
namespace ttm {
namespace loader {
return bundle_;
}
+ThemeInfo& ThemeInfo::Merge(const ThemeInfo& other) {
+ std::vector<tizen_base::Bundle::KeyInfo> keyinfos = bundle_.GetKeys();
+ std::vector<tizen_base::Bundle::KeyInfo> other_keyinfos =
+ const_cast<ThemeInfo&>(other).bundle_.GetKeys();
+
+ // We need to create new vector which only has key strings, because we need to
+ // sort and resize vector to use set_difference(), but
+ // tizen_base::Bundle::KeyInfo doesn't provide default constructor.
+ std::vector<std::string> keys;
+ for (const auto& info : keyinfos)
+ keys.emplace_back(info.GetName());
+ std::vector<std::string> other_keys;
+ for (const auto& info : other_keyinfos)
+ other_keys.emplace_back(info.GetName());
+
+ if (keys.size() < other_keys.size())
+ keys.resize(other_keys.size());
+
+ std::sort(keys.begin(), keys.end());
+ std::sort(other_keys.begin(), other_keys.end());
+
+ std::vector<std::string> diff;
+ std::set_difference(other_keys.begin(), other_keys.end(), keys.begin(),
+ keys.end(), std::back_inserter(diff));
+ // do not merge special key "is_default"
+ diff.erase(std::remove(diff.begin(), diff.end(), "is_default"), diff.end());
+
+ for (const auto& key : diff) {
+ bundle_type type = other.bundle_.GetType(key);
+ switch (type) {
+ case BUNDLE_TYPE_STR:
+ bundle_.Add(key, other.bundle_.GetString(key));
+ break;
+ case BUNDLE_TYPE_STR_ARRAY:
+ bundle_.Add(key, other.bundle_.GetStringArray(key));
+ break;
+ case BUNDLE_TYPE_BYTE:
+ bundle_.Add(key, other.bundle_.GetByte(key));
+ break;
+ default:
+ LOG(WARNING) << "Unexpected bundle_type during merging bundle";
+ break;
+ }
+ }
+
+ return *this;
+}
+
} // namespace loader
} // namespace ttm
virtual ~RequestHandlersTest() {}
virtual void SetUp() {
+ ttm::provider::DbManager db_manager(kTestDb);
+ tizen_base::Bundle b;
+ b.Add("id", "default_id");
+ b.Add("version", "1.0");
+ b.Add("tool_version", "1.1");
+ b.Add("title", "Default Theme");
+ b.Add("resolution", "360X360");
+ b.Add("preview", "shared/res/default_preview.png");
+ b.Add("description", "default test");
+ b.Add("is_default", "true");
+ b.Add("some_default_key", "some_default_value");
+ db_manager.Insert(b);
+
proxy_ = std::make_shared<ThemeInfoProxy>(kTestDb);
b_.Add("id", "testid");
tizen_base::Bundle result(rb.GetString(ttm::dbus::kCmdDataKey));
ThemeInfo theme(result);
EXPECT_EQ(theme.GetId(), "testid");
+ EXPECT_EQ(theme.GetString("some_default_key"), "some_default_value");
rb = handler.OnRequest(ttm::dbus::Command::GET_IDS, {});
std::vector<std::string> ids = rb.GetStringArray(ttm::dbus::kCmdDataKey);
- EXPECT_EQ(ids.size(), 2);
+ EXPECT_EQ(ids.size(), 3);
}