Fix FindById bug 69/207369/3
authorhyunho <hhstark.kang@samsung.com>
Tue, 4 Jun 2019 04:08:22 +0000 (13:08 +0900)
committerhyunho <hhstark.kang@samsung.com>
Mon, 10 Jun 2019 02:42:22 +0000 (11:42 +0900)
If a group item has a group Item as an child,
the child group items's children should be searched to find out item

Change-Id: Ie2bb1eea2b9e6651475fc1c22cb6720866d10130
Signed-off-by: hyunho <hhstark.kang@samsung.com>
notification-ex/group_item.cc
unittest/src/test_group_item.cc

index 2f62075..72896a0 100644 (file)
@@ -107,9 +107,13 @@ void GroupItem::Deserialize(Bundle b) {
 }
 
 AbstractItem& GroupItem::FindByID(std::string id) {
+  if (GetId() == id)
+    return *this;
+
   for (auto& i : impl_->children_list_) {
-    if (i.get()->GetId() == id)
-      return *i;
+    auto& re = i.get()->FindByID(id);
+    if (re.GetId() == id)
+      return re;
   }
   return FactoryManager::GetInst().GetNullItem();
 }
index c4fb43f..2196e7c 100644 (file)
@@ -75,6 +75,30 @@ TEST_F(GroupItemTest, FindByID) {
   ASSERT_EQ(btn.GetTitle(), "test2");
 }
 
+TEST_F(GroupItemTest, FindByIDGroupItem) {
+  GroupItem item("GROUP1");
+  shared_ptr<GroupItem> gr2 = shared_ptr<GroupItem>(new GroupItem("GROUP2"));
+  shared_ptr<GroupItem> gr3 = shared_ptr<GroupItem>(new GroupItem("GROUP3"));
+  gr2->AddChild(std::make_shared<ButtonItem>("btn2", "test2"));
+  gr2->AddChild(std::make_shared<ButtonItem>("btn3", "test3"));
+  gr2->AddChild(std::make_shared<ButtonItem>("btn4", "test4"));
+  gr3->AddChild(std::make_shared<ButtonItem>("btn6", "test6"));
+  gr2->AddChild(gr3);
+
+  item.AddChild(std::make_shared<ButtonItem>("btn1", "test1"));
+  item.AddChild(gr2);
+  item.AddChild(std::make_shared<ButtonItem>("btn5", "test5"));
+  ASSERT_EQ(item.GetChildren().size(), 3);
+
+  AbstractItem& child = item.FindByID("btn3");
+  ButtonItem& btn = static_cast<ButtonItem&>(child);
+  ASSERT_EQ(btn.GetTitle(), "test3");
+
+  AbstractItem& child2 = item.FindByID("GROUP3");
+  GroupItem& ret_gr = static_cast<GroupItem&>(child2);
+  ASSERT_EQ(ret_gr.GetChildren().size(), 1);
+}
+
 TEST_F(GroupItemTest, FindByIDNullItemReturn) {
   GroupItem item("GROUP1");
   item.AddChild(std::make_shared<ButtonItem>("btn1", "test1"));