From 1ca2745347f9ecc3758dabf1f63ee6608c48e1fb Mon Sep 17 00:00:00 2001 From: Woochan Lee Date: Tue, 23 Jan 2024 16:21:12 +0900 Subject: [PATCH] libaurum: Add Mock and unit tests for getMatches* interfaces Added a mock and tests for and interfaces that operates using UIFW atspi bridge. Change-Id: I146402e07d43319f6392ec467a720b6c3289efe3 --- .../src/Impl/Accessibility/MockAccessibleNode.cc | 59 ++++++++++++++- libaurum/src/Impl/MockDeviceImpl.cc | 2 - tests/Test_UiObject.cc | 84 ++++++++++++++++++++++ 3 files changed, 140 insertions(+), 5 deletions(-) diff --git a/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc b/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc index ca6fc10..8811042 100644 --- a/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc +++ b/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc @@ -27,7 +27,6 @@ using namespace AurumInternal::Mock; MockAccessibleNode::MockAccessibleNode(std::shared_ptr parent, std::string text, std::string pkg, std::string role, std::string res, std::string type, std::string style,std::string automationId, Rect screenBoundingBox, int supportingIfaces,int featureProperty) : mParentNode(parent), mChildrenList{}, mActionSet{} { - printf("%s:%d / %s\n",__FILE__, __LINE__, __PRETTY_FUNCTION__); const auto trickDontRemove = std::shared_ptr( this, [](MockAccessibleNode *){} ); setProperties(text,pkg,role,res,type,style,automationId, screenBoundingBox, supportingIfaces, featureProperty); @@ -37,7 +36,6 @@ MockAccessibleNode::MockAccessibleNode(std::shared_ptr parent, s MockAccessibleNode::~MockAccessibleNode() { - printf("%s:%d / %s\n",__FILE__, __LINE__, __PRETTY_FUNCTION__); auto watcher = AccessibleWatcher::getInstance(); watcher->detach(shared_from_this()); } @@ -65,20 +63,75 @@ std::vector> MockAccessibleNode::getMatches(cons { std::vector> ret{}; + if (selector->mMatchText) { + for (auto &child : mChildrenList) { + if (selector->mText == child->getText()) { + ret.push_back(child); + if (ealryReturn) break; + } + } + } + + if (selector->mMatchType) { + for (auto &child : mChildrenList) { + if (selector->mType == child->getType()) { + ret.push_back(child); + if (ealryReturn) break; + } + } + } + + if (selector->mMatchStyle) { + for (auto &child : mChildrenList) { + if (selector->mStyle == child->getStyle()) { + ret.push_back(child); + if (ealryReturn) break; + } + } + } return ret; } std::vector> MockAccessibleNode::getMatchesInMatches(const std::shared_ptr firstSelector, const std::shared_ptr secondSelector, const bool ealryReturn) const { + std::vector> tempRet{}; std::vector> ret{}; + tempRet = getMatches(firstSelector, ealryReturn); + + if (secondSelector->mMatchText) { + for (auto &child : tempRet) { + if (secondSelector->mText == child->getText()) { + ret.push_back(child); + if (ealryReturn) break; + } + } + } + + if (secondSelector->mMatchType) { + for (auto &child : tempRet) { + if (secondSelector->mType == child->getType()) { + ret.push_back(child); + if (ealryReturn) break; + } + } + } + + if (secondSelector->mMatchStyle) { + for (auto &child : tempRet) { + if (secondSelector->mStyle == child->getStyle()) { + ret.push_back(child); + if (ealryReturn) break; + } + } + } + return ret; } void* MockAccessibleNode::getRawHandler(void) const { - printf("%s:%d / %s\n",__FILE__, __LINE__, __PRETTY_FUNCTION__); return (void*)1; } diff --git a/libaurum/src/Impl/MockDeviceImpl.cc b/libaurum/src/Impl/MockDeviceImpl.cc index db933f4..2005dee 100644 --- a/libaurum/src/Impl/MockDeviceImpl.cc +++ b/libaurum/src/Impl/MockDeviceImpl.cc @@ -150,14 +150,12 @@ bool MockDeviceImpl::pressBack(KeyRequestType type) { mKeyDevice.push_back(std::tuple(MockKeyType::BACK, type, "")); return true; - } bool MockDeviceImpl::pressHome(KeyRequestType type) { mKeyDevice.push_back(std::tuple(MockKeyType::HOME, type, "")); return true; - } bool MockDeviceImpl::pressMenu(KeyRequestType type) diff --git a/tests/Test_UiObject.cc b/tests/Test_UiObject.cc index 7b8cb40..91a2e11 100644 --- a/tests/Test_UiObject.cc +++ b/tests/Test_UiObject.cc @@ -516,3 +516,87 @@ TEST_F(AurumTestUiObject, getScreenBoundingBox_N1) ASSERT_NE(box.mTopLeft.x, 0 ); ASSERT_NE(box.mTopLeft.y, 0 ); } + +TEST_F(AurumTestUiObject, getMatches_P1) +{ + auto obj = UiDevice::getInstance(); + auto parent = obj->findObject(Sel::text("test2")); + + auto matchedNodes = obj->getMatches(Sel::text("ACTIVE"), 0); + ASSERT_EQ(matchedNodes.size(), 1); + + matchedNodes = obj->getMatches(Sel::type("type"), 0); + ASSERT_EQ(matchedNodes.size(), 16); + + matchedNodes = obj->getMatches(Sel::style("style"), 0); + ASSERT_EQ(matchedNodes.size(), 16); +} + +TEST_F(AurumTestUiObject, getMatches_P2) +{ + auto obj = UiDevice::getInstance(); + auto parent = obj->findObject(Sel::text("test2")); + + auto matchedNodes = obj->getMatches(Sel::text("ACTIVE"), 1); + ASSERT_EQ(matchedNodes.size(), 1); + ASSERT_EQ(matchedNodes[0]->getText(), "ACTIVE"); + + matchedNodes = obj->getMatches(Sel::type("type"), 1); + ASSERT_EQ(matchedNodes.size(), 1); + ASSERT_EQ(matchedNodes[0]->getType(), "type"); + + matchedNodes = obj->getMatches(Sel::style("style"), 1); + ASSERT_EQ(matchedNodes.size(), 1); +} + +TEST_F(AurumTestUiObject, getMatches_N1) +{ + auto obj = UiDevice::getInstance(); + auto parent = obj->findObject(Sel::text("test2")); + + auto matchedNodes = obj->getMatches(Sel::text("testText"), 1); + ASSERT_NE(matchedNodes.size(), 1); + + matchedNodes = obj->getMatches(Sel::type("testType"), 1); + ASSERT_NE(matchedNodes.size(), 1); + + matchedNodes = obj->getMatches(Sel::style("testStyle"), 1); + ASSERT_NE(matchedNodes.size(), 1); +} + +TEST_F(AurumTestUiObject, getMatchesInMatches_P1) +{ + auto obj = UiDevice::getInstance(); + auto parent = obj->findObject(Sel::text("test2")); + + auto matchedNodes = obj->getMatchesInMatches(Sel::type("type"), Sel::text("ACTIVE"), 0); + ASSERT_EQ(matchedNodes.size(), 1); + ASSERT_EQ(matchedNodes[0]->getText(), "ACTIVE"); + + matchedNodes = obj->getMatchesInMatches(Sel::type("type"), Sel::style("style"), 0); + ASSERT_EQ(matchedNodes.size(), 16); +} + +TEST_F(AurumTestUiObject, getMatchesInMatches_P2) +{ + auto obj = UiDevice::getInstance(); + auto parent = obj->findObject(Sel::text("test2")); + + auto matchedNodes = obj->getMatchesInMatches(Sel::type("type"), Sel::text("ACTIVE"), 1); + ASSERT_EQ(matchedNodes.size(), 0); + + matchedNodes = obj->getMatchesInMatches(Sel::type("type"), Sel::style("style"), 1); + ASSERT_EQ(matchedNodes.size(), 1); +} + +TEST_F(AurumTestUiObject, getMatchesInMatches_N1) +{ + auto obj = UiDevice::getInstance(); + auto parent = obj->findObject(Sel::text("test2")); + + auto matchedNodes = obj->getMatchesInMatches(Sel::type("testType"), Sel::text("testText"), 1); + ASSERT_NE(matchedNodes.size(), 1); + + matchedNodes = obj->getMatchesInMatches(Sel::type("testType"), Sel::style("testStyle"), 1); + ASSERT_NE(matchedNodes.size(), 1); +} -- 2.7.4