// Copyright 2015 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 "components/favicon/core/fallback_url_util.h"

#include <stddef.h>

#include "base/stl_util.h"
#include "base/strings/utf_string_conversions.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"

namespace favicon {
namespace {

TEST(FallbackURLUtilTest, GetFallbackIconText) {
  struct {
    const char* url_str;
    const char* expected;
  } test_cases[] = {
      // Test vacuous or invalid cases.
      {"", ""},
      {"http:///", ""},
      {"this is not an URL", ""},
      {"!@#$%^&*()", ""},
      // Test URLs with a domain in the registry.
      {"http://www.google.com/", "G"},
      {"ftp://GOogLE.com/", "G"},
      {"https://www.google.com:8080/path?query#ref", "G"},
      {"http://www.amazon.com", "A"},
      {"http://zmzaon.co.uk/", "Z"},
      {"http://w-3.137.org", "1"},
      // Test URLs with a domian not in the registry.
      {"http://localhost/", "L"},
      {"chrome-search://local-ntp/local-ntp.html", "L"},
      // Test IP URLs.
      {"http://192.168.0.1/", "IP"},
      {"http://[2001:4860:4860::8888]/", "IP"},
      // Miscellaneous edge cases.
      {"http://www..com/", "."},
      {"http://ip.ip/", "I"},
      // xn-- related cases: we're not supporint xn-- yet
      {"http://xn--oogle-60a/", "X"},
      {"http://xn-oogle-60a/", "X"},
  };
  for (size_t i = 0; i < base::size(test_cases); ++i) {
    base::string16 expected = base::ASCIIToUTF16(test_cases[i].expected);
    GURL url(test_cases[i].url_str);
    EXPECT_EQ(expected, GetFallbackIconText(url)) << " for test_cases[" << i
                                                  << "]";
  }
}

}  // namespace
}  // namespace favicon
