OLD | NEW |
| (Empty) |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #if !defined(__has_feature) || !__has_feature(objc_arc) | |
6 #error "This file requires ARC support." | |
7 #endif | |
8 | |
9 #import "remoting/ios/data_store.h" | |
10 | |
11 #import "base/compiler_specific.h" | |
12 #import "testing/gtest_mac.h" | |
13 | |
14 namespace remoting { | |
15 | |
16 namespace { | |
17 | |
18 NSString* kHostId = @"testHost"; | |
19 NSString* kHostPin = @"testHostPin"; | |
20 NSString* kPairId = @"testPairId"; | |
21 NSString* kPairSecret = @"testPairSecret"; | |
22 | |
23 } // namespace | |
24 | |
25 class DataStoreTest : public ::testing::Test { | |
26 protected: | |
27 virtual void SetUp() OVERRIDE { | |
28 store_ = [[DataStore allocWithZone:nil] init]; | |
29 RemoveAllHosts(); | |
30 EXPECT_EQ(0, HostCount()); | |
31 } | |
32 virtual void TearDown() OVERRIDE { RemoveAllHosts(); } | |
33 | |
34 int HostCount() { return [[store_ allHosts] count]; } | |
35 | |
36 void RemoveAllHosts() { | |
37 while (HostCount() > 0) { | |
38 [store_ removeHost:[store_ allHosts].firstObject]; | |
39 } | |
40 [store_ saveChanges]; | |
41 } | |
42 | |
43 DataStore* store_; | |
44 }; | |
45 | |
46 TEST(DataStoreTest_Static, IsSingleInstance) { | |
47 DataStore* firstStore = [DataStore sharedStore]; | |
48 | |
49 ASSERT_NSEQ(firstStore, [DataStore sharedStore]); | |
50 } | |
51 | |
52 TEST(DataStoreTest_Static, RemoveAllHost) { | |
53 // Test this functionality independently before expecting the fixture to do | |
54 // this correctly during cleanup | |
55 DataStore* store = [DataStore sharedStore]; | |
56 | |
57 while ([[store allHosts] count]) { | |
58 [store removeHost:[store allHosts].firstObject]; | |
59 } | |
60 | |
61 ASSERT_EQ(0, [[store allHosts] count]); | |
62 store = nil; | |
63 } | |
64 | |
65 TEST_F(DataStoreTest, CreateHost) { | |
66 | |
67 const HostPreferences* host = [store_ createHost:kHostId]; | |
68 ASSERT_STREQ([kHostId UTF8String], [host.hostId UTF8String]); | |
69 ASSERT_EQ(1, HostCount()); | |
70 } | |
71 | |
72 TEST_F(DataStoreTest, GetHostForId) { | |
73 const HostPreferences* host = [store_ getHostForId:kHostId]; | |
74 ASSERT_TRUE(host == nil); | |
75 | |
76 [store_ createHost:kHostId]; | |
77 | |
78 host = [store_ getHostForId:kHostId]; | |
79 | |
80 ASSERT_TRUE(host != nil); | |
81 ASSERT_STREQ([kHostId UTF8String], [host.hostId UTF8String]); | |
82 } | |
83 | |
84 TEST_F(DataStoreTest, SaveChanges) { | |
85 | |
86 const HostPreferences* newHost = [store_ createHost:kHostId]; | |
87 | |
88 ASSERT_EQ(1, HostCount()); | |
89 | |
90 // Default values for a new host | |
91 ASSERT_TRUE([newHost.askForPin boolValue] == NO); | |
92 ASSERT_TRUE(newHost.hostPin == nil); | |
93 ASSERT_TRUE(newHost.pairId == nil); | |
94 ASSERT_TRUE(newHost.pairSecret == nil); | |
95 | |
96 // Set new values and save | |
97 newHost.askForPin = [NSNumber numberWithBool:YES]; | |
98 newHost.hostPin = kHostPin; | |
99 newHost.pairId = kPairId; | |
100 newHost.pairSecret = kPairSecret; | |
101 | |
102 [store_ saveChanges]; | |
103 | |
104 // The next time the store is loaded the host will still be present, even | |
105 // though we are about to release and reinit a new object | |
106 store_ = nil; | |
107 store_ = [[DataStore allocWithZone:nil] init]; | |
108 ASSERT_EQ(1, HostCount()); | |
109 | |
110 const HostPreferences* host = [store_ getHostForId:kHostId]; | |
111 ASSERT_TRUE(host != nil); | |
112 ASSERT_STREQ([kHostId UTF8String], [host.hostId UTF8String]); | |
113 ASSERT_TRUE([host.askForPin boolValue] == YES); | |
114 ASSERT_STREQ([kHostPin UTF8String], [host.hostPin UTF8String]); | |
115 ASSERT_STREQ([kPairId UTF8String], [host.pairId UTF8String]); | |
116 ASSERT_STREQ([kPairSecret UTF8String], [host.pairSecret UTF8String]); | |
117 } | |
118 | |
119 } // namespace remoting | |
OLD | NEW |