| Index: chrome/browser/accessibility/browser_accessibility_manager_unittest.cc
|
| ===================================================================
|
| --- chrome/browser/accessibility/browser_accessibility_manager_unittest.cc (revision 112878)
|
| +++ chrome/browser/accessibility/browser_accessibility_manager_unittest.cc (working copy)
|
| @@ -1,634 +0,0 @@
|
| -// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "base/string16.h"
|
| -#include "base/utf_string_conversions.h"
|
| -#include "content/browser/accessibility/browser_accessibility.h"
|
| -#include "content/browser/accessibility/browser_accessibility_manager.h"
|
| -#include "content/common/view_messages.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -#include "webkit/glue/webaccessibility.h"
|
| -
|
| -using webkit_glue::WebAccessibility;
|
| -
|
| -namespace {
|
| -
|
| -// Subclass of BrowserAccessibility that counts the number of instances.
|
| -class CountedBrowserAccessibility : public BrowserAccessibility {
|
| - public:
|
| - CountedBrowserAccessibility() {
|
| - global_obj_count_++;
|
| - native_ref_count_ = 1;
|
| - }
|
| - virtual ~CountedBrowserAccessibility() {
|
| - global_obj_count_--;
|
| - }
|
| -
|
| - virtual void NativeAddReference() OVERRIDE {
|
| - native_ref_count_++;
|
| - }
|
| -
|
| - virtual void NativeReleaseReference() OVERRIDE {
|
| - native_ref_count_--;
|
| - if (native_ref_count_ == 0)
|
| - delete this;
|
| - }
|
| -
|
| - int native_ref_count_;
|
| - static int global_obj_count_;
|
| -};
|
| -
|
| -int CountedBrowserAccessibility::global_obj_count_ = 0;
|
| -
|
| -// Factory that creates a CountedBrowserAccessibility.
|
| -class CountedBrowserAccessibilityFactory
|
| - : public BrowserAccessibilityFactory {
|
| - public:
|
| - virtual ~CountedBrowserAccessibilityFactory() {}
|
| - virtual BrowserAccessibility* Create() {
|
| - return new CountedBrowserAccessibility();
|
| - }
|
| -};
|
| -
|
| -} // anonymous namespace
|
| -
|
| -TEST(BrowserAccessibilityManagerTest, TestNoLeaks) {
|
| - // Create WebAccessibility objects for a simple document tree,
|
| - // representing the accessibility information used to initialize
|
| - // BrowserAccessibilityManager.
|
| - WebAccessibility button;
|
| - button.id = 2;
|
| - button.name = UTF8ToUTF16("Button");
|
| - button.role = WebAccessibility::ROLE_BUTTON;
|
| - button.state = 0;
|
| -
|
| - WebAccessibility checkbox;
|
| - checkbox.id = 3;
|
| - checkbox.name = UTF8ToUTF16("Checkbox");
|
| - checkbox.role = WebAccessibility::ROLE_CHECKBOX;
|
| - checkbox.state = 0;
|
| -
|
| - WebAccessibility root;
|
| - root.id = 1;
|
| - root.name = UTF8ToUTF16("Document");
|
| - root.role = WebAccessibility::ROLE_DOCUMENT;
|
| - root.state = 0;
|
| - root.children.push_back(button);
|
| - root.children.push_back(checkbox);
|
| -
|
| - // Construct a BrowserAccessibilityManager with this WebAccessibility tree
|
| - // and a factory for an instance-counting BrowserAccessibility, and ensure
|
| - // that exactly 3 instances were created. Note that the manager takes
|
| - // ownership of the factory.
|
| - CountedBrowserAccessibility::global_obj_count_ = 0;
|
| - BrowserAccessibilityManager* manager =
|
| - BrowserAccessibilityManager::Create(
|
| - NULL,
|
| - root,
|
| - NULL,
|
| - new CountedBrowserAccessibilityFactory());
|
| -
|
| - ASSERT_EQ(3, CountedBrowserAccessibility::global_obj_count_);
|
| -
|
| - // Delete the manager and test that all 3 instances are deleted.
|
| - delete manager;
|
| - ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_);
|
| -
|
| - // Construct a manager again, and this time save references to two of
|
| - // the three nodes in the tree.
|
| - manager =
|
| - BrowserAccessibilityManager::Create(
|
| - NULL,
|
| - root,
|
| - NULL,
|
| - new CountedBrowserAccessibilityFactory());
|
| - ASSERT_EQ(3, CountedBrowserAccessibility::global_obj_count_);
|
| -
|
| - CountedBrowserAccessibility* root_accessible =
|
| - static_cast<CountedBrowserAccessibility*>(manager->GetRoot());
|
| - root_accessible->NativeAddReference();
|
| - CountedBrowserAccessibility* child1_accessible =
|
| - static_cast<CountedBrowserAccessibility*>(root_accessible->GetChild(1));
|
| - child1_accessible->NativeAddReference();
|
| -
|
| - // Now delete the manager, and only one of the three nodes in the tree
|
| - // should be released.
|
| - delete manager;
|
| - ASSERT_EQ(2, CountedBrowserAccessibility::global_obj_count_);
|
| -
|
| - // Release each of our references and make sure that each one results in
|
| - // the instance being deleted as its reference count hits zero.
|
| - root_accessible->NativeReleaseReference();
|
| - ASSERT_EQ(1, CountedBrowserAccessibility::global_obj_count_);
|
| - child1_accessible->NativeReleaseReference();
|
| - ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_);
|
| -}
|
| -
|
| -TEST(BrowserAccessibilityManagerTest, TestReuseBrowserAccessibilityObjects) {
|
| - // Make sure that changes to a subtree reuse as many objects as possible.
|
| -
|
| - // Tree 1:
|
| - //
|
| - // root
|
| - // child1
|
| - // child2
|
| - // child3
|
| -
|
| - WebAccessibility tree1_child1;
|
| - tree1_child1.id = 2;
|
| - tree1_child1.name = UTF8ToUTF16("Child1");
|
| - tree1_child1.role = WebAccessibility::ROLE_BUTTON;
|
| - tree1_child1.state = 0;
|
| -
|
| - WebAccessibility tree1_child2;
|
| - tree1_child2.id = 3;
|
| - tree1_child2.name = UTF8ToUTF16("Child2");
|
| - tree1_child2.role = WebAccessibility::ROLE_BUTTON;
|
| - tree1_child2.state = 0;
|
| -
|
| - WebAccessibility tree1_child3;
|
| - tree1_child3.id = 4;
|
| - tree1_child3.name = UTF8ToUTF16("Child3");
|
| - tree1_child3.role = WebAccessibility::ROLE_BUTTON;
|
| - tree1_child3.state = 0;
|
| -
|
| - WebAccessibility tree1_root;
|
| - tree1_root.id = 1;
|
| - tree1_root.name = UTF8ToUTF16("Document");
|
| - tree1_root.role = WebAccessibility::ROLE_DOCUMENT;
|
| - tree1_root.state = 0;
|
| - tree1_root.children.push_back(tree1_child1);
|
| - tree1_root.children.push_back(tree1_child2);
|
| - tree1_root.children.push_back(tree1_child3);
|
| -
|
| - // Tree 2:
|
| - //
|
| - // root
|
| - // child0 <-- inserted
|
| - // child1
|
| - // child2
|
| - // <-- child3 deleted
|
| -
|
| - WebAccessibility tree2_child0;
|
| - tree2_child0.id = 5;
|
| - tree2_child0.name = UTF8ToUTF16("Child0");
|
| - tree2_child0.role = WebAccessibility::ROLE_BUTTON;
|
| - tree2_child0.state = 0;
|
| -
|
| - WebAccessibility tree2_child1;
|
| - tree2_child1.id = 2;
|
| - tree2_child1.name = UTF8ToUTF16("Child1");
|
| - tree2_child1.role = WebAccessibility::ROLE_BUTTON;
|
| - tree2_child1.state = 0;
|
| -
|
| - WebAccessibility tree2_child2;
|
| - tree2_child2.id = 3;
|
| - tree2_child2.name = UTF8ToUTF16("Child2");
|
| - tree2_child2.role = WebAccessibility::ROLE_BUTTON;
|
| - tree2_child2.state = 0;
|
| -
|
| - WebAccessibility tree2_root;
|
| - tree2_root.id = 1;
|
| - tree2_root.name = UTF8ToUTF16("DocumentChanged");
|
| - tree2_root.role = WebAccessibility::ROLE_DOCUMENT;
|
| - tree2_root.state = 0;
|
| - tree2_root.children.push_back(tree2_child0);
|
| - tree2_root.children.push_back(tree2_child1);
|
| - tree2_root.children.push_back(tree2_child2);
|
| -
|
| - // Construct a BrowserAccessibilityManager with tree1.
|
| - CountedBrowserAccessibility::global_obj_count_ = 0;
|
| - BrowserAccessibilityManager* manager =
|
| - BrowserAccessibilityManager::Create(
|
| - NULL,
|
| - tree1_root,
|
| - NULL,
|
| - new CountedBrowserAccessibilityFactory());
|
| - ASSERT_EQ(4, CountedBrowserAccessibility::global_obj_count_);
|
| -
|
| - // Save references to all of the objects.
|
| - CountedBrowserAccessibility* root_accessible =
|
| - static_cast<CountedBrowserAccessibility*>(manager->GetRoot());
|
| - root_accessible->NativeAddReference();
|
| - CountedBrowserAccessibility* child1_accessible =
|
| - static_cast<CountedBrowserAccessibility*>(root_accessible->GetChild(0));
|
| - child1_accessible->NativeAddReference();
|
| - CountedBrowserAccessibility* child2_accessible =
|
| - static_cast<CountedBrowserAccessibility*>(root_accessible->GetChild(1));
|
| - child2_accessible->NativeAddReference();
|
| - CountedBrowserAccessibility* child3_accessible =
|
| - static_cast<CountedBrowserAccessibility*>(root_accessible->GetChild(2));
|
| - child3_accessible->NativeAddReference();
|
| -
|
| - // Check the index in parent.
|
| - EXPECT_EQ(0, child1_accessible->index_in_parent());
|
| - EXPECT_EQ(1, child2_accessible->index_in_parent());
|
| - EXPECT_EQ(2, child3_accessible->index_in_parent());
|
| -
|
| - // Process a notification containing the changed subtree.
|
| - std::vector<ViewHostMsg_AccessibilityNotification_Params> params;
|
| - params.push_back(ViewHostMsg_AccessibilityNotification_Params());
|
| - ViewHostMsg_AccessibilityNotification_Params* msg = ¶ms[0];
|
| - msg->notification_type = ViewHostMsg_AccEvent::CHILDREN_CHANGED;
|
| - msg->acc_tree = tree2_root;
|
| - msg->includes_children = true;
|
| - msg->id = tree2_root.id;
|
| - manager->OnAccessibilityNotifications(params);
|
| -
|
| - // There should be 5 objects now: the 4 from the new tree, plus the
|
| - // reference to child3 we kept.
|
| - EXPECT_EQ(5, CountedBrowserAccessibility::global_obj_count_);
|
| -
|
| - // Check that our references to the root, child1, and child2 are still valid,
|
| - // but that the reference to child3 is now invalid.
|
| - EXPECT_TRUE(root_accessible->instance_active());
|
| - EXPECT_TRUE(child1_accessible->instance_active());
|
| - EXPECT_TRUE(child2_accessible->instance_active());
|
| - EXPECT_FALSE(child3_accessible->instance_active());
|
| -
|
| - // Check that the index in parent has been updated.
|
| - EXPECT_EQ(1, child1_accessible->index_in_parent());
|
| - EXPECT_EQ(2, child2_accessible->index_in_parent());
|
| -
|
| - // Release our references. The object count should only decrease by 1
|
| - // for child3.
|
| - root_accessible->NativeReleaseReference();
|
| - child1_accessible->NativeReleaseReference();
|
| - child2_accessible->NativeReleaseReference();
|
| - child3_accessible->NativeReleaseReference();
|
| -
|
| - EXPECT_EQ(4, CountedBrowserAccessibility::global_obj_count_);
|
| -
|
| - // Delete the manager and make sure all memory is cleaned up.
|
| - delete manager;
|
| - ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_);
|
| -}
|
| -
|
| -TEST(BrowserAccessibilityManagerTest, TestReuseBrowserAccessibilityObjects2) {
|
| - // Similar to the test above, but with a more complicated tree.
|
| -
|
| - // Tree 1:
|
| - //
|
| - // root
|
| - // container
|
| - // child1
|
| - // grandchild1
|
| - // child2
|
| - // grandchild2
|
| - // child3
|
| - // grandchild3
|
| -
|
| - WebAccessibility tree1_grandchild1;
|
| - tree1_grandchild1.id = 4;
|
| - tree1_grandchild1.name = UTF8ToUTF16("GrandChild1");
|
| - tree1_grandchild1.role = WebAccessibility::ROLE_BUTTON;
|
| - tree1_grandchild1.state = 0;
|
| -
|
| - WebAccessibility tree1_child1;
|
| - tree1_child1.id = 3;
|
| - tree1_child1.name = UTF8ToUTF16("Child1");
|
| - tree1_child1.role = WebAccessibility::ROLE_BUTTON;
|
| - tree1_child1.state = 0;
|
| - tree1_child1.children.push_back(tree1_grandchild1);
|
| -
|
| - WebAccessibility tree1_grandchild2;
|
| - tree1_grandchild2.id = 6;
|
| - tree1_grandchild2.name = UTF8ToUTF16("GrandChild1");
|
| - tree1_grandchild2.role = WebAccessibility::ROLE_BUTTON;
|
| - tree1_grandchild2.state = 0;
|
| -
|
| - WebAccessibility tree1_child2;
|
| - tree1_child2.id = 5;
|
| - tree1_child2.name = UTF8ToUTF16("Child2");
|
| - tree1_child2.role = WebAccessibility::ROLE_BUTTON;
|
| - tree1_child2.state = 0;
|
| - tree1_child2.children.push_back(tree1_grandchild2);
|
| -
|
| - WebAccessibility tree1_grandchild3;
|
| - tree1_grandchild3.id = 8;
|
| - tree1_grandchild3.name = UTF8ToUTF16("GrandChild3");
|
| - tree1_grandchild3.role = WebAccessibility::ROLE_BUTTON;
|
| - tree1_grandchild3.state = 0;
|
| -
|
| - WebAccessibility tree1_child3;
|
| - tree1_child3.id = 7;
|
| - tree1_child3.name = UTF8ToUTF16("Child3");
|
| - tree1_child3.role = WebAccessibility::ROLE_BUTTON;
|
| - tree1_child3.state = 0;
|
| - tree1_child3.children.push_back(tree1_grandchild3);
|
| -
|
| - WebAccessibility tree1_container;
|
| - tree1_container.id = 2;
|
| - tree1_container.name = UTF8ToUTF16("Container");
|
| - tree1_container.role = WebAccessibility::ROLE_GROUP;
|
| - tree1_container.state = 0;
|
| - tree1_container.children.push_back(tree1_child1);
|
| - tree1_container.children.push_back(tree1_child2);
|
| - tree1_container.children.push_back(tree1_child3);
|
| -
|
| - WebAccessibility tree1_root;
|
| - tree1_root.id = 1;
|
| - tree1_root.name = UTF8ToUTF16("Document");
|
| - tree1_root.role = WebAccessibility::ROLE_DOCUMENT;
|
| - tree1_root.state = 0;
|
| - tree1_root.children.push_back(tree1_container);
|
| -
|
| - // Tree 2:
|
| - //
|
| - // root
|
| - // container
|
| - // child0 <-- inserted
|
| - // grandchild0 <--
|
| - // child1
|
| - // grandchild1
|
| - // child2
|
| - // grandchild2
|
| - // <-- child3 (and grandchild3) deleted
|
| -
|
| - WebAccessibility tree2_grandchild0;
|
| - tree2_grandchild0.id = 9;
|
| - tree2_grandchild0.name = UTF8ToUTF16("GrandChild0");
|
| - tree2_grandchild0.role = WebAccessibility::ROLE_BUTTON;
|
| - tree2_grandchild0.state = 0;
|
| -
|
| - WebAccessibility tree2_child0;
|
| - tree2_child0.id = 10;
|
| - tree2_child0.name = UTF8ToUTF16("Child0");
|
| - tree2_child0.role = WebAccessibility::ROLE_BUTTON;
|
| - tree2_child0.state = 0;
|
| - tree2_child0.children.push_back(tree2_grandchild0);
|
| -
|
| - WebAccessibility tree2_grandchild1;
|
| - tree2_grandchild1.id = 4;
|
| - tree2_grandchild1.name = UTF8ToUTF16("GrandChild1");
|
| - tree2_grandchild1.role = WebAccessibility::ROLE_BUTTON;
|
| - tree2_grandchild1.state = 0;
|
| -
|
| - WebAccessibility tree2_child1;
|
| - tree2_child1.id = 3;
|
| - tree2_child1.name = UTF8ToUTF16("Child1");
|
| - tree2_child1.role = WebAccessibility::ROLE_BUTTON;
|
| - tree2_child1.state = 0;
|
| - tree2_child1.children.push_back(tree2_grandchild1);
|
| -
|
| - WebAccessibility tree2_grandchild2;
|
| - tree2_grandchild2.id = 6;
|
| - tree2_grandchild2.name = UTF8ToUTF16("GrandChild1");
|
| - tree2_grandchild2.role = WebAccessibility::ROLE_BUTTON;
|
| - tree2_grandchild2.state = 0;
|
| -
|
| - WebAccessibility tree2_child2;
|
| - tree2_child2.id = 5;
|
| - tree2_child2.name = UTF8ToUTF16("Child2");
|
| - tree2_child2.role = WebAccessibility::ROLE_BUTTON;
|
| - tree2_child2.state = 0;
|
| - tree2_child2.children.push_back(tree2_grandchild2);
|
| -
|
| - WebAccessibility tree2_container;
|
| - tree2_container.id = 2;
|
| - tree2_container.name = UTF8ToUTF16("Container");
|
| - tree2_container.role = WebAccessibility::ROLE_GROUP;
|
| - tree2_container.state = 0;
|
| - tree2_container.children.push_back(tree2_child0);
|
| - tree2_container.children.push_back(tree2_child1);
|
| - tree2_container.children.push_back(tree2_child2);
|
| -
|
| - WebAccessibility tree2_root;
|
| - tree2_root.id = 1;
|
| - tree2_root.name = UTF8ToUTF16("Document");
|
| - tree2_root.role = WebAccessibility::ROLE_DOCUMENT;
|
| - tree2_root.state = 0;
|
| - tree2_root.children.push_back(tree2_container);
|
| -
|
| - // Construct a BrowserAccessibilityManager with tree1.
|
| - CountedBrowserAccessibility::global_obj_count_ = 0;
|
| - BrowserAccessibilityManager* manager =
|
| - BrowserAccessibilityManager::Create(
|
| - NULL,
|
| - tree1_root,
|
| - NULL,
|
| - new CountedBrowserAccessibilityFactory());
|
| - ASSERT_EQ(8, CountedBrowserAccessibility::global_obj_count_);
|
| -
|
| - // Save references to some objects.
|
| - CountedBrowserAccessibility* root_accessible =
|
| - static_cast<CountedBrowserAccessibility*>(manager->GetRoot());
|
| - root_accessible->NativeAddReference();
|
| - CountedBrowserAccessibility* container_accessible =
|
| - static_cast<CountedBrowserAccessibility*>(root_accessible->GetChild(0));
|
| - container_accessible->NativeAddReference();
|
| - CountedBrowserAccessibility* child2_accessible =
|
| - static_cast<CountedBrowserAccessibility*>(
|
| - container_accessible->GetChild(1));
|
| - child2_accessible->NativeAddReference();
|
| - CountedBrowserAccessibility* child3_accessible =
|
| - static_cast<CountedBrowserAccessibility*>(
|
| - container_accessible->GetChild(2));
|
| - child3_accessible->NativeAddReference();
|
| -
|
| - // Check the index in parent.
|
| - EXPECT_EQ(1, child2_accessible->index_in_parent());
|
| - EXPECT_EQ(2, child3_accessible->index_in_parent());
|
| -
|
| - // Process a notification containing the changed subtree rooted at
|
| - // the container.
|
| - std::vector<ViewHostMsg_AccessibilityNotification_Params> params;
|
| - params.push_back(ViewHostMsg_AccessibilityNotification_Params());
|
| - ViewHostMsg_AccessibilityNotification_Params* msg = ¶ms[0];
|
| - msg->notification_type = ViewHostMsg_AccEvent::CHILDREN_CHANGED;
|
| - msg->acc_tree = tree2_container;
|
| - msg->includes_children = true;
|
| - msg->id = tree2_container.id;
|
| - manager->OnAccessibilityNotifications(params);
|
| -
|
| - // There should be 9 objects now: the 8 from the new tree, plus the
|
| - // reference to child3 we kept.
|
| - EXPECT_EQ(9, CountedBrowserAccessibility::global_obj_count_);
|
| -
|
| - // Check that our references to the root and container and child2 are
|
| - // still valid, but that the reference to child3 is now invalid.
|
| - EXPECT_TRUE(root_accessible->instance_active());
|
| - EXPECT_TRUE(container_accessible->instance_active());
|
| - EXPECT_TRUE(child2_accessible->instance_active());
|
| - EXPECT_FALSE(child3_accessible->instance_active());
|
| -
|
| - // Ensure that we retain the parent of the detached subtree.
|
| - EXPECT_EQ(root_accessible, container_accessible->parent());
|
| - EXPECT_EQ(0, container_accessible->index_in_parent());
|
| -
|
| - // Check that the index in parent has been updated.
|
| - EXPECT_EQ(2, child2_accessible->index_in_parent());
|
| -
|
| - // Release our references. The object count should only decrease by 1
|
| - // for child3.
|
| - root_accessible->NativeReleaseReference();
|
| - container_accessible->NativeReleaseReference();
|
| - child2_accessible->NativeReleaseReference();
|
| - child3_accessible->NativeReleaseReference();
|
| -
|
| - EXPECT_EQ(8, CountedBrowserAccessibility::global_obj_count_);
|
| -
|
| - // Delete the manager and make sure all memory is cleaned up.
|
| - delete manager;
|
| - ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_);
|
| -}
|
| -
|
| -TEST(BrowserAccessibilityManagerTest, TestMoveChildUp) {
|
| - // Tree 1:
|
| - //
|
| - // 1
|
| - // 2
|
| - // 3
|
| - // 4
|
| -
|
| - WebAccessibility tree1_4;
|
| - tree1_4.id = 4;
|
| - tree1_4.state = 0;
|
| -
|
| - WebAccessibility tree1_3;
|
| - tree1_3.id = 3;
|
| - tree1_3.state = 0;
|
| - tree1_3.children.push_back(tree1_4);
|
| -
|
| - WebAccessibility tree1_2;
|
| - tree1_2.id = 2;
|
| - tree1_2.state = 0;
|
| -
|
| - WebAccessibility tree1_1;
|
| - tree1_1.id = 1;
|
| - tree1_1.state = 0;
|
| - tree1_1.children.push_back(tree1_2);
|
| - tree1_1.children.push_back(tree1_3);
|
| -
|
| - // Tree 2:
|
| - //
|
| - // 1
|
| - // 4 <-- moves up a level and gains child
|
| - // 6 <-- new
|
| - // 5 <-- new
|
| -
|
| - WebAccessibility tree2_6;
|
| - tree2_6.id = 6;
|
| - tree2_6.state = 0;
|
| -
|
| - WebAccessibility tree2_5;
|
| - tree2_5.id = 5;
|
| - tree2_5.state = 0;
|
| -
|
| - WebAccessibility tree2_4;
|
| - tree2_4.id = 4;
|
| - tree2_4.state = 0;
|
| - tree2_4.children.push_back(tree2_6);
|
| -
|
| - WebAccessibility tree2_1;
|
| - tree2_1.id = 1;
|
| - tree2_1.state = 0;
|
| - tree2_1.children.push_back(tree2_4);
|
| - tree2_1.children.push_back(tree2_5);
|
| -
|
| - // Construct a BrowserAccessibilityManager with tree1.
|
| - CountedBrowserAccessibility::global_obj_count_ = 0;
|
| - BrowserAccessibilityManager* manager =
|
| - BrowserAccessibilityManager::Create(
|
| - NULL,
|
| - tree1_1,
|
| - NULL,
|
| - new CountedBrowserAccessibilityFactory());
|
| - ASSERT_EQ(4, CountedBrowserAccessibility::global_obj_count_);
|
| -
|
| - // Process a notification containing the changed subtree.
|
| - std::vector<ViewHostMsg_AccessibilityNotification_Params> params;
|
| - params.push_back(ViewHostMsg_AccessibilityNotification_Params());
|
| - ViewHostMsg_AccessibilityNotification_Params* msg = ¶ms[0];
|
| - msg->notification_type = ViewHostMsg_AccEvent::CHILDREN_CHANGED;
|
| - msg->acc_tree = tree2_1;
|
| - msg->includes_children = true;
|
| - msg->id = tree2_1.id;
|
| - manager->OnAccessibilityNotifications(params);
|
| -
|
| - // There should be 4 objects now.
|
| - EXPECT_EQ(4, CountedBrowserAccessibility::global_obj_count_);
|
| -
|
| - // Delete the manager and make sure all memory is cleaned up.
|
| - delete manager;
|
| - ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_);
|
| -}
|
| -
|
| -TEST(BrowserAccessibilityManagerTest, TestCreateEmptyDocument) {
|
| - // Try creating an empty document with busy state.
|
| - scoped_ptr<BrowserAccessibilityManager> manager;
|
| - manager.reset(BrowserAccessibilityManager::CreateEmptyDocument(
|
| - NULL,
|
| - WebAccessibility::STATE_BUSY,
|
| - NULL,
|
| - new CountedBrowserAccessibilityFactory()));
|
| -
|
| - // Verify the root is as we expect by default.
|
| - BrowserAccessibility* root = manager->GetRoot();
|
| - EXPECT_EQ(0, root->renderer_id());
|
| - EXPECT_EQ(WebAccessibility::ROLE_ROOT_WEB_AREA, root->role());
|
| - EXPECT_EQ(WebAccessibility::STATE_BUSY, root->state());
|
| -
|
| - // Tree with a child textfield.
|
| - WebAccessibility tree1_1;
|
| - tree1_1.id = 1;
|
| - tree1_1.role = WebAccessibility::ROLE_ROOT_WEB_AREA;
|
| -
|
| - WebAccessibility tree1_2;
|
| - tree1_2.id = 2;
|
| - tree1_2.role = WebAccessibility::ROLE_TEXT_FIELD;
|
| -
|
| - tree1_1.children.push_back(tree1_2);
|
| -
|
| - // Process a load complete.
|
| - std::vector<ViewHostMsg_AccessibilityNotification_Params> params;
|
| - params.push_back(ViewHostMsg_AccessibilityNotification_Params());
|
| - ViewHostMsg_AccessibilityNotification_Params* msg = ¶ms[0];
|
| - msg->notification_type = ViewHostMsg_AccEvent::LOAD_COMPLETE;
|
| - msg->acc_tree = tree1_1;
|
| - msg->includes_children = true;
|
| - msg->id = tree1_1.id;
|
| - manager->OnAccessibilityNotifications(params);
|
| -
|
| - // Save for later comparison.
|
| - BrowserAccessibility* acc1_2 = manager->GetFromRendererID(2);
|
| -
|
| - // Verify the root has changed.
|
| - EXPECT_NE(root, manager->GetRoot());
|
| -
|
| - // And the proper child remains.
|
| - EXPECT_EQ(WebAccessibility::ROLE_TEXT_FIELD, acc1_2->role());
|
| - EXPECT_EQ(2, acc1_2->renderer_id());
|
| -
|
| - // Tree with a child button.
|
| - WebAccessibility tree2_1;
|
| - tree2_1.id = 1;
|
| - tree2_1.role = WebAccessibility::ROLE_ROOT_WEB_AREA;
|
| -
|
| - WebAccessibility tree2_2;
|
| - tree2_2.id = 3;
|
| - tree2_2.role = WebAccessibility::ROLE_BUTTON;
|
| -
|
| - tree2_1.children.push_back(tree2_2);
|
| -
|
| - msg->acc_tree = tree2_1;
|
| - msg->includes_children = true;
|
| - msg->id = tree2_1.id;
|
| -
|
| - // Fire another load complete.
|
| - manager->OnAccessibilityNotifications(params);
|
| -
|
| - BrowserAccessibility* acc2_2 = manager->GetFromRendererID(3);
|
| -
|
| - // Verify the root has changed.
|
| - EXPECT_NE(root, manager->GetRoot());
|
| -
|
| - // And the new child exists.
|
| - EXPECT_EQ(WebAccessibility::ROLE_BUTTON, acc2_2->role());
|
| - EXPECT_EQ(3, acc2_2->renderer_id());
|
| -
|
| - // Ensure we properly cleaned up.
|
| - manager.reset();
|
| - ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_);
|
| -}
|
|
|