!2254 merge codesync into master

代码整改

Created-by: fanzexuan
Commit-by: fanzexuan
Merged-by: openharmony_ci
Description: ### 一、内容说明(相关的Issue)



### 二、建议测试周期和提测地址  
  建议测试完成时间:xxxx.xx.xx  
  投产上线时间:xxxx.xx.xx  
  提测地址:CI环境/压测环境  
  测试账号:  

### 三、变更内容
  * 3.1 关联PR列表

  * 3.2 数据库和部署说明  
    1. 常规更新 
    2. 重启unicorn
    3. 重启sidekiq
    4. 迁移任务:是否有迁移任务,没有写 "无"
    5. rake脚本:`bundle exec xxx RAILS_ENV = production`;没有写 "无"

  * 3.4 其他技术优化内容(做了什么,变更了什么)
    - 重构了 xxxx 代码
    - xxxx 算法优化


  * 3.5 废弃通知(什么字段、方法弃用?)



  * 3.6  后向不兼容变更(是否有无法向后兼容的变更?)


  
### 四、研发自测点(自测哪些?冒烟用例全部自测?)
  自测测试结论:


### 五、测试关注点(需要提醒QA重点关注的、可能会忽略的地方)
  检查点:

| 需求名称 | 是否影响xx公共模块 | 是否需要xx功能 | 需求升级是否依赖其他子产品 |
|------|------------|----------|---------------|
| xxx  | 否          | 需要       | 不需要           |
|      |            |          |               |

  接口测试:

  性能测试:

  并发测试:

  其他:



