Commit a515f3fb authored by pkasting@chromium.org's avatar pkasting@chromium.org

Revert 149510 - Allow filters in accessibility tests to specify which attributes to check.

This may have caused the Win 7 WebKit canary bot to begin crashing; see
http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=accessibility%2Floading-iframe-updates-axtree.html
If rolling this out does not fix the bot, I will put it back in later tonight.

With this change, a DumpAccessibilityTree test can specify filters to
control which attributes are printed. This keeps each test expectation file
small and readable, while making it easy to test for all sorts of attributes,
including obscure ones.

Each platform will have a few attributes that print by default, like the
role and name. HTML files add rules of this form to override the defaults:

  @MAC-DENY:subrole*
  @MAC-DENY:value*
  @MAC-ALLOW:description*

You can also specify @MAC-ALLOW:* or @WIN-ALLOW:* if you want to dump everything - helpful
during development sometimes.

BUG=124314


Review URL: https://chromiumcodereview.appspot.com/10662003

TBR=dmazzoni@chromium.org
Review URL: https://chromiumcodereview.appspot.com/10837065

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@149550 0039d316-1c4b-4281-b951-d872f2087c98
parent 221c45d9
......@@ -747,14 +747,9 @@ BrowserAccessibilityWin
REFIID iid,
void** object);
// Accessors.
int32 ia_role() const { return ia_role_; }
int32 ia_state() const { return ia_state_; }
int32 ia2_role() const { return ia2_role_; }
int32 ia2_state() const { return ia2_state_; }
const std::vector<string16>& ia2_attributes() const {
return ia2_attributes_;\
}
// Accessors to IA2 role and state.
int32 ia2_role() { return ia2_role_; }
int32 ia2_state() { return ia2_state_; }
private:
// Add one to the reference count and return the same object. Always
......
......@@ -2,13 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <set>
#include <string>
#include <vector>
#include "base/logging.h"
#include "base/path_service.h"
#include "base/string_split.h"
#include "base/string_util.h"
#include "base/string16.h"
#include "base/utf_string_conversions.h"
......@@ -28,6 +26,8 @@
#include "testing/gtest/include/gtest/gtest.h"
namespace {
// Required to enter html content into a url.
static const std::string kUrlPreamble = "data:text/html,\n<!doctype html>";
static const char kCommentToken = '#';
static const char* kMarkSkipFile = "#<skip";
static const char* kMarkEndOfFile = "<-- End-of-file -->";
......@@ -51,7 +51,7 @@ class DumpAccessibilityTreeTest : public ContentBrowserTest {
// Utility helper that does a comment aware equality check.
// Returns array of lines from expected file which are different.
std::vector<int> DiffLines(std::vector<std::string>& expected_lines,
std::vector<std::string>& actual_lines) {
std::vector<std::string>& actual_lines) {
int actual_lines_count = actual_lines.size();
int expected_lines_count = expected_lines.size();
std::vector<int> diff_lines;
......@@ -74,42 +74,16 @@ class DumpAccessibilityTreeTest : public ContentBrowserTest {
return diff_lines;
}
void AddDefaultFilters(std::set<string16>* allow_filters,
std::set<string16>* deny_filters) {
allow_filters->insert(ASCIIToUTF16("FOCUSABLE"));
allow_filters->insert(ASCIIToUTF16("READONLY"));
}
void ParseFilters(const std::string& test_html,
std::set<string16>* allow_filters,
std::set<string16>* deny_filters) {
std::vector<std::string> lines;
base::SplitString(test_html, '\n', &lines);
for (std::vector<std::string>::const_iterator iter = lines.begin();
iter != lines.end();
++iter) {
const std::string& line = *iter;
const std::string& allow_str = helper_.GetAllowString();
const std::string& deny_str = helper_.GetDenyString();
if (StartsWithASCII(line, allow_str, true))
allow_filters->insert(UTF8ToUTF16(line.substr(allow_str.size())));
else if (StartsWithASCII(line, deny_str, true))
deny_filters->insert(UTF8ToUTF16(line.substr(deny_str.size())));
}
}
void RunTest(const FilePath::CharType* file_path);
DumpAccessibilityTreeHelper helper_;
};
void DumpAccessibilityTreeTest::RunTest(const FilePath::CharType* file_path) {
NavigateToURL(shell(), GURL("about:blank"));
IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest,
DISABLED_PlatformTreeDifferenceTest) {
RenderWidgetHostViewPort* host_view = static_cast<RenderWidgetHostViewPort*>(
shell()->web_contents()->GetRenderWidgetHostView());
RenderWidgetHostImpl* host =
RenderWidgetHostImpl::From(host_view->GetRenderWidgetHost());
RenderViewHostImpl* view_host = static_cast<RenderViewHostImpl*>(host);
RenderWidgetHost* host = host_view->GetRenderWidgetHost();
RenderViewHostImpl* view_host =
static_cast<RenderViewHostImpl*>(RenderWidgetHostImpl::From(host));
view_host->set_save_accessibility_tree_for_testing(true);
view_host->SetAccessibilityMode(AccessibilityModeComplete);
......@@ -120,141 +94,107 @@ void DumpAccessibilityTreeTest::RunTest(const FilePath::CharType* file_path) {
EXPECT_TRUE(file_util::PathExists(test_path))
<< test_path.LossyDisplayName();
FilePath html_file = test_path.Append(FilePath(file_path));
// Output the test path to help anyone who encounters a failure and needs
// to know where to look.
printf("Testing: %s\n", html_file.MaybeAsASCII().c_str());
std::string html_contents;
file_util::ReadFileToString(html_file, &html_contents);
// Parse filters in the test file.
std::set<string16> allow_filters;
std::set<string16> deny_filters;
AddDefaultFilters(&allow_filters, &deny_filters);
ParseFilters(html_contents, &allow_filters, &deny_filters);
helper_.SetFilters(allow_filters, deny_filters);
// Read the expected file.
std::string expected_contents_raw;
FilePath expected_file =
FilePath(html_file.RemoveExtension().value() +
helper_.GetExpectedFileSuffix());
file_util::ReadFileToString(
expected_file,
&expected_contents_raw);
// Tolerate Windows-style line endings (\r\n) in the expected file:
// normalize by deleting all \r from the file (if any) to leave only \n.
std::string expected_contents;
RemoveChars(expected_contents_raw, "\r", &expected_contents);
if (!expected_contents.compare(0, strlen(kMarkSkipFile), kMarkSkipFile)) {
printf("Skipping this test on this platform.\n");
return;
}
// Load the page.
WindowedNotificationObserver tree_updated_observer(
NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED,
NotificationService::AllSources());
string16 html_contents16;
html_contents16 = UTF8ToUTF16(html_contents);
GURL url = GetTestUrl("accessibility",
html_file.BaseName().MaybeAsASCII().c_str());
NavigateToURL(shell(), url);
// Wait for the tree.
tree_updated_observer.Wait();
// Perform a diff (or write the initial baseline).
string16 actual_contents_utf16;
helper_.DumpAccessibilityTree(
host_view->GetBrowserAccessibilityManager()->GetRoot(),
&actual_contents_utf16);
std::string actual_contents = UTF16ToUTF8(actual_contents_utf16);
std::vector<std::string> actual_lines, expected_lines;
Tokenize(actual_contents, "\n", &actual_lines);
Tokenize(expected_contents, "\n", &expected_lines);
// Marking the end of the file with a line of text ensures that
// file length differences are found.
expected_lines.push_back(kMarkEndOfFile);
actual_lines.push_back(kMarkEndOfFile);
printf("Path to test files: %s\n", test_path.MaybeAsASCII().c_str());
// Grab all HTML files.
file_util::FileEnumerator file_enumerator(test_path,
false,
file_util::FileEnumerator::FILES,
FILE_PATH_LITERAL("*.html"));
// TODO(dtseng): Make each of these a gtest with script.
FilePath html_file(file_enumerator.Next());
ASSERT_FALSE(html_file.empty());
do {
std::string html_contents;
file_util::ReadFileToString(html_file, &html_contents);
// Read the expected file.
std::string expected_contents_raw;
FilePath expected_file =
FilePath(html_file.RemoveExtension().value() +
helper_.GetExpectedFileSuffix());
file_util::ReadFileToString(
expected_file,
&expected_contents_raw);
// Tolerate Windows-style line endings (\r\n) in the expected file:
// normalize by deleting all \r from the file (if any) to leave only \n.
std::string expected_contents;
RemoveChars(expected_contents_raw, "\r", &expected_contents);
if (!expected_contents.compare(0, strlen(kMarkSkipFile), kMarkSkipFile)) {
printf("Skipping %s\n", html_file.BaseName().MaybeAsASCII().c_str());
continue;
}
std::vector<int> diff_lines = DiffLines(expected_lines, actual_lines);
bool is_different = diff_lines.size() > 0;
EXPECT_FALSE(is_different);
if (is_different) {
// Mark the expected lines which did not match actual output with a *.
printf("* Line Expected\n");
printf("- ---- --------\n");
for (int line = 0, diff_index = 0;
line < static_cast<int>(expected_lines.size());
++line) {
bool is_diff = false;
if (diff_index < static_cast<int>(diff_lines.size()) &&
diff_lines[diff_index] == line) {
is_diff = true;
++ diff_index;
printf("Testing %s\n", html_file.BaseName().MaybeAsASCII().c_str());
// Load the page.
WindowedNotificationObserver tree_updated_observer(
NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED,
NotificationService::AllSources());
string16 html_contents16;
html_contents16 = UTF8ToUTF16(html_contents);
GURL url(UTF8ToUTF16(kUrlPreamble) + html_contents16);
NavigateToURL(shell(), url);
// Wait for the tree.
tree_updated_observer.Wait();
// Perform a diff (or write the initial baseline).
string16 actual_contents_utf16;
helper_.DumpAccessibilityTree(
host_view->GetBrowserAccessibilityManager()->GetRoot(),
&actual_contents_utf16);
std::string actual_contents = UTF16ToUTF8(actual_contents_utf16);
std::vector<std::string> actual_lines, expected_lines;
Tokenize(actual_contents, "\n", &actual_lines);
Tokenize(expected_contents, "\n", &expected_lines);
// Marking the end of the file with a line of text ensures that
// file length differences are found.
expected_lines.push_back(kMarkEndOfFile);
actual_lines.push_back(kMarkEndOfFile);
std::vector<int> diff_lines = DiffLines(expected_lines, actual_lines);
bool is_different = diff_lines.size() > 0;
EXPECT_FALSE(is_different);
if (is_different) {
// Mark the expected lines which did not match actual output with a *.
printf("* Line Expected\n");
printf("- ---- --------\n");
for (int line = 0, diff_index = 0;
line < static_cast<int>(expected_lines.size());
++line) {
bool is_diff = false;
if (diff_index < static_cast<int>(diff_lines.size()) &&
diff_lines[diff_index] == line) {
is_diff = true;
++ diff_index;
}
printf("%1s %4d %s\n", is_diff? kSignalDiff : "", line + 1,
expected_lines[line].c_str());
}
printf("%1s %4d %s\n", is_diff? kSignalDiff : "", line + 1,
expected_lines[line].c_str());
printf("\nActual\n");
printf("------\n");
printf("%s\n", actual_contents.c_str());
}
printf("\nActual\n");
printf("------\n");
printf("%s\n", actual_contents.c_str());
}
if (!file_util::PathExists(expected_file)) {
FilePath actual_file =
FilePath(html_file.RemoveExtension().value() +
helper_.GetActualFileSuffix());
EXPECT_TRUE(file_util::WriteFile(
actual_file, actual_contents.c_str(), actual_contents.size()));
ADD_FAILURE() << "No expectation found. Create it by doing:\n"
<< "mv " << actual_file.LossyDisplayName() << " "
<< expected_file.LossyDisplayName();
}
}
IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityA) {
RunTest(FILE_PATH_LITERAL("a.html"));
}
IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAName) {
RunTest(FILE_PATH_LITERAL("a-name.html"));
}
IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAOnclick) {
RunTest(FILE_PATH_LITERAL("a-onclick.html"));
}
IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest,
AccessibilityAriaApplication) {
RunTest(FILE_PATH_LITERAL("aria-application.html"));
}
IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAWithImg) {
RunTest(FILE_PATH_LITERAL("a-with-img.html"));
}
IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest,
AccessibilityContenteditableDescendants) {
RunTest(FILE_PATH_LITERAL("contenteditable-descendants.html"));
}
if (!file_util::PathExists(expected_file)) {
FilePath actual_file =
FilePath(html_file.RemoveExtension().value() +
helper_.GetActualFileSuffix());
IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityFooter) {
RunTest(FILE_PATH_LITERAL("footer.html"));
}
EXPECT_TRUE(file_util::WriteFile(
actual_file, actual_contents.c_str(), actual_contents.size()));
IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityListMarkers) {
RunTest(FILE_PATH_LITERAL("list-markers.html"));
}
IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityUl) {
RunTest(FILE_PATH_LITERAL("ul.html"));
ADD_FAILURE() << "No expectation found. Create it by doing:\n"
<< "mv " << actual_file.LossyDisplayName() << " "
<< expected_file.LossyDisplayName();
}
} while (!(html_file = file_enumerator.Next()).empty());
}
} // namespace content
......@@ -4,21 +4,12 @@
#include "content/browser/accessibility/dump_accessibility_tree_helper.h"
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "base/string_util.h"
namespace {
const int kIndentSpaces = 4;
}
DumpAccessibilityTreeHelper::DumpAccessibilityTreeHelper() {
Initialize();
}
DumpAccessibilityTreeHelper::~DumpAccessibilityTreeHelper() {
}
void DumpAccessibilityTreeHelper::DumpAccessibilityTree(
BrowserAccessibility* node, string16* contents) {
RecursiveDumpAccessibilityTree(node, contents, 0);
......@@ -37,41 +28,3 @@ void DumpAccessibilityTreeHelper::RecursiveDumpAccessibilityTree(
indent + kIndentSpaces);
}
}
void DumpAccessibilityTreeHelper::SetFilters(
const std::set<string16>& allow_filters,
const std::set<string16>& deny_filters) {
allow_filters_ = allow_filters;
deny_filters_ = deny_filters;
}
bool DumpAccessibilityTreeHelper::MatchesFilters(
const string16& text, bool default_result) {
std::set<string16>::const_iterator iter = allow_filters_.begin();
for (iter = allow_filters_.begin(); iter != allow_filters_.end(); ++iter) {
if (MatchPattern(text, *iter))
return true;
}
for (iter = deny_filters_.begin(); iter != deny_filters_.end(); ++iter) {
if (MatchPattern(text, *iter))
return false;
}
return default_result;
}
void DumpAccessibilityTreeHelper::StartLine() {
line_.clear();
}
void DumpAccessibilityTreeHelper::Add(
bool include_by_default, const string16& attr) {
if (!MatchesFilters(attr, include_by_default))
return;
if (!line_.empty())
line_ += ASCIIToUTF16(" ");
line_ += attr;
}
string16 DumpAccessibilityTreeHelper::FinishLine() {
return line_;
}
......@@ -5,8 +5,6 @@
#ifndef CONTENT_BROWSER_ACCESSIBILITY_DUMP_ACCESSIBILITY_TREE_HELPER_H_
#define CONTENT_BROWSER_ACCESSIBILITY_DUMP_ACCESSIBILITY_TREE_HELPER_H_
#include <set>
#include "base/file_path.h"
#include "base/string16.h"
#include "base/utf_string_conversions.h"
......@@ -17,18 +15,10 @@
// implemented.
class DumpAccessibilityTreeHelper {
public:
DumpAccessibilityTreeHelper();
virtual ~DumpAccessibilityTreeHelper();
// Dumps a BrowserAccessibility tree into a string.
void DumpAccessibilityTree(BrowserAccessibility* node,
string16* contents);
// Set regular expression filters that apply to each component of every
// line before it's output.
void SetFilters(const std::set<string16>& allow_filters,
const std::set<string16>& deny_filters);
// Suffix of the expectation file corresponding to html file.
// Example:
// HTML test: test-file.html
......@@ -37,20 +27,6 @@ class DumpAccessibilityTreeHelper {
const FilePath::StringType GetActualFileSuffix() const;
const FilePath::StringType GetExpectedFileSuffix() const;
// A platform-specific string that indicates a given line in a file
// is an allow or deny filter. Example:
// Mac values:
// GetAllowString() -> "@MAC-ALLOW:"
// GetDenyString() -> "@MAC-DENY:"
// Example html:
// <!--
// @MAC-ALLOW:roleDescription*
// @MAC-DENY:subrole*
// -->
// <p>Text</p>
const std::string GetAllowString() const;
const std::string GetDenyString() const;
protected:
void RecursiveDumpAccessibilityTree(BrowserAccessibility* node,
string16* contents,
......@@ -62,17 +38,6 @@ class DumpAccessibilityTreeHelper {
string16 ToString(BrowserAccessibility* node, char* prefix);
void Initialize();
bool MatchesFilters(const string16& text, bool default_result);
void StartLine();
void Add(bool include_by_default, const string16& attr);
string16 FinishLine();
std::set<string16> allow_filters_;
std::set<string16> deny_filters_;
string16 line_;
DISALLOW_COPY_AND_ASSIGN(DumpAccessibilityTreeHelper);
};
#endif // CONTENT_BROWSER_ACCESSIBILITY_DUMP_ACCESSIBILITY_TREE_HELPER_H_
......@@ -11,35 +11,26 @@
#include "content/browser/accessibility/browser_accessibility_cocoa.h"
#include "content/browser/accessibility/browser_accessibility_mac.h"
namespace {
string16 Format(BrowserAccessibility* node,
const char *prefix,
SEL selector,
const char *suffix) {
BrowserAccessibilityCocoa* cocoa_node = node->ToBrowserAccessibilityCocoa();
NSString* format_str =
[NSString stringWithFormat:@"%s%%@%s", prefix, suffix];
NSString* tmp = [NSString stringWithFormat:format_str,
[cocoa_node performSelector:selector]];
return UTF8ToUTF16([tmp cStringUsingEncoding:NSUTF8StringEncoding]);
}
}
void DumpAccessibilityTreeHelper::Initialize() {}
string16 DumpAccessibilityTreeHelper::ToString(BrowserAccessibility* node,
char* prefix) {
StartLine();
Add(true, Format(node, "", @selector(role), ""));
Add(true, Format(node, "subrole=", @selector(subrole), ""));
Add(false, Format(node, "roleDescription='",
@selector(roleDescription),
"'"));
Add(true, Format(node, "title='", @selector(title), "'"));
Add(true, Format(node, "value='", @selector(value), "'"));
Add(false, Format(node, "description='", @selector(description), "'"));
Add(false, Format(node, "help='", @selector(help), "'"));
return ASCIIToUTF16(prefix) + FinishLine() + ASCIIToUTF16("\n");
BrowserAccessibilityCocoa* cocoa_node = node->ToBrowserAccessibilityCocoa();
NSString* dump =
[NSString stringWithFormat:@"%s%@ "
"subrole=%@ "
"roleDescription='%@' "
"title='%@' "
"value='%@'\n",
prefix,
[cocoa_node role],
[cocoa_node subrole],
[cocoa_node roleDescription],
[cocoa_node title],
[cocoa_node value]];
std::string tempVal = [dump cStringUsingEncoding:NSUTF8StringEncoding];
return UTF8ToUTF16(tempVal);
}
const FilePath::StringType DumpAccessibilityTreeHelper::GetActualFileSuffix()
......@@ -51,11 +42,3 @@ const FilePath::StringType DumpAccessibilityTreeHelper::GetExpectedFileSuffix()
const {
return FILE_PATH_LITERAL("-expected-mac.txt");
}
const std::string DumpAccessibilityTreeHelper::GetAllowString() const {
return "@MAC-ALLOW:";
}
const std::string DumpAccessibilityTreeHelper::GetDenyString() const {
return "@MAC-DENY:";
}
......@@ -12,60 +12,38 @@
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
#include "content/browser/accessibility/browser_accessibility_win.h"
#include "content/common/accessibility_node_data.h"
#include "content/public/test/accessibility_test_utils_win.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/iaccessible2/ia2_api_all.h"
#include "ui/base/win/atl_module.h"
void DumpAccessibilityTreeHelper::Initialize() {
ui::win::CreateATLModuleIfNeeded();
}
string16 DumpAccessibilityTreeHelper::ToString(
BrowserAccessibility* node, char* prefix) {
BrowserAccessibilityWin* acc_obj = node->ToBrowserAccessibilityWin();
// Get the computed name.
// Get state string.
VARIANT variant_self;
variant_self.vt = VT_I4;
variant_self.lVal = CHILDID_SELF;
CComBSTR msaa_name_variant;
HRESULT hresult = acc_obj->get_accName(variant_self, &msaa_name_variant);
string16 name;
if (S_OK == hresult)
name = msaa_name_variant.m_str;
// Get state strings.
std::vector<string16> state_strings;
IAccessibleStateToStringVector(acc_obj->ia_state(), &state_strings);
IAccessible2StateToStringVector(acc_obj->ia2_state(), &state_strings);
VARIANT msaa_state_variant;
HRESULT hresult = acc_obj->get_accState(variant_self, &msaa_state_variant);
EXPECT_EQ(S_OK, hresult);
EXPECT_EQ(VT_I4, msaa_state_variant.vt);
string16 state_str = IAccessibleStateToString(msaa_state_variant.lVal);
string16 state2_str = IAccessible2StateToString(acc_obj->ia2_state());
if (!state2_str.empty()) {
if (!state_str.empty())
state_str += L",";
state_str += state2_str;
}
// Get the description and attributes.
string16 description;
acc_obj->GetStringAttribute(content::AccessibilityNodeData::ATTR_DESCRIPTION,
&description);
const std::vector<string16>& ia2_attributes = acc_obj->ia2_attributes();
// Get role string.
string16 role_str = IAccessible2RoleToString(acc_obj->ia2_role());
// Build the line.
StartLine();
Add(true, IAccessible2RoleToString(acc_obj->ia2_role()));
Add(true, L"name='" + name + L"'");
for (std::vector<string16>::const_iterator it = state_strings.begin();
it != state_strings.end();
++it) {
Add(false, *it);
}
for (std::vector<string16>::const_iterator it = ia2_attributes.begin();
it != ia2_attributes.end();
++it) {
Add(false, *it);
}
Add(false, L"role_name='" + acc_obj->role_name() + L"'");
Add(false, L"value='" + acc_obj->value() + L"'");
Add(false, L"description='" + description + L"'");
return UTF8ToUTF16(prefix) + FinishLine() + ASCIIToUTF16("\n");
return UTF8ToUTF16(prefix) +
role_str +
L" name='" + acc_obj->name() +
L"' state=" + state_str + L"\n";
}
const FilePath::StringType DumpAccessibilityTreeHelper::GetActualFileSuffix()
......@@ -77,12 +55,3 @@ const FilePath::StringType DumpAccessibilityTreeHelper::GetExpectedFileSuffix()
const {
return FILE_PATH_LITERAL("-expected-win.txt");
}
const std::string DumpAccessibilityTreeHelper::GetAllowString() const {
return "@WIN-ALLOW:";
}
const std::string DumpAccessibilityTreeHelper::GetDenyString() const {
return "@WIN-DENY:";
}
......@@ -73,7 +73,6 @@ std::string AccessibilityNodeData::DebugString(bool recursive) const {
case ROLE_DOCUMENT: result += " DOCUMENT"; break;
case ROLE_DRAWER: result += " DRAWER"; break;
case ROLE_EDITABLE_TEXT: result += " EDITABLE_TEXT"; break;
case ROLE_FOOTER: result += " FOOTER"; break;
case ROLE_GRID: result += " GRID"; break;
case ROLE_GROUP: result += " GROUP"; break;
case ROLE_GROW_AREA: result += " GROW_AREA"; break;
......
......@@ -5,18 +5,12 @@
#ifndef CONTENT_PUBLIC_TEST_ACCESSIBILITY_TEST_UTILS_WIN_H_
#define CONTENT_PUBLIC_TEST_ACCESSIBILITY_TEST_UTILS_WIN_H_
#include <vector>
#include "base/basictypes.h"
#include "base/string16.h"
string16 IAccessibleRoleToString(int32 ia_role);
string16 IAccessible2RoleToString(int32 ia_role);
string16 IAccessibleStateToString(int32 ia_state);
void IAccessibleStateToStringVector(int32 ia_state,
std::vector<string16>* result);
string16 IAccessible2StateToString(int32 ia2_state);
void IAccessible2StateToStringVector(int32 ia_state,
std::vector<string16>* result);
#endif // CONTENT_PUBLIC_TEST_ACCESSIBILITY_TEST_UTILS_WIN_H_
......@@ -230,36 +230,38 @@ string16 IAccessible2RoleToString(int32 ia_role) {
return AccessibilityRoleStateMap::GetInstance()->ia2_role_string_map[ia_role];
}
void IAccessibleStateToStringVector(int32 ia_state,
std::vector<string16>* result) {
string16 IAccessibleStateToString(int32 ia_state) {
string16 state_str;
const std::map<int32, string16>& state_string_map =
AccessibilityRoleStateMap::GetInstance()->ia_state_string_map;
std::map<int32, string16>::const_iterator it;
for (it = state_string_map.begin(); it != state_string_map.end(); ++it) {
if (it->first & ia_state)
result->push_back(it->second);
}
}
string16 IAccessibleStateToString(int32 ia_state) {
std::vector<string16> strings;
IAccessibleStateToStringVector(ia_state, &strings);
return JoinString(strings, ',');
for (it = state_string_map.begin();
it != state_string_map.end();
++it) {
if (it->first & ia_state) {
if (!state_str.empty())
state_str += L",";
state_str += it->second;
}
}
return state_str;
}
void IAccessible2StateToStringVector(int32 ia2_state,
std::vector<string16>* result) {
string16 IAccessible2StateToString(int32 ia2_state) {
string16 state_str;
const std::map<int32, string16>& state_string_map =
AccessibilityRoleStateMap::GetInstance()->ia2_state_string_map;
std::map<int32, string16>::const_iterator it;
for (it = state_string_map.begin(); it != state_string_map.end(); ++it) {
if (it->first & ia2_state)
result->push_back(it->second);
}
}
string16 IAccessible2StateToString(int32 ia2_state) {
std::vector<string16> strings;
IAccessible2StateToStringVector(ia2_state, &strings);
return JoinString(strings, ',');
for (it = state_string_map.begin();
it != state_string_map.end();
++it) {
if (it->first & ia2_state) {
if (!state_str.empty())
state_str += L",";
state_str += it->second;
}
}
return state_str;
}
ROLE_SYSTEM_DOCUMENT name='' READONLY FOCUSABLE
IA2_ROLE_SECTION name='' READONLY
ROLE_SYSTEM_LINK name='normal link' FOCUSABLE LINKED
ROLE_SYSTEM_TEXT name='normal link' READONLY LINKED
ROLE_SYSTEM_DOCUMENT name='' state=FOCUSED,READONLY,FOCUSABLE
IA2_ROLE_SECTION name='' state=READONLY
ROLE_SYSTEM_LINK name='normal link' state=FOCUSABLE,LINKED
ROLE_SYSTEM_TEXT name='normal link' state=READONLY,LINKED
<!--
@WIN-ALLOW:LINKED
-->
<html>
<body>
<a href="http://www.google.com">normal link</a>
......
AXWebArea subrole=(null) title='' value=''
AXWebArea subrole=(null) roleDescription='HTML content' title='' value=''
AXGroup subrole=AXLandmarkApplication roleDescription='application' title='' value=''
ROLE_SYSTEM_DOCUMENT name='' READONLY FOCUSABLE
IA2_ROLE_SECTION name='' READONLY
ROLE_SYSTEM_DOCUMENT name='' state=FOCUSED,READONLY,FOCUSABLE
IA2_ROLE_SECTION name='' state=READONLY
<!--
@MAC-ALLOW:roleDescription='application'
-->
<html>
<body role="application" id="testAriaApplication">
</body>
......
ROLE_SYSTEM_DOCUMENT name='' READONLY FOCUSABLE
IA2_ROLE_PARAGRAPH name='' IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name='Contentditable with ' IA2_STATE_EDITABLE
ROLE_SYSTEM_LINK name='link' LINKED IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name='link' LINKED IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name=' and ' IA2_STATE_EDITABLE
ROLE_SYSTEM_GRAPHIC name='image' IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name=' and ' IA2_STATE_EDITABLE
ROLE_SYSTEM_PUSHBUTTON name='button' FOCUSABLE IA2_STATE_EDITABLE
ROLE_SYSTEM_TABLE name='' IA2_STATE_EDITABLE
ROLE_SYSTEM_ROW name='' IA2_STATE_EDITABLE
ROLE_SYSTEM_CELL name='' IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name='Always expose editable tables as tables' IA2_STATE_EDITABLE
ROLE_SYSTEM_COLUMN name='' UNAVAILABLE IA2_STATE_EDITABLE
IA2_ROLE_SECTION name='' UNAVAILABLE IA2_STATE_EDITABLE
ROLE_SYSTEM_LIST name='' IA2_STATE_EDITABLE
ROLE_SYSTEM_LISTITEM name='' IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name='1' READONLY
ROLE_SYSTEM_TEXT name='Editable list item' IA2_STATE_EDITABLE
IA2_ROLE_PARAGRAPH name='' FOCUSABLE IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name='Keep the role, just change the state' IA2_STATE_EDITABLE
ROLE_SYSTEM_DOCUMENT name='' state=FOCUSED,READONLY,FOCUSABLE
IA2_ROLE_PARAGRAPH name='' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name='Contentditable with ' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_LINK name='link' state=LINKED,IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name='link' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name=' and ' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_GRAPHIC name='image' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name=' and ' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_PUSHBUTTON name='button' state=FOCUSABLE,IA2_STATE_EDITABLE
ROLE_SYSTEM_TABLE name='' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_ROW name='' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_CELL name='' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name='Always expose editable tables as tables' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_COLUMN name='' state=UNAVAILABLE,IA2_STATE_EDITABLE
IA2_ROLE_SECTION name='' state=UNAVAILABLE,IA2_STATE_EDITABLE
ROLE_SYSTEM_LIST name='' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_LISTITEM name='' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name='1' state=READONLY
ROLE_SYSTEM_TEXT name='Editable list item' state=IA2_STATE_EDITABLE
IA2_ROLE_PARAGRAPH name='' state=FOCUSABLE,IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name='Keep the role, just change the state' state=IA2_STATE_EDITABLE
<!--
@WIN-ALLOW:IA2_STATE_EDITABLE
@WIN-ALLOW:LINKED
@WIN-ALLOW:UNAVAILABLE
-->
<div contenteditable>
<p>Contentditable with <a href="#">link</a> and <img src="./bullet.png" alt="image"> and <input type="button" value="button"/></p>
<table><td>Always expose editable tables as tables</td></table>
......
AXWebArea subrole=(null) title='' value=''
AXWebArea subrole=(null) roleDescription='HTML content' title='' value=''
AXGroup subrole=AXLandmarkContentInfo roleDescription='footer' title='' value=''
AXStaticText subrole=(null) title='' value='Footer element'
AXStaticText subrole=(null) roleDescription='text' title='' value='Footer element'
ROLE_SYSTEM_DOCUMENT name='' READONLY FOCUSABLE
IA2_ROLE_FOOTER name='' READONLY
ROLE_SYSTEM_TEXT name='Footer element' READONLY
ROLE_SYSTEM_DOCUMENT name='' state=FOCUSED,READONLY,FOCUSABLE
IA2_ROLE_FOOTER name='' state=READONLY
ROLE_SYSTEM_TEXT name='Footer element' state=READONLY
<!--
@MAC-ALLOW:roleDescription='footer'
-->
<html>
<body>
<footer>Footer element</footer>
......
AXWebArea subrole=(null) title='' value=''
AXList subrole=AXContentList title='' value=''
AXGroup subrole=(null) title='' value=''
AXListMarker subrole=(null) title='' value='•'
AXStaticText subrole=(null) title='' value='First item properly groups itself despite '
AXStaticText subrole=(null) title='' value='bolded'
AXStaticText subrole=(null) title='' value=' text.'
AXGroup subrole=(null) title='' value=''
AXListMarker subrole=(null) title='' value='•'
AXStaticText subrole=(null) title='' value='This should also be '
AXStaticText subrole=(null) title='' value='seen'
AXStaticText subrole=(null) title='' value=' as a group.'
AXGroup subrole=(null) title='' value=''
AXListMarker subrole=(null) title='' value='•'
AXStaticText subrole=(null) title='' value='Some '
AXStaticText subrole=(null) title='' value='more'
AXStaticText subrole=(null) title='' value=' text.'
AXWebArea subrole=(null) roleDescription='HTML content' title='' value=''
AXList subrole=AXContentList roleDescription='list' title='' value=''
AXGroup subrole=(null) roleDescription='group' title='' value=''
AXListMarker subrole=(null) roleDescription='AXListMarker' title='' value='•'
AXStaticText subrole=(null) roleDescription='text' title='' value='First item properly groups itself despite '
AXStaticText subrole=(null) roleDescription='text' title='' value='bolded'
AXStaticText subrole=(null) roleDescription='text' title='' value=' text.'
AXGroup subrole=(null) roleDescription='group' title='' value=''
AXListMarker subrole=(null) roleDescription='AXListMarker' title='' value='•'
AXStaticText subrole=(null) roleDescription='text' title='' value='This should also be '
AXStaticText subrole=(null) roleDescription='text' title='' value='seen'
AXStaticText subrole=(null) roleDescription='text' title='' value=' as a group.'
AXGroup subrole=(null) roleDescription='group' title='' value=''
AXListMarker subrole=(null) roleDescription='AXListMarker' title='' value='•'
AXStaticText subrole=(null) roleDescription='text' title='' value='Some '
AXStaticText subrole=(null) roleDescription='text' title='' value='more'
AXStaticText subrole=(null) roleDescription='text' title='' value=' text.'
AXWebArea subrole=(null) title='' value=''
AXList subrole=AXContentList title='' value=''
AXGroup subrole=(null) title='' value=''
AXListMarker subrole=(null) title='' value='•'
AXStaticText subrole=(null) title='' value='Item 1'
AXGroup subrole=(null) title='' value=''
AXListMarker subrole=(null) title='' value='•'
AXStaticText subrole=(null) title='' value='Item 2'
AXGroup subrole=(null) title='' value=''
AXListMarker subrole=(null) title='' value='•'
AXStaticText subrole=(null) title='' value='Item 3'
AXWebArea subrole=(null) roleDescription='HTML content' title='' value=''
AXList subrole=AXContentList roleDescription='list' title='' value=''
AXGroup subrole=(null) roleDescription='group' title='' value=''
AXListMarker subrole=(null) roleDescription='AXListMarker' title='' value='•'
AXStaticText subrole=(null) roleDescription='text' title='' value='Item 1'
AXGroup subrole=(null) roleDescription='group' title='' value=''
AXListMarker subrole=(null) roleDescription='AXListMarker' title='' value='•'
AXStaticText subrole=(null) roleDescription='text' title='' value='Item 2'
AXGroup subrole=(null) roleDescription='group' title='' value=''
AXListMarker subrole=(null) roleDescription='AXListMarker' title='' value='•'
AXStaticText subrole=(null) roleDescription='text' title='' value='Item 3'
ROLE_SYSTEM_DOCUMENT name='' READONLY FOCUSABLE
ROLE_SYSTEM_LIST name='' READONLY
ROLE_SYSTEM_LISTITEM name='' READONLY
ROLE_SYSTEM_TEXT name='•' READONLY
ROLE_SYSTEM_TEXT name='Item 1' READONLY
ROLE_SYSTEM_LISTITEM name='' READONLY
ROLE_SYSTEM_TEXT name='•' READONLY
ROLE_SYSTEM_TEXT name='Item 2' READONLY
ROLE_SYSTEM_LISTITEM name='' READONLY
ROLE_SYSTEM_TEXT name='•' READONLY
ROLE_SYSTEM_TEXT name='Item 3' READONLY
ROLE_SYSTEM_DOCUMENT name='' state=FOCUSED,READONLY,FOCUSABLE
ROLE_SYSTEM_LIST name='' state=READONLY
ROLE_SYSTEM_LISTITEM name='' state=READONLY
ROLE_SYSTEM_TEXT name='•' state=READONLY
ROLE_SYSTEM_TEXT name='Item 1' state=READONLY
ROLE_SYSTEM_LISTITEM name='' state=READONLY
ROLE_SYSTEM_TEXT name='•' state=READONLY
ROLE_SYSTEM_TEXT name='Item 2' state=READONLY
ROLE_SYSTEM_LISTITEM name='' state=READONLY
ROLE_SYSTEM_TEXT name='•' state=READONLY
ROLE_SYSTEM_TEXT name='Item 3' state=READONLY
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment