// Copyright 2014 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 <set>
#include <string>
#include <vector>

#include "base/logging.h"
#include "base/strings/string16.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "content/browser/accessibility/browser_accessibility_android.h"
#include "content/browser/accessibility/browser_accessibility_manager_android.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/public/browser/web_contents.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"

namespace content {

const int GRANULARITY_CHARACTER =
    ANDROID_ACCESSIBILITY_NODE_INFO_MOVEMENT_GRANULARITY_CHARACTER;
const int GRANULARITY_WORD =
    ANDROID_ACCESSIBILITY_NODE_INFO_MOVEMENT_GRANULARITY_WORD;
const int GRANULARITY_LINE =
    ANDROID_ACCESSIBILITY_NODE_INFO_MOVEMENT_GRANULARITY_LINE;

class AndroidGranularityMovementBrowserTest : public ContentBrowserTest {
 public:
  AndroidGranularityMovementBrowserTest() {}
  ~AndroidGranularityMovementBrowserTest() override {}

  BrowserAccessibility* LoadUrlAndGetAccessibilityRoot(const GURL& url) {
    NavigateToURL(shell(), GURL(url::kAboutBlankURL));

    // Load the page.
    AccessibilityNotificationWaiter waiter(shell()->web_contents(),
                                           ui::kAXModeComplete,
                                           ax::mojom::Event::kLoadComplete);
    NavigateToURL(shell(), url);
    waiter.WaitForNotification();

    // Get the BrowserAccessibilityManager.
    WebContentsImpl* web_contents =
        static_cast<WebContentsImpl*>(shell()->web_contents());
    return web_contents->GetRootBrowserAccessibilityManager()->GetRoot();
  }

