OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 #include "ios/chrome/browser/ui/tab_switcher/tab_switcher_model.h" | 5 #include "ios/chrome/browser/ui/tab_switcher/tab_switcher_model.h" |
6 | 6 |
7 #include "base/mac/scoped_nsobject.h" | |
8 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
9 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
10 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" | 9 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" |
11 #include "ios/chrome/browser/ui/ntp/recent_tabs/synced_sessions.h" | 10 #include "ios/chrome/browser/ui/ntp/recent_tabs/synced_sessions.h" |
12 #import "ios/chrome/browser/ui/tab_switcher/tab_switcher_model_private.h" | 11 #import "ios/chrome/browser/ui/tab_switcher/tab_switcher_model_private.h" |
13 #import "ios/chrome/browser/ui/tab_switcher/tab_switcher_utils.h" | 12 #import "ios/chrome/browser/ui/tab_switcher/tab_switcher_utils.h" |
14 #include "testing/platform_test.h" | 13 #include "testing/platform_test.h" |
15 #import "third_party/ocmock/OCMock/OCMock.h" | 14 #import "third_party/ocmock/OCMock/OCMock.h" |
16 | 15 |
| 16 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 17 #error "This file requires ARC support." |
| 18 #endif |
| 19 |
17 namespace { | 20 namespace { |
18 | 21 |
19 // A lightweight DistantTab. | 22 // A lightweight DistantTab. |
20 class LightDT { | 23 class LightDT { |
21 public: | 24 public: |
22 LightDT(std::string const& urlSuffix, std::string const& title = "") | 25 LightDT(std::string const& urlSuffix, std::string const& title = "") |
23 : url("http://www.foo.com/" + urlSuffix), title(title) {} | 26 : url("http://www.foo.com/" + urlSuffix), title(title) {} |
24 std::string url; | 27 std::string url; |
25 std::string title; | 28 std::string title; |
26 }; | 29 }; |
27 | 30 |
28 // A lightweight DistantSession. | 31 // A lightweight DistantSession. |
29 struct LightDS { | 32 struct LightDS { |
30 std::string tag; | 33 std::string tag; |
31 std::vector<LightDT> distantTabs; | 34 std::vector<LightDT> distantTabs; |
32 }; | 35 }; |
33 | 36 |
34 // A lightweight SyncedSessions. | 37 // A lightweight SyncedSessions. |
35 using LightSS = std::vector<LightDS>; | 38 using LightSS = std::vector<LightDS>; |
36 | 39 |
37 } // namespace | 40 } // namespace |
38 | 41 |
39 // Helper class to test calls to the TabSwitcherModelDelegate. | 42 // Helper class to test calls to the TabSwitcherModelDelegate. |
40 @interface DelegateTester : NSObject<TabSwitcherModelDelegate> | 43 @interface DelegateTester : NSObject<TabSwitcherModelDelegate> |
41 @end | 44 @end |
42 | 45 |
43 @implementation DelegateTester { | 46 @implementation DelegateTester { |
44 base::scoped_nsobject<NSArray> _expectedSessionRemoved; | 47 NSArray* _expectedSessionRemoved; |
45 base::scoped_nsobject<NSArray> _expectedSessionInserted; | 48 NSArray* _expectedSessionInserted; |
46 std::set<std::string> _expectedTagsOfTheSessionsNeedingUpdates; | 49 std::set<std::string> _expectedTagsOfTheSessionsNeedingUpdates; |
47 } | 50 } |
48 | 51 |
49 - (void)expectSessionsRemoved:(NSArray*)expectedIndexes { | 52 - (void)expectSessionsRemoved:(NSArray*)expectedIndexes { |
50 _expectedSessionRemoved.reset([expectedIndexes retain]); | 53 _expectedSessionRemoved = expectedIndexes; |
51 } | 54 } |
52 | 55 |
53 - (void)expectSessionsInserted:(NSArray*)expectedIndexes { | 56 - (void)expectSessionsInserted:(NSArray*)expectedIndexes { |
54 _expectedSessionInserted.reset([expectedIndexes retain]); | 57 _expectedSessionInserted = expectedIndexes; |
55 } | 58 } |
56 | 59 |
57 - (void)expectSessionMayNeedUpdate:(std::set<std::string> const&)tags { | 60 - (void)expectSessionMayNeedUpdate:(std::set<std::string> const&)tags { |
58 _expectedTagsOfTheSessionsNeedingUpdates = tags; | 61 _expectedTagsOfTheSessionsNeedingUpdates = tags; |
59 } | 62 } |
60 | 63 |
61 - (void)verify { | 64 - (void)verify { |
62 EXPECT_EQ(0UL, [_expectedSessionRemoved count]); | 65 EXPECT_EQ(0UL, [_expectedSessionRemoved count]); |
63 EXPECT_EQ(0UL, [_expectedSessionInserted count]); | 66 EXPECT_EQ(0UL, [_expectedSessionInserted count]); |
64 EXPECT_EQ(0UL, _expectedTagsOfTheSessionsNeedingUpdates.size()); | 67 EXPECT_EQ(0UL, _expectedTagsOfTheSessionsNeedingUpdates.size()); |
65 } | 68 } |
66 | 69 |
67 #pragma mark - TabSwitcherModelDelegate | 70 #pragma mark - TabSwitcherModelDelegate |
68 | 71 |
69 - (void)distantSessionsRemovedAtSortedIndexes:(NSArray*)removedIndexes | 72 - (void)distantSessionsRemovedAtSortedIndexes:(NSArray*)removedIndexes |
70 insertedAtSortedIndexes:(NSArray*)insertedIndexes { | 73 insertedAtSortedIndexes:(NSArray*)insertedIndexes { |
71 EXPECT_TRUE(removedIndexes == _expectedSessionRemoved.get() || | 74 EXPECT_TRUE(removedIndexes == _expectedSessionRemoved || |
72 [removedIndexes isEqualToArray:_expectedSessionRemoved.get()]); | 75 [removedIndexes isEqualToArray:_expectedSessionRemoved]); |
73 EXPECT_TRUE(insertedIndexes == _expectedSessionInserted.get() || | 76 EXPECT_TRUE(insertedIndexes == _expectedSessionInserted || |
74 [insertedIndexes isEqualToArray:_expectedSessionInserted.get()]); | 77 [insertedIndexes isEqualToArray:_expectedSessionInserted]); |
75 _expectedSessionRemoved.reset(); | 78 _expectedSessionRemoved = nil; |
76 _expectedSessionInserted.reset(); | 79 _expectedSessionInserted = nil; |
77 } | 80 } |
78 | 81 |
79 - (void)distantSessionMayNeedUpdate:(std::string const&)tag { | 82 - (void)distantSessionMayNeedUpdate:(std::string const&)tag { |
80 EXPECT_EQ(1UL, _expectedTagsOfTheSessionsNeedingUpdates.erase(tag)); | 83 EXPECT_EQ(1UL, _expectedTagsOfTheSessionsNeedingUpdates.erase(tag)); |
81 } | 84 } |
82 | 85 |
83 - (void)localSessionMayNeedUpdate:(TabSwitcherSessionType)type { | 86 - (void)localSessionMayNeedUpdate:(TabSwitcherSessionType)type { |
84 NOTREACHED(); | 87 NOTREACHED(); |
85 } | 88 } |
86 | 89 |
87 - (void)signInPanelChangedTo:(TabSwitcherSignInPanelsType)panelType { | 90 - (void)signInPanelChangedTo:(TabSwitcherSignInPanelsType)panelType { |
88 NOTREACHED(); | 91 NOTREACHED(); |
89 } | 92 } |
90 - (CGSize)sizeForItemAtIndex:(NSUInteger)index | 93 - (CGSize)sizeForItemAtIndex:(NSUInteger)index |
91 inSession:(TabSwitcherSessionType)session { | 94 inSession:(TabSwitcherSessionType)session { |
92 return CGSizeZero; | 95 return CGSizeZero; |
93 } | 96 } |
94 @end | 97 @end |
95 | 98 |
96 namespace { | 99 namespace { |
97 | 100 |
98 class TabSwitcherModelTest : public PlatformTest { | 101 class TabSwitcherModelTest : public PlatformTest { |
99 protected: | 102 protected: |
100 void SetUp() override { delegate_.reset([[DelegateTester alloc] init]); } | 103 void SetUp() override { delegate_ = [[DelegateTester alloc] init]; } |
101 | 104 |
102 void AddSessionToSessions(synced_sessions::SyncedSessions& sessions, | 105 void AddSessionToSessions(synced_sessions::SyncedSessions& sessions, |
103 std::string const& session_tag, | 106 std::string const& session_tag, |
104 std::vector<size_t> const& tab_ids) { | 107 std::vector<size_t> const& tab_ids) { |
105 std::vector<LightDT> light_distant_tabs; | 108 std::vector<LightDT> light_distant_tabs; |
106 for (size_t tab_id : tab_ids) { | 109 for (size_t tab_id : tab_ids) { |
107 light_distant_tabs.push_back(LightDT(std::to_string(tab_id), "")); | 110 light_distant_tabs.push_back(LightDT(std::to_string(tab_id), "")); |
108 } | 111 } |
109 AddDetailedSessionToSessions(sessions, session_tag, light_distant_tabs); | 112 AddDetailedSessionToSessions(sessions, session_tag, light_distant_tabs); |
110 } | 113 } |
(...skipping 19 matching lines...) Expand all Loading... |
130 | 133 |
131 for (auto const& light_distant_tab : light_distant_tabs) { | 134 for (auto const& light_distant_tab : light_distant_tabs) { |
132 auto temp_tab = base::MakeUnique<synced_sessions::DistantTab>(); | 135 auto temp_tab = base::MakeUnique<synced_sessions::DistantTab>(); |
133 temp_tab->virtual_url = GURL(light_distant_tab.url); | 136 temp_tab->virtual_url = GURL(light_distant_tab.url); |
134 temp_tab->title = base::ASCIIToUTF16(light_distant_tab.title); | 137 temp_tab->title = base::ASCIIToUTF16(light_distant_tab.title); |
135 distant_session->tabs.push_back(std::move(temp_tab)); | 138 distant_session->tabs.push_back(std::move(temp_tab)); |
136 } | 139 } |
137 | 140 |
138 sessions.AddDistantSessionForTest(std::move(distant_session)); | 141 sessions.AddDistantSessionForTest(std::move(distant_session)); |
139 } | 142 } |
140 base::scoped_nsobject<DelegateTester> delegate_; | 143 DelegateTester* delegate_; |
141 base::scoped_nsobject<TabSwitcherModel> model_; | 144 TabSwitcherModel* model_; |
142 }; | 145 }; |
143 | 146 |
144 TEST_F(TabSwitcherModelTest, TestNoDiffs) { | 147 TEST_F(TabSwitcherModelTest, TestNoDiffs) { |
145 // Test with 2 empty sessions. | 148 // Test with 2 empty sessions. |
146 synced_sessions::SyncedSessions old_sessions_1; | 149 synced_sessions::SyncedSessions old_sessions_1; |
147 synced_sessions::SyncedSessions new_sessions_1; | 150 synced_sessions::SyncedSessions new_sessions_1; |
148 [TabSwitcherModel notifyDelegate:delegate_ | 151 [TabSwitcherModel notifyDelegate:delegate_ |
149 aboutChangeFrom:old_sessions_1 | 152 aboutChangeFrom:old_sessions_1 |
150 to:new_sessions_1]; | 153 to:new_sessions_1]; |
151 [delegate_ verify]; | 154 [delegate_ verify]; |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 [delegate_ expectSessionsRemoved:@[ @1 ]]; | 420 [delegate_ expectSessionsRemoved:@[ @1 ]]; |
418 [delegate_ expectSessionsInserted:@[ @0 ]]; | 421 [delegate_ expectSessionsInserted:@[ @0 ]]; |
419 | 422 |
420 [TabSwitcherModel notifyDelegate:delegate_ | 423 [TabSwitcherModel notifyDelegate:delegate_ |
421 aboutChangeFrom:*old_sessions | 424 aboutChangeFrom:*old_sessions |
422 to:*new_sessions]; | 425 to:*new_sessions]; |
423 [delegate_ verify]; | 426 [delegate_ verify]; |
424 } | 427 } |
425 | 428 |
426 } // namespace | 429 } // namespace |
OLD | NEW |