| Index: ui/accessibility/platform/ax_platform_node_win_unittest.cc
|
| diff --git a/ui/accessibility/platform/ax_platform_node_win_unittest.cc b/ui/accessibility/platform/ax_platform_node_win_unittest.cc
|
| index b2122481466e01c2cfbe37702c0d16543acfd888..9fe0108e065e0f44aa29688da91d6ab6176eb166 100644
|
| --- a/ui/accessibility/platform/ax_platform_node_win_unittest.cc
|
| +++ b/ui/accessibility/platform/ax_platform_node_win_unittest.cc
|
| @@ -16,6 +16,7 @@
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "third_party/iaccessible2/ia2_api_all.h"
|
| #include "ui/accessibility/ax_node_data.h"
|
| +#include "ui/accessibility/platform/ax_platform_node_win.h"
|
| #include "ui/accessibility/platform/test_ax_node_wrapper.h"
|
| #include "ui/base/win/atl_module.h"
|
|
|
| @@ -92,6 +93,12 @@ class AXPlatformNodeWinTest : public testing::Test {
|
| return tree_->root();
|
| }
|
|
|
| + void BuildRelationships(ScopedComPtr<IAccessible2> accessible) {
|
| + CHECK(accessible);
|
| + AXPlatformNodeWin* node = static_cast<AXPlatformNodeWin*>(accessible.Get());
|
| + node->CalculateRelationships();
|
| + }
|
| +
|
| ScopedComPtr<IAccessible> IAccessibleFromNode(AXNode* node) {
|
| TestAXNodeWrapper* wrapper =
|
| TestAXNodeWrapper::GetOrCreate(tree_.get(), node);
|
| @@ -1293,4 +1300,117 @@ TEST_F(AXPlatformNodeWinTest, TestIAccessibleTableCellGetTable) {
|
| CheckIUnknownHasName(cell_1, L"1");
|
| }
|
|
|
| +TEST_F(AXPlatformNodeWinTest, TestIAccessible2GetNRelations) {
|
| + // This is is a duplicated of
|
| + // BrowserAccessibilityTest::TestIAccessible2Relations but without the
|
| + // specific COM/BrowserAccessibility knowledge.
|
| + ui::AXNodeData root;
|
| + root.id = 1;
|
| + root.role = ui::AX_ROLE_ROOT_WEB_AREA;
|
| +
|
| + std::vector<int32_t> describedby_ids = {1, 2, 3};
|
| + root.AddIntListAttribute(ui::AX_ATTR_DESCRIBEDBY_IDS, describedby_ids);
|
| +
|
| + ui::AXNodeData child1;
|
| + child1.id = 2;
|
| + child1.role = ui::AX_ROLE_STATIC_TEXT;
|
| +
|
| + root.child_ids.push_back(2);
|
| +
|
| + ui::AXNodeData child2;
|
| + child2.id = 3;
|
| + child2.role = ui::AX_ROLE_STATIC_TEXT;
|
| +
|
| + root.child_ids.push_back(3);
|
| +
|
| + Init(root, child1, child2);
|
| + ScopedComPtr<IAccessible> root_iaccessible(GetRootIAccessible());
|
| + ScopedComPtr<IAccessible2> root_iaccessible2 =
|
| + ToIAccessible2(root_iaccessible);
|
| +
|
| + ScopedComPtr<IDispatch> result;
|
| + EXPECT_EQ(S_OK, root_iaccessible2->get_accChild(ScopedVariant(1),
|
| + result.GetAddressOf()));
|
| + ScopedComPtr<IAccessible2> ax_child1;
|
| + EXPECT_EQ(S_OK, result.CopyTo(ax_child1.GetAddressOf()));
|
| + result.Reset();
|
| +
|
| + EXPECT_EQ(S_OK, root_iaccessible2->get_accChild(ScopedVariant(2),
|
| + result.GetAddressOf()));
|
| + ScopedComPtr<IAccessible2> ax_child2;
|
| + EXPECT_EQ(S_OK, result.CopyTo(ax_child2.GetAddressOf()));
|
| + result.Reset();
|
| +
|
| + BuildRelationships(root_iaccessible2);
|
| + BuildRelationships(ax_child1);
|
| + BuildRelationships(ax_child2);
|
| +
|
| + LONG n_relations = 0;
|
| + LONG n_targets = 0;
|
| + ScopedBstr relation_type;
|
| + ScopedComPtr<IAccessibleRelation> describedby_relation;
|
| + ScopedComPtr<IAccessibleRelation> description_for_relation;
|
| + ScopedComPtr<IUnknown> target;
|
| +
|
| + EXPECT_HRESULT_SUCCEEDED(root_iaccessible2->get_nRelations(&n_relations));
|
| + EXPECT_EQ(1, n_relations);
|
| +
|
| + EXPECT_HRESULT_SUCCEEDED(
|
| + root_iaccessible2->get_relation(0, describedby_relation.GetAddressOf()));
|
| + EXPECT_HRESULT_SUCCEEDED(
|
| + describedby_relation->get_relationType(relation_type.Receive()));
|
| + EXPECT_EQ(L"describedBy", base::string16(relation_type));
|
| + relation_type.Reset();
|
| +
|
| + EXPECT_HRESULT_SUCCEEDED(describedby_relation->get_nTargets(&n_targets));
|
| + EXPECT_EQ(2, n_targets);
|
| +
|
| + EXPECT_HRESULT_SUCCEEDED(
|
| + describedby_relation->get_target(0, target.GetAddressOf()));
|
| + target.Reset();
|
| +
|
| + EXPECT_HRESULT_SUCCEEDED(
|
| + describedby_relation->get_target(1, target.GetAddressOf()));
|
| + target.Reset();
|
| + describedby_relation.Reset();
|
| +
|
| + // Test the reverse relations.
|
| + EXPECT_HRESULT_SUCCEEDED(ax_child1->get_nRelations(&n_relations));
|
| + EXPECT_EQ(1, n_relations);
|
| +
|
| + EXPECT_HRESULT_SUCCEEDED(
|
| + ax_child1->get_relation(0, description_for_relation.GetAddressOf()));
|
| + EXPECT_HRESULT_SUCCEEDED(
|
| + description_for_relation->get_relationType(relation_type.Receive()));
|
| + EXPECT_EQ(L"descriptionFor", base::string16(relation_type));
|
| + relation_type.Reset();
|
| +
|
| + EXPECT_HRESULT_SUCCEEDED(description_for_relation->get_nTargets(&n_targets));
|
| + EXPECT_EQ(1, n_targets);
|
| +
|
| + EXPECT_HRESULT_SUCCEEDED(
|
| + description_for_relation->get_target(0, target.GetAddressOf()));
|
| + target.Reset();
|
| + description_for_relation.Reset();
|
| +
|
| + EXPECT_HRESULT_SUCCEEDED(ax_child2->get_nRelations(&n_relations));
|
| + EXPECT_EQ(1, n_relations);
|
| +
|
| + EXPECT_HRESULT_SUCCEEDED(
|
| + ax_child2->get_relation(0, description_for_relation.GetAddressOf()));
|
| + EXPECT_HRESULT_SUCCEEDED(
|
| + description_for_relation->get_relationType(relation_type.Receive()));
|
| + EXPECT_EQ(L"descriptionFor", base::string16(relation_type));
|
| + relation_type.Reset();
|
| +
|
| + EXPECT_HRESULT_SUCCEEDED(description_for_relation->get_nTargets(&n_targets));
|
| + EXPECT_EQ(1, n_targets);
|
| +
|
| + EXPECT_HRESULT_SUCCEEDED(
|
| + description_for_relation->get_target(0, target.GetAddressOf()));
|
| + target.Reset();
|
| +
|
| + // TODO(dougt): Try adding one more relation.
|
| +}
|
| +
|
| } // namespace ui
|
|
|