Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(126)

Side by Side Diff: blimp/helium/lazy_syncable_adapter_unittest.cc

Issue 2522633004: Add LazySyncableAdapter (Closed)
Patch Set: scf feedback Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 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 #include "blimp/helium/lazy_syncable_adapter.h"
6
7 #include <stdint.h>
8
9 #include "base/bind.h"
10 #include "base/bind_helpers.h"
11 #include "blimp/helium/helium_test.h"
12 #include "blimp/helium/serializable_struct.h"
13 #include "testing/gmock/include/gmock/gmock.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 using testing::_;
17 using testing::DoAll;
18 using testing::Return;
19 using testing::SaveArg;
20
21 namespace blimp {
22 namespace helium {
23 namespace {
24
25 struct TestSyncableChangeset : public SerializableStruct {
26 TestSyncableChangeset() : value(this) {}
27 ~TestSyncableChangeset() override {}
28
29 TestSyncableChangeset& operator=(const TestSyncableChangeset& other) {
30 value.Set(other.value());
31 return *this;
32 }
33
34 Field<int32_t> value;
35 };
36
37 class MockSyncable : public LazySyncable<TestSyncableChangeset> {
38 public:
39 MockSyncable() {}
40 ~MockSyncable() = default;
41
42 // LazySyncable implementation.
43 MOCK_CONST_METHOD1(CreateChangesetMock, TestSyncableChangeset*(Revision));
44 MOCK_METHOD1(ApplyChangeset, void(const TestSyncableChangeset&));
45 MOCK_METHOD1(SetLocalUpdateCallback, void(const base::Closure&));
46 MOCK_CONST_METHOD1(ValidateChangeset, bool(const TestSyncableChangeset&));
47 MOCK_METHOD1(ReleaseBefore, void(Revision));
48 MOCK_CONST_METHOD0(GetRevision, Revision());
49 MOCK_METHOD2(PrepareToCreateChangeset, void(Revision, base::Closure));
50
51 std::unique_ptr<TestSyncableChangeset> CreateChangeset(Revision from) const {
52 return base::WrapUnique<TestSyncableChangeset>(CreateChangesetMock(from));
53 }
54
55 private:
56 DISALLOW_COPY_AND_ASSIGN(MockSyncable);
57 };
58
59 class LazySyncableAdapterTest : public HeliumTest {
60 public:
61 LazySyncableAdapterTest()
62 : adapter_(&syncable_), callback_(base::Bind(&base::DoNothing)) {}
63 ~LazySyncableAdapterTest() override = default;
64
65 protected:
66 MockSyncable syncable_;
67 LazySyncableAdapter<TestSyncableChangeset> adapter_;
68 base::Closure callback_;
Kevin M 2016/12/02 18:28:03 Nit: it seems unnecessary to bind a class member f
steimel 2016/12/03 00:29:41 Done. Slight change in how those are working since
69 Revision revision_ = 42;
Kevin M 2016/12/02 18:28:03 Make this a constexpr at the top instead of a clas
steimel 2016/12/03 00:29:41 Done.
70
71 private:
72 DISALLOW_COPY_AND_ASSIGN(LazySyncableAdapterTest);
73 };
74
75 TEST_F(LazySyncableAdapterTest, ForwardsSetLocalCallback) {
76 EXPECT_CALL(syncable_, SetLocalUpdateCallback(_)).Times(1);
Kevin M 2016/12/02 18:28:03 nit: Times(1) is superfluous; remove it?
steimel 2016/12/03 00:29:41 Done.
77 adapter_.SetLocalUpdateCallback(callback_);
78 }
79
80 TEST_F(LazySyncableAdapterTest, ForwardsReleaseBefore) {
81 EXPECT_CALL(syncable_, ReleaseBefore(revision_)).Times(1);
82 adapter_.ReleaseBefore(revision_);
83 }
84
85 TEST_F(LazySyncableAdapterTest, ForwardsGetRevision) {
86 EXPECT_CALL(syncable_, GetRevision()).Times(1).WillOnce(Return(revision_));
87 EXPECT_EQ(revision_, adapter_.GetRevision());
88 }
89
90 TEST_F(LazySyncableAdapterTest, ForwardsPrepareToCreateChangeset) {
91 EXPECT_CALL(syncable_, PrepareToCreateChangeset(revision_, _)).Times(1);
92 adapter_.PrepareToCreateChangeset(revision_, callback_);
93 }
94
95 TEST_F(LazySyncableAdapterTest, SerializesParsesForwardsChangesets) {
96 std::unique_ptr<TestSyncableChangeset> changeset =
97 base::MakeUnique<TestSyncableChangeset>();
98 changeset->value.Set(33);
99
100 EXPECT_CALL(syncable_, CreateChangesetMock(revision_))
101 .Times(1)
102 .WillOnce(Return(changeset.release()));
103 std::unique_ptr<std::string> string_changeset =
104 adapter_.CreateChangeset(revision_);
105
106 TestSyncableChangeset validate_changeset;
107 EXPECT_CALL(syncable_, ValidateChangeset(_))
108 .Times(1)
109 .WillOnce(DoAll(SaveArg<0>(&validate_changeset), Return(true)));
Kevin M 2016/12/02 18:28:03 Instead of saving the arg, try this in the matcher
steimel 2016/12/03 00:29:41 Discussed offline and sticking with SaveArg
110 EXPECT_EQ(true, adapter_.ValidateChangeset(*string_changeset));
111 EXPECT_EQ(33, validate_changeset.value());
112
113 TestSyncableChangeset apply_changeset;
114 EXPECT_CALL(syncable_, ApplyChangeset(_))
115 .Times(1)
116 .WillOnce(SaveArg<0>(&apply_changeset));
117 adapter_.ApplyChangeset(*string_changeset);
118 EXPECT_EQ(33, apply_changeset.value());
119 }
120
121 } // namespace
122 } // namespace helium
123 } // namespace blimp
OLDNEW
« blimp/helium/lazy_syncable_adapter.h ('K') | « blimp/helium/lazy_syncable_adapter.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698