// Copyright 2018 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.

#import "ios/web_view/internal/cwv_favicon_internal.h"

#import <UIKit/UIKit.h>
#include <vector>

#include "ios/web/public/favicon/favicon_url.h"
#import "net/base/mac/url_conversions.h"
#include "testing/gtest/include/gtest/gtest.h"
#import "testing/gtest_mac.h"
#include "testing/platform_test.h"
#include "ui/gfx/geometry/size.h"
#include "url/gurl.h"

#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif

namespace ios_web_view {

using CWVFaviconTest = PlatformTest;

// Tests CWVFavicon factory initialization.
TEST_F(CWVFaviconTest, FactoryInitialization) {
  NSURL* url = [NSURL URLWithString:@"https://chromium.org/static/fav.ico"];
  CWVFaviconType type = CWVFaviconTypeFavicon;
  web::FaviconURL::IconType web_type = web::FaviconURL::IconType::kFavicon;
  NSArray<NSValue*>* sizes = @[
    [NSValue valueWithCGSize:CGSizeMake(16, 16)],
    [NSValue valueWithCGSize:CGSizeMake(32, 32)]
  ];
  std::vector<gfx::Size> gfx_sizes = {gfx::Size(16, 16), gfx::Size(32, 32)};
  web::FaviconURL favicon_url(net::GURLWithNSURL(url), web_type, gfx_sizes);

  NSURL* url2 = [NSURL URLWithString:@"https://chromium.org/static/fav.png"];
  CWVFaviconType type2 = CWVFaviconTypeTouchIcon;
  web::FaviconURL::IconType web_type2 = web::FaviconURL::IconType::kTouchIcon;
  NSArray<NSValue*>* sizes2 = @[ [NSValue valueWithCGSize:CGSizeMake(48, 48)] ];
  std::vector<gfx::Size> gfx_sizes2 = {gfx::Size(48, 48)};
  web::FaviconURL favicon_url2(net::GURLWithNSURL(url2), web_type2, gfx_sizes2);

  std::vector<web::FaviconURL> favicon_urls = {favicon_url, favicon_url2};
  NSArray<CWVFavicon*>* favicons =
      [CWVFavicon faviconsFromFaviconURLs:favicon_urls];

  CWVFavicon* favicon = favicons.firstObject;
  EXPECT_NSEQ(url, favicon.URL);
  EXPECT_EQ(type, favicon.type);
  EXPECT_NSEQ(sizes, favicon.sizes);

  CWVFavicon* favicon2 = favicons.lastObject;
  EXPECT_NSEQ(url2, favicon2.URL);
  EXPECT_EQ(type2, favicon2.type);
  EXPECT_NSEQ(sizes2, favicon2.sizes);
}

}  // namespace ios_web_view
