From 5b9a27d596d3284357650aff1ed5df17e09d4e39 Mon Sep 17 00:00:00 2001 From: Woochan Lee Date: Thu, 25 Jan 2024 16:37:51 +0900 Subject: [PATCH] libaurum: Refactoring using TDD to observe the SRP The existing AccessibleWatcher was handling event processing and app managing. Since this violates the single responsibility principle, AccessibleWatcher is responsible for event processing only, and the structure has been changed so that AccessibleAppManager manages apps. To this end, we created a test with a structure that adds a MockAccessibleAppManager, and made sure that the test is satisfied through additional implementation. Change-Id: I8a619384ac5a7d62b89cd16c960875e56a4a1276 --- libaurum/inc/Accessibility/Accessible.h | 1 + .../inc/Accessibility/AccessibleAppManager.h | 100 ++++++++++++++++++ .../inc/Accessibility/AccessibleWatcher.h | 39 ------- .../Accessibility/AtspiAccessibleAppManager.h | 62 +++++++++++ .../Accessibility/AtspiAccessibleWatcher.h | 15 --- .../Accessibility/MockAccessibleAppManager.h | 92 ++++++++++++++++ .../Accessibility/MockAccessibleWatcher.h | 34 ------ libaurum/meson.build | 1 + .../src/Accessibility/AccessibleAppManager.cc | 69 ++++++++++++ .../src/Accessibility/AccessibleWatcher.cc | 15 --- libaurum/src/Accessibility/meson.build | 3 +- .../AtspiAccessibleAppManager.cc | 73 +++++++++++++ .../Accessibility/AtspiAccessibleWatcher.cc | 42 +------- .../Accessibility/MockAccessibleAppManager.cc | 60 +++++++++++ .../MockAccessibleApplication.cc | 1 + .../Impl/Accessibility/MockAccessibleNode.cc | 4 - .../Accessibility/MockAccessibleWatcher.cc | 31 ------ libaurum/src/Impl/Accessibility/meson.build | 2 + libaurum/src/Impl/MockDeviceImpl.cc | 4 +- libaurum/src/Impl/TizenDeviceImpl.cc | 2 +- tests/Test_Misc.cc | 2 +- tests/Test_Sel.cc | 14 ++- tests/Test_UiDevice.cc | 9 +- tests/Test_UiObject.cc | 9 +- tests/Test_UiSelector.cc | 14 ++- tests/meson.build | 2 +- 26 files changed, 503 insertions(+), 197 deletions(-) create mode 100644 libaurum/inc/Accessibility/AccessibleAppManager.h create mode 100644 libaurum/inc/Impl/Accessibility/AtspiAccessibleAppManager.h create mode 100644 libaurum/inc/Impl/Accessibility/MockAccessibleAppManager.h create mode 100644 libaurum/src/Accessibility/AccessibleAppManager.cc create mode 100644 libaurum/src/Impl/Accessibility/AtspiAccessibleAppManager.cc create mode 100644 libaurum/src/Impl/Accessibility/MockAccessibleAppManager.cc diff --git a/libaurum/inc/Accessibility/Accessible.h b/libaurum/inc/Accessibility/Accessible.h index 2d2c456..ca0e6d4 100644 --- a/libaurum/inc/Accessibility/Accessible.h +++ b/libaurum/inc/Accessibility/Accessible.h @@ -19,6 +19,7 @@ #define _ACCESSIBLE_H_ #include "AccessibleNode.h" +#include "AccessibleAppManager.h" #include "AccessibleWatcher.h" #include "AccessibleApplication.h" #include "AccessibleWindow.h" diff --git a/libaurum/inc/Accessibility/AccessibleAppManager.h b/libaurum/inc/Accessibility/AccessibleAppManager.h new file mode 100644 index 0000000..ba5fd54 --- /dev/null +++ b/libaurum/inc/Accessibility/AccessibleAppManager.h @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2023 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef _ACCESSIBLE_APPMANAGER_H_ +#define _ACCESSIBLE_APPMANAGER_H_ + +#include "AccessibleApplication.h" +#include + +#include "config.h" + +namespace Aurum { + +/** + * @class AccessibleAppManager + * + * @ingroup aurum + * + * @brief Class that manages a list of application classes + */ +class AccessibleAppManager { +public: + /** + * @brief AccessibleAppManager constructor. + * + * @since_tizen 6.5 + */ + AccessibleAppManager(); + + /** + * @brief AccessibleAppManager destructor. + * + * @since_tizen 6.5 + */ + virtual ~AccessibleAppManager(); + + /** + * @brief Gets @AccessibleAppManager instance. + * + * @since_tizen 6.5 + */ + static AccessibleAppManager *getInstance(AccessibleAppManager *appManagerImpl = nullptr); + +public: + /** + * @brief Gets current running application count in device. + * + * @return application count + * + * @since_tizen 6.5 + */ + virtual int getApplicationCount(void) const = 0; + + /** + * @brief Gets application class at specific index. + * + * @param[in] index application index + * + * @return @AccessibleApplication ptr + * + * @since_tizen 6.5 + */ + virtual std::shared_ptr getApplicationAt(int index) const = 0; + + /** + * @brief Gets application node vector. + * + * @return @AccessibleApplication vector + * + * @since_tizen 6.5 + */ + virtual std::vector> getApplications(void) const = 0; + + /** + * @brief Gets active application vector. + * + * @return @AccessibleApplication vector + * + * @since_tizen 6.5 + */ + virtual std::vector> getActiveApplications(void) const; +}; + +} + +#endif diff --git a/libaurum/inc/Accessibility/AccessibleWatcher.h b/libaurum/inc/Accessibility/AccessibleWatcher.h index e2f7c2b..4b4585b 100644 --- a/libaurum/inc/Accessibility/AccessibleWatcher.h +++ b/libaurum/inc/Accessibility/AccessibleWatcher.h @@ -18,7 +18,6 @@ #ifndef _ACCESSIBLE_WATCHER_H_ #define _ACCESSIBLE_WATCHER_H_ -#include "AccessibleApplication.h" #include "AccessibleWindow.h" #include "AccessibleNode.h" #include "IEventSource.h" @@ -69,34 +68,6 @@ public: static AccessibleWatcher *getInstance(AccessibleWatcher *watcherImpl = nullptr); public: - /** - * @brief Gets current running application count in device. - * - * @return application count - * - * @since_tizen 6.5 - */ - virtual int getApplicationCount(void) const = 0; - - /** - * @brief Gets application class at specific index. - * - * @param[in] index application index - * - * @return @AccessibleApplication ptr - * - * @since_tizen 6.5 - */ - virtual std::shared_ptr getApplicationAt(int index) const = 0; - - /** - * @brief Gets application node vector. - * - * @return @AccessibleApplication vector - * - * @since_tizen 6.5 - */ - virtual std::vector> getApplications(void) const = 0; /** * @brief Executes runnable command and wait given event. @@ -161,16 +132,6 @@ public: */ virtual bool getWindowEventEmitted() = 0; -public: - /** - * @brief Gets active application vector. - * - * @return @AccessibleApplication vector - * - * @since_tizen 6.5 - */ - virtual std::vector> getActiveApplications(void) const; - public: /** * @copydoc @IEventSource::attach() diff --git a/libaurum/inc/Impl/Accessibility/AtspiAccessibleAppManager.h b/libaurum/inc/Impl/Accessibility/AtspiAccessibleAppManager.h new file mode 100644 index 0000000..9029375 --- /dev/null +++ b/libaurum/inc/Impl/Accessibility/AtspiAccessibleAppManager.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef _ATSPI_ACCESSIBLE_APPMANAGER_H_ +#define _ATSPI_ACCESSIBLE_APPMANAGER_H_ + +#include "AccessibleAppManager.h" + +using namespace Aurum; + +namespace AurumInternal { + +/** + * @internal + * + * @class AtspiAccessibleAppManager + * + * @ingroup aurum + * + * @brief Class that manages a list of application classes + */ +class AtspiAccessibleAppManager : public AccessibleAppManager { +public: + AtspiAccessibleAppManager(); + virtual ~AtspiAccessibleAppManager(); + +public: + /** + * @copydoc @AccessibleAppManager::getApplicationCount() + */ + virtual int getApplicationCount(void) const override; + + /** + * @copydoc @AccessibleAppManager::getApplicationAt() + */ + virtual std::shared_ptr getApplicationAt(int index) const override; + + /** + * @copydoc @AccessibleAppManager::getApplications() + */ + virtual std::vector> getApplications(void) const override; + +private: +}; + +} + +#endif diff --git a/libaurum/inc/Impl/Accessibility/AtspiAccessibleWatcher.h b/libaurum/inc/Impl/Accessibility/AtspiAccessibleWatcher.h index 2838827..5ffbc04 100644 --- a/libaurum/inc/Impl/Accessibility/AtspiAccessibleWatcher.h +++ b/libaurum/inc/Impl/Accessibility/AtspiAccessibleWatcher.h @@ -102,21 +102,6 @@ public: virtual ~AtspiAccessibleWatcher(); public: - /** - * @copydoc @AccessibleWatcher::getApplicationCount() - */ - virtual int getApplicationCount(void) const override; - - /** - * @copydoc @AccessibleWatcher::getApplicationAt() - */ - virtual std::shared_ptr getApplicationAt(int index) const override; - - /** - * @copydoc @AccessibleWatcher::getApplications() - */ - virtual std::vector> getApplications(void) const override; - /** * @copydoc @AccessibleWatcher::executeAndWaitForEvents() */ diff --git a/libaurum/inc/Impl/Accessibility/MockAccessibleAppManager.h b/libaurum/inc/Impl/Accessibility/MockAccessibleAppManager.h new file mode 100644 index 0000000..c10f7c1 --- /dev/null +++ b/libaurum/inc/Impl/Accessibility/MockAccessibleAppManager.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef _MOCK_ACCESSIBLE_APPMANAGER_H_ +#define _MOCK_ACCESSIBLE_APPMANAGER_H_ + +#include "AccessibleNode.h" +#include "AccessibleAppManager.h" + +#include "MockAccessibleApplication.h" + +#include +#include +#include +#include + +using namespace Aurum; + +namespace AurumInternal { + +namespace Mock { + +class MockAccessibleAppManager : public AccessibleAppManager { +public: + /** + * @brief TBD + * @since_tizen 6.5 + */ + MockAccessibleAppManager(); + + /** + * @brief TBD + * @since_tizen 6.5 + */ + virtual ~MockAccessibleAppManager(); + +public: + /** + * @brief TBD + * @since_tizen 6.5 + */ + virtual int getApplicationCount(void) const override; + + /** + * @brief TBD + * @since_tizen 6.5 + */ + virtual std::shared_ptr getApplicationAt(int index) const override; + + /** + * @brief TBD + * @since_tizen 6.5 + */ + virtual std::vector> getApplications(void) const override; + +public: + /** + * @brief TBD + * @since_tizen 6.5 + */ + void addApplication(std::shared_ptr application); + + /** + * @brief TBD + * @since_tizen 6.5 + */ + std::shared_ptr addApplication(std::string pkgName, Rect geometry, int ifaces, int properties); + +private: + + std::vector> mApplicationList; +}; + +} + +} + +#endif diff --git a/libaurum/inc/Impl/Accessibility/MockAccessibleWatcher.h b/libaurum/inc/Impl/Accessibility/MockAccessibleWatcher.h index 2cff4ae..a00ad64 100644 --- a/libaurum/inc/Impl/Accessibility/MockAccessibleWatcher.h +++ b/libaurum/inc/Impl/Accessibility/MockAccessibleWatcher.h @@ -18,7 +18,6 @@ #ifndef _MOCK_ACCESSIBLE_WATCHER_H_ #define _MOCK_ACCESSIBLE_WATCHER_H_ -#include "AccessibleNode.h" #include "AccessibleWatcher.h" #include "MockAccessibleApplication.h" @@ -49,23 +48,6 @@ public: virtual ~MockAccessibleWatcher(); public: - /** - * @brief TBD - * @since_tizen 6.5 - */ - virtual int getApplicationCount(void) const override; - - /** - * @brief TBD - * @since_tizen 6.5 - */ - virtual std::shared_ptr getApplicationAt(int index) const override; - - /** - * @brief TBD - * @since_tizen 6.5 - */ - virtual std::vector> getApplications(void) const override; /** * @brief TBD @@ -82,24 +64,8 @@ public: void setXMLsync(bool sync); bool getWindowEventEmitted(); -public: - /** - * @brief TBD - * @since_tizen 6.5 - */ - void addApplication(std::shared_ptr application); - - /** - * @brief TBD - * @since_tizen 6.5 - */ - std::shared_ptr addApplication(std::string pkgName, Rect geometry, int ifaces, int properties); private: - /** - * @brief TBD - */ - std::vector> mApplicationList; std::map> mActiveAppMap; std::map> mXMLDocMap; diff --git a/libaurum/meson.build b/libaurum/meson.build index 96dfe18..97b50fb 100644 --- a/libaurum/meson.build +++ b/libaurum/meson.build @@ -18,6 +18,7 @@ libaurum_install_inc = [ './inc/Comparer.h', './inc/AurumXML.h', './inc/Accessibility/AccessibleNode.h', + './inc/Accessibility/AccessibleAppManager.h', './inc/Accessibility/AccessibleWatcher.h', './inc/Accessibility/IEventSource.h', './inc/Accessibility/AccessibleWindow.h', diff --git a/libaurum/src/Accessibility/AccessibleAppManager.cc b/libaurum/src/Accessibility/AccessibleAppManager.cc new file mode 100644 index 0000000..5479bf1 --- /dev/null +++ b/libaurum/src/Accessibility/AccessibleAppManager.cc @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "Aurum.h" + +#ifdef TIZEN +#include "AtspiAccessibleAppManager.h" +#endif +#include "MockAccessibleAppManager.h" + +using namespace Aurum; +using namespace AurumInternal; + +AccessibleAppManager::AccessibleAppManager() +{ +} + +AccessibleAppManager::~AccessibleAppManager() +{ +} + +AccessibleAppManager *AccessibleAppManager::getInstance(AccessibleAppManager *appManagerImpl) +{ + static AccessibleAppManager *mInstance = nullptr; + if (appManagerImpl) { + delete mInstance; + mInstance = appManagerImpl; + return mInstance; + } else { + if (mInstance) return mInstance; + else { +#ifdef TIZEN + mInstance = new AtspiAccessibleAppManager(); +#else + mInstance = new MockAccessibleAppManager(); +#endif + } + } + return mInstance; +} + +std::vector> AccessibleAppManager::getActiveApplications(void) const +{ + std::vector> ret{}; + auto apps = this->getApplications(); + LOGI("available app process size %d", (int)apps.size()); + + apps.erase(std::remove_if(apps.begin(), apps.end(), [](auto app){ + return !app->isActive(); + }), apps.end()); + + LOGI("active apps size %d", (int)apps.size()); + + return apps; +} diff --git a/libaurum/src/Accessibility/AccessibleWatcher.cc b/libaurum/src/Accessibility/AccessibleWatcher.cc index d26461d..86cbce6 100644 --- a/libaurum/src/Accessibility/AccessibleWatcher.cc +++ b/libaurum/src/Accessibility/AccessibleWatcher.cc @@ -59,21 +59,6 @@ AccessibleWatcher *AccessibleWatcher::getInstance(AccessibleWatcher *watcherImpl return mInstance; } -std::vector> AccessibleWatcher::getActiveApplications(void) const -{ - std::vector> ret{}; - auto apps = this->getApplications(); - LOGI("available app process size %d", (int)apps.size()); - - apps.erase(std::remove_if(apps.begin(), apps.end(), [](auto app){ - return !app->isActive(); - }), apps.end()); - - LOGI("active apps size %d", (int)apps.size()); - - return apps; -} - void AccessibleWatcher::attach(std::shared_ptr source) { std::unique_lock lock(mLock); diff --git a/libaurum/src/Accessibility/meson.build b/libaurum/src/Accessibility/meson.build index 4bb5f1d..652d62a 100644 --- a/libaurum/src/Accessibility/meson.build +++ b/libaurum/src/Accessibility/meson.build @@ -1,6 +1,7 @@ libaurum_src += [ files('AccessibleApplication.cc'), files('AccessibleNode.cc'), + files('AccessibleAppManager.cc'), files('AccessibleWatcher.cc'), files('AccessibleWindow.cc'), -] \ No newline at end of file +] diff --git a/libaurum/src/Impl/Accessibility/AtspiAccessibleAppManager.cc b/libaurum/src/Impl/Accessibility/AtspiAccessibleAppManager.cc new file mode 100644 index 0000000..3f938a0 --- /dev/null +++ b/libaurum/src/Impl/Accessibility/AtspiAccessibleAppManager.cc @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "Aurum.h" + +#include "AtspiAccessibleAppManager.h" +#include "AtspiAccessibleApplication.h" +#include "AtspiWrapper.h" +#include "AtspiAccessibleNode.h" + +using namespace Aurum; +using namespace AurumInternal; + +AtspiAccessibleAppManager::AtspiAccessibleAppManager() +{ +} + +AtspiAccessibleAppManager::~AtspiAccessibleAppManager() +{ +} + +int AtspiAccessibleAppManager::getApplicationCount(void) const +{ + AtspiAccessible *root = AtspiWrapper::Atspi_get_desktop(0); + int nchild = AtspiWrapper::Atspi_accessible_get_child_count(root, NULL); + g_object_unref(root); + + if (nchild <= 0) return 0; + return nchild; +} + +std::shared_ptr AtspiAccessibleAppManager::getApplicationAt(int index) const +{ + AtspiAccessible *root = AtspiWrapper::Atspi_get_desktop(0); + AtspiAccessible *child = AtspiWrapper::Atspi_accessible_get_child_at_index(root, index, NULL); + g_object_unref(root); + return std::make_shared(std::make_shared(child)); +} + +std::vector> AtspiAccessibleAppManager::getApplications(void) const +{ + std::vector> ret{}; + AtspiAccessible *root = AtspiWrapper::Atspi_get_desktop(0); + GArray *children = AtspiWrapper::Atspi_accessible_get_children(root, NULL); + if (children) { + ret.reserve(children->len); + AtspiAccessible *child = nullptr; + for (unsigned int i = 0; i < children->len; i++) { + child = g_array_index(children, AtspiAccessible *, i); + if (child) { + ret.push_back(std::make_shared(std::make_shared(child))); + } + } + g_array_free(children, true); + } + g_object_unref(root); + + return ret; +} diff --git a/libaurum/src/Impl/Accessibility/AtspiAccessibleWatcher.cc b/libaurum/src/Impl/Accessibility/AtspiAccessibleWatcher.cc index 77cfcb7..0d093d1 100644 --- a/libaurum/src/Impl/Accessibility/AtspiAccessibleWatcher.cc +++ b/libaurum/src/Impl/Accessibility/AtspiAccessibleWatcher.cc @@ -18,6 +18,7 @@ #include "Aurum.h" #include "AtspiAccessibleWatcher.h" +#include "AtspiAccessibleAppManager.h" #include "AtspiAccessibleApplication.h" #include "AtspiAccessibleWindow.h" #include "AtspiAccessibleNode.h" @@ -356,45 +357,6 @@ void AtspiAccessibleWatcher::onObjectDefunct(AtspiAccessible *node) notifyAll((int)EventType::Object, (int)ObjectEventType::ObjectStateDefunct, node); } -int AtspiAccessibleWatcher::getApplicationCount(void) const -{ - AtspiAccessible *root = AtspiWrapper::Atspi_get_desktop(0); - int nchild = AtspiWrapper::Atspi_accessible_get_child_count(root, NULL); - g_object_unref(root); - - if (nchild <= 0) return 0; - return nchild; -} - -std::shared_ptr AtspiAccessibleWatcher::getApplicationAt(int index) const -{ - AtspiAccessible *root = AtspiWrapper::Atspi_get_desktop(0); - AtspiAccessible *child = AtspiWrapper::Atspi_accessible_get_child_at_index(root, index, NULL); - g_object_unref(root); - return std::make_shared(std::make_shared(child)); -} - -std::vector> AtspiAccessibleWatcher::getApplications(void) const -{ - std::vector> ret{}; - AtspiAccessible *root = AtspiWrapper::Atspi_get_desktop(0); - GArray *children = AtspiWrapper::Atspi_accessible_get_children(root, NULL); - if (children) { - ret.reserve(children->len); - AtspiAccessible *child = nullptr; - for (unsigned int i = 0; i < children->len; i++) { - child = g_array_index(children, AtspiAccessible *, i); - if (child) { - ret.push_back(std::make_shared(std::make_shared(child))); - } - } - g_array_free(children, true); - } - g_object_unref(root); - - return ret; -} - bool AtspiAccessibleWatcher::executeAndWaitForEvents(const Runnable *cmd, const A11yEvent type, const int timeout, const std::string packageName, std::shared_ptr obj, const int count) { mMutex.lock(); @@ -579,7 +541,7 @@ void AtspiAccessibleWatcher::setXMLsync(bool sync) mAppCount = 0; mAppXMLLoadedCount = 0; } else { - auto apps = getApplications(); + auto apps = AccessibleAppManager::getInstance()->getApplications(); for (auto &app : apps) { app->getAccessibleNode()->updateName(); diff --git a/libaurum/src/Impl/Accessibility/MockAccessibleAppManager.cc b/libaurum/src/Impl/Accessibility/MockAccessibleAppManager.cc new file mode 100644 index 0000000..1797224 --- /dev/null +++ b/libaurum/src/Impl/Accessibility/MockAccessibleAppManager.cc @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "MockAccessibleAppManager.h" +#include "MockAccessibleWindow.h" +#include "MockAccessibleApplication.h" +#include "MockAccessibleNode.h" + +using namespace Aurum; +using namespace AurumInternal::Mock; + +MockAccessibleAppManager::MockAccessibleAppManager() +{ +} + +MockAccessibleAppManager::~MockAccessibleAppManager() +{ +} + +int MockAccessibleAppManager::getApplicationCount(void) const +{ + return mApplicationList.size(); +} + +std::shared_ptr MockAccessibleAppManager::getApplicationAt(int index) const +{ + return mApplicationList.at(index); +} + +std::vector> MockAccessibleAppManager::getApplications(void) const +{ + return mApplicationList; +} + +void MockAccessibleAppManager::addApplication(std::shared_ptr application) +{ + mApplicationList.push_back(application); +} + +std::shared_ptr MockAccessibleAppManager::addApplication(std::string pkgName, Rect geometry, int ifaces, int properties) +{ + std::shared_ptr appNode = std::make_shared(nullptr, pkgName, pkgName, "application", "", "Elm_Win", "default", "", geometry, ifaces, properties); + std::shared_ptr app = std::make_shared(appNode); + this->addApplication(app); + return app; +} \ No newline at end of file diff --git a/libaurum/src/Impl/Accessibility/MockAccessibleApplication.cc b/libaurum/src/Impl/Accessibility/MockAccessibleApplication.cc index efe80fa..c9c726b 100644 --- a/libaurum/src/Impl/Accessibility/MockAccessibleApplication.cc +++ b/libaurum/src/Impl/Accessibility/MockAccessibleApplication.cc @@ -54,6 +54,7 @@ void MockAccessibleApplication::clearWindows(void) std::shared_ptr MockAccessibleApplication::addWindow(std::string title, std::string widget, Rect geometry, int properties) { + auto node = std::make_shared(nullptr, title, title, "window", "res",widget,"style", "", geometry, 0, properties); auto win = std::make_shared(shared_from_this(), node); this->addWindow(win); diff --git a/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc b/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc index d56361b..df9bd22 100644 --- a/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc +++ b/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc @@ -30,14 +30,10 @@ MockAccessibleNode::MockAccessibleNode(std::shared_ptr parent, s const auto trickDontRemove = std::shared_ptr( this, [](MockAccessibleNode *){} ); setProperties(text,pkg,role,res,type,style,automationId, screenBoundingBox, supportingIfaces, featureProperty); - auto watcher = AccessibleWatcher::getInstance(); - watcher->attach(shared_from_this()); } MockAccessibleNode::~MockAccessibleNode() { - auto watcher = AccessibleWatcher::getInstance(); - watcher->detach(shared_from_this()); } int MockAccessibleNode::getChildCount() const diff --git a/libaurum/src/Impl/Accessibility/MockAccessibleWatcher.cc b/libaurum/src/Impl/Accessibility/MockAccessibleWatcher.cc index a3b2f61..eb661a6 100644 --- a/libaurum/src/Impl/Accessibility/MockAccessibleWatcher.cc +++ b/libaurum/src/Impl/Accessibility/MockAccessibleWatcher.cc @@ -16,9 +16,6 @@ */ #include "MockAccessibleWatcher.h" -#include "MockAccessibleWindow.h" -#include "MockAccessibleApplication.h" -#include "MockAccessibleNode.h" using namespace Aurum; using namespace AurumInternal::Mock; @@ -31,26 +28,6 @@ MockAccessibleWatcher::~MockAccessibleWatcher() { } -int MockAccessibleWatcher::getApplicationCount(void) const -{ - return mApplicationList.size(); -} - -std::shared_ptr MockAccessibleWatcher::getApplicationAt(int index) const -{ - return mApplicationList.at(index); -} - -std::vector> MockAccessibleWatcher::getApplications(void) const -{ - return mApplicationList; -} - -void MockAccessibleWatcher::addApplication(std::shared_ptr application) -{ - mApplicationList.push_back(application); -} - std::map> MockAccessibleWatcher::getXMLDocMap(void) { return mXMLDocMap; @@ -61,14 +38,6 @@ std::shared_ptr MockAccessibleWatcher::getXMLDoc(std::string pkgName) return std::shared_ptr(); } -std::shared_ptr MockAccessibleWatcher::addApplication(std::string pkgName, Rect geometry, int ifaces, int properties) -{ - std::shared_ptr appNode = std::make_shared(nullptr, pkgName, pkgName, "application", "", "Elm_Win", "default", "", geometry, ifaces, properties); - std::shared_ptr app = std::make_shared(appNode); - this->addApplication(app); - return app; -} - bool MockAccessibleWatcher::executeAndWaitForEvents(const Runnable *cmd, const A11yEvent type, const int timeout, const std::string packageName, std::shared_ptr obj, const int count) { return true; diff --git a/libaurum/src/Impl/Accessibility/meson.build b/libaurum/src/Impl/Accessibility/meson.build index f7b23b4..b80cd8e 100644 --- a/libaurum/src/Impl/Accessibility/meson.build +++ b/libaurum/src/Impl/Accessibility/meson.build @@ -3,6 +3,7 @@ files('AtspiAccessibleWindow.cc'), files('AtspiAccessibleNode.cc'), files('AtspiAccessibleWatcher.cc'), + files('AtspiAccessibleAppManager.cc'), files('AtspiWrapper.cc'), files('AtspiMatchRuleConvertor.cc'), ] @@ -12,4 +13,5 @@ files('MockAccessibleWindow.cc'), files('MockAccessibleNode.cc'), files('MockAccessibleWatcher.cc'), + files('MockAccessibleAppManager.cc'), ] diff --git a/libaurum/src/Impl/MockDeviceImpl.cc b/libaurum/src/Impl/MockDeviceImpl.cc index 2005dee..e9bb481 100644 --- a/libaurum/src/Impl/MockDeviceImpl.cc +++ b/libaurum/src/Impl/MockDeviceImpl.cc @@ -16,7 +16,7 @@ */ #include "Aurum.h" -#include "AccessibleWatcher.h" +#include "AccessibleAppManager.h" #include "MockDeviceImpl.h" #include @@ -268,7 +268,7 @@ std::vector> MockDeviceImpl::getWindowRoot() con { std::vector> ret{}; - auto apps = AccessibleWatcher::getInstance()->getApplications(); + auto apps = AccessibleAppManager::getInstance()->getApplications(); for (auto &app : apps) { diff --git a/libaurum/src/Impl/TizenDeviceImpl.cc b/libaurum/src/Impl/TizenDeviceImpl.cc index cb06f34..22eecd1 100644 --- a/libaurum/src/Impl/TizenDeviceImpl.cc +++ b/libaurum/src/Impl/TizenDeviceImpl.cc @@ -454,7 +454,7 @@ std::vector> TizenDeviceImpl::getWindowRoot() co std::vector> ret{}; std::unordered_map> pidToAppNode{}; - auto apps = AccessibleWatcher::getInstance()->getApplications(); + auto apps = AccessibleAppManager::getInstance()->getApplications(); for (auto &app : apps) { app->getAccessibleNode()->updateName(); diff --git a/tests/Test_Misc.cc b/tests/Test_Misc.cc index 99e6a63..15c46b3 100644 --- a/tests/Test_Misc.cc +++ b/tests/Test_Misc.cc @@ -10,10 +10,10 @@ #include #include -#include "MockAccessibleWatcher.h" #include "MockAccessibleApplication.h" #include "MockAccessibleWindow.h" #include "MockAccessibleNode.h" +#include "MockAccessibleAppManager.h" class AurumTestMisc : public ::testing::Test { public: diff --git a/tests/Test_Sel.cc b/tests/Test_Sel.cc index 0853a03..332351c 100644 --- a/tests/Test_Sel.cc +++ b/tests/Test_Sel.cc @@ -11,6 +11,7 @@ #include #include "MockAccessibleWatcher.h" +#include "MockAccessibleAppManager.h" #include "MockAccessibleApplication.h" #include "MockAccessibleWindow.h" #include "MockAccessibleNode.h" @@ -20,7 +21,7 @@ using namespace AurumInternal::Mock; class AurumTestSel : public ::testing::Test { public: - AurumTestSel() : mDevice{nullptr}, mWatcher{nullptr}, mApps{}, mWins{}, mNodes{}{ + AurumTestSel() : mDevice{nullptr}, mAppManager{nullptr}, mWatcher{nullptr}, mApps{}, mWins{}, mNodes{}{ } protected: void SetUp() override { @@ -30,8 +31,11 @@ class AurumTestSel : public ::testing::Test { mWatcher = new MockAccessibleWatcher(); AccessibleWatcher::getInstance(mWatcher); - mApps.push_back(mWatcher->addApplication("org.tizen.aurum.test.app1", {0,0,1024,1024}, 0, 0)); - mApps.push_back(mWatcher->addApplication("org.tizen.aurum.test.app2", {0,0,1024,1024}, 0, 0)); + mAppManager = new MockAccessibleAppManager(); + AccessibleAppManager::getInstance(mAppManager); + + mApps.push_back(mAppManager->addApplication("org.tizen.aurum.test.app1", {0,0,1024,1024}, 0, 0)); + mApps.push_back(mAppManager->addApplication("org.tizen.aurum.test.app2", {0,0,1024,1024}, 0, 0)); mWins.push_back(mApps[0]->addWindow("win1", "Elm_Win", {100,100,200,200}, (int)NodeFeatureProperties::SHOWING|(int)NodeFeatureProperties::VISIBLE|(int)NodeFeatureProperties::ACTIVE)); mWins.push_back(mApps[0]->addWindow("win2", "Elm_Win", {200,200,200,200}, (int)NodeFeatureProperties::VISIBLE|(int)NodeFeatureProperties::SHOWING|(int)NodeFeatureProperties::ACTIVE)); @@ -48,8 +52,8 @@ class AurumTestSel : public ::testing::Test { } MockDeviceImpl *mDevice; + MockAccessibleAppManager *mAppManager; MockAccessibleWatcher *mWatcher; - std::vector> mApps; std::vector> mWins; std::vector> mNodes; @@ -115,4 +119,4 @@ TEST_F(AurumTestSel, depth_N1) { auto founds = UiDevice::getInstance()->findObjects(Sel::depth(1)); ASSERT_NE(founds.size(), 10); -} \ No newline at end of file +} diff --git a/tests/Test_UiDevice.cc b/tests/Test_UiDevice.cc index dbab873..c14781c 100644 --- a/tests/Test_UiDevice.cc +++ b/tests/Test_UiDevice.cc @@ -14,6 +14,7 @@ #include #include "MockAccessibleWatcher.h" +#include "MockAccessibleAppManager.h" #include "MockAccessibleApplication.h" #include "MockAccessibleWindow.h" #include "MockAccessibleNode.h" @@ -24,7 +25,7 @@ using namespace AurumInternal::Mock; class AurumTestUiDevice : public ::testing::Test { public: AurumTestUiDevice() - : mDevice{nullptr}, mWatcher{nullptr}, mApp{nullptr}, mWin{nullptr}, mNode{nullptr} { + : mDevice{nullptr}, mAppManager{nullptr}, mWatcher{nullptr}, mApp{nullptr}, mWin{nullptr}, mNode{nullptr} { } void SetUp() override { @@ -34,7 +35,10 @@ class AurumTestUiDevice : public ::testing::Test { mWatcher = new MockAccessibleWatcher(); AccessibleWatcher::getInstance(mWatcher); - mApp = mWatcher->addApplication("org.tizen.aurum.test.app", {0,0,1024,1024}, 0, 0); + mAppManager = new MockAccessibleAppManager(); + AccessibleAppManager::getInstance(mAppManager); + + mApp = mAppManager->addApplication("org.tizen.aurum.test.app", {0,0,1024,1024}, 0, 0); mWin = mApp->addWindow("title", "Elm_Win", {100,100,200,200}, (int)NodeFeatureProperties::SHOWING|(int)NodeFeatureProperties::VISIBLE|(int)NodeFeatureProperties::ACTIVE); mWin->addNode("test", "pkg", "TeSt1234!@#$", "res", "type", "style", "", {0,0,100,100}, 0, 0); mNode = mWin->addNode("test", "pkg", "TeSt1234!@#$", "res", "type", "style", "", {100,100,200,200}, 0, 0); @@ -44,6 +48,7 @@ class AurumTestUiDevice : public ::testing::Test { } MockDeviceImpl *mDevice; + MockAccessibleAppManager *mAppManager; MockAccessibleWatcher *mWatcher; std::shared_ptr mApp; std::shared_ptr mWin; diff --git a/tests/Test_UiObject.cc b/tests/Test_UiObject.cc index 4b3108f..5862284 100644 --- a/tests/Test_UiObject.cc +++ b/tests/Test_UiObject.cc @@ -15,6 +15,7 @@ #include #include "MockAccessibleWatcher.h" +#include "MockAccessibleAppManager.h" #include "MockAccessibleApplication.h" #include "MockAccessibleWindow.h" #include "MockAccessibleNode.h" @@ -24,7 +25,7 @@ using namespace AurumInternal::Mock; class AurumTestUiObject : public ::testing::Test { public: - AurumTestUiObject() : mDevice{nullptr},mWatcher{nullptr}, mApp{nullptr}, mWin{nullptr}, mNode{nullptr} { + AurumTestUiObject() : mDevice{nullptr}, mAppManager{nullptr}, mWatcher{nullptr}, mApp{nullptr}, mWin{nullptr}, mNode{nullptr} { } void SetUp() override { @@ -34,7 +35,10 @@ class AurumTestUiObject : public ::testing::Test { mWatcher = new MockAccessibleWatcher(); AccessibleWatcher::getInstance(mWatcher); - mApp = mWatcher->addApplication("org.tizen.aurum.test.app", {0,0,1024,1024}, 0, 0); + mAppManager = new MockAccessibleAppManager(); + AccessibleAppManager::getInstance(mAppManager); + + mApp = mAppManager->addApplication("org.tizen.aurum.test.app", {0,0,1024,1024}, 0, 0); mWin = mApp->addWindow("title", "Elm_Win", {100,100,200,200}, (int)NodeFeatureProperties::SHOWING|(int)NodeFeatureProperties::VISIBLE|(int)NodeFeatureProperties::ACTIVE); mWin->addNode("test", "pkg", "TeSt1234!@#$", "res", "type", "style", "", {0,0,100,100}, 0, 0); mNode = mWin->addNode("test2", "pkg", "TeSt1234!@#$", "res", "type", "style", "", {100,100,200,200}, 0, 0); @@ -63,6 +67,7 @@ class AurumTestUiObject : public ::testing::Test { public: MockDeviceImpl *mDevice; + MockAccessibleAppManager *mAppManager; MockAccessibleWatcher *mWatcher; std::shared_ptr mApp; std::shared_ptr mWin; diff --git a/tests/Test_UiSelector.cc b/tests/Test_UiSelector.cc index 524c69d..bc78395 100644 --- a/tests/Test_UiSelector.cc +++ b/tests/Test_UiSelector.cc @@ -9,8 +9,11 @@ #include #include +#include +#include #include "MockAccessibleWatcher.h" +#include "MockAccessibleAppManager.h" #include "MockAccessibleApplication.h" #include "MockAccessibleWindow.h" #include "MockAccessibleNode.h" @@ -20,7 +23,7 @@ using namespace AurumInternal::Mock; class AurumTestUiSelector : public ::testing::Test { public: - AurumTestUiSelector(): mDevice{nullptr}, mWatcher{nullptr}, mApps{}, mWins{}, mNodes{}{ + AurumTestUiSelector(): mDevice{nullptr}, mWatcher{nullptr}, mAppManager{nullptr}, mApps{}, mWins{}, mNodes{}{ } protected: void SetUp() override { @@ -30,8 +33,11 @@ class AurumTestUiSelector : public ::testing::Test { mWatcher = new MockAccessibleWatcher(); AccessibleWatcher::getInstance(mWatcher); - mApps.push_back(mWatcher->addApplication("org.tizen.aurum.test.app1", {0,0,1024,1024}, 0, 0)); - mApps.push_back(mWatcher->addApplication("org.tizen.aurum.test.app2", {0,0,1024,1024}, 0, 0)); + mAppManager = new MockAccessibleAppManager(); + AccessibleAppManager::getInstance(mAppManager); + + mApps.push_back(mAppManager->addApplication("org.tizen.aurum.test.app1", {0,0,1024,1024}, 0, 0)); + mApps.push_back(mAppManager->addApplication("org.tizen.aurum.test.app2", {0,0,1024,1024}, 0, 0)); mWins.push_back(mApps[0]->addWindow("win1", "Elm_Win", {100,100,200,200}, (int)NodeFeatureProperties::SHOWING|(int)NodeFeatureProperties::VISIBLE|(int)NodeFeatureProperties::ACTIVE)); mWins.push_back(mApps[0]->addWindow("win2", "Elm_Win", {200,200,200,200}, (int)NodeFeatureProperties::VISIBLE|(int)NodeFeatureProperties::SHOWING|(int)NodeFeatureProperties::ACTIVE)); @@ -50,7 +56,7 @@ class AurumTestUiSelector : public ::testing::Test { MockDeviceImpl *mDevice; MockAccessibleWatcher *mWatcher; - + MockAccessibleAppManager *mAppManager; std::vector> mApps; std::vector> mWins; std::vector> mNodes; diff --git a/tests/meson.build b/tests/meson.build index 427edd0..7d668fe 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -24,4 +24,4 @@ foreach atest : test_src ) test(atest[0], test_bin) -endforeach \ No newline at end of file +endforeach -- 2.34.1