| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "ios/chrome/browser/sessions/model/session_window_ios.h" |
| |
| #import <Foundation/Foundation.h> |
| |
| #import "ios/web/public/session/crw_session_storage.h" |
| #import "ios/web/public/web_state_id.h" |
| #import "testing/gtest/include/gtest/gtest.h" |
| #import "testing/platform_test.h" |
| |
| namespace { |
| |
| CRWSessionStorage* CreateSessionForTest(BOOL has_opener) { |
| CRWSessionStorage* session = [[CRWSessionStorage alloc] init]; |
| session.stableIdentifier = [[NSUUID UUID] UUIDString]; |
| session.uniqueIdentifier = web::WebStateID::NewUnique(); |
| session.hasOpener = has_opener; |
| return session; |
| } |
| |
| SessionWindowIOS* CreateSessionWindowForTest(NSUInteger selectedIndex) { |
| return [[SessionWindowIOS alloc] |
| initWithSessions:@[ CreateSessionForTest(YES), CreateSessionForTest(NO) ] |
| tabGroups:@[] |
| selectedIndex:selectedIndex]; |
| } |
| |
| } // namespace |
| |
| // Required to clear the autorelease pool automatically between each tests. |
| using SessionWindowIOSTest = PlatformTest; |
| |
| TEST_F(SessionWindowIOSTest, InitEmpty) { |
| SessionWindowIOS* session_window = |
| [[SessionWindowIOS alloc] initWithSessions:@[] |
| tabGroups:@[] |
| selectedIndex:NSNotFound]; |
| EXPECT_EQ(0u, [session_window.sessions count]); |
| EXPECT_EQ(static_cast<NSUInteger>(NSNotFound), session_window.selectedIndex); |
| } |
| |
| TEST_F(SessionWindowIOSTest, InitWithSessions) { |
| SessionWindowIOS* session_window = CreateSessionWindowForTest(0u); |
| |
| EXPECT_EQ(2u, [session_window.sessions count]); |
| EXPECT_EQ(0u, session_window.selectedIndex); |
| } |
| |
| TEST_F(SessionWindowIOSTest, CodingEncoding) { |
| SessionWindowIOS* original_session_window = CreateSessionWindowForTest(1u); |
| |
| NSError* error = nil; |
| NSData* data = |
| [NSKeyedArchiver archivedDataWithRootObject:original_session_window |
| requiringSecureCoding:NO |
| error:&error]; |
| ASSERT_TRUE(data != nil); |
| ASSERT_TRUE(error == nil); |
| |
| NSKeyedUnarchiver* unarchiver = |
| [[NSKeyedUnarchiver alloc] initForReadingFromData:data error:nil]; |
| unarchiver.requiresSecureCoding = NO; |
| SessionWindowIOS* unarchived_session_window = |
| [unarchiver decodeObjectForKey:NSKeyedArchiveRootObjectKey]; |
| ASSERT_TRUE(unarchived_session_window != nil); |
| |
| EXPECT_EQ(1u, unarchived_session_window.selectedIndex); |
| ASSERT_EQ(2u, [unarchived_session_window.sessions count]); |
| |
| EXPECT_TRUE(unarchived_session_window.sessions[0].hasOpener); |
| EXPECT_FALSE(unarchived_session_window.sessions[1].hasOpener); |
| } |