| Index: ios/chrome/browser/ui/history/tab_history_popup_controller_unittest.mm
|
| diff --git a/ios/chrome/browser/ui/history/tab_history_popup_controller_unittest.mm b/ios/chrome/browser/ui/history/tab_history_popup_controller_unittest.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..37820871831a87623cbd54b4d529e244b02fb1b3
|
| --- /dev/null
|
| +++ b/ios/chrome/browser/ui/history/tab_history_popup_controller_unittest.mm
|
| @@ -0,0 +1,136 @@
|
| +// Copyright 2012 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/chrome/browser/ui/history/tab_history_popup_controller.h"
|
| +
|
| +#include <memory>
|
| +#include <utility>
|
| +
|
| +#include "base/mac/scoped_nsobject.h"
|
| +#include "components/sessions/core/session_types.h"
|
| +#import "ios/chrome/browser/ui/history/tab_history_view_controller.h"
|
| +#include "ios/chrome/browser/ui/ui_util.h"
|
| +#import "ios/web/navigation/crw_session_entry.h"
|
| +#include "ios/web/public/navigation_item.h"
|
| +#include "ios/web/public/referrer.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "testing/platform_test.h"
|
| +#import "third_party/ocmock/OCMock/OCMock.h"
|
| +#include "ui/gfx/ios/uikit_util.h"
|
| +
|
| +@interface TabHistoryPopupController (Testing)
|
| +- (CGFloat)calculatePopupWidth:(NSArray*)entries;
|
| +@property(nonatomic, retain)
|
| + TabHistoryViewController* tabHistoryTableViewController;
|
| +@end
|
| +
|
| +namespace {
|
| +static const CGFloat kTabHistoryMinWidth = 250.0;
|
| +static const CGFloat kTabHistoryMaxWidthLandscapePhone = 350.0;
|
| +
|
| +class TabHistoryPopupControllerTest : public PlatformTest {
|
| + protected:
|
| + void SetUp() override {
|
| + parent_.reset([[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds]);
|
| + popup_.reset([[TabHistoryPopupController alloc]
|
| + initWithOrigin:CGPointZero
|
| + parentView:parent_
|
| + entries:testEntriesArray()]);
|
| + }
|
| + void TearDown() override {
|
| + parent_.reset();
|
| + popup_.reset();
|
| + }
|
| + NSArray* testEntriesArray() {
|
| + web::Referrer referrer(GURL("http://www.example.com"),
|
| + web::ReferrerPolicyDefault);
|
| + std::unique_ptr<web::NavigationItem> item0 = web::NavigationItem::Create();
|
| + item0->SetURL(GURL("http://www.example.com/0"));
|
| + item0->SetReferrer(referrer);
|
| + CRWSessionEntry* entry0 =
|
| + [[CRWSessionEntry alloc] initWithNavigationItem:std::move(item0)];
|
| + std::unique_ptr<web::NavigationItem> item1 = web::NavigationItem::Create();
|
| + item1->SetURL(GURL("http://www.example.com/1"));
|
| + item1->SetReferrer(referrer);
|
| + CRWSessionEntry* entry1 =
|
| + [[CRWSessionEntry alloc] initWithNavigationItem:std::move(item1)];
|
| + std::unique_ptr<web::NavigationItem> item2 = web::NavigationItem::Create();
|
| + item2->SetURL(GURL("http://www.example.com/2"));
|
| + item2->SetReferrer(referrer);
|
| + CRWSessionEntry* entry2 =
|
| + [[CRWSessionEntry alloc] initWithNavigationItem:std::move(item2)];
|
| + return [NSArray arrayWithObjects:entry0, entry1, entry2, nil];
|
| + }
|
| + base::scoped_nsobject<UIView> parent_;
|
| + base::scoped_nsobject<TabHistoryPopupController> popup_;
|
| +};
|
| +
|
| +TEST_F(TabHistoryPopupControllerTest, TestTableSize) {
|
| + NSInteger number_of_rows = 0;
|
| +
|
| + UICollectionView* collectionView =
|
| + [[popup_ tabHistoryTableViewController] collectionView];
|
| +
|
| + NSInteger number_of_sections = [collectionView numberOfSections];
|
| + for (NSInteger section = 0; section < number_of_sections; ++section) {
|
| + number_of_rows += [collectionView numberOfItemsInSection:section];
|
| + }
|
| +
|
| + EXPECT_EQ(3, number_of_rows);
|
| +}
|
| +
|
| +TEST_F(TabHistoryPopupControllerTest, TestCalculatePopupWidth) {
|
| + web::Referrer referrer(GURL("http://www.example.com"),
|
| + web::ReferrerPolicyDefault);
|
| + std::unique_ptr<web::NavigationItem> itemShort =
|
| + web::NavigationItem::Create();
|
| + itemShort->SetURL(GURL("http://foo.com/"));
|
| + itemShort->SetReferrer(referrer);
|
| + CRWSessionEntry* entryShort =
|
| + [[CRWSessionEntry alloc] initWithNavigationItem:std::move(itemShort)];
|
| + std::unique_ptr<web::NavigationItem> itemMedium =
|
| + web::NavigationItem::Create();
|
| + itemMedium->SetURL(GURL("http://www.example.com/mediumurl"));
|
| + itemMedium->SetReferrer(referrer);
|
| + CRWSessionEntry* entryMedium =
|
| + [[CRWSessionEntry alloc] initWithNavigationItem:std::move(itemMedium)];
|
| + std::string longURL =
|
| + "http://www.example.com/this/is/areally/long/url/that/"
|
| + "is/larger/than/the/maximum/table/width/so/its/text/will/get/cut/off/and/"
|
| + "the/max/width/is/used/";
|
| + std::unique_ptr<web::NavigationItem> itemLong = web::NavigationItem::Create();
|
| + itemLong->SetURL(GURL(longURL));
|
| + itemLong->SetReferrer(referrer);
|
| + CRWSessionEntry* entryLong =
|
| + [[CRWSessionEntry alloc] initWithNavigationItem:std::move(itemLong)];
|
| +
|
| + CGFloat minWidth = kTabHistoryMinWidth;
|
| + CGFloat maxWidth = kTabHistoryMinWidth;
|
| + if (!IsIPadIdiom()) {
|
| + UIInterfaceOrientation orientation =
|
| + [[UIApplication sharedApplication] statusBarOrientation];
|
| + if (!UIInterfaceOrientationIsPortrait(orientation))
|
| + maxWidth = kTabHistoryMaxWidthLandscapePhone;
|
| + } else {
|
| + maxWidth = ui::AlignValueToUpperPixel(
|
| + [UIApplication sharedApplication].keyWindow.frame.size.width * .85);
|
| + }
|
| +
|
| + CGFloat width =
|
| + [popup_ calculatePopupWidth:[NSArray arrayWithObjects:entryShort, nil]];
|
| + EXPECT_EQ(minWidth, width);
|
| +
|
| + width =
|
| + [popup_ calculatePopupWidth:[NSArray arrayWithObjects:entryShort,
|
| + entryMedium, nil]];
|
| + EXPECT_GE(width, minWidth);
|
| + EXPECT_LE(width, maxWidth);
|
| +
|
| + width = [popup_
|
| + calculatePopupWidth:[NSArray arrayWithObjects:entryShort, entryLong,
|
| + entryMedium, nil]];
|
| + EXPECT_EQ(maxWidth, width);
|
| +}
|
| +
|
| +} // namespace
|
|
|