Index: remoting/ios/data_store_unittest.mm |
diff --git a/remoting/ios/data_store_unittest.mm b/remoting/ios/data_store_unittest.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f75dc28ff31cf885993b8dc0e51a3b837557827b |
--- /dev/null |
+++ b/remoting/ios/data_store_unittest.mm |
@@ -0,0 +1,119 @@ |
+// Copyright 2014 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. |
+ |
+#if !defined(__has_feature) || !__has_feature(objc_arc) |
+#error "This file requires ARC support." |
+#endif |
+ |
+#import "remoting/ios/data_store.h" |
+ |
+#import "base/compiler_specific.h" |
+#import "testing/gtest_mac.h" |
+ |
+namespace remoting { |
+ |
+namespace { |
+ |
+NSString* kHostId = @"testHost"; |
+NSString* kHostPin = @"testHostPin"; |
+NSString* kPairId = @"testPairId"; |
+NSString* kPairSecret = @"testPairSecret"; |
+ |
+} // namespace |
+ |
+class DataStoreTest : public ::testing::Test { |
+ protected: |
+ virtual void SetUp() OVERRIDE { |
+ store_ = [[DataStore allocWithZone:nil] init]; |
+ RemoveAllHosts(); |
+ EXPECT_EQ(0, HostCount()); |
+ } |
+ virtual void TearDown() OVERRIDE { RemoveAllHosts(); } |
+ |
+ int HostCount() { return [[store_ allHosts] count]; } |
+ |
+ void RemoveAllHosts() { |
+ while (HostCount() > 0) { |
+ [store_ removeHost:[store_ allHosts].firstObject]; |
+ } |
+ [store_ saveChanges]; |
+ } |
+ |
+ DataStore* store_; |
+}; |
+ |
+TEST(DataStoreTest_Static, IsSingleInstance) { |
+ DataStore* firstStore = [DataStore sharedStore]; |
+ |
+ ASSERT_NSEQ(firstStore, [DataStore sharedStore]); |
+} |
+ |
+TEST(DataStoreTest_Static, RemoveAllHost) { |
+ // Test this functionality independently before expecting the fixture to do |
+ // this correctly during cleanup |
+ DataStore* store = [DataStore sharedStore]; |
+ |
+ while ([[store allHosts] count]) { |
+ [store removeHost:[store allHosts].firstObject]; |
+ } |
+ |
+ ASSERT_EQ(0, [[store allHosts] count]); |
+ store = nil; |
+} |
+ |
+TEST_F(DataStoreTest, CreateHost) { |
+ |
+ const HostPreferences* host = [store_ createHost:kHostId]; |
+ ASSERT_STREQ([kHostId UTF8String], [host.hostId UTF8String]); |
+ ASSERT_EQ(1, HostCount()); |
+} |
+ |
+TEST_F(DataStoreTest, GetHostForId) { |
+ const HostPreferences* host = [store_ getHostForId:kHostId]; |
+ ASSERT_TRUE(host == nil); |
+ |
+ [store_ createHost:kHostId]; |
+ |
+ host = [store_ getHostForId:kHostId]; |
+ |
+ ASSERT_TRUE(host != nil); |
+ ASSERT_STREQ([kHostId UTF8String], [host.hostId UTF8String]); |
+} |
+ |
+TEST_F(DataStoreTest, SaveChanges) { |
+ |
+ const HostPreferences* newHost = [store_ createHost:kHostId]; |
+ |
+ ASSERT_EQ(1, HostCount()); |
+ |
+ // Default values for a new host |
+ ASSERT_TRUE([newHost.askForPin boolValue] == NO); |
+ ASSERT_TRUE(newHost.hostPin == nil); |
+ ASSERT_TRUE(newHost.pairId == nil); |
+ ASSERT_TRUE(newHost.pairSecret == nil); |
+ |
+ // Set new values and save |
+ newHost.askForPin = [NSNumber numberWithBool:YES]; |
+ newHost.hostPin = kHostPin; |
+ newHost.pairId = kPairId; |
+ newHost.pairSecret = kPairSecret; |
+ |
+ [store_ saveChanges]; |
+ |
+ // The next time the store is loaded the host will still be present, even |
+ // though we are about to release and reinit a new object |
+ store_ = nil; |
+ store_ = [[DataStore allocWithZone:nil] init]; |
+ ASSERT_EQ(1, HostCount()); |
+ |
+ const HostPreferences* host = [store_ getHostForId:kHostId]; |
+ ASSERT_TRUE(host != nil); |
+ ASSERT_STREQ([kHostId UTF8String], [host.hostId UTF8String]); |
+ ASSERT_TRUE([host.askForPin boolValue] == YES); |
+ ASSERT_STREQ([kHostPin UTF8String], [host.hostPin UTF8String]); |
+ ASSERT_STREQ([kPairId UTF8String], [host.pairId UTF8String]); |
+ ASSERT_STREQ([kPairSecret UTF8String], [host.pairSecret UTF8String]); |
+} |
+ |
+} // namespace remoting |