Index: chrome_frame/test/chrome_frame_ui_test_utils.cc |
=================================================================== |
--- chrome_frame/test/chrome_frame_ui_test_utils.cc (revision 56373) |
+++ chrome_frame/test/chrome_frame_ui_test_utils.cc (working copy) |
@@ -13,6 +13,7 @@ |
#include "base/scoped_bstr_win.h" |
#include "base/scoped_ptr.h" |
#include "base/string_util.h" |
+#include "base/utf_string_conversions.h" |
#include "gfx/rect.h" |
#include "chrome_frame/test/win_event_receiver.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -53,6 +54,18 @@ |
} |
// static |
+AccObject* AccObject::CreateFromEvent(HWND hwnd, LONG object_id, |
+ LONG child_id) { |
+ ScopedComPtr<IAccessible> accessible; |
+ ScopedVariant acc_child_id; |
+ AccessibleObjectFromEvent(hwnd, object_id, child_id, accessible.Receive(), |
+ acc_child_id.Receive()); |
+ if (accessible && acc_child_id.type() == VT_I4) |
+ return new AccObject(accessible, V_I4(&acc_child_id)); |
+ return NULL; |
+} |
+ |
+// static |
AccObject* AccObject::CreateFromDispatch(IDispatch* dispatch) { |
if (dispatch) { |
ScopedComPtr<IAccessible> accessible; |
@@ -114,6 +127,22 @@ |
return did_select; |
} |
+bool AccObject::SetValue(const std::wstring& value) { |
+ ScopedBstr value_bstr(value.c_str()); |
+ EXPECT_HRESULT_SUCCEEDED(accessible_->put_accValue(child_id_, value_bstr)); |
+ |
+ // Double check that the object's value has actually changed. Some objects' |
+ // values can not be changed. |
+ bool did_set_value = false; |
+ std::wstring actual_value = L"-"; |
+ if (GetValue(&actual_value) && value == actual_value) { |
+ did_set_value = true; |
+ } |
+ EXPECT_TRUE(did_set_value) << "Could not set value for AccObject: " |
+ << GetDescription(); |
+ return did_set_value; |
+} |
+ |
bool AccObject::GetName(std::wstring* name) { |
DCHECK(name); |
ScopedBstr name_bstr; |
@@ -233,9 +262,12 @@ |
objects.push_back(new AccObject(accessible_, V_I4(&children[i]))); |
continue; |
} else if (FAILED(result)) { |
- LOG(ERROR) << "Failed to determine if child id refers to a full " |
- << "object. Error: " << result; |
- return false; |
+ DLOG(WARNING) << "Failed to determine if child id refers to a full " |
+ << "object. Error: " << result << std::endl |
+ << "Parent object: " << WideToUTF8(GetDescription()) |
+ << std::endl << "Child ID: " << V_I4(&children[i]); |
+ // Disregard this object. |
+ continue; |
} |
// The object in question was actually a full object. It is saved in the |
// |dispatch| arg and will be added down below. |
@@ -400,9 +432,9 @@ |
scoped_refptr<AccObject>* object) { |
DCHECK(object); |
EXPECT_TRUE(matcher.FindInWindow(hwnd, object)); |
- EXPECT_TRUE(object) << "Element not found for matcher: " |
+ EXPECT_TRUE(*object) << "Element not found for matcher: " |
<< matcher.GetDescription(); |
- if (!object) |
+ if (!*object) |
DumpAccessibilityTreeForWindow(hwnd); |
return *object; |
} |