Index: ios/chrome/browser/sessions/session_service_unittest.mm |
diff --git a/ios/chrome/browser/sessions/session_service_unittest.mm b/ios/chrome/browser/sessions/session_service_unittest.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e859046f97cf3d537b65bf6cf5b53fc52d4b0dc8 |
--- /dev/null |
+++ b/ios/chrome/browser/sessions/session_service_unittest.mm |
@@ -0,0 +1,143 @@ |
+// 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 <Foundation/Foundation.h> |
+ |
+#include <memory> |
+ |
+#include "base/files/file_path.h" |
+#include "base/files/file_util.h" |
+#include "base/files/scoped_temp_dir.h" |
+#include "base/mac/scoped_nsobject.h" |
+#include "base/path_service.h" |
+#include "base/strings/sys_string_conversions.h" |
+#include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" |
+#include "ios/chrome/browser/chrome_paths.h" |
+#import "ios/chrome/browser/sessions/session_service.h" |
+#import "ios/chrome/browser/sessions/session_window.h" |
+#include "ios/web/public/navigation_item.h" |
+#import "ios/web/public/navigation_manager.h" |
+#include "ios/web/public/test/test_web_thread_bundle.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "testing/gtest_mac.h" |
+#include "testing/platform_test.h" |
+#import "third_party/ocmock/OCMock/OCMock.h" |
+ |
+@interface SessionServiceIOS (Testing) |
+- (void)performSaveWindow:(SessionWindowIOS*)window |
+ toDirectory:(NSString*)directory; |
+@end |
+ |
+namespace { |
+ |
+// Fixture Class. Takes care of deleting the directory used to store test data. |
+class SessionServiceTest : public PlatformTest { |
+ private: |
+ base::ScopedTempDir test_dir_; |
+ |
+ protected: |
+ void SetUp() override { |
+ ASSERT_TRUE(test_dir_.CreateUniqueTempDir()); |
+ // directoryName_ = [NSString |
+ // stringWithCString:test_dir_.path().value().c_str() |
+ // encoding:NSASCIIStringEncoding]; |
+ |
+ TestChromeBrowserState::Builder test_cbs_builder; |
+ test_cbs_builder.SetPath(test_dir_.GetPath()); |
+ chrome_browser_state_ = test_cbs_builder.Build(); |
+ directoryName_ = |
+ base::SysUTF8ToNSString(chrome_browser_state_->GetStatePath().value()); |
+ } |
+ |
+ void TearDown() override {} |
+ |
+ // Helper function to load a SessionWindowIOS from a given testdata |
+ // |filename|. Returns nil if there was an error loading the session. |
+ SessionWindowIOS* LoadSessionFromTestDataFile( |
+ const base::FilePath::StringType& filename) { |
+ SessionServiceIOS* service = [SessionServiceIOS sharedService]; |
+ base::FilePath plist_path; |
+ bool success = PathService::Get(ios::DIR_TEST_DATA, &plist_path); |
+ EXPECT_TRUE(success); |
+ if (!success) { |
+ return nil; |
+ } |
+ |
+ plist_path = plist_path.AppendASCII("sessions"); |
+ plist_path = plist_path.Append(filename); |
+ EXPECT_TRUE(base::PathExists(plist_path)); |
+ |
+ NSString* path = base::SysUTF8ToNSString(plist_path.value()); |
+ return [service loadWindowFromPath:path |
+ forBrowserState:chrome_browser_state_.get()]; |
+ } |
+ |
+ NSString* directoryName_; |
+ web::TestWebThreadBundle thread_bundle_; |
+ std::unique_ptr<TestChromeBrowserState> chrome_browser_state_; |
+}; |
+ |
+TEST_F(SessionServiceTest, Singleton) { |
+ SessionServiceIOS* service = [SessionServiceIOS sharedService]; |
+ EXPECT_TRUE(service != nil); |
+ |
+ SessionServiceIOS* anotherService = [SessionServiceIOS sharedService]; |
+ EXPECT_TRUE(anotherService != nil); |
+ |
+ EXPECT_TRUE(service == anotherService); |
+} |
+ |
+TEST_F(SessionServiceTest, SaveWindowToDirectory) { |
+ id sessionWindowMock = |
+ [OCMockObject niceMockForClass:[SessionWindowIOS class]]; |
+ SessionServiceIOS* service = [SessionServiceIOS sharedService]; |
+ [service performSaveWindow:sessionWindowMock toDirectory:directoryName_]; |
+ |
+ NSFileManager* fileManager = [NSFileManager defaultManager]; |
+ EXPECT_TRUE([fileManager removeItemAtPath:directoryName_ error:NULL]); |
+} |
+ |
+TEST_F(SessionServiceTest, SaveWindowToDirectoryAlreadyExistent) { |
+ id sessionWindowMock = |
+ [OCMockObject niceMockForClass:[SessionWindowIOS class]]; |
+ EXPECT_TRUE([[NSFileManager defaultManager] |
+ createDirectoryAtPath:directoryName_ |
+ withIntermediateDirectories:YES |
+ attributes:nil |
+ error:NULL]); |
+ |
+ SessionServiceIOS* service = [SessionServiceIOS sharedService]; |
+ [service performSaveWindow:sessionWindowMock toDirectory:directoryName_]; |
+ |
+ NSFileManager* fileManager = [NSFileManager defaultManager]; |
+ EXPECT_TRUE([fileManager removeItemAtPath:directoryName_ error:NULL]); |
+} |
+ |
+TEST_F(SessionServiceTest, LoadEmptyWindowFromDirectory) { |
+ SessionServiceIOS* service = [SessionServiceIOS sharedService]; |
+ SessionWindowIOS* sessionWindow = |
+ [service loadWindowForBrowserState:chrome_browser_state_.get()]; |
+ EXPECT_TRUE(sessionWindow == nil); |
+} |
+ |
+TEST_F(SessionServiceTest, LoadWindowFromDirectory) { |
+ SessionServiceIOS* service = [SessionServiceIOS sharedService]; |
+ base::scoped_nsobject<SessionWindowIOS> origSessionWindow( |
+ [[SessionWindowIOS alloc] init]); |
+ [service performSaveWindow:origSessionWindow toDirectory:directoryName_]; |
+ |
+ SessionWindowIOS* sessionWindow = |
+ [service loadWindowForBrowserState:chrome_browser_state_.get()]; |
+ EXPECT_TRUE(sessionWindow != nil); |
+ EXPECT_EQ(NSNotFound, static_cast<NSInteger>(sessionWindow.selectedIndex)); |
+ EXPECT_EQ(0U, sessionWindow.unclaimedSessions); |
+} |
+ |
+TEST_F(SessionServiceTest, LoadCorruptedWindow) { |
+ SessionWindowIOS* sessionWindow = |
+ LoadSessionFromTestDataFile(FILE_PATH_LITERAL("corrupted.plist")); |
+ EXPECT_TRUE(sessionWindow == nil); |
+} |
+ |
+} // anonymous namespace |