Chromium Code Reviews| Index: chrome/browser/accessibility_win_browsertest.cc |
| =================================================================== |
| --- chrome/browser/accessibility_win_browsertest.cc (revision 57984) |
| +++ chrome/browser/accessibility_win_browsertest.cc (working copy) |
| @@ -82,10 +82,14 @@ |
| // Set the expected value for this AccessibleChecker. |
| void SetExpectedValue(wstring expected_value); |
| + // Set the expected state for this AccessibleChecker. |
| + void SetExpectedState(LONG expected_state); |
| + |
| private: |
| void CheckAccessibleName(IAccessible* accessible); |
| void CheckAccessibleRole(IAccessible* accessible); |
| void CheckAccessibleValue(IAccessible* accessible); |
| + void CheckAccessibleState(IAccessible* accessible); |
| void CheckAccessibleChildren(IAccessible* accessible); |
| private: |
| @@ -100,6 +104,9 @@ |
| // Expected accessible value. Checked against IAccessible::get_accValue. |
| wstring value_; |
| + // Expected accessible state. Checked against IAccessible::get_accState. |
| + LONG state_; |
| + |
| // Expected accessible children. Checked using IAccessible::get_accChildCount |
| // and ::AccessibleChildren. |
| AccessibleCheckerVector children_; |
| @@ -154,14 +161,16 @@ |
| wstring expected_name, int32 expected_role, wstring expected_value) : |
| name_(expected_name), |
| role_(expected_role), |
| - value_(expected_value) { |
| + value_(expected_value), |
| + state_(-1) { |
| } |
| AccessibleChecker::AccessibleChecker( |
| wstring expected_name, wstring expected_role, wstring expected_value) : |
| name_(expected_name), |
| role_(expected_role.c_str()), |
| - value_(expected_value) { |
| + value_(expected_value), |
| + state_(-1) { |
| } |
| void AccessibleChecker::AppendExpectedChild( |
| @@ -173,6 +182,7 @@ |
| CheckAccessibleName(accessible); |
| CheckAccessibleRole(accessible); |
| CheckAccessibleValue(accessible); |
| + CheckAccessibleState(accessible); |
| CheckAccessibleChildren(accessible); |
| } |
| @@ -180,6 +190,10 @@ |
| value_ = expected_value; |
| } |
| +void AccessibleChecker::SetExpectedState(LONG expected_state) { |
| + state_ = expected_state; |
| +} |
| + |
| void AccessibleChecker::CheckAccessibleName(IAccessible* accessible) { |
| CComBSTR name; |
| HRESULT hr = |
| @@ -215,6 +229,18 @@ |
| wstring(value.m_str, SysStringLen(value)).c_str()); |
| } |
| +void AccessibleChecker::CheckAccessibleState(IAccessible* accessible) { |
| + if (state_ < 0) |
| + return; |
| + |
| + VARIANT var_state = {0}; |
| + HRESULT hr = |
| + accessible->get_accState(CreateI4Variant(CHILDID_SELF), &var_state); |
| + EXPECT_EQ(hr, S_OK); |
| + EXPECT_EQ(VT_I4, V_VT(&var_state)); |
| + ASSERT_TRUE(state_ == V_I4(&var_state)); |
| +} |
| + |
| void AccessibleChecker::CheckAccessibleChildren(IAccessible* parent) { |
| LONG child_count = 0; |
| HRESULT hr = parent->get_accChildCount(&child_count); |
| @@ -306,7 +332,8 @@ |
| // detected. Request and wait for the accessibility tree to be updated. |
| GURL tree_url( |
| "data:text/html,<html><body><div onclick=\"this.innerHTML='<b>new text" |
| - "</b>';\"><b>old text</b></div></body></html>"); |
| + "</b>';\"><b>old text</b></div><div><input type='checkbox' /></div>" |
| + "</body></html>"); |
| browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); |
| ScopedComPtr<IAccessible> document_accessible( |
| GetRenderWidgetHostViewClientAccessible()); |
| @@ -314,14 +341,24 @@ |
| NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| AccessibleChecker text_checker(L"", ROLE_SYSTEM_TEXT, L"old text"); |
| + |
| + AccessibleChecker div_checker1(L"", L"div", L""); |
|
dmazzoni
2010/09/01 15:10:52
How about div1_checker through div3_checker?
Chris Guillory
2010/09/01 15:35:27
Done. I like that better.
|
| + div_checker1.AppendExpectedChild(&text_checker); |
| + |
| AccessibleChecker checkbox_checker(L"", ROLE_SYSTEM_CHECKBUTTON, L""); |
| + checkbox_checker.SetExpectedState( |
| + STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY); |
| - AccessibleChecker div_checker(L"", L"div", L""); |
| - div_checker.AppendExpectedChild(&text_checker); |
| + AccessibleChecker div_checker2(L"", L"div", L""); |
| + div_checker2.AppendExpectedChild(&checkbox_checker); |
| AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); |
| - document_checker.AppendExpectedChild(&div_checker); |
| + document_checker.AppendExpectedChild(&div_checker1); |
| + document_checker.AppendExpectedChild(&div_checker2); |
| + // TODO(ctguil): Fix: We should not be expecting busy state here. |
| + document_checker.SetExpectedState(STATE_SYSTEM_BUSY); |
| + |
| // Check the accessible tree of the browser. |
| document_accessible = GetRenderWidgetHostViewClientAccessible(); |
| ASSERT_NE(document_accessible.get(), reinterpret_cast<IAccessible*>(NULL)); |
| @@ -339,8 +376,30 @@ |
| ui_test_utils::WaitForNotification( |
| NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| + div_dispatch.Release(); |
| + div_accessible.Release(); |
| + |
| // Check that the accessibility tree of the browser has been updated. |
| text_checker.SetExpectedValue(L"new text"); |
| document_checker.CheckAccessible(document_accessible); |
| + |
| + // Perform the default action on the checkbox which marks it as checked. |
| + hr = document_accessible->get_accChild(CreateI4Variant(2), &div_dispatch); |
| + EXPECT_EQ(hr, S_OK); |
| + div_accessible = div_dispatch; |
| + CComPtr<IDispatch> checkbox_dispatch; |
| + hr = div_accessible->get_accChild(CreateI4Variant(1), &checkbox_dispatch); |
| + EXPECT_EQ(hr, S_OK); |
| + CComQIPtr<IAccessible> checkbox_accessible(checkbox_dispatch); |
| + hr = checkbox_accessible->accDoDefaultAction(CreateI4Variant(CHILDID_SELF)); |
| + EXPECT_EQ(hr, S_OK); |
| + ui_test_utils::WaitForNotification( |
| + NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| + |
| + // Check that the accessibility tree of the browser has been updated. |
| + checkbox_checker.SetExpectedState( |
| + STATE_SYSTEM_CHECKED | STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED | |
| + STATE_SYSTEM_READONLY); |
| + document_checker.CheckAccessible(document_accessible); |
| } |
| } // namespace. |