/** 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 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));
  }