/**
   * Verify that the origin index is calculated correctly for data URLs by
   * OmniboxUrlEmphasizer.getOriginEndIndex().
   */
  @UiThreadTest
  @MediumTest
  @Feature({"Browser", "Main"})
  public void testDataUrlsOriginEndIndex() {
    String url;

    // Data URLs have no origin.
    url = "data:ABC123";
    assertEquals(
        "Unexpected origin end index for url " + url + ":",
        0,
        OmniboxUrlEmphasizer.getOriginEndIndex(url, mProfile));

    url = "data:kf94hfJEj#N";
    assertEquals(
        "Unexpected origin end index for url " + url + ":",
        0,
        OmniboxUrlEmphasizer.getOriginEndIndex(url, mProfile));

    url = "data:text/plain;charset=utf-8;base64,dGVzdA==";
    assertEquals(
        "Unexpected origin end index for url " + url + ":",
        0,
        OmniboxUrlEmphasizer.getOriginEndIndex(url, mProfile));
  }
  /**
   * Verify that the origin index is calculated correctly for HTTP and HTTPS URLs by
   * OmniboxUrlEmphasizer.getOriginEndIndex().
   */
  @UiThreadTest
  @MediumTest
  @Feature({"Browser", "Main"})
  public void testHTTPAndHTTPSUrlsOriginEndIndex() {
    String url;

    url = "http://www.google.com/";
    assertEquals(
        "Unexpected origin end index for url " + url + ":",
        "http://www.google.com".length(),
        OmniboxUrlEmphasizer.getOriginEndIndex(url, mProfile));

    url = "https://www.google.com/";
    assertEquals(
        "Unexpected origin end index for url " + url + ":",
        "https://www.google.com".length(),
        OmniboxUrlEmphasizer.getOriginEndIndex(url, mProfile));

    url = "http://www.news.com/dir/a/b/c/page.html?foo=bar";
    assertEquals(
        "Unexpected origin end index for url " + url + ":",
        "http://www.news.com".length(),
        OmniboxUrlEmphasizer.getOriginEndIndex(url, mProfile));

    url = "http://www.test.com?foo=bar";
    assertEquals(
        "Unexpected origin end index for url " + url + ":",
        "http://www.test.com".length(),
        OmniboxUrlEmphasizer.getOriginEndIndex(url, mProfile));
  }
 public static EmphasizedUrlSpanHelper[] getSpansForEmphasizedUrl(Spannable emphasizedUrl) {
   UrlEmphasisSpan[] existingSpans = OmniboxUrlEmphasizer.getEmphasisSpans(emphasizedUrl);
   EmphasizedUrlSpanHelper[] helperSpans = new EmphasizedUrlSpanHelper[existingSpans.length];
   for (int i = 0; i < existingSpans.length; i++) {
     helperSpans[i] = new EmphasizedUrlSpanHelper(existingSpans[i], emphasizedUrl);
   }
   return helperSpans;
 }
  /** Verify that an invalid URL is colored correctly by OmniboxUrlEmphasizer.emphasizeUrl(). */
  @UiThreadTest
  @MediumTest
  @Feature({"Browser", "Main"})
  public void testInvalidUrl() {
    Spannable url = new SpannableStringBuilder("invalidurl");
    OmniboxUrlEmphasizer.emphasizeUrl(
        url, mResources, mProfile, ToolbarModelSecurityLevel.NONE, true, true);
    EmphasizedUrlSpanHelper[] spans = EmphasizedUrlSpanHelper.getSpansForEmphasizedUrl(url);

    assertEquals("Unexpected number of spans:", 1, spans.length);
    spans[0].assertIsColoredSpan(
        "invalidurl", 0, mResources.getColor(R.color.url_emphasis_domain_and_registry));
  }
  /** Verify that a 'data:' URL is colored correctly by OmniboxUrlEmphasizer.emphasizeUrl(). */
  @UiThreadTest
  @MediumTest
  @Feature({"Browser", "Main"})
  public void testDataUrl() {
    Spannable url = new SpannableStringBuilder("data:text/plain;charset=utf-8;base64,VGVzdCBVUkw=");
    OmniboxUrlEmphasizer.emphasizeUrl(
        url, mResources, mProfile, ToolbarModelSecurityLevel.NONE, true, true);
    EmphasizedUrlSpanHelper[] spans = EmphasizedUrlSpanHelper.getSpansForEmphasizedUrl(url);

    assertEquals("Unexpected number of spans:", 1, spans.length);
    spans[0].assertIsColoredSpan(
        "data", 0, mResources.getColor(R.color.url_emphasis_non_emphasized_text));
  }
  /**
   * Verify that the origin index is calculated correctly for URLS other than HTTP, HTTPS and data
   * by OmniboxUrlEmphasizer.getOriginEndIndex().
   */
  @UiThreadTest
  @MediumTest
  @Feature({"Browser", "Main"})
  public void testOtherUrlsOriginEndIndex() {
    String url;

    // In non-HTTP/HTTPS/data URLs, the whole URL is considered the origin.
    url = "file://my/pc/somewhere/foo.html";
    assertEquals(
        "Unexpected origin end index for url " + url + ":",
        url.length(),
        OmniboxUrlEmphasizer.getOriginEndIndex(url, mProfile));

    url = "about:blank";
    assertEquals(
        "Unexpected origin end index for url " + url + ":",
        url.length(),
        OmniboxUrlEmphasizer.getOriginEndIndex(url, mProfile));

    url = "chrome://version";
    assertEquals(
        "Unexpected origin end index for url " + url + ":",
        url.length(),
        OmniboxUrlEmphasizer.getOriginEndIndex(url, mProfile));

    url = "chrome-native://bookmarks";
    assertEquals(
        "Unexpected origin end index for url " + url + ":",
        url.length(),
        OmniboxUrlEmphasizer.getOriginEndIndex(url, mProfile));

    url = "invalidurl";
    assertEquals(
        "Unexpected origin end index for url " + url + ":",
        url.length(),
        OmniboxUrlEmphasizer.getOriginEndIndex(url, mProfile));
  }
  /**
   * Verify that an internal 'chrome-native://' page is colored correctly by
   * OmniboxUrlEmphasizer.emphasizeUrl().
   */
  @UiThreadTest
  @MediumTest
  @Feature({"Browser", "Main"})
  public void testInternalChromeNativePageUrl() {
    Spannable url = new SpannableStringBuilder("chrome-native://bookmarks");
    OmniboxUrlEmphasizer.emphasizeUrl(
        url, mResources, mProfile, ToolbarModelSecurityLevel.NONE, true, true);
    EmphasizedUrlSpanHelper[] spans = EmphasizedUrlSpanHelper.getSpansForEmphasizedUrl(url);

    assertEquals("Unexpected number of spans:", 3, spans.length);
    spans[0].assertIsColoredSpan(
        "chrome-native", 0, mResources.getColor(R.color.url_emphasis_non_emphasized_text));
    spans[1].assertIsColoredSpan(
        "://", 13, mResources.getColor(R.color.url_emphasis_non_emphasized_text));
    spans[2].assertIsColoredSpan(
        "bookmarks", 16, mResources.getColor(R.color.url_emphasis_domain_and_registry));
  }
  /**
   * Verify that a very short, warning HTTPS URL is colored correctly by
   * OmniboxUrlEmphasizer.emphasizeUrl().
   */
  @UiThreadTest
  @MediumTest
  @Feature({"Browser", "Main"})
  public void testVeryShortWarningHTTPSUrl() {
    Spannable url = new SpannableStringBuilder("https://www.dodgysite.com");
    OmniboxUrlEmphasizer.emphasizeUrl(
        url, mResources, mProfile, ToolbarModelSecurityLevel.SECURITY_WARNING, false, true);
    EmphasizedUrlSpanHelper[] spans = EmphasizedUrlSpanHelper.getSpansForEmphasizedUrl(url);

    assertEquals("Unexpected number of spans:", 3, spans.length);
    spans[0].assertIsColoredSpan(
        "https", 0, mResources.getColor(R.color.url_emphasis_start_scheme_security_warning));
    spans[1].assertIsColoredSpan(
        "://", 5, mResources.getColor(R.color.url_emphasis_non_emphasized_text));
    spans[2].assertIsColoredSpan(
        "www.dodgysite.com", 8, mResources.getColor(R.color.url_emphasis_domain_and_registry));
  }
  /**
   * Verify that a short, secure HTTPS URL is colored correctly with light colors by
   * OmniboxUrlEmphasizer.emphasizeUrl().
   */
  @UiThreadTest
  @MediumTest
  @Feature({"Browser", "Main"})
  public void testShortSecureHTTPSUrlWithLightColors() {
    Spannable url = new SpannableStringBuilder("https://www.google.com/");
    OmniboxUrlEmphasizer.emphasizeUrl(
        url, mResources, mProfile, ToolbarModelSecurityLevel.SECURE, false, false);
    EmphasizedUrlSpanHelper[] spans = EmphasizedUrlSpanHelper.getSpansForEmphasizedUrl(url);

    assertEquals("Unexpected number of spans:", 4, spans.length);
    spans[0].assertIsColoredSpan(
        "https", 0, mResources.getColor(R.color.url_emphasis_start_scheme_secure));
    spans[1].assertIsColoredSpan(
        "://", 5, mResources.getColor(R.color.url_emphasis_light_non_emphasized_text));
    spans[2].assertIsColoredSpan(
        "www.google.com", 8, mResources.getColor(R.color.url_emphasis_light_domain_and_registry));
    spans[3].assertIsColoredSpan(
        "/", 22, mResources.getColor(R.color.url_emphasis_light_non_emphasized_text));
  }
  /**
   * Verify that a long, insecure HTTPS URL is colored correctly by
   * OmniboxUrlEmphasizer.emphasizeUrl().
   */
  @UiThreadTest
  @MediumTest
  @Feature({"Browser", "Main"})
  public void testLongInsecureHTTPSUrl() {
    Spannable url = new SpannableStringBuilder("https://www.google.com/q?query=abc123&results=1");
    OmniboxUrlEmphasizer.emphasizeUrl(
        url, mResources, mProfile, ToolbarModelSecurityLevel.SECURITY_ERROR, false, true);
    EmphasizedUrlSpanHelper[] spans = EmphasizedUrlSpanHelper.getSpansForEmphasizedUrl(url);

    assertEquals("Unexpected number of spans:", 5, spans.length);
    spans[0].assertIsStrikethroughSpan("https", 0);
    spans[1].assertIsColoredSpan(
        "https", 0, mResources.getColor(R.color.url_emphasis_start_scheme_security_error));
    spans[2].assertIsColoredSpan(
        "://", 5, mResources.getColor(R.color.url_emphasis_non_emphasized_text));
    spans[3].assertIsColoredSpan(
        "www.google.com", 8, mResources.getColor(R.color.url_emphasis_domain_and_registry));
    spans[4].assertIsColoredSpan(
        "/q?query=abc123&results=1",
        22,
        mResources.getColor(R.color.url_emphasis_non_emphasized_text));
  }