summaryrefslogtreecommitdiffstats
path: root/chrome/browser/accessibility
diff options
context:
space:
mode:
authordtseng@chromium.org <dtseng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-17 23:45:41 +0000
committerdtseng@chromium.org <dtseng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-17 23:45:41 +0000
commitca8de581137b34eb04ca8b68186f143d4bea98e8 (patch)
tree6ccd68b53d242a40ec43809e3cf2d0eb56f4ef55 /chrome/browser/accessibility
parent603fc5a9f26803a699409db44cfd2e8bd42c8204 (diff)
downloadchromium_src-ca8de581137b34eb04ca8b68186f143d4bea98e8.zip
chromium_src-ca8de581137b34eb04ca8b68186f143d4bea98e8.tar.gz
chromium_src-ca8de581137b34eb04ca8b68186f143d4bea98e8.tar.bz2
Revert 122617 - Adds dump accessibility tree support in Windows.
This largely adds human readable strings for IAccessible2 roles and states. This is in part to make it possible to hand-edit the expected files we generate. Sidenote: switch to string16 usage from std::string as much as possible (despite the incompatibility with API's provided by FilePath). Review URL: https://chromiumcodereview.appspot.com/9295031 TBR=dtseng@chromium.org Review URL: https://chromiumcodereview.appspot.com/9425021 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@122626 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/accessibility')
-rw-r--r--chrome/browser/accessibility/dump_accessibility_tree_browsertest.cc141
1 files changed, 141 insertions, 0 deletions
diff --git a/chrome/browser/accessibility/dump_accessibility_tree_browsertest.cc b/chrome/browser/accessibility/dump_accessibility_tree_browsertest.cc
new file mode 100644
index 0000000..7e97b13
--- /dev/null
+++ b/chrome/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -0,0 +1,141 @@
+// 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 <string>
+
+#include "base/logging.h"
+#include "base/path_service.h"
+#include "base/string_util.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/common/chrome_paths.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "content/browser/accessibility/browser_accessibility.h"
+#include "content/browser/accessibility/browser_accessibility_manager.h"
+#include "content/browser/renderer_host/render_view_host.h"
+#include "content/browser/renderer_host/render_widget_host.h"
+#include "content/browser/renderer_host/render_widget_host_view.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/browser/notification_types.h"
+#include "content/public/browser/web_contents.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/base/resource/resource_bundle.h"
+
+using content::OpenURLParams;
+using content::Referrer;
+
+// Suffix of the expectation file corresponding to html file.
+// Example:
+// HTML test: test-file.html
+// Expected: test-file-expected-mac.txt.
+// Auto-generated: test-file-actual-mac.txt
+#if defined(OS_WIN)
+static const std::string kActualFileSuffix = "-actual-win.txt";
+static const std::string kExpectedFileSuffix = "-expected-win.txt";
+#elif defined(OS_MACOSX)
+static const std::string kActualFileSuffix = "-actual-mac.txt";
+static const std::string kExpectedFileSuffix = "-expected-mac.txt";
+#else
+#error DumpAccessibilityTree does not support this platform.
+#endif
+
+// HTML id attribute prefix identifying a node to test.
+static const std::string kTestId = "test";
+
+// Required to enter html content into a url.
+static const std::string kUrlPreamble = "data:text/html,\n<!doctype html>";
+
+// Dumps a BrowserAccessibility tree into a string.
+void DumpAccessibilityTree(BrowserAccessibility* node,
+ std::string* contents) {
+ *contents += node->ToString() + "\n";
+ for (size_t i = 0; i < node->children().size(); ++i)
+ DumpAccessibilityTree(node->children()[i], contents);
+}
+
+// This test takes a snapshot of the platform BrowserAccessibility tree and
+// tests it against an expected baseline.
+//
+// The flow of the test is as outlined below.
+// 1. Load an html file from chrome/test/data/accessibility.
+// 2. Read the expectation.
+// 3. Browse to the page and serialize the platform specific tree into a human
+// readable string.
+// 4. Perform a comparison between actual and expected and fail if they do not
+// exactly match.
+class DumpAccessibilityTreeTest : public InProcessBrowserTest {
+ public:
+ virtual void SetUpInProcessBrowserTestFixture() {
+ FilePath resources_pack_path;
+ EXPECT_TRUE(PathService::Get(chrome::FILE_RESOURCES_PACK,
+ &resources_pack_path));
+ ResourceBundle::AddDataPackToSharedInstance(resources_pack_path);
+ }
+};
+
+IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest,
+ PlatformTreeDifferenceTest) {
+ RenderWidgetHostView* host_view =
+ browser()->GetSelectedWebContents()->GetRenderWidgetHostView();
+ RenderWidgetHost* host = host_view->GetRenderWidgetHost();
+ RenderViewHost* view_host = static_cast<RenderViewHost*>(host);
+ view_host->set_save_accessibility_tree_for_testing(true);
+ view_host->EnableRendererAccessibility();
+
+ // Setup test paths.
+ FilePath dir_test_data;
+ EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &dir_test_data));
+ FilePath test_path(dir_test_data.Append(FilePath("accessibility")));
+ EXPECT_TRUE(file_util::PathExists(test_path))
+ << test_path.LossyDisplayName();
+
+ // Grab all HTML files.
+ file_util::FileEnumerator file_enumerator(test_path,
+ false,
+ file_util::FileEnumerator::FILES,
+ "*.html");
+
+ // TODO(dtseng): Make each of these a gtest with script.
+ FilePath html_file;
+ while (!(html_file = file_enumerator.Next()).empty()) {
+ std::string html_contents;
+ file_util::ReadFileToString(html_file, &html_contents);
+
+ std::string expected_contents;
+ FilePath expected_file =
+ FilePath(html_file.RemoveExtension().value() + kExpectedFileSuffix);
+ file_util::ReadFileToString(
+ expected_file,
+ &expected_contents);
+
+ // Load the page.
+ ui_test_utils::WindowedNotificationObserver tree_updated_observer(
+ content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED,
+ content::NotificationService::AllSources());
+ GURL url(kUrlPreamble + html_contents);
+ browser()->OpenURL(OpenURLParams(
+ url, Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED, false));
+
+ // Wait for the tree.
+ tree_updated_observer.Wait();
+
+ // Perform a diff (or write the initial baseline).
+ std::string actual_contents;
+ DumpAccessibilityTree(
+ host_view->GetBrowserAccessibilityManager()->GetRoot(),
+ &actual_contents);
+ EXPECT_EQ(expected_contents, actual_contents);
+
+ if (!file_util::PathExists(expected_file)) {
+ FilePath actual_file =
+ FilePath(html_file.RemoveExtension().value() + kActualFileSuffix);
+ 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();
+ }
+ }
+}