blob: 48c1465748828d59309027bd191c8dd0eafea322 [file] [log] [blame]
// 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.
#import "ios/web/web_state/ui/wk_back_forward_list_item_holder.h"
#import <WebKit/WebKit.h>
#import "ios/web/navigation/navigation_item_impl.h"
#import "ios/web/public/navigation_item.h"
#include "testing/gtest/include/gtest/gtest.h"
#import "testing/gtest_mac.h"
#include "testing/platform_test.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace web {
// Test fixture for WKBackForwardListItemHolder class.
typedef PlatformTest WKBackForwardListItemHolderTest;
// Tests that FromNavigationItem returns the same holder for the same
// NavigationItem.
TEST_F(WKBackForwardListItemHolderTest, GetHolderFromNavigationItem) {
std::unique_ptr<web::NavigationItem> item(NavigationItem::Create());
WKBackForwardListItemHolder* holder1 =
WKBackForwardListItemHolder::FromNavigationItem(item.get());
WKBackForwardListItemHolder* holder2 =
WKBackForwardListItemHolder::FromNavigationItem(item.get());
EXPECT_EQ(holder1, holder2);
}
// Tests that FromNavigationItem returns different holders for different
// NavigationItem objects.
TEST_F(WKBackForwardListItemHolderTest, GetHolderFromDifferentNavigationItem) {
// Create two NavigationItem objects.
std::unique_ptr<web::NavigationItem> item1(NavigationItem::Create());
std::unique_ptr<web::NavigationItem> item2(NavigationItem::Create());
EXPECT_NE(item1.get(), item2.get());
// Verify that the two objects have different holders.
WKBackForwardListItemHolder* holder1 =
WKBackForwardListItemHolder::FromNavigationItem(item1.get());
WKBackForwardListItemHolder* holder2 =
WKBackForwardListItemHolder::FromNavigationItem(item2.get());
EXPECT_NE(holder1, holder2);
}
// Tests that acessors for the WKBackForwardListItem object work as
// expected. The test bellow uses NSObject instead of WKBackForwardListItem
// because WKBackForwardListItem alloc/release is not designed to be called
// directly and will crash.
TEST_F(WKBackForwardListItemHolderTest, GetBackForwardListItemFromHolder) {
std::unique_ptr<web::NavigationItem> item(NavigationItem::Create());
NSObject* input = [[NSObject alloc] init];
WKBackForwardListItemHolder* holder =
WKBackForwardListItemHolder::FromNavigationItem(item.get());
holder->set_back_forward_list_item(
static_cast<WKBackForwardListItem*>(input));
NSObject* result = holder->back_forward_list_item();
EXPECT_EQ(input, result);
}
// Tests that acessors for navigation type work as expected.
TEST_F(WKBackForwardListItemHolderTest, GetNavigationTypeFromHolder) {
std::unique_ptr<web::NavigationItem> item(NavigationItem::Create());
WKBackForwardListItemHolder* holder =
WKBackForwardListItemHolder::FromNavigationItem(item.get());
// Verify that setting 'WKNavigationTypeOther' means
// |navigation_type| returns WKNavigationTypeBackForward
WKNavigationType type = WKNavigationTypeOther;
holder->set_navigation_type(type);
EXPECT_EQ(type, holder->navigation_type());
// Verify that setting 'WKNavigationTypeBackForward' means
// |navigation_type| returns 'WKNavigationTypeBackForward'
type = WKNavigationTypeBackForward;
holder->set_navigation_type(type);
EXPECT_EQ(type, holder->navigation_type());
// Verify that setting 'WKNavigationTypeFormSubmitted' means
// |navigation_type| returns 'WKNavigationTypeFormSubmitted'
type = WKNavigationTypeFormSubmitted;
holder->set_navigation_type(type);
EXPECT_EQ(type, holder->navigation_type());
// Verify that setting 'WKNavigationTypeFormResubmitted' means
// |navigation_type| returns 'WKNavigationTypeFormResubmitted'
type = WKNavigationTypeFormResubmitted;
holder->set_navigation_type(type);
EXPECT_EQ(type, holder->navigation_type());
// Verify that setting 'WKNavigationTypeReload' means
// |navigation_type| returns 'WKNavigationTypeReload'
type = WKNavigationTypeReload;
holder->set_navigation_type(type);
EXPECT_EQ(type, holder->navigation_type());
// Verify that setting 'WKNavigationTypeLinkActivated' means
// |navigation_type| returns 'WKNavigationTypeLinkActivated'
type = WKNavigationTypeLinkActivated;
holder->set_navigation_type(type);
EXPECT_EQ(type, holder->navigation_type());
}
} // namespace web