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

Unified Diff: content/browser/accessibility/dump_accessibility_tree_browsertest.cc

Issue 787813006: Pull out a base class from DumpAccessibilityTree (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@fix_legacy_outerwidth
Patch Set: Fix Linux compile Created 6 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
« no previous file with comments | « content/browser/accessibility/dump_accessibility_browsertest_base.cc ('k') | content/content_tests.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/accessibility/dump_accessibility_tree_browsertest.cc
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
index f23da6e787861c7249ce24618685c1b761759132..f2e0d1c7eb804d1deb1737ed77fabd34f10c5498 100644
--- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -7,28 +7,19 @@
#include <vector>
#include "base/command_line.h"
-#include "base/files/file_util.h"
-#include "base/logging.h"
-#include "base/path_service.h"
#include "base/strings/string16.h"
-#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "content/browser/accessibility/accessibility_tree_formatter.h"
#include "content/browser/accessibility/browser_accessibility.h"
#include "content/browser/accessibility/browser_accessibility_manager.h"
-#include "content/browser/renderer_host/render_view_host_impl.h"
-#include "content/browser/renderer_host/render_widget_host_view_base.h"
+#include "content/browser/accessibility/dump_accessibility_browsertest_base.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/content_paths.h"
#include "content/public/common/content_switches.h"
-#include "content/public/common/url_constants.h"
-#include "content/public/test/content_browser_test.h"
-#include "content/public/test/content_browser_test_utils.h"
#include "content/shell/browser/shell.h"
#include "content/test/accessibility_browser_test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
#if defined(OS_MACOSX)
#include "base/mac/mac_util.h"
@@ -43,15 +34,6 @@
namespace content {
-namespace {
-
-const char kCommentToken = '#';
-const char kMarkSkipFile[] = "#<skip";
-const char kMarkEndOfFile[] = "<-- End-of-file -->";
-const char kSignalDiff[] = "*";
-
-} // namespace
-
typedef AccessibilityTreeFormatter::Filter Filter;
// This test takes a snapshot of the platform BrowserAccessibility tree and
@@ -64,93 +46,15 @@ typedef AccessibilityTreeFormatter::Filter Filter;
// readable string.
// 4. Perform a comparison between actual and expected and fail if they do not
// exactly match.
-class DumpAccessibilityTreeTest : public ContentBrowserTest {
+class DumpAccessibilityTreeTest : public DumpAccessibilityTestBase {
public:
- // Utility helper that does a comment aware equality check.
- // Returns array of lines from expected file which are different.
- std::vector<int> DiffLines(const std::vector<std::string>& expected_lines,
- const 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;
- int i = 0, j = 0;
- while (i < actual_lines_count && j < expected_lines_count) {
- if (expected_lines[j].size() == 0 ||
- expected_lines[j][0] == kCommentToken) {
- // Skip comment lines and blank lines in expected output.
- ++j;
- continue;
- }
-
- if (actual_lines[i] != expected_lines[j])
- diff_lines.push_back(j);
- ++i;
- ++j;
- }
-
- // Actual file has been fully checked.
- return diff_lines;
- }
-
- void AddDefaultFilters(std::vector<Filter>* filters) {
+ void AddDefaultFilters(std::vector<Filter>* filters) override {
filters->push_back(Filter(base::ASCIIToUTF16("FOCUSABLE"), Filter::ALLOW));
filters->push_back(Filter(base::ASCIIToUTF16("READONLY"), Filter::ALLOW));
filters->push_back(Filter(base::ASCIIToUTF16("name*"), Filter::ALLOW));
filters->push_back(Filter(base::ASCIIToUTF16("*=''"), Filter::DENY));
}
- // Parse the test html file and parse special directives, usually
- // beginning with an '@' and inside an HTML comment, that control how the
- // test is run and how the results are interpreted.
- //
- // When the accessibility tree is dumped as text, each attribute is
- // run through filters before being appended to the string. An "allow"
- // filter specifies attribute strings that should be dumped, and a "deny"
- // filter specifies strings that should be suppressed. As an example,
- // @MAC-ALLOW:AXSubrole=* means that the AXSubrole attribute should be
- // printed, while @MAC-ALLOW:AXSubrole=AXList* means that any subrole
- // beginning with the text "AXList" should be printed.
- //
- // The @WAIT-FOR:text directive allows the test to specify that the document
- // may dynamically change after initial load, and the test is to wait
- // until the given string (e.g., "text") appears in the resulting dump.
- // A test can make some changes to the document, then append a magic string
- // indicating that the test is done, and this framework will wait for that
- // string to appear before comparing the results.
- void ParseHtmlForExtraDirectives(const std::string& test_html,
- std::vector<Filter>* filters,
- std::string* wait_for) {
- 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_empty_str =
- AccessibilityTreeFormatter::GetAllowEmptyString();
- const std::string& allow_str =
- AccessibilityTreeFormatter::GetAllowString();
- const std::string& deny_str =
- AccessibilityTreeFormatter::GetDenyString();
- const std::string& wait_str = "@WAIT-FOR:";
- if (StartsWithASCII(line, allow_empty_str, true)) {
- filters->push_back(
- Filter(base::UTF8ToUTF16(line.substr(allow_empty_str.size())),
- Filter::ALLOW_EMPTY));
- } else if (StartsWithASCII(line, allow_str, true)) {
- filters->push_back(Filter(base::UTF8ToUTF16(
- line.substr(allow_str.size())),
- Filter::ALLOW));
- } else if (StartsWithASCII(line, deny_str, true)) {
- filters->push_back(Filter(base::UTF8ToUTF16(
- line.substr(deny_str.size())),
- Filter::DENY));
- } else if (StartsWithASCII(line, wait_str, true)) {
- *wait_for = line.substr(wait_str.size());
- }
- }
- }
-
void SetUpCommandLine(base::CommandLine* command_line) override {
ContentBrowserTest::SetUpCommandLine(command_line);
// Enable <dialog>, which is used in some tests.
@@ -158,137 +62,20 @@ class DumpAccessibilityTreeTest : public ContentBrowserTest {
switches::kEnableExperimentalWebPlatformFeatures);
}
- void RunTest(const base::FilePath::CharType* file_path);
-};
-
-void DumpAccessibilityTreeTest::RunTest(
- const base::FilePath::CharType* file_path) {
- NavigateToURL(shell(), GURL(url::kAboutBlankURL));
-
- // Setup test paths.
- base::FilePath dir_test_data;
- ASSERT_TRUE(PathService::Get(DIR_TEST_DATA, &dir_test_data));
- base::FilePath test_path(
- dir_test_data.Append(FILE_PATH_LITERAL("accessibility")));
- ASSERT_TRUE(base::PathExists(test_path))
- << test_path.LossyDisplayName();
-
- base::FilePath html_file = test_path.Append(base::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;
- base::ReadFileToString(html_file, &html_contents);
-
- // Read the expected file.
- std::string expected_contents_raw;
- base::FilePath expected_file =
- base::FilePath(html_file.RemoveExtension().value() +
- AccessibilityTreeFormatter::GetExpectedFileSuffix());
- base::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;
- base::RemoveChars(expected_contents_raw, "\r", &expected_contents);
-
- if (!expected_contents.compare(0, strlen(kMarkSkipFile), kMarkSkipFile)) {
- printf("Skipping this test on this platform.\n");
- return;
- }
-
- // Parse filters and other directives in the test file.
- std::vector<Filter> filters;
- std::string wait_for;
- AddDefaultFilters(&filters);
- ParseHtmlForExtraDirectives(html_contents, &filters, &wait_for);
-
- // Load the page.
- base::string16 html_contents16;
- html_contents16 = base::UTF8ToUTF16(html_contents);
- GURL url = GetTestUrl("accessibility",
- html_file.BaseName().MaybeAsASCII().c_str());
-
- // If there's a @WAIT-FOR directive, set up an accessibility notification
- // waiter that returns on any event; we'll stop when we get the text we're
- // waiting for, or time out. Otherwise just wait specifically for
- // the "load complete" event.
- scoped_ptr<AccessibilityNotificationWaiter> waiter;
- if (!wait_for.empty()) {
- waiter.reset(new AccessibilityNotificationWaiter(
- shell(), AccessibilityModeComplete, ui::AX_EVENT_NONE));
- } else {
- waiter.reset(new AccessibilityNotificationWaiter(
- shell(), AccessibilityModeComplete, ui::AX_EVENT_LOAD_COMPLETE));
- }
-
- // Load the test html.
- NavigateToURL(shell(), url);
-
- // Wait for notifications. If there's a @WAIT-FOR directive, break when
- // the text we're waiting for appears in the dump, otherwise break after
- // the first notification, which will be a load complete.
- WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
- shell()->web_contents());
- std::string actual_contents;
- do {
- waiter->WaitForNotification();
- base::string16 actual_contents_utf16;
+ std::vector<std::string> Dump() override {
+ WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
+ shell()->web_contents());
AccessibilityTreeFormatter formatter(
web_contents->GetRootBrowserAccessibilityManager()->GetRoot());
- formatter.SetFilters(filters);
+ formatter.SetFilters(filters_);
+ base::string16 actual_contents_utf16;
formatter.FormatAccessibilityTree(&actual_contents_utf16);
- actual_contents = base::UTF16ToUTF8(actual_contents_utf16);
- } while (!wait_for.empty() &&
- actual_contents.find(wait_for) == std::string::npos);
-
- // Perform a diff (or write the initial baseline).
- 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("\nActual\n");
- printf("------\n");
- printf("%s\n", actual_contents.c_str());
+ std::string actual_contents = base::UTF16ToUTF8(actual_contents_utf16);
+ std::vector<std::string> actual_lines;
+ Tokenize(actual_contents, "\n", &actual_lines);
+ return actual_lines;
}
-
- if (!base::PathExists(expected_file)) {
- base::FilePath actual_file =
- base::FilePath(html_file.RemoveExtension().value() +
- AccessibilityTreeFormatter::GetActualFileSuffix());
-
- EXPECT_TRUE(base::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"));
« no previous file with comments | « content/browser/accessibility/dump_accessibility_browsertest_base.cc ('k') | content/content_tests.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698