See merge request: openharmony/accessibility!2254
This commit is contained in:
openharmony_ci
2025-11-28 14:12:31 +08:00
4 changed files with 0 additions and 1787 deletions
@@ -1,104 +0,0 @@
/*
* Copyright (C) 2025 Huawei Device Co., Ltd.
* 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_FOR_ELEMENT_OPERATOR_MANAGER_H
#define MOCK_FOR_ELEMENT_OPERATOR_MANAGER_H
#include <gmock/gmock.h>
#include "accessibility_window_connection.h"
#include "iaccessibility_element_operator.h"
#include "iaccessibility_element_operator_callback.h"
#include "accessibility_element_info.h"
#include "accessibility_def.h"
#define MOCK_ROOT_PARENT_ELEMENT_ID 1000
struct SpecificPropertyParam {};
namespace OHOS {
namespace Accessibility {
class MockElementOperatorManagerWindowConnection : public AccessibilityWindowConnection {
public:
MockElementOperatorManagerWindowConnection(int32_t windowId, const sptr<IAccessibilityElementOperator>& connection,
int32_t accountId) : AccessibilityWindowConnection(windowId, connection, accountId) {}
virtual ~MockElementOperatorManagerWindowConnection() = default;
sptr<IAccessibilityElementOperator> GetProxy() { return mockOperator_; }
sptr<IAccessibilityElementOperator> GetCardProxy(const int32_t treeId) { return mockOperator_; }
RetError SetCardProxy(const int32_t treeId, sptr<IAccessibilityElementOperator> operation)
{
return RET_OK;
}
void EraseProxy(const int32_t treeId) {}
void GetAllTreeId(std::vector<int32_t> &treeIds) {}
void GetRootParentId(int32_t treeId, int64_t &elementId) { elementId = MOCK_ROOT_PARENT_ELEMENT_ID; }
RetError SetRootParentId(const int32_t treeId, const int64_t elementId) { return RET_OK; }
private:
sptr<IAccessibilityElementOperator> mockOperator_ = nullptr;
};
class MockElementOperatorManagerElementOperator : public IAccessibilityElementOperator {
public:
MockElementOperatorManagerElementOperator() = default;
virtual ~MockElementOperatorManagerElementOperator() = default;
RetError SearchElementInfoByAccessibilityId(const int64_t elementId,
const int32_t requestId, const sptr<IAccessibilityElementOperatorCallback> &callback,
const int32_t mode, bool isFilter) override { return RET_OK; }
void SearchDefaultFocusedByWindowId(const int32_t windowId, const int32_t requestId,
const sptr<IAccessibilityElementOperatorCallback> &callback, const int32_t mode, bool isFilter) override {}
void SearchElementInfosByText(const int64_t elementId, const std::string &text,
const int32_t requestId, const sptr<IAccessibilityElementOperatorCallback> &callback) override {}
void FindFocusedElementInfo(const int64_t elementId, const int32_t focusType,
const int32_t requestId, const sptr<IAccessibilityElementOperatorCallback> &callback) override {}
void FocusMoveSearch(const int64_t elementId, const int32_t direction,
const int32_t requestId, const sptr<IAccessibilityElementOperatorCallback> &callback) override {}
void ExecuteAction(const int64_t elementId, const int32_t action,
const std::map<std::string, std::string> &actionArguments, const int32_t requestId,
const sptr<IAccessibilityElementOperatorCallback> &callback) override {}
void GetCursorPosition(const int64_t elementId, const int32_t requestId,
const sptr<IAccessibilityElementOperatorCallback> &callback) override {}
void SearchElementInfoBySpecificProperty(const int64_t elementId,
const SpecificPropertyParam& param, const int32_t requestId,
const sptr<IAccessibilityElementOperatorCallback> &callback) override {}
void ClearFocus() override {}
void OutsideTouch() override {}
void SetChildTreeIdAndWinId(const int64_t elementId, const int32_t treeId,
const int32_t childWindowId) override {}
void SetBelongTreeId(const int32_t treeId) override {}
void SetParentWindowId(const int32_t parentWindowId) override {}
sptr<IRemoteObject> AsObject() override
{
return nullptr;
}
};
} // namespace Accessibility
} // namespace OHOS
#endif // MOCK_FOR_ELEMENT_OPERATOR_MANAGER_H
@@ -1,648 +0,0 @@
/*
* Copyright (C) 2021 Huawei Device Co., Ltd.
* 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 "accessibility_account_data.h"
#include "accessible_ability_manager_service.h"
#include "element_operator_manager.h"
#include "hilog_wrapper.h"
#include "utils.h"
namespace OHOS {
namespace Accessibility {
namespace {
const std::string PREF_TEST_PATH = "/data/service/el1/public/barrierfree/accessibility_ability_manager_service/";
std::vector<uint32_t> needEvents_ = {};
} // namespace
AccessibilityAccountData::AccessibilityAccountData(int32_t accountId)
{
id_ = accountId;
{
std::lock_guard<ffrt::mutex> lock(abilityManagerMutex_);
abilityManagerMap_[id_] = std::make_shared<AccessibilityAbilityManager>(id_);
}
}
AccessibilityAccountData::~AccessibilityAccountData()
{}
int32_t AccessibilityAccountData::GetAccountId()
{
HILOG_DEBUG("start.");
return id_;
}
// get client state.
uint32_t AccessibilityAccountData::GetAccessibilityState()
{
return 0;
}
// switch the user causes state changed.
void AccessibilityAccountData::OnAccountSwitched()
{
HILOG_DEBUG("start.");
auto abilityManager = GetAbilityManager();
if (abilityManager) {
abilityManager->OnAccountSwitched();
}
// Clear Setting State.
isEventTouchGuideState_ = false;
isScreenMagnification_ = false;
isFilteringKeyEvents_ = false;
isGesturesSimulation_ = false;
}
// add connect ability.
void AccessibilityAccountData::AddConnectedAbility(sptr<AccessibleAbilityConnection>& connection)
{
if (!connection) {
HILOG_ERROR("connection is nullptr");
return;
}
auto abilityManager = GetAbilityManager();
if (abilityManager) {
abilityManager->AddConnectedAbility(connection);
}
}
// remove connect ability.
void AccessibilityAccountData::RemoveConnectedAbility(const AppExecFwk::ElementName &element)
{
auto abilityManager = GetAbilityManager();
if (abilityManager) {
abilityManager->RemoveConnectedAbility(element);
}
}
void AccessibilityAccountData::AddCaptionPropertyCallback(
const sptr<IAccessibleAbilityManagerCaptionObserver>& callback)
{
(void)callback;
}
void AccessibilityAccountData::RemoveCaptionPropertyCallback(const wptr<IRemoteObject>& callback)
{
(void)callback;
HILOG_DEBUG("start.");
}
// add AccessibilityInteractionConnection
void AccessibilityAccountData::AddAccessibilityWindowConnection(
const int32_t windowId, const sptr<AccessibilityWindowConnection>& interactionConnection)
{
HILOG_DEBUG("Mock: AddAccessibilityWindowConnection windowId(%{public}d)", windowId);
operatorManager_.AddAccessibilityWindowConnection(windowId, interactionConnection);
}
// remove AccessibilityWindowConnection
void AccessibilityAccountData::RemoveAccessibilityWindowConnection(const int32_t windowId)
{
HILOG_DEBUG("Mock: RemoveAccessibilityWindowConnection windowId(%{public}d)", windowId);
operatorManager_.RemoveAccessibilityWindowConnection(windowId);
}
void AccessibilityAccountData::AddConnectingA11yAbility(const std::string &uri,
const sptr<AccessibleAbilityConnection> &connection)
{
auto abilityManager = GetAbilityManager();
if (abilityManager) {
abilityManager->AddConnectingA11yAbility(uri, connection);
}
}
void AccessibilityAccountData::RemoveConnectingA11yAbility(const std::string &uri)
{
auto abilityManager = GetAbilityManager();
if (abilityManager) {
abilityManager->RemoveConnectingA11yAbility(uri);
}
}
// For UT
void AccessibilityAccountData::AddEnabledAbility(const std::string& bundleName)
{
auto abilityManager = GetAbilityManager();
if (abilityManager) {
abilityManager->AddEnabledAbility(bundleName);
}
}
RetError AccessibilityAccountData::RemoveEnabledAbility(const std::string &name)
{
auto abilityManager = GetAbilityManager();
if (abilityManager) {
return abilityManager->RemoveEnabledAbility(name);
}
return RET_ERR_NOT_ENABLED;
}
// For UT
void AccessibilityAccountData::AddInstalledAbility(AccessibilityAbilityInfo& abilityInfo)
{
(void)abilityInfo;
}
void AccessibilityAccountData::RemoveInstalledAbility(const std::string &bundleName)
{
(void)bundleName;
}
void AccessibilityAccountData::ClearInstalledAbility()
{}
const sptr<AccessibleAbilityConnection> AccessibilityAccountData::GetAccessibleAbilityConnection(
const std::string &elementName)
{
(void)elementName;
return nullptr;
}
const sptr<AccessibilityWindowConnection> AccessibilityAccountData::GetAccessibilityWindowConnection(
const int32_t windowId)
{
HILOG_DEBUG("Mock: GetAccessibilityWindowConnection windowId(%{public}d)", windowId);
return operatorManager_.GetAccessibilityWindowConnection(windowId);
}
const std::map<std::string, sptr<AccessibleAbilityConnection>> AccessibilityAccountData::GetConnectedA11yAbilities()
{
auto abilityManager = GetAbilityManager();
if (abilityManager) {
return abilityManager->GetConnectedA11yAbilities();
}
return {};
}
const std::map<int32_t, sptr<AccessibilityWindowConnection>> AccessibilityAccountData::GetAsacConnections()
{
HILOG_DEBUG("Mock: GetAsacConnections start");
return operatorManager_.GetAsacConnections();
}
const CaptionPropertyCallbacks AccessibilityAccountData::GetCaptionPropertyCallbacks()
{
HILOG_DEBUG("GetCaptionPropertyCallbacks start");
return captionPropertyCallbacks_;
}
sptr<AccessibleAbilityConnection> AccessibilityAccountData::GetConnectingA11yAbility(const std::string &uri)
{
auto abilityManager = GetAbilityManager();
if (abilityManager) {
return abilityManager->GetConnectingA11yAbility(uri);
}
return nullptr;
}
const std::vector<std::string>& AccessibilityAccountData::GetEnabledAbilities()
{
auto abilityManager = GetAbilityManager();
if (abilityManager) {
return abilityManager->GetEnabledAbilities();
}
static std::vector<std::string> emptyVector;
return emptyVector;
}
const std::vector<AccessibilityAbilityInfo> &AccessibilityAccountData::GetInstalledAbilities() const
{
auto abilityManager = GetAbilityManager();
if (abilityManager) {
return abilityManager->GetInstalledAbilities();
}
static std::vector<AccessibilityAbilityInfo> emptyVector;
return emptyVector;
}
void AccessibilityAccountData::GetAbilitiesByState(
AbilityStateType state, std::vector<AccessibilityAbilityInfo> &abilities)
{
(void)state;
(void)abilities;
}
void AccessibilityAccountData::UpdateAccountCapabilities()
{}
void AccessibilityAccountData::UpdateEventTouchGuideCapability()
{}
void AccessibilityAccountData::UpdateGesturesSimulationCapability()
{}
void AccessibilityAccountData::UpdateFilteringKeyEventsCapability()
{
isFilteringKeyEvents_ = false;
}
void AccessibilityAccountData::UpdateMagnificationCapability()
{
isScreenMagnification_ = false;
}
void AccessibilityAccountData::UpdateEnableAbilityListsState()
{
return;
}
RetError AccessibilityAccountData::EnableAbility(const std::string &name, const uint32_t capabilities)
{
auto abilityManager = GetAbilityManager();
if (abilityManager) {
return abilityManager->EnableAbility(name, capabilities);
}
return RET_ERR_INVALID_PARAM;
}
bool AccessibilityAccountData::GetInstalledAbilitiesFromBMS()
{
HILOG_DEBUG("start.");
return true;
}
void AccessibilityAccountData::SetScreenReaderState(const std::string &name, const std::string &state)
{
HILOG_DEBUG("start.");
(void)name;
(void)state;
}
bool AccessibilityAccountData::GetDefaultUserScreenReaderState()
{
HILOG_DEBUG("start.");
return true;
}
bool AccessibilityAccountData::GetScreenReaderState()
{
HILOG_DEBUG("start.");
return true;
}
void AccessibilityAccountData::Init()
{
HILOG_DEBUG("start.");
if (!config_) {
config_ = std::make_shared<AccessibilitySettingsConfig>(id_);
}
auto abilityManager = GetAbilityManager();
if (abilityManager) {
abilityManager->SetConfig(config_);
}
}
void AccessibilityAccountData::AddEnableAbilityListsObserver(
const sptr<IAccessibilityEnableAbilityListsObserver>& observer)
{
HILOG_DEBUG("start.");
(void)observer;
}
void AccessibilityAccountData::RemoveEnableAbilityListsObserver(const wptr<IRemoteObject>& observer)
{
(void)observer;
}
void AccessibilityAccountData::AddConfigCallback(
const sptr<IAccessibleAbilityManagerConfigObserver>& callback)
{
HILOG_DEBUG("AddConfigCallback start");
configCallbacks_.push_back(callback);
}
const std::vector<sptr<IAccessibleAbilityManagerConfigObserver>> AccessibilityAccountData::GetConfigCallbacks()
{
HILOG_DEBUG("GetConfigCallbacks start");
return configCallbacks_;
}
void AccessibilityAccountData::SetConfigCallbacks(std::vector<sptr<IAccessibleAbilityManagerConfigObserver>>& observer)
{
HILOG_DEBUG("SetConfigCallbacks start");
configCallbacks_ = observer;
}
void AccessibilityAccountData::RemoveConfigCallback(const wptr<IRemoteObject>& callback)
{
HILOG_DEBUG("RemoveConfigCallback start");
for (auto iter = configCallbacks_.begin(); iter != configCallbacks_.end(); iter++) {
if ((*iter)->AsObject() == callback) {
configCallbacks_.erase(iter);
break;
}
}
}
std::shared_ptr<AccessibilitySettingsConfig> AccessibilityAccountData::GetConfig()
{
HILOG_DEBUG("GetConfig start");
return config_;
}
void AccessibilityAccountData::GetImportantEnabledAbilities(
std::map<std::string, uint32_t> &importantEnabledAbilities) const
{
HILOG_DEBUG("GetImportantEnabledAbilities start");
(void)importantEnabledAbilities;
}
void AccessibilityAccountData::UpdateImportantEnabledAbilities(
std::map<std::string, uint32_t> &importantEnabledAbilities)
{
HILOG_DEBUG("UpdateImportantEnabledAbilities start");
(void)importantEnabledAbilities;
}
uint32_t AccessibilityAccountData::GetInputFilterFlag() const
{
HILOG_DEBUG("GetInputFilterFlag start");
return 0;
}
void AccessibilityAccountData::UpdateAbilities()
{
HILOG_DEBUG("UpdateAbilities start");
}
void AccessibilityAccountData::AddUITestClient(const sptr<IRemoteObject> &obj,
const std::string &bundleName, const std::string &abilityName)
{
(void)obj;
(void)bundleName;
(void)abilityName;
}
void AccessibilityAccountData::RemoveUITestClient(
sptr<AccessibleAbilityConnection> &connection, const std::string &bundleName)
{
(void)connection;
(void)bundleName;
}
void AccessibilityAccountData::SetAbilityAutoStartState(const std::string &name, const bool state)
{
(void)name;
(void)state;
}
bool AccessibilityAccountData::GetAbilityAutoStartState(const std::string &key)
{
(void)key;
return true;
}
void AccessibilityAccountData::GetConfigValueAtoHos(ConfigValueAtoHosUpdate &value)
{
(void)value;
}
void AccessibilityAccountData::DelAutoStartPrefKeyInRemovePkg(const std::string &bundleName)
{
(void)bundleName;
}
void AccessibilityAccountData::UpdateAutoStartEnabledAbilities()
{
}
sptr<AccessibilityAccountData> AccessibilityAccountDataMap::AddAccountData(
int32_t accountId)
{
auto iter = accountDataMap_.find(accountId);
if (iter != accountDataMap_.end()) {
HILOG_DEBUG("accountId is existed");
return iter->second;
}
sptr<AccessibilityAccountData> accountData = new(std::nothrow) AccessibilityAccountData(accountId);
if (accountData == nullptr) {
return nullptr;
}
accountData->Init();
accountDataMap_[accountId] = accountData;
return accountData;
}
sptr<AccessibilityAccountData> AccessibilityAccountDataMap::GetCurrentAccountData(
int32_t accountId)
{
auto iter = accountDataMap_.find(accountId);
if (iter != accountDataMap_.end()) {
return iter->second;
}
sptr<AccessibilityAccountData> accountData = new(std::nothrow) AccessibilityAccountData(accountId);
if (!accountData) {
return nullptr;
}
accountDataMap_[accountId] = accountData;
return accountData;
}
sptr<AccessibilityAccountData> AccessibilityAccountDataMap::GetAccountData(
int32_t accountId)
{
auto iter = accountDataMap_.find(accountId);
if (iter != accountDataMap_.end()) {
return iter->second;
}
return nullptr;
}
sptr<AccessibilityAccountData> AccessibilityAccountDataMap::RemoveAccountData(
int32_t accountId)
{
sptr<AccessibilityAccountData> accountData = nullptr;
auto iter = accountDataMap_.find(accountId);
if (iter != accountDataMap_.end()) {
accountData = iter->second;
accountDataMap_.erase(iter);
}
return accountData;
}
void AccessibilityAccountDataMap::Clear()
{
accountDataMap_.clear();
}
AccountSA::OsAccountType AccessibilityAccountData::GetAccountType()
{
return AccountSA::OsAccountType::PRIVATE;
}
const sptr<AccessibleAbilityConnection> AccessibilityAccountData::GetWaitDisConnectAbility(
const std::string &elementName)
{
auto abilityManager = GetAbilityManager();
if (abilityManager) {
return abilityManager->GetWaitDisConnectAbility(elementName);
}
return nullptr;
}
void AccessibilityAccountData::AddWaitDisconnectAbility(sptr<AccessibleAbilityConnection>& connection)
{
HILOG_INFO();
auto abilityManager = GetAbilityManager();
if (abilityManager) {
abilityManager->AddWaitDisconnectAbility(connection);
}
}
void AccessibilityAccountData::RemoveWaitDisconnectAbility(const std::string &uri)
{
HILOG_INFO();
auto abilityManager = GetAbilityManager();
if (abilityManager) {
abilityManager->RemoveWaitDisconnectAbility(uri);
}
}
std::vector<uint32_t> AccessibilityAccountData::UpdateNeedEvents()
{
return needEvents_;
}
void AccessibilityAccountData::AddNeedEvent(std::string &name, std::vector<uint32_t> needEvents)
{
(void)name;
(void)needEvents;
}
void AccessibilityAccountData::RemoveNeedEvent(const std::string &name)
{
(void)name;
}
std::vector<uint32_t> AccessibilityAccountData::GetNeedEvents()
{
return needEvents_;
}
std::shared_ptr<AccessibilityAbilityManager> AccessibilityAccountData::GetAbilityManager() const
{
std::lock_guard<ffrt::mutex> lock(abilityManagerMutex_);
auto it = abilityManagerMap_.find(id_);
if (it != abilityManagerMap_.end()) {
return it->second;
}
return nullptr;
}
void AccountSubscriber::OnStateChanged(const AccountSA::OsAccountStateData &data)
{
(void)data;
}
ErrCode AccessibilityAccountData::RegisterElementOperatorByWindowId(const uint32_t tokenId, const int32_t windowId,
const sptr<IAccessibilityElementOperator>& elementOperator, bool isApp)
{
(void)tokenId;
(void)windowId;
(void)elementOperator;
(void)isApp;
return RET_OK;
}
ErrCode AccessibilityAccountData::RegisterElementOperatorByParameter(const RegistrationPara& parameter,
const sptr<IAccessibilityElementOperator>& elementOperator, const int32_t treeId,
const int64_t nodeId, const uint32_t tokenId, bool isApp)
{
(void)parameter;
(void)elementOperator;
(void)treeId;
(void)nodeId;
(void)tokenId;
(void)isApp;
return RET_OK;
}
ErrCode AccessibilityAccountData::DeregisterElementOperatorByWindowId(const int32_t windowId)
{
(void)windowId;
return RET_OK;
}
ErrCode AccessibilityAccountData::DeregisterElementOperatorByWindowIdAndTreeId(const int32_t windowId,
const int32_t treeId)
{
(void)windowId;
(void)treeId;
return RET_OK;
}
RetError AccessibilityAccountData::VerifyingToKenId(const uint32_t tokenId, const int32_t windowId,
const int64_t elementId)
{
(void)tokenId;
(void)windowId;
(void)elementId;
return RET_OK;
}
ElementOperatorManager& AccessibilityAccountData::GetOperatorManager()
{
static ElementOperatorManager mockOperatorManager;
return mockOperatorManager;
}
int32_t AccessibilityAccountData::ApplyTreeId()
{
static int32_t mockTreeId = 1;
return mockTreeId++;
}
void AccessibilityAccountData::RecycleTreeId(int32_t treeId)
{
(void)treeId;
}
void AccessibilityAccountData::InsertWindowIdEventPair(int32_t windowId, const AccessibilityEventInfo &event)
{
(void)windowId;
(void)event;
}
bool AccessibilityAccountData::CheckWindowIdEventExist(int32_t windowId)
{
(void)windowId;
return false;
}
AccessibilityEventInfoParcel AccessibilityAccountData::GetWindowFocusEvent(int32_t windowId)
{
(void)windowId;
AccessibilityEventInfo emptyEvent;
return AccessibilityEventInfoParcel(emptyEvent);
}
void AccessibilityAccountData::EraseWindowFocusEvent(int32_t windowId)
{
(void)windowId;
}
void AccessibilityAccountData::IsCheckWindowIdEventExist(const int32_t windowId)
{
(void)windowId;
}
} // namespace Accessibility
} // namespace OHOS
@@ -1,504 +0,0 @@
/*
* Copyright (C) 2025 Huawei Device Co., Ltd.
* 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 <gtest/gtest.h>
#include "accessibility_ability_info.h"
#include "accessibility_settings_config.h"
#include "accessible_ability_connection.h"
#define private public
#define protected public
#include "accessibility_ability_manager.h"
#include "accessible_ability_manager_service.h"
#undef private
#undef protected
#include "utils.h"
#include "mock_accessible_ability_connection.h"
#include "mock_accessibility_ability_info.h"
#include "mock_accessible_ability_manager_service_config_observer_proxy.h"
#include "mock_accessible_ability_manager_service_config_observer_stub.h"
using namespace testing;
using namespace testing::ext;
namespace OHOS {
namespace Accessibility {
namespace {
constexpr int32_t TEST_ACCOUNT_ID = 1;
constexpr char TEST_BUNDLE_NAME[] = "test.bundle";
constexpr char TEST_ABILITY_NAME[] = "TestAbility";
}
class AccessibilityAbilityManagerTest : public testing::Test {
public:
void SetUp() override
{
manager_ = std::make_shared<AccessibilityAbilityManager>(TEST_ACCOUNT_ID);
}
void TearDown() override
{
manager_.reset();
}
std::shared_ptr<AccessibilityAbilityManager> manager_;
};
HWTEST_F(AccessibilityAbilityManagerTest, SetConfig_Normal, TestSize.Level1)
{
auto config = std::make_shared<AccessibilitySettingsConfig>(TEST_ACCOUNT_ID);
manager_->SetConfig(config);
AccessibilityAbilityInitParams params;
params.bundleName = TEST_BUNDLE_NAME;
params.name = TEST_ABILITY_NAME;
params.staticCapabilities = CAPABILITY_RETRIEVE;
auto info = std::make_shared<AccessibilityAbilityInfo>(params);
manager_->AddInstalledAbility(*info);
std::string name = std::string(TEST_BUNDLE_NAME) + "/" + TEST_ABILITY_NAME;
auto ret = manager_->EnableAbility(name, CAPABILITY_RETRIEVE);
EXPECT_EQ(ret, RET_OK);
}
HWTEST_F(AccessibilityAbilityManagerTest, AddConnectedAbility, TestSize.Level1)
{
AccessibilityAbilityInitParams params;
params.bundleName = TEST_BUNDLE_NAME;
params.name = TEST_ABILITY_NAME;
auto info = std::make_shared<AccessibilityAbilityInfo>(params);
sptr<AccessibleAbilityConnection> conn = new MockAccessibleAbilityConnection(TEST_ACCOUNT_ID, 0, *info);
manager_->AddConnectedAbility(conn);
auto abilities = manager_->GetConnectedA11yAbilities();
std::string uri = Utils::GetUri(conn->GetElementName());
EXPECT_EQ(abilities.size(), 1);
EXPECT_EQ(abilities[uri], conn);
}
HWTEST_F(AccessibilityAbilityManagerTest, RemoveConnectedAbility, TestSize.Level1)
{
AccessibilityAbilityInitParams params;
params.bundleName = TEST_BUNDLE_NAME;
params.name = TEST_ABILITY_NAME;
auto info = std::make_shared<AccessibilityAbilityInfo>(params);
sptr<AccessibleAbilityConnection> conn = new MockAccessibleAbilityConnection(TEST_ACCOUNT_ID, 0, *info);
manager_->AddConnectedAbility(conn);
manager_->RemoveConnectedAbility(conn->GetElementName());
auto abilities = manager_->GetConnectedA11yAbilities();
EXPECT_EQ(abilities.size(), 0);
}
HWTEST_F(AccessibilityAbilityManagerTest, RemoveConnectingA11yAbility_Normal, TestSize.Level1)
{
AccessibilityAbilityInitParams params;
params.bundleName = TEST_BUNDLE_NAME;
params.name = TEST_ABILITY_NAME;
auto info = std::make_shared<AccessibilityAbilityInfo>(params);
sptr<AccessibleAbilityConnection> conn = new MockAccessibleAbilityConnection(TEST_ACCOUNT_ID, 0, *info);
std::string uri = Utils::GetUri(conn->GetElementName());
manager_->AddConnectingA11yAbility(uri, conn);
EXPECT_EQ(manager_->GetConnectingA11yAbility(uri), conn);
manager_->RemoveConnectingA11yAbility(uri);
EXPECT_EQ(manager_->GetConnectingA11yAbility(uri), nullptr);
}
HWTEST_F(AccessibilityAbilityManagerTest, WaitDisconnectAbility, TestSize.Level1)
{
AccessibilityAbilityInitParams params;
params.bundleName = TEST_BUNDLE_NAME;
params.name = TEST_ABILITY_NAME;
auto info = std::make_shared<AccessibilityAbilityInfo>(params);
sptr<AccessibleAbilityConnection> conn = new MockAccessibleAbilityConnection(TEST_ACCOUNT_ID, 0, *info);
std::string uri = Utils::GetUri(conn->GetElementName());
manager_->AddWaitDisconnectAbility(conn);
EXPECT_EQ(manager_->GetWaitDisConnectAbility(uri), nullptr);
manager_->RemoveWaitDisconnectAbility(uri);
EXPECT_EQ(manager_->GetWaitDisConnectAbility(uri), nullptr);
}
HWTEST_F(AccessibilityAbilityManagerTest, AddRemoveEnableAbilityListsObserver, TestSize.Level1)
{
sptr<AccessibilityEnableAbilityListsObserverStub> stub = new MockAccessibilityEnableAbilityListsObserverStub();
sptr<IAccessibilityEnableAbilityListsObserver> observer =
new MockAccessibilityEnableAbilityListsObserverProxy(stub);
manager_->AddEnableAbilityListsObserver(observer);
manager_->RemoveEnableAbilityListsObserver(observer->AsObject());
SUCCEED();
}
HWTEST_F(AccessibilityAbilityManagerTest, AddConnectingA11yAbility_Normal, TestSize.Level1)
{
AccessibilityAbilityInitParams params;
params.bundleName = TEST_BUNDLE_NAME;
params.name = TEST_ABILITY_NAME;
auto info = std::make_shared<AccessibilityAbilityInfo>(params);
sptr<AccessibleAbilityConnection> conn = new MockAccessibleAbilityConnection(TEST_ACCOUNT_ID, 0, *info);
std::string uri = Utils::GetUri(conn->GetElementName());
manager_->AddConnectingA11yAbility(uri, conn);
EXPECT_EQ(manager_->GetConnectingA11yAbility(uri), conn);
}
HWTEST_F(AccessibilityAbilityManagerTest, GetConnectingAbilitiesCount, TestSize.Level1)
{
EXPECT_EQ(manager_->GetConnectingAbilitiesCount(), 0);
AccessibilityAbilityInitParams params;
params.bundleName = TEST_BUNDLE_NAME;
params.name = TEST_ABILITY_NAME;
auto info = std::make_shared<AccessibilityAbilityInfo>(params);
sptr<AccessibleAbilityConnection> conn = new MockAccessibleAbilityConnection(TEST_ACCOUNT_ID, 0, *info);
std::string uri = Utils::GetUri(conn->GetElementName());
manager_->AddConnectingA11yAbility(uri, conn);
EXPECT_EQ(manager_->GetConnectingAbilitiesCount(), 1);
}
HWTEST_F(AccessibilityAbilityManagerTest, AddEnabledAbility, TestSize.Level1)
{
std::string name = std::string(TEST_BUNDLE_NAME) + "/" + TEST_ABILITY_NAME;
manager_->AddEnabledAbility(name);
manager_->AddEnabledAbility(name);
auto enabled = manager_->GetEnabledAbilities();
EXPECT_EQ(enabled.size(), 1);
EXPECT_EQ(enabled[0], name);
}
HWTEST_F(AccessibilityAbilityManagerTest, RemoveEnabledAbility, TestSize.Level1)
{
std::string name = std::string(TEST_BUNDLE_NAME) + "/" + TEST_ABILITY_NAME;
auto ret = manager_->RemoveEnabledAbility(name);
EXPECT_EQ(ret, RET_ERR_NOT_ENABLED);
manager_->AddEnabledAbility(name);
ret = manager_->RemoveEnabledAbility(name);
EXPECT_EQ(ret, RET_OK);
EXPECT_TRUE(manager_->GetEnabledAbilities().empty());
}
HWTEST_F(AccessibilityAbilityManagerTest, AddInstalledAbility, TestSize.Level1)
{
AccessibilityAbilityInitParams params;
params.bundleName = TEST_BUNDLE_NAME;
params.name = TEST_ABILITY_NAME;
auto info = std::make_shared<AccessibilityAbilityInfo>(params);
manager_->AddInstalledAbility(*info);
auto installed = manager_->GetInstalledAbilities();
EXPECT_EQ(installed.size(), 1);
EXPECT_EQ(installed[0].GetName(), TEST_ABILITY_NAME);
}
HWTEST_F(AccessibilityAbilityManagerTest, GetAbilitiesByState, TestSize.Level1)
{
std::vector<AccessibilityAbilityInfo> abilities;
manager_->GetAbilitiesByState(AbilityStateType::ABILITY_STATE_ENABLE, abilities);
EXPECT_TRUE(abilities.empty());
AccessibilityAbilityInitParams params;
params.bundleName = TEST_BUNDLE_NAME;
params.name = TEST_ABILITY_NAME;
params.staticCapabilities = CAPABILITY_RETRIEVE;
auto info = std::make_shared<AccessibilityAbilityInfo>(params);
manager_->AddInstalledAbility(*info);
sptr<AccessibleAbilityConnection> conn = new MockAccessibleAbilityConnection(TEST_ACCOUNT_ID, 0, *info);
manager_->AddConnectedAbility(conn);
abilities.clear();
manager_->GetAbilitiesByState(AbilityStateType::ABILITY_STATE_ENABLE, abilities);
EXPECT_FALSE(abilities.empty());
EXPECT_EQ(abilities[0].GetName(), TEST_ABILITY_NAME);
}
HWTEST_F(AccessibilityAbilityManagerTest, GetDisableAbilities, TestSize.Level1)
{
std::vector<AccessibilityAbilityInfo> abilities;
manager_->GetDisableAbilities(abilities);
EXPECT_TRUE(abilities.empty());
}
HWTEST_F(AccessibilityAbilityManagerTest, GetInstalledAbilitiesFromBMS, TestSize.Level1)
{
EXPECT_TRUE(manager_->GetInstalledAbilitiesFromBMS());
}
HWTEST_F(AccessibilityAbilityManagerTest, EnableAbility, TestSize.Level1)
{
std::string name = std::string(TEST_BUNDLE_NAME) + "/" + TEST_ABILITY_NAME;
auto ret = manager_->EnableAbility(name, CAPABILITY_RETRIEVE);
EXPECT_EQ(ret, RET_ERR_NOT_INSTALLED);
AccessibilityAbilityInitParams params;
params.bundleName = TEST_BUNDLE_NAME;
params.name = TEST_ABILITY_NAME;
params.staticCapabilities = 0;
auto info = std::make_shared<AccessibilityAbilityInfo>(params);
manager_->AddInstalledAbility(*info);
ret = manager_->EnableAbility(name, CAPABILITY_RETRIEVE);
EXPECT_EQ(ret, RET_ERR_NO_CAPABILITY);
manager_->RemoveAbility(TEST_BUNDLE_NAME);
params.staticCapabilities = CAPABILITY_RETRIEVE;
auto info2 = std::make_shared<AccessibilityAbilityInfo>(params);
manager_->AddInstalledAbility(*info2);
ret = manager_->EnableAbility(name, CAPABILITY_RETRIEVE);
EXPECT_EQ(ret, RET_OK);
auto enabled = manager_->GetEnabledAbilities();
EXPECT_FALSE(enabled.empty());
}
HWTEST_F(AccessibilityAbilityManagerTest, UpdateEnableAbilityListsState, TestSize.Level1)
{
manager_->UpdateEnableAbilityListsState();
SUCCEED();
}
HWTEST_F(AccessibilityAbilityManagerTest, UpdateInstallAbilityListsState, TestSize.Level1)
{
manager_->UpdateInstallAbilityListsState();
SUCCEED();
}
HWTEST_F(AccessibilityAbilityManagerTest, UpdateAbilities, TestSize.Level1)
{
manager_->UpdateAbilities();
SUCCEED();
}
HWTEST_F(AccessibilityAbilityManagerTest, RemoveAbility, TestSize.Level1)
{
EXPECT_FALSE(manager_->RemoveAbility(TEST_BUNDLE_NAME));
AccessibilityAbilityInitParams params;
params.bundleName = TEST_BUNDLE_NAME;
params.name = TEST_ABILITY_NAME;
auto info = std::make_shared<AccessibilityAbilityInfo>(params);
manager_->AddInstalledAbility(*info);
manager_->AddEnabledAbility(Utils::GetUri(params.bundleName, params.name));
EXPECT_TRUE(manager_->RemoveAbility(TEST_BUNDLE_NAME) || !manager_->RemoveAbility(TEST_BUNDLE_NAME));
}
HWTEST_F(AccessibilityAbilityManagerTest, AddAbility, TestSize.Level1)
{
manager_->AddAbility(TEST_BUNDLE_NAME);
SUCCEED();
}
HWTEST_F(AccessibilityAbilityManagerTest, ChangeAbility, TestSize.Level1)
{
manager_->ChangeAbility(TEST_BUNDLE_NAME);
SUCCEED();
}
HWTEST_F(AccessibilityAbilityManagerTest, AddRemoveUITestClient, TestSize.Level1)
{
manager_->AddUITestClient(nullptr, TEST_BUNDLE_NAME, TEST_ABILITY_NAME);
sptr<AccessibleAbilityConnection> conn = nullptr;
manager_->RemoveUITestClient(conn, TEST_BUNDLE_NAME);
SUCCEED();
}
HWTEST_F(AccessibilityAbilityManagerTest, SetGetAbilityAutoStartState, TestSize.Level1)
{
std::string name = std::string(TEST_BUNDLE_NAME) + "/" + TEST_ABILITY_NAME;
manager_->AddEnabledAbility(name);
const auto &enabledAbilities = manager_->GetEnabledAbilities();
bool isEnabled = std::find(enabledAbilities.begin(), enabledAbilities.end(), name) != enabledAbilities.end();
EXPECT_TRUE(isEnabled);
}
HWTEST_F(AccessibilityAbilityManagerTest, DelAutoStartPrefKeyInRemovePkg, TestSize.Level1)
{
auto config = std::make_shared<AccessibilitySettingsConfig>(TEST_ACCOUNT_ID);
EXPECT_NE(config, nullptr);
config->Init();
manager_->SetConfig(config);
AccessibilityAbilityInitParams params;
params.bundleName = TEST_BUNDLE_NAME;
params.name = TEST_ABILITY_NAME;
params.staticCapabilities = CAPABILITY_RETRIEVE;
auto info = std::make_shared<AccessibilityAbilityInfo>(params);
manager_->AddInstalledAbility(*info);
std::string uri = Utils::GetUri(TEST_BUNDLE_NAME, TEST_ABILITY_NAME);
auto ret = manager_->EnableAbility(uri, CAPABILITY_RETRIEVE);
EXPECT_EQ(ret, RET_OK);
manager_->SetAbilityAutoStartState(uri, true);
const auto &enabledAbilities = manager_->GetEnabledAbilities();
bool isAdded = std::find(enabledAbilities.begin(), enabledAbilities.end(), uri) != enabledAbilities.end();
ASSERT_TRUE(isAdded) << "Failed to add auto-start ability (URI: " << uri << ")";
auto services = config->GetEnabledAccessibilityServices();
EXPECT_TRUE(std::find(services.begin(), services.end(), uri) != services.end());
bool enabled = manager_->GetAbilityAutoStartState(uri);
EXPECT_TRUE(enabled);
manager_->DelAutoStartPrefKeyInRemovePkg(TEST_BUNDLE_NAME);
bool isEnabled = manager_->GetAbilityAutoStartState(uri);
EXPECT_FALSE(isEnabled) << "Auto-start preference not removed after DelAutoStartPrefKeyInRemovePkg call (URI: " <<
uri << ")";
}
HWTEST_F(AccessibilityAbilityManagerTest, ScreenReaderState, TestSize.Level1)
{
std::string name = std::string(TEST_BUNDLE_NAME) + "/" + TEST_ABILITY_NAME;
EXPECT_FALSE(manager_->GetScreenReaderState());
manager_->TryToSetScreenReaderState(name, true);
manager_->SetScreenReaderState(true);
EXPECT_TRUE(manager_->GetScreenReaderState());
manager_->SetScreenReaderState(false);
EXPECT_FALSE(manager_->GetScreenReaderState());
}
HWTEST_F(AccessibilityAbilityManagerTest, NeedEvent, TestSize.Level1)
{
std::string name = std::string(TEST_BUNDLE_NAME) + "/" + TEST_ABILITY_NAME;
std::vector<uint32_t> events = { 1, 2 };
manager_->AddNeedEvent(name, events);
manager_->RemoveNeedEvent(name);
auto updated = manager_->UpdateNeedEvents();
auto got = manager_->GetNeedEvents();
EXPECT_TRUE(updated.empty());
EXPECT_TRUE(got.empty());
}
HWTEST_F(AccessibilityAbilityManagerTest, OnAccountSwitched, TestSize.Level1)
{
manager_->OnAccountSwitched();
SUCCEED();
}
HWTEST_F(AccessibilityAbilityManagerTest, IsExistCapability, TestSize.Level1)
{
AccessibilityAbilityInitParams params;
params.bundleName = TEST_BUNDLE_NAME;
params.name = TEST_ABILITY_NAME;
auto abilityInfo = std::make_shared<AccessibilityAbilityInfo>(params);
abilityInfo->SetCapabilityValues(CAPABILITY_RETRIEVE | CAPABILITY_TOUCH_GUIDE | CAPABILITY_GESTURE |
CAPABILITY_KEY_EVENT_OBSERVER);
sptr<AccessibleAbilityConnection> conn = new MockAccessibleAbilityConnection(TEST_ACCOUNT_ID, 0, *abilityInfo);
manager_->AddConnectedAbility(conn);
EXPECT_TRUE(manager_->IsExistCapability(CAPABILITY_RETRIEVE));
EXPECT_FALSE(manager_->IsExistCapability(CAPABILITY_ZOOM));
}
HWTEST_F(AccessibilityAbilityManagerTest, ImportantEnabledAbilities, TestSize.Level1)
{
std::map<std::string, uint32_t> abilities;
manager_->GetImportantEnabledAbilities(abilities);
EXPECT_TRUE(abilities.empty());
manager_->UpdateImportantEnabledAbilities(abilities);
manager_->UpdateAutoStartEnabledAbilities();
SUCCEED();
}
HWTEST_F(AccessibilityAbilityManagerTest, AccessibilityAbility_AddGetRemove, TestSize.Level1)
{
AccessibilityAbilityInitParams params;
params.bundleName = TEST_BUNDLE_NAME;
params.name = TEST_ABILITY_NAME;
auto info = std::make_shared<AccessibilityAbilityInfo>(params);
sptr<AccessibleAbilityConnection> conn = new MockAccessibleAbilityConnection(TEST_ACCOUNT_ID, 0, *info);
AccessibilityAbilityManager::AccessibilityAbility ability;
std::string uri = Utils::GetUri(conn->GetElementName());
// Test AddAccessibilityAbility
ability.AddAccessibilityAbility(uri, conn);
EXPECT_EQ(ability.GetSize(), 1) << "Failed to add ability";
// Test GetAccessibilityAbilityByUri
auto getConn = ability.GetAccessibilityAbilityByUri(uri);
ASSERT_NE(getConn, nullptr) << "Failed to retrieve ability by URI";
EXPECT_EQ(getConn, conn) << "Retrieved connection mismatch";
// Test GetAccessibilityAbilityByName - Use full URI instead of just ability name
getConn = ability.GetAccessibilityAbilityByName(uri);
ASSERT_NE(getConn, nullptr) << "Failed to retrieve ability by name";
EXPECT_EQ(getConn, conn) << "Retrieved connection mismatch";
// Test GetAccessibilityAbilitiesMap
std::map<std::string, sptr<AccessibleAbilityConnection>> connMap;
ability.GetAccessibilityAbilitiesMap(connMap);
EXPECT_EQ(connMap.size(), 1) << "Connection map size mismatch";
EXPECT_EQ(connMap[uri], conn) << "Connection map entry mismatch";
// Test GetAccessibilityAbilities
std::vector<sptr<AccessibleAbilityConnection>> connList;
ability.GetAccessibilityAbilities(connList);
EXPECT_EQ(connList.size(), 1) << "Connection list size mismatch";
EXPECT_EQ(connList[0], conn) << "Connection list entry mismatch";
// Test GetAbilitiesInfo
std::vector<AccessibilityAbilityInfo> abilitiesInfo;
ability.GetAbilitiesInfo(abilitiesInfo);
EXPECT_EQ(abilitiesInfo.size(), 1) << "Ability info list size mismatch";
EXPECT_EQ(abilitiesInfo[0].GetName(), TEST_ABILITY_NAME) << "Ability name mismatch";
// Test IsExistCapability
bool hasCapability = ability.IsExistCapability(CAPABILITY_RETRIEVE);
EXPECT_FALSE(hasCapability) << "Unexpected capability detected";
// Test RemoveAccessibilityAbilityByUri
ability.RemoveAccessibilityAbilityByUri(uri);
EXPECT_EQ(ability.GetSize(), 0) << "Failed to remove ability by URI";
}
HWTEST_F(AccessibilityAbilityManagerTest, AccessibilityAbility_DisableAndSize, TestSize.Level1)
{
AccessibilityAbilityInitParams params;
params.bundleName = TEST_BUNDLE_NAME;
params.name = TEST_ABILITY_NAME;
auto info = std::make_shared<AccessibilityAbilityInfo>(params);
sptr<AccessibleAbilityConnection> conn = new MockAccessibleAbilityConnection(TEST_ACCOUNT_ID, 0, *info);
ASSERT_NE(conn, nullptr) << "Failed to create mock connection";
AccessibilityAbilityManager::AccessibilityAbility ability;
std::string uri = Utils::GetUri(conn->GetElementName());
std::string fullAbilityName = params.bundleName + "/" + params.name;
EXPECT_FALSE(uri.empty()) << "URI generation failed for connection";
// Add ability
ability.AddAccessibilityAbility(uri, conn);
EXPECT_EQ(ability.GetSize(), 1) << "Failed to add ability";
// Test GetAccessibilityAbilityByUri
auto getConn = ability.GetAccessibilityAbilityByUri(uri);
ASSERT_NE(getConn, nullptr) << "Failed to retrieve ability by URI";
EXPECT_EQ(getConn, conn) << "Retrieved connection mismatch";
// Test GetAccessibilityAbilityByName - Use full URI instead of just ability name
getConn = ability.GetAccessibilityAbilityByName(uri);
ASSERT_NE(getConn, nullptr) << "Failed to retrieve ability by name";
EXPECT_EQ(getConn, conn) << "Retrieved connection mismatch";
// Test GetAccessibilityAbilitiesMap
std::map<std::string, sptr<AccessibleAbilityConnection>> connMap;
ability.GetAccessibilityAbilitiesMap(connMap);
EXPECT_EQ(connMap.size(), 1) << "Connection map size mismatch";
EXPECT_EQ(connMap[uri], conn) << "Connection map entry mismatch";
// Test GetAccessibilityAbilities
std::vector<sptr<AccessibleAbilityConnection>> connList;
ability.GetAccessibilityAbilities(connList);
EXPECT_EQ(connList.size(), 1) << "Connection list size mismatch";
EXPECT_EQ(connList[0], conn) << "Connection list entry mismatch";
// Test GetAbilitiesInfo
std::vector<AccessibilityAbilityInfo> abilitiesInfo;
ability.GetAbilitiesInfo(abilitiesInfo);
EXPECT_EQ(abilitiesInfo.size(), 1) << "Ability info list size mismatch";
EXPECT_EQ(abilitiesInfo[0].GetName(), TEST_ABILITY_NAME) << "Ability name mismatch";
// Test IsExistCapability
bool hasCapability = ability.IsExistCapability(CAPABILITY_RETRIEVE);
EXPECT_FALSE(hasCapability) << "Unexpected capability detected";
// Test RemoveAccessibilityAbilityByUri
ability.RemoveAccessibilityAbilityByUri(uri);
EXPECT_EQ(ability.GetSize(), 0) << "Failed to remove ability by URI";
}
} // namespace Accessibility
} // namespace OHOS
@@ -1,531 +0,0 @@
/*
* Copyright (C) 2025 Huawei Device Co., Ltd.
* 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 <gtest/gtest.h>
#include <gmock/gmock.h>
#include "accessibility_element_info.h"
#include "accessibility_window_connection.h"
#include "iaccessibility_element_operator.h"
#include "iaccessibility_element_operator_callback.h"
#define private public
#define protected public
#include "element_operator_manager.h"
#undef private
#undef protected
#include "mock_element_operator_manager.h"
using namespace testing;
using namespace testing::ext;
namespace OHOS {
namespace Accessibility {
namespace {
constexpr int32_t TEST_WINDOW_ID = 1;
constexpr int32_t TEST_TREE_ID = 2;
constexpr int32_t TEST_ACCOUNT_ID = 100;
constexpr int64_t TEST_ELEMENT_ID = 1000;
constexpr int32_t TEST_TOKEN_ID = 12345;
constexpr int32_t TEST_REQUEST_ID = 999;
}
class ElementOperatorManagerTest : public testing::Test {
public:
void SetUp() override
{
manager_ = std::make_unique<ElementOperatorManager>();
mockOperator_ = new MockElementOperatorManagerElementOperator();
mockConnection_ = CreateMockConnection(TEST_WINDOW_ID, TEST_ACCOUNT_ID);
}
void TearDown() override
{
manager_.reset();
mockConnection_ = nullptr;
mockOperator_ = nullptr;
}
protected:
std::unique_ptr<ElementOperatorManager> manager_;
sptr<AccessibilityWindowConnection> mockConnection_;
sptr<MockElementOperatorManagerElementOperator> mockOperator_;
sptr<AccessibilityWindowConnection> CreateMockConnection(int32_t windowId, int32_t accountId)
{
auto mockOp = new MockElementOperatorManagerElementOperator();
return new MockElementOperatorManagerWindowConnection(windowId, mockOp, accountId);
}
};
/**
* @tc.number: ElementOperatorManager_AddAccessibilityWindowConnection_001
* @tc.name: AddAccessibilityWindowConnection
* @tc.desc: Test adding accessibility window connection successfully.
*/
HWTEST_F(ElementOperatorManagerTest, AddAccessibilityWindowConnection_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_AddAccessibilityWindowConnection_001 start";
manager_->AddAccessibilityWindowConnection(TEST_WINDOW_ID, mockConnection_);
auto connection = manager_->GetAccessibilityWindowConnection(TEST_WINDOW_ID);
EXPECT_EQ(connection, mockConnection_);
GTEST_LOG_(INFO) << "ElementOperatorManager_AddAccessibilityWindowConnection_001 end";
}
/**
* @tc.number: ElementOperatorManager_RemoveAccessibilityWindowConnection_001
* @tc.name: RemoveAccessibilityWindowConnection
* @tc.desc: Test removing accessibility window connection successfully.
*/
HWTEST_F(ElementOperatorManagerTest, RemoveAccessibilityWindowConnection_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_RemoveAccessibilityWindowConnection_001 start";
manager_->AddAccessibilityWindowConnection(TEST_WINDOW_ID, mockConnection_);
EXPECT_EQ(manager_->GetAccessibilityWindowConnection(TEST_WINDOW_ID), mockConnection_);
manager_->RemoveAccessibilityWindowConnection(TEST_WINDOW_ID);
EXPECT_EQ(manager_->GetAccessibilityWindowConnection(TEST_WINDOW_ID), nullptr);
GTEST_LOG_(INFO) << "ElementOperatorManager_RemoveAccessibilityWindowConnection_001 end";
}
/**
* @tc.number: ElementOperatorManager_GetAccessibilityWindowConnection_001
* @tc.name: GetAccessibilityWindowConnection
* @tc.desc: Test getting accessibility window connection successfully.
*/
HWTEST_F(ElementOperatorManagerTest, GetAccessibilityWindowConnection_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_GetAccessibilityWindowConnection_001 start";
auto connection = manager_->GetAccessibilityWindowConnection(TEST_WINDOW_ID);
EXPECT_EQ(connection, nullptr);
manager_->AddAccessibilityWindowConnection(TEST_WINDOW_ID, mockConnection_);
connection = manager_->GetAccessibilityWindowConnection(TEST_WINDOW_ID);
EXPECT_EQ(connection, mockConnection_);
GTEST_LOG_(INFO) << "ElementOperatorManager_GetAccessibilityWindowConnection_001 end";
}
/**
* @tc.number: ElementOperatorManager_GetRootParentId_001
* @tc.name: GetRootParentId
* @tc.desc: Test getting root parent ID successfully.
*/
HWTEST_F(ElementOperatorManagerTest, GetRootParentId_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_GetRootParentId_001 start";
int64_t parentId = 0;
ErrCode result = manager_->GetRootParentId(TEST_WINDOW_ID, TEST_TREE_ID, parentId);
EXPECT_EQ(result, RET_ERR_NO_CONNECTION);
manager_->AddAccessibilityWindowConnection(TEST_WINDOW_ID, mockConnection_);
mockConnection_->SetRootParentId(TEST_TREE_ID, 1000);
result = manager_->GetRootParentId(TEST_WINDOW_ID, TEST_TREE_ID, parentId);
EXPECT_EQ(result, RET_OK);
EXPECT_EQ(parentId, 1000);
GTEST_LOG_(INFO) << "ElementOperatorManager_GetRootParentId_001 end";
}
/**
* @tc.number: ElementOperatorManager_ClearFocus_001
* @tc.name: ClearFocus
* @tc.desc: Test clearing focus successfully.
*/
HWTEST_F(ElementOperatorManagerTest, ClearFocus_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_ClearFocus_001 start";
RetError result = manager_->ClearFocus(TEST_WINDOW_ID);
EXPECT_EQ(result, RET_ERR_NO_CONNECTION);
manager_->AddAccessibilityWindowConnection(TEST_WINDOW_ID, mockConnection_);
result = manager_->ClearFocus(TEST_WINDOW_ID);
EXPECT_EQ(result, RET_OK);
GTEST_LOG_(INFO) << "ElementOperatorManager_ClearFocus_001 end";
}
/**
* @tc.number: ElementOperatorManager_ClearFocus_002
* @tc.name: ClearFocus
* @tc.desc: Test clearing focus with no element operator.
*/
HWTEST_F(ElementOperatorManagerTest, ClearFocus_002, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_ClearFocus_002 start";
sptr<AccessibilityWindowConnection> nullConnection =
new MockElementOperatorManagerWindowConnection(TEST_WINDOW_ID, nullptr, TEST_ACCOUNT_ID);
manager_->AddAccessibilityWindowConnection(TEST_WINDOW_ID, nullConnection);
RetError result = manager_->ClearFocus(TEST_WINDOW_ID);
EXPECT_EQ(result, RET_ERR_NO_CONNECTION);
GTEST_LOG_(INFO) << "ElementOperatorManager_ClearFocus_002 end";
}
/**
* @tc.number: ElementOperatorManager_OutsideTouch_001
* @tc.name: OutsideTouch
* @tc.desc: Test outside touch functionality with valid connection.
*/
HWTEST_F(ElementOperatorManagerTest, OutsideTouch_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_OutsideTouch_001 start";
manager_->AddAccessibilityWindowConnection(TEST_WINDOW_ID, mockConnection_);
auto connection = manager_->GetAccessibilityWindowConnection(TEST_WINDOW_ID);
EXPECT_NE(connection, nullptr);
EXPECT_EQ(connection, mockConnection_);
EXPECT_NO_THROW(manager_->OutsideTouch(TEST_WINDOW_ID));
connection = manager_->GetAccessibilityWindowConnection(TEST_WINDOW_ID);
EXPECT_NE(connection, nullptr);
GTEST_LOG_(INFO) << "ElementOperatorManager_OutsideTouch_001 end";
}
/**
* @tc.number: ElementOperatorManager_OutsideTouch_002
* @tc.name: OutsideTouch
* @tc.desc: Test outside touch with no connection.
*/
HWTEST_F(ElementOperatorManagerTest, OutsideTouch_002, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_OutsideTouch_002 start";
auto connection = manager_->GetAccessibilityWindowConnection(TEST_WINDOW_ID);
EXPECT_EQ(connection, nullptr);
EXPECT_NO_THROW(manager_->OutsideTouch(TEST_WINDOW_ID));
connection = manager_->GetAccessibilityWindowConnection(TEST_WINDOW_ID);
EXPECT_EQ(connection, nullptr);
GTEST_LOG_(INFO) << "ElementOperatorManager_OutsideTouch_002 end";
}
/**
* @tc.number: ElementOperatorManager_OutsideTouch_003
* @tc.name: OutsideTouch
* @tc.desc: Test outside touch with null proxy.
*/
HWTEST_F(ElementOperatorManagerTest, OutsideTouch_003, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_OutsideTouch_003 start";
sptr<AccessibilityWindowConnection> nullProxyConnection =
new MockElementOperatorManagerWindowConnection(TEST_WINDOW_ID, nullptr, TEST_ACCOUNT_ID);
manager_->AddAccessibilityWindowConnection(TEST_WINDOW_ID, nullProxyConnection);
auto connection = manager_->GetAccessibilityWindowConnection(TEST_WINDOW_ID);
EXPECT_NE(connection, nullptr);
EXPECT_NO_THROW(manager_->OutsideTouch(TEST_WINDOW_ID));
GTEST_LOG_(INFO) << "ElementOperatorManager_OutsideTouch_003 end";
}
/**
* @tc.number: ElementOperatorManager_GetAsacConnections_001
* @tc.name: GetAsacConnections
* @tc.desc: Test getting all accessibility connections.
*/
HWTEST_F(ElementOperatorManagerTest, GetAsacConnections_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_GetAsacConnections_001 start";
const auto& connections = manager_->GetAsacConnections();
EXPECT_EQ(connections.size(), 0);
manager_->AddAccessibilityWindowConnection(TEST_WINDOW_ID, mockConnection_);
const auto& updatedConnections = manager_->GetAsacConnections();
EXPECT_EQ(updatedConnections.size(), 1);
EXPECT_EQ(updatedConnections.at(TEST_WINDOW_ID), mockConnection_);
GTEST_LOG_(INFO) << "ElementOperatorManager_GetAsacConnections_001 end";
}
/**
* @tc.number: ElementOperatorManager_ClearAllConnections_001
* @tc.name: ClearAllConnections
* @tc.desc: Test clearing all connections successfully.
*/
HWTEST_F(ElementOperatorManagerTest, ClearAllConnections_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_ClearAllConnections_001 start";
manager_->AddAccessibilityWindowConnection(TEST_WINDOW_ID, mockConnection_);
manager_->AddAccessibilityWindowConnection(TEST_WINDOW_ID + 1, mockConnection_);
EXPECT_EQ(manager_->GetAsacConnections().size(), 2);
manager_->ClearAllConnections();
EXPECT_EQ(manager_->GetAsacConnections().size(), 0);
GTEST_LOG_(INFO) << "ElementOperatorManager_ClearAllConnections_001 end";
}
/**
* @tc.number: ElementOperatorManager_GenerateRequestId_001
* @tc.name: GenerateRequestId
* @tc.desc: Test generating request ID successfully.
*/
HWTEST_F(ElementOperatorManagerTest, GenerateRequestId_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_GenerateRequestId_001 start";
int32_t requestId1 = manager_->GenerateRequestId();
int32_t requestId2 = manager_->GenerateRequestId();
EXPECT_NE(requestId1, requestId2);
EXPECT_GT(requestId1, 0);
EXPECT_GT(requestId2, 0);
GTEST_LOG_(INFO) << "ElementOperatorManager_GenerateRequestId_001 end";
}
/**
* @tc.number: ElementOperatorManager_GetTreeIdBySplitElementId_001
* @tc.name: GetTreeIdBySplitElementId
* @tc.desc: Test getting tree ID by split element ID.
*/
HWTEST_F(ElementOperatorManagerTest, GetTreeIdBySplitElementId_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_GetTreeIdBySplitElementId_001 start";
int64_t elementId = (static_cast<int64_t>(TEST_TREE_ID) << 40) | TEST_ELEMENT_ID;
int32_t treeId = ElementOperatorManager::GetTreeIdBySplitElementId(elementId);
EXPECT_EQ(treeId, TEST_TREE_ID);
GTEST_LOG_(INFO) << "ElementOperatorManager_GetTreeIdBySplitElementId_001 end";
}
/**
* @tc.number: ElementOperatorManager_DeleteConnectionAndDeathRecipient_001
* @tc.name: DeleteConnectionAndDeathRecipient
* @tc.desc: Test deleting connection and death recipient successfully.
*/
HWTEST_F(ElementOperatorManagerTest, DeleteConnectionAndDeathRecipient_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_DeleteConnectionAndDeathRecipient_001 start";
manager_->AddAccessibilityWindowConnection(TEST_WINDOW_ID, mockConnection_);
EXPECT_EQ(manager_->GetAccessibilityWindowConnection(TEST_WINDOW_ID), mockConnection_);
manager_->DeleteConnectionAndDeathRecipient(TEST_WINDOW_ID, mockConnection_);
EXPECT_EQ(manager_->GetAccessibilityWindowConnection(TEST_WINDOW_ID), nullptr);
GTEST_LOG_(INFO) << "ElementOperatorManager_DeleteConnectionAndDeathRecipient_001 end";
}
/**
* @tc.number: ElementOperatorManager_VerifyingToKenId_001
* @tc.name: VerifyingToKenId
* @tc.desc: Test verifying token ID successfully.
*/
HWTEST_F(ElementOperatorManagerTest, VerifyingToKenId_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_VerifyingToKenId_001 start";
RetError result = manager_->VerifyingToKenId(TEST_TOKEN_ID, TEST_WINDOW_ID, TEST_ELEMENT_ID);
EXPECT_NE(result, RET_OK);
GTEST_LOG_(INFO) << "ElementOperatorManager_VerifyingToKenId_001 end";
}
/**
* @tc.number: ElementOperatorManager_GetParentElementRecursively_001
* @tc.name: GetParentElementRecursively
* @tc.desc: Test getting parent element recursively.
*/
HWTEST_F(ElementOperatorManagerTest, GetParentElementRecursively_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_GetParentElementRecursively_001 start";
std::vector<AccessibilityElementInfo> infos;
bool result = manager_->GetParentElementRecursively(TEST_WINDOW_ID, TEST_ELEMENT_ID, infos);
EXPECT_FALSE(result);
GTEST_LOG_(INFO) << "ElementOperatorManager_GetParentElementRecursively_001 end";
}
/**
* @tc.number: ElementOperatorManager_SetElementOperatorDeathRecipient_001
* @tc.name: SetElementOperatorDeathRecipient
* @tc.desc: Test setting element operator death recipient successfully.
*/
HWTEST_F(ElementOperatorManagerTest, SetElementOperatorDeathRecipient_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_SetElementOperatorDeathRecipient_001 start";
sptr<IRemoteObject> remoteObject = mockOperator_->AsObject();
EXPECT_NO_THROW(manager_->SetElementOperatorDeathRecipient(TEST_WINDOW_ID, remoteObject, TEST_ACCOUNT_ID));
GTEST_LOG_(INFO) << "ElementOperatorManager_SetElementOperatorDeathRecipient_001 end";
}
/**
* @tc.number: ElementOperatorManager_SetElementOperatorDeathRecipient_002
* @tc.name: SetElementOperatorDeathRecipient
* @tc.desc: Test setting element operator death recipient with tree ID.
*/
HWTEST_F(ElementOperatorManagerTest, SetElementOperatorDeathRecipient_002, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_SetElementOperatorDeathRecipient_002 start";
sptr<IRemoteObject> remoteObject = mockOperator_->AsObject();
EXPECT_NO_THROW(manager_->SetElementOperatorDeathRecipient(TEST_WINDOW_ID, TEST_TREE_ID,
remoteObject, TEST_ACCOUNT_ID));
GTEST_LOG_(INFO) << "ElementOperatorManager_SetElementOperatorDeathRecipient_002 end";
}
/**
* @tc.number: ElementOperatorManager_RemoveElementOperatorDeathRecipient_001
* @tc.name: RemoveElementOperatorDeathRecipient
* @tc.desc: Test removing element operator death recipient successfully.
*/
HWTEST_F(ElementOperatorManagerTest, RemoveElementOperatorDeathRecipient_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_RemoveElementOperatorDeathRecipient_001 start";
sptr<IRemoteObject> remoteObject = mockOperator_->AsObject();
EXPECT_NO_THROW(manager_->SetElementOperatorDeathRecipient(TEST_WINDOW_ID, remoteObject, TEST_ACCOUNT_ID));
EXPECT_NO_THROW(manager_->RemoveElementOperatorDeathRecipient(TEST_WINDOW_ID, remoteObject));
GTEST_LOG_(INFO) << "ElementOperatorManager_RemoveElementOperatorDeathRecipient_001 end";
}
/**
* @tc.number: ElementOperatorManager_AddDeathRecipient_001
* @tc.name: AddDeathRecipient
* @tc.desc: Test adding death recipient successfully.
*/
HWTEST_F(ElementOperatorManagerTest, AddDeathRecipient_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_AddDeathRecipient_001 start";
sptr<IRemoteObject::DeathRecipient> deathRecipient =
new ElementOperatorManager::ElementOperatorDeathRecipient(TEST_WINDOW_ID, TEST_ACCOUNT_ID);
EXPECT_NO_THROW(manager_->AddDeathRecipient(TEST_WINDOW_ID, deathRecipient));
GTEST_LOG_(INFO) << "ElementOperatorManager_AddDeathRecipient_001 end";
}
/**
* @tc.number: ElementOperatorManager_AddDeathRecipient_002
* @tc.name: AddDeathRecipient
* @tc.desc: Test adding death recipient with tree ID successfully.
*/
HWTEST_F(ElementOperatorManagerTest, AddDeathRecipient_002, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_AddDeathRecipient_002 start";
sptr<IRemoteObject::DeathRecipient> deathRecipient =
new ElementOperatorManager::ElementOperatorDeathRecipient(TEST_WINDOW_ID, TEST_TREE_ID, TEST_ACCOUNT_ID);
EXPECT_NO_THROW(manager_->AddDeathRecipient(TEST_WINDOW_ID, TEST_TREE_ID, deathRecipient));
GTEST_LOG_(INFO) << "ElementOperatorManager_AddDeathRecipient_002 end";
}
/**
* @tc.number: ElementOperatorManager_RemoveDeathRecipient_001
* @tc.name: RemoveDeathRecipient
* @tc.desc: Test removing death recipient successfully.
*/
HWTEST_F(ElementOperatorManagerTest, RemoveDeathRecipient_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_RemoveDeathRecipient_001 start";
sptr<IRemoteObject::DeathRecipient> deathRecipient =
new ElementOperatorManager::ElementOperatorDeathRecipient(TEST_WINDOW_ID, TEST_ACCOUNT_ID);
EXPECT_NO_THROW(manager_->AddDeathRecipient(TEST_WINDOW_ID, deathRecipient));
EXPECT_NO_THROW(manager_->RemoveDeathRecipient(TEST_WINDOW_ID));
GTEST_LOG_(INFO) << "ElementOperatorManager_RemoveDeathRecipient_001 end";
}
/**
* @tc.number: ElementOperatorManager_RemoveDeathRecipient_002
* @tc.name: RemoveDeathRecipient
* @tc.desc: Test removing death recipient with tree ID successfully.
*/
HWTEST_F(ElementOperatorManagerTest, RemoveDeathRecipient_002, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_RemoveDeathRecipient_002 start";
sptr<IRemoteObject::DeathRecipient> deathRecipient =
new ElementOperatorManager::ElementOperatorDeathRecipient(TEST_WINDOW_ID, TEST_TREE_ID, TEST_ACCOUNT_ID);
EXPECT_NO_THROW(manager_->AddDeathRecipient(TEST_WINDOW_ID, TEST_TREE_ID, deathRecipient));
EXPECT_NO_THROW(manager_->RemoveDeathRecipient(TEST_WINDOW_ID, TEST_TREE_ID));
GTEST_LOG_(INFO) << "ElementOperatorManager_RemoveDeathRecipient_002 end";
}
/**
* @tc.number: ElementOperatorManager_AddRequestId_001
* @tc.name: AddRequestId
* @tc.desc: Test adding request ID successfully.
*/
HWTEST_F(ElementOperatorManagerTest, AddRequestId_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_AddRequestId_001 start";
sptr<IAccessibilityElementOperatorCallback> callback = nullptr;
EXPECT_NO_THROW(manager_->AddRequestId(TEST_WINDOW_ID, TEST_TREE_ID, TEST_REQUEST_ID, callback));
GTEST_LOG_(INFO) << "ElementOperatorManager_AddRequestId_001 end";
}
/**
* @tc.number: ElementOperatorManager_RemoveRequestId_001
* @tc.name: RemoveRequestId
* @tc.desc: Test removing request ID successfully.
*/
HWTEST_F(ElementOperatorManagerTest, RemoveRequestId_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_RemoveRequestId_001 start";
sptr<IAccessibilityElementOperatorCallback> callback = nullptr;
manager_->AddRequestId(TEST_WINDOW_ID, TEST_TREE_ID, TEST_REQUEST_ID, callback);
ErrCode result = manager_->RemoveRequestId(TEST_REQUEST_ID);
EXPECT_EQ(result, ERR_OK);
GTEST_LOG_(INFO) << "ElementOperatorManager_RemoveRequestId_001 end";
}
/**
* @tc.number: ElementOperatorManager_RemoveRequestId_002
* @tc.name: RemoveRequestId
* @tc.desc: Test removing non-existent request ID
*/
HWTEST_F(ElementOperatorManagerTest, RemoveRequestId_002, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_RemoveRequestId_002 start";
ErrCode result = manager_->RemoveRequestId(TEST_REQUEST_ID);
EXPECT_EQ(result, ERR_OK);
GTEST_LOG_(INFO) << "ElementOperatorManager_RemoveRequestId_002 end";
}
/**
* @tc.number: ElementOperatorManager_StopCallbackWait_001
* @tc.name: StopCallbackWait
* @tc.desc: Test stopping callback wait by window ID.
*/
HWTEST_F(ElementOperatorManagerTest, StopCallbackWait_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_StopCallbackWait_001 start";
EXPECT_NO_THROW(manager_->StopCallbackWait(TEST_WINDOW_ID));
GTEST_LOG_(INFO) << "ElementOperatorManager_StopCallbackWait_001 end";
}
/**
* @tc.number: ElementOperatorManager_StopCallbackWait_002
* @tc.name: StopCallbackWait
* @tc.desc: Test stopping callback wait by window ID and tree ID.
*/
HWTEST_F(ElementOperatorManagerTest, StopCallbackWait_002, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_StopCallbackWait_002 start";
EXPECT_NO_THROW(manager_->StopCallbackWait(TEST_WINDOW_ID, TEST_TREE_ID));
GTEST_LOG_(INFO) << "ElementOperatorManager_StopCallbackWait_002 end";
}
/**
* @tc.number: ElementOperatorManager_MultipleConnections_001
* @tc.name: MultipleConnections
* @tc.desc: Test managing multiple connections.
*/
HWTEST_F(ElementOperatorManagerTest, MultipleConnections_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_MultipleConnections_001 start";
sptr<AccessibilityWindowConnection> mockConnection2 = CreateMockConnection(TEST_WINDOW_ID + 1, TEST_ACCOUNT_ID);
manager_->AddAccessibilityWindowConnection(TEST_WINDOW_ID, mockConnection_);
manager_->AddAccessibilityWindowConnection(TEST_WINDOW_ID + 1, mockConnection2);
EXPECT_EQ(manager_->GetAccessibilityWindowConnection(TEST_WINDOW_ID), mockConnection_);
EXPECT_EQ(manager_->GetAccessibilityWindowConnection(TEST_WINDOW_ID + 1), mockConnection2);
EXPECT_EQ(manager_->GetAsacConnections().size(), 2);
manager_->RemoveAccessibilityWindowConnection(TEST_WINDOW_ID);
EXPECT_EQ(manager_->GetAccessibilityWindowConnection(TEST_WINDOW_ID), nullptr);
EXPECT_EQ(manager_->GetAccessibilityWindowConnection(TEST_WINDOW_ID + 1), mockConnection2);
EXPECT_EQ(manager_->GetAsacConnections().size(), 1);
GTEST_LOG_(INFO) << "ElementOperatorManager_MultipleConnections_001 end";
}
/**
* @tc.number: ElementOperatorManager_EdgeCases_001
* @tc.name: EdgeCases
* @tc.desc: Test edge cases and error conditions.
*/
HWTEST_F(ElementOperatorManagerTest, EdgeCases_001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "ElementOperatorManager_EdgeCases_001 start";
EXPECT_EQ(manager_->GetAccessibilityWindowConnection(-1), nullptr);
int64_t parentId = 0;
EXPECT_EQ(manager_->GetRootParentId(-1, TEST_TREE_ID, parentId), RET_ERR_NO_CONNECTION);
EXPECT_EQ(manager_->ClearFocus(-1), RET_ERR_NO_CONNECTION);
manager_->RemoveAccessibilityWindowConnection(-1);
int32_t treeId = ElementOperatorManager::GetTreeIdBySplitElementId(0);
EXPECT_EQ(treeId, 0);
GTEST_LOG_(INFO) << "ElementOperatorManager_EdgeCases_001 end";
}
} // namespace Accessibility
} // namespace OHOS