OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #import "ios/chrome/browser/ui/history/tab_history_popup_controller.h" | 5 #import "ios/chrome/browser/ui/history/tab_history_popup_controller.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/mac/scoped_nsobject.h" | 10 #include "base/mac/scoped_nsobject.h" |
11 #include "components/sessions/core/session_types.h" | 11 #include "components/sessions/core/session_types.h" |
12 #import "ios/chrome/browser/ui/history/tab_history_view_controller.h" | 12 #import "ios/chrome/browser/ui/history/tab_history_view_controller.h" |
13 #include "ios/chrome/browser/ui/ui_util.h" | 13 #include "ios/chrome/browser/ui/ui_util.h" |
14 #import "ios/web/navigation/crw_session_entry.h" | |
15 #include "ios/web/public/navigation_item.h" | 14 #include "ios/web/public/navigation_item.h" |
16 #include "ios/web/public/referrer.h" | 15 #include "ios/web/public/referrer.h" |
17 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
18 #include "testing/platform_test.h" | 17 #include "testing/platform_test.h" |
19 #import "third_party/ocmock/OCMock/OCMock.h" | 18 #import "third_party/ocmock/OCMock/OCMock.h" |
20 #include "ui/gfx/ios/uikit_util.h" | 19 #include "ui/gfx/ios/uikit_util.h" |
21 | 20 |
22 @interface TabHistoryPopupController (Testing) | 21 @interface TabHistoryPopupController (Testing) |
23 - (CGFloat)calculatePopupWidth:(NSArray*)entries; | 22 + (CGFloat)popupWidthForItems:(const web::NavigationItemList)items; |
24 @property(nonatomic, retain) | 23 @property(nonatomic, retain) |
25 TabHistoryViewController* tabHistoryTableViewController; | 24 TabHistoryViewController* tabHistoryTableViewController; |
26 @end | 25 @end |
27 | 26 |
28 namespace { | 27 namespace { |
29 static const CGFloat kTabHistoryMinWidth = 250.0; | 28 static const CGFloat kTabHistoryMinWidth = 250.0; |
30 static const CGFloat kTabHistoryMaxWidthLandscapePhone = 350.0; | 29 static const CGFloat kTabHistoryMaxWidthLandscapePhone = 350.0; |
31 | 30 |
32 class TabHistoryPopupControllerTest : public PlatformTest { | 31 class TabHistoryPopupControllerTest : public PlatformTest { |
33 protected: | 32 protected: |
34 void SetUp() override { | 33 void SetUp() override { |
| 34 web::Referrer referrer(GURL("http://www.example.com"), |
| 35 web::ReferrerPolicyDefault); |
| 36 items_.push_back(web::NavigationItem::Create()); |
| 37 items_.back()->SetURL(GURL("http://www.example.com/0")); |
| 38 items_.back()->SetReferrer(referrer); |
| 39 items_.push_back(web::NavigationItem::Create()); |
| 40 items_.back()->SetURL(GURL("http://www.example.com/1")); |
| 41 items_.back()->SetReferrer(referrer); |
| 42 items_.push_back(web::NavigationItem::Create()); |
| 43 items_.back()->SetURL(GURL("http://www.example.com/0")); |
| 44 items_.back()->SetReferrer(referrer); |
| 45 |
35 parent_.reset([[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds]); | 46 parent_.reset([[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds]); |
36 popup_.reset([[TabHistoryPopupController alloc] | 47 popup_.reset([[TabHistoryPopupController alloc] |
37 initWithOrigin:CGPointZero | 48 initWithOrigin:CGPointZero |
38 parentView:parent_ | 49 parentView:parent_ |
39 entries:testEntriesArray()]); | 50 items:web::CreateRawNavigationItemList(items_)]); |
40 } | 51 } |
41 void TearDown() override { | 52 |
42 parent_.reset(); | 53 web::ScopedNavigationItemList items_; |
43 popup_.reset(); | |
44 } | |
45 NSArray* testEntriesArray() { | |
46 web::Referrer referrer(GURL("http://www.example.com"), | |
47 web::ReferrerPolicyDefault); | |
48 std::unique_ptr<web::NavigationItem> item0 = web::NavigationItem::Create(); | |
49 item0->SetURL(GURL("http://www.example.com/0")); | |
50 item0->SetReferrer(referrer); | |
51 CRWSessionEntry* entry0 = | |
52 [[CRWSessionEntry alloc] initWithNavigationItem:std::move(item0)]; | |
53 std::unique_ptr<web::NavigationItem> item1 = web::NavigationItem::Create(); | |
54 item1->SetURL(GURL("http://www.example.com/1")); | |
55 item1->SetReferrer(referrer); | |
56 CRWSessionEntry* entry1 = | |
57 [[CRWSessionEntry alloc] initWithNavigationItem:std::move(item1)]; | |
58 std::unique_ptr<web::NavigationItem> item2 = web::NavigationItem::Create(); | |
59 item2->SetURL(GURL("http://www.example.com/2")); | |
60 item2->SetReferrer(referrer); | |
61 CRWSessionEntry* entry2 = | |
62 [[CRWSessionEntry alloc] initWithNavigationItem:std::move(item2)]; | |
63 return [NSArray arrayWithObjects:entry0, entry1, entry2, nil]; | |
64 } | |
65 base::scoped_nsobject<UIView> parent_; | 54 base::scoped_nsobject<UIView> parent_; |
66 base::scoped_nsobject<TabHistoryPopupController> popup_; | 55 base::scoped_nsobject<TabHistoryPopupController> popup_; |
67 }; | 56 }; |
68 | 57 |
69 TEST_F(TabHistoryPopupControllerTest, TestTableSize) { | 58 TEST_F(TabHistoryPopupControllerTest, TestTableSize) { |
70 NSInteger number_of_rows = 0; | 59 NSInteger number_of_rows = 0; |
71 | 60 |
72 UICollectionView* collectionView = | 61 UICollectionView* collectionView = |
73 [[popup_ tabHistoryTableViewController] collectionView]; | 62 [[popup_ tabHistoryTableViewController] collectionView]; |
74 | 63 |
75 NSInteger number_of_sections = [collectionView numberOfSections]; | 64 NSInteger number_of_sections = [collectionView numberOfSections]; |
76 for (NSInteger section = 0; section < number_of_sections; ++section) { | 65 for (NSInteger section = 0; section < number_of_sections; ++section) { |
77 number_of_rows += [collectionView numberOfItemsInSection:section]; | 66 number_of_rows += [collectionView numberOfItemsInSection:section]; |
78 } | 67 } |
79 | 68 |
80 EXPECT_EQ(3, number_of_rows); | 69 EXPECT_EQ(3, number_of_rows); |
81 } | 70 } |
82 | 71 |
83 TEST_F(TabHistoryPopupControllerTest, TestCalculatePopupWidth) { | 72 TEST_F(TabHistoryPopupControllerTest, TestCalculatePopupWidth) { |
84 web::Referrer referrer(GURL("http://www.example.com"), | |
85 web::ReferrerPolicyDefault); | |
86 std::unique_ptr<web::NavigationItem> itemShort = | |
87 web::NavigationItem::Create(); | |
88 itemShort->SetURL(GURL("http://foo.com/")); | |
89 itemShort->SetReferrer(referrer); | |
90 CRWSessionEntry* entryShort = | |
91 [[CRWSessionEntry alloc] initWithNavigationItem:std::move(itemShort)]; | |
92 std::unique_ptr<web::NavigationItem> itemMedium = | |
93 web::NavigationItem::Create(); | |
94 itemMedium->SetURL(GURL("http://www.example.com/mediumurl")); | |
95 itemMedium->SetReferrer(referrer); | |
96 CRWSessionEntry* entryMedium = | |
97 [[CRWSessionEntry alloc] initWithNavigationItem:std::move(itemMedium)]; | |
98 std::string longURL = | |
99 "http://www.example.com/this/is/areally/long/url/that/" | |
100 "is/larger/than/the/maximum/table/width/so/its/text/will/get/cut/off/and/" | |
101 "the/max/width/is/used/"; | |
102 std::unique_ptr<web::NavigationItem> itemLong = web::NavigationItem::Create(); | |
103 itemLong->SetURL(GURL(longURL)); | |
104 itemLong->SetReferrer(referrer); | |
105 CRWSessionEntry* entryLong = | |
106 [[CRWSessionEntry alloc] initWithNavigationItem:std::move(itemLong)]; | |
107 | |
108 CGFloat minWidth = kTabHistoryMinWidth; | 73 CGFloat minWidth = kTabHistoryMinWidth; |
109 CGFloat maxWidth = kTabHistoryMinWidth; | 74 CGFloat maxWidth = kTabHistoryMinWidth; |
110 if (!IsIPadIdiom()) { | 75 if (!IsIPadIdiom()) { |
111 UIInterfaceOrientation orientation = | 76 UIInterfaceOrientation orientation = |
112 [[UIApplication sharedApplication] statusBarOrientation]; | 77 [[UIApplication sharedApplication] statusBarOrientation]; |
113 if (!UIInterfaceOrientationIsPortrait(orientation)) | 78 if (!UIInterfaceOrientationIsPortrait(orientation)) |
114 maxWidth = kTabHistoryMaxWidthLandscapePhone; | 79 maxWidth = kTabHistoryMaxWidthLandscapePhone; |
115 } else { | 80 } else { |
116 maxWidth = ui::AlignValueToUpperPixel( | 81 maxWidth = ui::AlignValueToUpperPixel( |
117 [UIApplication sharedApplication].keyWindow.frame.size.width * .85); | 82 [UIApplication sharedApplication].keyWindow.frame.size.width * .85); |
118 } | 83 } |
119 | 84 |
120 CGFloat width = | 85 // Add an item with a short URL and verify that the minimum width is returned. |
121 [popup_ calculatePopupWidth:[NSArray arrayWithObjects:entryShort, nil]]; | 86 web::ScopedNavigationItemList items; |
| 87 web::Referrer referrer(GURL("http://www.example.com"), |
| 88 web::ReferrerPolicyDefault); |
| 89 items.push_back(web::NavigationItem::Create()); |
| 90 items.back()->SetURL(GURL("http://foo.com/")); |
| 91 items.back()->SetReferrer(referrer); |
| 92 web::NavigationItemList raw_items = web::CreateRawNavigationItemList(items); |
| 93 CGFloat width = [TabHistoryPopupController popupWidthForItems:raw_items]; |
122 EXPECT_EQ(minWidth, width); | 94 EXPECT_EQ(minWidth, width); |
123 | 95 |
124 width = | 96 // Add an item with a medium URL and verify that the returned width is between |
125 [popup_ calculatePopupWidth:[NSArray arrayWithObjects:entryShort, | 97 // the minimum and maximum. |
126 entryMedium, nil]]; | 98 items.push_back(web::NavigationItem::Create()); |
| 99 items.back()->SetURL(GURL("http://www.example.com/mediumurl")); |
| 100 items.back()->SetReferrer(referrer); |
| 101 raw_items.push_back(items.back().get()); |
| 102 width = [TabHistoryPopupController popupWidthForItems:raw_items]; |
127 EXPECT_GE(width, minWidth); | 103 EXPECT_GE(width, minWidth); |
128 EXPECT_LE(width, maxWidth); | 104 EXPECT_LE(width, maxWidth); |
129 | 105 |
130 width = [popup_ | 106 // Add an item with a long URL and verify that the maximum width is returned. |
131 calculatePopupWidth:[NSArray arrayWithObjects:entryShort, entryLong, | 107 std::string long_url = |
132 entryMedium, nil]]; | 108 "http://www.example.com/this/is/areally/long/url/that/" |
| 109 "is/larger/than/the/maximum/table/width/so/its/text/will/get/cut/off/and/" |
| 110 "the/max/width/is/used/"; |
| 111 items.push_back(web::NavigationItem::Create()); |
| 112 items.back()->SetURL(GURL(long_url)); |
| 113 items.back()->SetReferrer(referrer); |
| 114 raw_items.push_back(items.back().get()); |
| 115 width = [TabHistoryPopupController popupWidthForItems:raw_items]; |
133 EXPECT_EQ(maxWidth, width); | 116 EXPECT_EQ(maxWidth, width); |
134 } | 117 } |
135 | 118 |
136 } // namespace | 119 } // namespace |
OLD | NEW |