  // First, set accessibility focus to a node and wait for the update that
  // loads inline text boxes for that node. (We load inline text boxes
  // asynchronously on Android since we only ever need them for the node
  // with accessibility focus.)
  //
  // Then call NextAtGranularity repeatedly and return a string that
  // concatenates all of the text of the returned text ranges.
  //
  // As an example, if the node's text is "cat dog" and you traverse by
  // word, this returns "'cat', 'dog'".
  //
  // Also calls PreviousAtGranularity from the end back to the beginning
  // and fails (by logging an error and returning the empty string) if
  // the result when traversing backwards is not the same
  // (but in reverse order).
  base::string16 TraverseNodeAtGranularity(BrowserAccessibility* node,
                                           int granularity) {
    AccessibilityNotificationWaiter waiter(shell()->web_contents(),
                                           ui::kAXModeComplete,
                                           ax::mojom::Event::kTreeChanged);
    node->manager()->LoadInlineTextBoxes(*node);
    waiter.WaitForNotification();

    int start_index = -1;
    int end_index = -1;
    BrowserAccessibilityAndroid* android_node =
        static_cast<BrowserAccessibilityAndroid*>(node);
    BrowserAccessibilityManagerAndroid* manager =
        static_cast<BrowserAccessibilityManagerAndroid*>(node->manager());
    base::string16 text = android_node->GetText();
    base::string16 concatenated;
    int previous_end_index = -1;
    while (manager->NextAtGranularity(granularity, end_index, android_node,
                                      &start_index, &end_index)) {
      int len =
          (granularity == GRANULARITY_CHARACTER) ? 1 : end_index - start_index;
      base::string16 selection = text.substr(start_index, len);
      if (base::EndsWith(selection, base::ASCIIToUTF16("\n"),
                         base::CompareCase::INSENSITIVE_ASCII))
        selection.erase(selection.size() - 1);
      if (!selection.empty()) {
        if (!concatenated.empty())
          concatenated += base::ASCIIToUTF16(", ");
        concatenated +=
            base::ASCIIToUTF16("'") + selection + base::ASCIIToUTF16("'");
      }

      // Prevent an endless loop.
      if (end_index == previous_end_index) {
        LOG(ERROR) << "Bailing from loop, NextAtGranularity didn't advance";
        break;
      }
      previous_end_index = end_index;
    }

    base::string16 reverse;
    previous_end_index = -1;
    start_index = end_index;
    while (manager->PreviousAtGranularity(
        granularity, start_index, android_node, &start_index, &end_index)) {
      int len =
          (granularity == GRANULARITY_CHARACTER) ? 1 : end_index - start_index;
      base::string16 selection = text.substr(start_index, len);
      if (base::EndsWith(selection, base::ASCIIToUTF16("\n"),
                         base::CompareCase::INSENSITIVE_ASCII))
        selection = selection.substr(0, selection.size() - 1);
      if (!reverse.empty())
        reverse = base::ASCIIToUTF16(", ") + reverse;
      reverse = base::ASCIIToUTF16("'") + selection + base::ASCIIToUTF16("'") +
                reverse;

      // Prevent an endless loop.
      if (end_index == previous_end_index) {
        LOG(ERROR) << "Bailing from loop, PreviousAtGranularity didn't advance";
        break;
      }
      previous_end_index = end_index;
    }

    if (concatenated != reverse) {
      LOG(ERROR) << "Did not get the same sequence in the forwards and "
                 << "reverse directions!";
      LOG(ERROR) << "Forwards: " << concatenated;
      LOG(ERROR) << "Backwards " << reverse;
      return base::string16();
    }

    return concatenated;
  }
};

IN_PROC_BROWSER_TEST_F(AndroidGranularityMovementBrowserTest,
                       NavigateByCharacters) {
  GURL url(
      "data:text/html,"
      "<body>"
      "<p>One, two, three!</p>"
      "<p>"
      "<button aria-label='Seven, eight, nine!'>Four, five, six!</button>"
      "</p>"
      "</body></html>");
  BrowserAccessibility* root = LoadUrlAndGetAccessibilityRoot(url);
  ASSERT_EQ(2U, root->PlatformChildCount());
  BrowserAccessibility* para = root->PlatformGetChild(0);
  ASSERT_EQ(0U, para->PlatformChildCount());
  BrowserAccessibility* button_container = root->PlatformGetChild(1);
  ASSERT_EQ(1U, button_container->PlatformChildCount());
  BrowserAccessibility* button = button_container->PlatformGetChild(0);
  ASSERT_EQ(0U, button->PlatformChildCount());

  ASSERT_EQ(base::ASCIIToUTF16("'O', 'n', 'e', ',', ' ', 't', 'w', 'o', "
                               "',', ' ', 't', 'h', 'r', 'e', 'e', '!'"),
            TraverseNodeAtGranularity(para, GRANULARITY_CHARACTER));
  ASSERT_EQ(
      base::ASCIIToUTF16("'S', 'e', 'v', 'e', 'n', ',', ' ', 'e', 'i', 'g', "
                         "'h', 't', ',', ' ', 'n', 'i', 'n', 'e', '!'"),
      TraverseNodeAtGranularity(button, GRANULARITY_CHARACTER));
}

IN_PROC_BROWSER_TEST_F(AndroidGranularityMovementBrowserTest, NavigateByWords) {
  GURL url(
      "data:text/html,"
      "<body>"
      "<p>One, two, three!</p>"
      "<p>"
      "<button aria-label='Seven, eight, nine!'>Four, five, six!</button>"
      "</p>"
      "</body></html>");
  BrowserAccessibility* root = LoadUrlAndGetAccessibilityRoot(url);
  ASSERT_EQ(2U, root->PlatformChildCount());
  BrowserAccessibility* para = root->PlatformGetChild(0);
  ASSERT_EQ(0U, para->PlatformChildCount());
  BrowserAccessibility* button_container = root->PlatformGetChild(1);
  ASSERT_EQ(1U, button_container->PlatformChildCount());
  BrowserAccessibility* button = button_container->PlatformGetChild(0);
  ASSERT_EQ(0U, button->PlatformChildCount());

  ASSERT_EQ(base::ASCIIToUTF16("'One', 'two', 'three'"),
            TraverseNodeAtGranularity(para, GRANULARITY_WORD));
  ASSERT_EQ(base::ASCIIToUTF16("'Seven', 'eight', 'nine'"),
            TraverseNodeAtGranularity(button, GRANULARITY_WORD));
}

IN_PROC_BROWSER_TEST_F(AndroidGranularityMovementBrowserTest, NavigateByLine) {
  GURL url(
      "data:text/html,"
      "<body>"
      "<pre>One,%0dtwo,%0dthree!</pre>"
      "</body>");
  BrowserAccessibility* root = LoadUrlAndGetAccessibilityRoot(url);
  ASSERT_EQ(1U, root->PlatformChildCount());
  BrowserAccessibility* pre = root->PlatformGetChild(0);
  ASSERT_EQ(0U, pre->PlatformChildCount());

  ASSERT_EQ(base::ASCIIToUTF16("'One,', 'two,', 'three!'"),
            TraverseNodeAtGranularity(pre, GRANULARITY_LINE));
}

}  // namespace content
