// 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_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
