blob: 4f4122634d8a7821be0d51ec026e6a398f9afa6f [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/views/accessibility/tree/browser_views_ax_manager.h"
#include "base/test/scoped_feature_list.h"
#include "build/build_config.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/accessibility/accessibility_features.h"
#include "ui/accessibility/ax_mode.h"
#include "ui/accessibility/platform/ax_platform.h"
#include "ui/accessibility/platform/ax_platform_for_test.h"
namespace views {
namespace {
class BrowserViewsAXManagerTest : public ::testing::Test {
protected:
BrowserViewsAXManagerTest() {
scoped_feature_list_.InitAndEnableFeature(
features::kAccessibilityTreeForViews);
}
void SetUp() override {
browser_views_ax_manager_handle_ = views::BrowserViewsAXManager::Create();
}
std::unique_ptr<views::BrowserViewsAXManager::LifetimeHandle>
browser_views_ax_manager_handle_;
base::test::ScopedFeatureList scoped_feature_list_;
};
TEST_F(BrowserViewsAXManagerTest, IsEnabledAfterAXModeAdded) {
BrowserViewsAXManager* manager = BrowserViewsAXManager::GetInstance();
ASSERT_NE(manager, nullptr);
// Initially, the manager should not be enabled.
EXPECT_FALSE(manager->is_enabled());
// Simulate that AXMode with kNativeAPIs was added.
ui::AXPlatform::GetInstance().NotifyModeAdded(ui::AXMode::kNativeAPIs);
EXPECT_TRUE(manager->is_enabled());
}
// This death test verifies that Create() crashes (via CHECK) when the flag is
// off.
TEST_F(BrowserViewsAXManagerTest, CreateCrashesWhenFlagOff) {
base::test::ScopedFeatureList feature_list;
feature_list.InitAndDisableFeature(features::kAccessibilityTreeForViews);
EXPECT_DEATH(views::BrowserViewsAXManager::Create(), "");
}
TEST_F(BrowserViewsAXManagerTest, GetOrCreateAXNodeUniqueId) {
BrowserViewsAXManager* manager = BrowserViewsAXManager::GetInstance();
ASSERT_NE(manager, nullptr);
int ax_node_id = 100;
ui::AXPlatformNodeId id1 = manager->GetOrCreateAXNodeUniqueId(ax_node_id);
ui::AXPlatformNodeId id2 = manager->GetOrCreateAXNodeUniqueId(ax_node_id);
EXPECT_EQ(id1, id2);
int another_ax_node_id = 200;
ui::AXPlatformNodeId id3 =
manager->GetOrCreateAXNodeUniqueId(another_ax_node_id);
EXPECT_NE(id1, id3);
}
TEST_F(BrowserViewsAXManagerTest, OnAXNodeDeleted) {
BrowserViewsAXManager* manager = BrowserViewsAXManager::GetInstance();
ASSERT_NE(manager, nullptr);
int ax_node_id = 300;
ui::AXPlatformNodeId id1 = manager->GetOrCreateAXNodeUniqueId(ax_node_id);
manager->OnAXNodeDeleted(ax_node_id);
ui::AXPlatformNodeId id2 = manager->GetOrCreateAXNodeUniqueId(ax_node_id);
EXPECT_NE(id1, id2);
}
} // namespace
} // namespace views