Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Unified Diff: chrome/browser/accessibility/browser_accessibility_win_unittest.cc

Issue 8804001: Move a bunch of accessibility tests in chrome that have no chrome dependencies to content. We wan... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/accessibility/browser_accessibility_win_unittest.cc
===================================================================
--- chrome/browser/accessibility/browser_accessibility_win_unittest.cc (revision 112878)
+++ chrome/browser/accessibility/browser_accessibility_win_unittest.cc (working copy)
@@ -1,367 +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/memory/scoped_ptr.h"
-#include "base/win/scoped_comptr.h"
-#include "content/browser/accessibility/browser_accessibility_manager.h"
-#include "content/browser/accessibility/browser_accessibility_win.h"
-#include "content/common/view_messages.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/base/win/atl_module.h"
-
-using webkit_glue::WebAccessibility;
-
-namespace {
-
-// Subclass of BrowserAccessibilityWin that counts the number of instances.
-class CountedBrowserAccessibility : public BrowserAccessibilityWin {
- public:
- CountedBrowserAccessibility() { global_obj_count_++; }
- virtual ~CountedBrowserAccessibility() { global_obj_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() {
- CComObject<CountedBrowserAccessibility>* instance;
- HRESULT hr = CComObject<CountedBrowserAccessibility>::CreateInstance(
- &instance);
- DCHECK(SUCCEEDED(hr));
- instance->AddRef();
- return instance;
- }
-};
-
-} // anonymous namespace
-
-VARIANT CreateI4Variant(LONG value) {
- VARIANT variant = {0};
-
- V_VT(&variant) = VT_I4;
- V_I4(&variant) = value;
-
- return variant;
-}
-
-class BrowserAccessibilityTest : public testing::Test {
- protected:
- virtual void SetUp() {
- ui::win::CreateATLModuleIfNeeded();
- ::CoInitialize(NULL);
- }
-
- virtual void TearDown() {
- ::CoUninitialize();
- }
-};
-
-// Test that BrowserAccessibilityManager correctly releases the tree of
-// BrowserAccessibility instances upon delete.
-TEST_F(BrowserAccessibilityTest, TestNoLeaks) {
- // Create WebAccessibility objects for a simple document tree,
- // representing the accessibility information used to initialize
- // BrowserAccessibilityManager.
- WebAccessibility button;
- button.id = 2;
- button.name = L"Button";
- button.role = WebAccessibility::ROLE_BUTTON;
- button.state = 0;
-
- WebAccessibility checkbox;
- checkbox.id = 3;
- checkbox.name = L"Checkbox";
- checkbox.role = WebAccessibility::ROLE_CHECKBOX;
- checkbox.state = 0;
-
- WebAccessibility root;
- root.id = 1;
- root.name = L"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(
- GetDesktopWindow(),
- 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 use the IAccessible interface
- // to get new references to two of the three nodes in the tree.
- manager =
- BrowserAccessibilityManager::Create(
- GetDesktopWindow(),
- root,
- NULL,
- new CountedBrowserAccessibilityFactory());
- ASSERT_EQ(3, CountedBrowserAccessibility::global_obj_count_);
- IAccessible* root_accessible =
- manager->GetRoot()->toBrowserAccessibilityWin();
- IDispatch* root_iaccessible = NULL;
- IDispatch* child1_iaccessible = NULL;
- VARIANT var_child;
- var_child.vt = VT_I4;
- var_child.lVal = CHILDID_SELF;
- HRESULT hr = root_accessible->get_accChild(var_child, &root_iaccessible);
- ASSERT_EQ(S_OK, hr);
- var_child.lVal = 1;
- hr = root_accessible->get_accChild(var_child, &child1_iaccessible);
- ASSERT_EQ(S_OK, hr);
-
- // 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_iaccessible->Release();
- ASSERT_EQ(1, CountedBrowserAccessibility::global_obj_count_);
- child1_iaccessible->Release();
- ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_);
-}
-
-TEST_F(BrowserAccessibilityTest, TestChildrenChange) {
- // Create WebAccessibility objects for a simple document tree,
- // representing the accessibility information used to initialize
- // BrowserAccessibilityManager.
- WebAccessibility text;
- text.id = 2;
- text.role = WebAccessibility::ROLE_STATIC_TEXT;
- text.name = L"old text";
- text.state = 0;
-
- WebAccessibility root;
- root.id = 1;
- root.name = L"Document";
- root.role = WebAccessibility::ROLE_DOCUMENT;
- root.state = 0;
- root.children.push_back(text);
-
- // Construct a BrowserAccessibilityManager with this WebAccessibility tree
- // and a factory for an instance-counting BrowserAccessibility.
- CountedBrowserAccessibility::global_obj_count_ = 0;
- BrowserAccessibilityManager* manager =
- BrowserAccessibilityManager::Create(
- GetDesktopWindow(),
- root,
- NULL,
- new CountedBrowserAccessibilityFactory());
-
- // Query for the text IAccessible and verify that it returns "old text" as its
- // value.
- base::win::ScopedComPtr<IDispatch> text_dispatch;
- HRESULT hr = manager->GetRoot()->toBrowserAccessibilityWin()->get_accChild(
- CreateI4Variant(1), text_dispatch.Receive());
- ASSERT_EQ(S_OK, hr);
-
- base::win::ScopedComPtr<IAccessible> text_accessible;
- hr = text_dispatch.QueryInterface(text_accessible.Receive());
- ASSERT_EQ(S_OK, hr);
-
- CComBSTR name;
- hr = text_accessible->get_accName(CreateI4Variant(CHILDID_SELF), &name);
- ASSERT_EQ(S_OK, hr);
- EXPECT_STREQ(L"old text", name.m_str);
-
- text_dispatch.Release();
- text_accessible.Release();
-
- // Notify the BrowserAccessibilityManager that the text child has changed.
- text.name = L"new text";
- ViewHostMsg_AccessibilityNotification_Params param;
- param.notification_type = ViewHostMsg_AccEvent::CHILDREN_CHANGED;
- param.acc_tree = text;
- param.includes_children = true;
- param.id = text.id;
- std::vector<ViewHostMsg_AccessibilityNotification_Params> notifications;
- notifications.push_back(param);
- manager->OnAccessibilityNotifications(notifications);
-
- // Query for the text IAccessible and verify that it now returns "new text"
- // as its value.
- hr = manager->GetRoot()->toBrowserAccessibilityWin()->get_accChild(
- CreateI4Variant(1),
- text_dispatch.Receive());
- ASSERT_EQ(S_OK, hr);
-
- hr = text_dispatch.QueryInterface(text_accessible.Receive());
- ASSERT_EQ(S_OK, hr);
-
- hr = text_accessible->get_accName(CreateI4Variant(CHILDID_SELF), &name);
- ASSERT_EQ(S_OK, hr);
- EXPECT_STREQ(L"new text", name.m_str);
-
- text_dispatch.Release();
- text_accessible.Release();
-
- // Delete the manager and test that all BrowserAccessibility instances are
- // deleted.
- delete manager;
- ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_);
-}
-
-TEST_F(BrowserAccessibilityTest, TestChildrenChangeNoLeaks) {
- // Create WebAccessibility objects for a simple document tree,
- // representing the accessibility information used to initialize
- // BrowserAccessibilityManager.
- WebAccessibility text;
- text.id = 3;
- text.role = WebAccessibility::ROLE_STATIC_TEXT;
- text.state = 0;
-
- WebAccessibility div;
- div.id = 2;
- div.role = WebAccessibility::ROLE_GROUP;
- div.state = 0;
-
- div.children.push_back(text);
- text.id = 4;
- div.children.push_back(text);
-
- WebAccessibility root;
- root.id = 1;
- root.role = WebAccessibility::ROLE_DOCUMENT;
- root.state = 0;
- root.children.push_back(div);
-
- // Construct a BrowserAccessibilityManager with this WebAccessibility tree
- // and a factory for an instance-counting BrowserAccessibility and ensure
- // that exactly 4 instances were created. Note that the manager takes
- // ownership of the factory.
- CountedBrowserAccessibility::global_obj_count_ = 0;
- BrowserAccessibilityManager* manager =
- BrowserAccessibilityManager::Create(
- GetDesktopWindow(),
- root,
- NULL,
- new CountedBrowserAccessibilityFactory());
- ASSERT_EQ(4, CountedBrowserAccessibility::global_obj_count_);
-
- // Notify the BrowserAccessibilityManager that the div node and its children
- // were removed and ensure that only one BrowserAccessibility instance exists.
- root.children.clear();
- ViewHostMsg_AccessibilityNotification_Params param;
- param.notification_type = ViewHostMsg_AccEvent::CHILDREN_CHANGED;
- param.acc_tree = root;
- param.includes_children = true;
- param.id = root.id;
- std::vector<ViewHostMsg_AccessibilityNotification_Params> notifications;
- notifications.push_back(param);
- manager->OnAccessibilityNotifications(notifications);
- ASSERT_EQ(1, CountedBrowserAccessibility::global_obj_count_);
-
- // Delete the manager and test that all BrowserAccessibility instances are
- // deleted.
- delete manager;
- ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_);
-}
-
-TEST_F(BrowserAccessibilityTest, TestTextBoundaries) {
- WebAccessibility text1;
- text1.id = 11;
- text1.role = WebAccessibility::ROLE_TEXT_FIELD;
- text1.state = 0;
- text1.value = L"One two three.\nFour five six.";
- text1.line_breaks.push_back(15);
-
- WebAccessibility root;
- root.id = 1;
- root.role = WebAccessibility::ROLE_DOCUMENT;
- root.state = 0;
- root.children.push_back(text1);
-
- CountedBrowserAccessibility::global_obj_count_ = 0;
- BrowserAccessibilityManager* manager = BrowserAccessibilityManager::Create(
- GetDesktopWindow(), root, NULL,
- new CountedBrowserAccessibilityFactory());
- ASSERT_EQ(2, CountedBrowserAccessibility::global_obj_count_);
-
- BrowserAccessibilityWin* root_obj =
- manager->GetRoot()->toBrowserAccessibilityWin();
- BrowserAccessibilityWin* text1_obj =
- root_obj->GetChild(0)->toBrowserAccessibilityWin();
-
- BSTR text;
- long start;
- long end;
-
- long text1_len;
- ASSERT_EQ(S_OK, text1_obj->get_nCharacters(&text1_len));
-
- ASSERT_EQ(S_OK, text1_obj->get_text(0, text1_len, &text));
- ASSERT_EQ(text, text1.value);
- SysFreeString(text);
-
- ASSERT_EQ(S_OK, text1_obj->get_text(0, 4, &text));
- ASSERT_EQ(text, string16(L"One "));
- SysFreeString(text);
-
- ASSERT_EQ(S_OK, text1_obj->get_textAtOffset(
- 1, IA2_TEXT_BOUNDARY_CHAR, &start, &end, &text));
- ASSERT_EQ(start, 1);
- ASSERT_EQ(end, 2);
- ASSERT_EQ(text, string16(L"n"));
- SysFreeString(text);
-
- ASSERT_EQ(S_FALSE, text1_obj->get_textAtOffset(
- text1_len, IA2_TEXT_BOUNDARY_CHAR, &start, &end, &text));
- ASSERT_EQ(start, text1_len);
- ASSERT_EQ(end, text1_len);
-
- ASSERT_EQ(S_OK, text1_obj->get_textAtOffset(
- 1, IA2_TEXT_BOUNDARY_WORD, &start, &end, &text));
- ASSERT_EQ(start, 0);
- ASSERT_EQ(end, 3);
- ASSERT_EQ(text, string16(L"One"));
- SysFreeString(text);
-
- ASSERT_EQ(S_OK, text1_obj->get_textAtOffset(
- 6, IA2_TEXT_BOUNDARY_WORD, &start, &end, &text));
- ASSERT_EQ(start, 4);
- ASSERT_EQ(end, 7);
- ASSERT_EQ(text, string16(L"two"));
- SysFreeString(text);
-
- ASSERT_EQ(S_OK, text1_obj->get_textAtOffset(
- text1_len, IA2_TEXT_BOUNDARY_WORD, &start, &end, &text));
- ASSERT_EQ(start, 25);
- ASSERT_EQ(end, 29);
- ASSERT_EQ(text, string16(L"six."));
- SysFreeString(text);
-
- ASSERT_EQ(S_OK, text1_obj->get_textAtOffset(
- 1, IA2_TEXT_BOUNDARY_LINE, &start, &end, &text));
- ASSERT_EQ(start, 0);
- ASSERT_EQ(end, 15);
- ASSERT_EQ(text, string16(L"One two three.\n"));
- SysFreeString(text);
-
- ASSERT_EQ(S_OK, text1_obj->get_text(0, IA2_TEXT_OFFSET_LENGTH, &text));
- ASSERT_EQ(text, string16(L"One two three.\nFour five six."));
- SysFreeString(text);
-
- // Delete the manager and test that all BrowserAccessibility instances are
- // deleted.
- delete manager;
- ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_);
-}

Powered by Google App Engine
This is Rietveld 408576698