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

Side by Side Diff: chrome/installer/util/conditional_work_item_list_unittest.cc

Issue 1869383003: Simplify WorkItemListTest. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: self review Created 4 years, 8 months 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 "chrome/installer/util/conditional_work_item_list.h"
6
7 #include <memory>
8
9 #include "base/files/file_path.h"
10 #include "base/files/scoped_temp_dir.h"
11 #include "base/macros.h"
12 #include "chrome/installer/util/work_item.h"
13 #include "testing/gmock/include/gmock/gmock.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 namespace {
17
18 class MockWorkItem : public WorkItem {
19 public:
20 MockWorkItem() = default;
21
22 MOCK_METHOD0(Do, bool());
23 MOCK_METHOD0(Rollback, void());
24
25 private:
26 DISALLOW_COPY_AND_ASSIGN(MockWorkItem);
27 };
28
29 class MockCondition : public WorkItem::Condition {
30 public:
31 MockCondition() = default;
32
33 MOCK_CONST_METHOD0(ShouldRun, bool());
34
35 private:
36 DISALLOW_COPY_AND_ASSIGN(MockCondition);
37 };
38
39 using StrictMockWorkItem = testing::StrictMock<MockWorkItem>;
40 using StrictMockCondition = testing::StrictMock<MockCondition>;
41 using testing::InSequence;
42 using testing::Return;
43
44 } // namespace
45
46 // Execute a ConditionalWorkItemList whose condition is met and then rollback.
47 TEST(ConditionalWorkItemListTest, ExecutionSuccess) {
48 std::unique_ptr<StrictMockCondition> condition(new StrictMockCondition);
49 EXPECT_CALL(*condition, ShouldRun()).WillOnce(Return(true));
50 std::unique_ptr<WorkItemList> list(
51 WorkItem::CreateConditionalWorkItemList(condition.release()));
52
53 // Create the mock work items.
54 std::unique_ptr<StrictMockWorkItem> item1(new StrictMockWorkItem);
55 std::unique_ptr<StrictMockWorkItem> item2(new StrictMockWorkItem);
56 std::unique_ptr<StrictMockWorkItem> item3(new StrictMockWorkItem);
57
58 {
59 // Expect all three items to be done in order then undone.
60 InSequence s;
61
62 EXPECT_CALL(*item1, Do()).WillOnce(Return(true));
63 EXPECT_CALL(*item2, Do()).WillOnce(Return(true));
64 EXPECT_CALL(*item3, Do()).WillOnce(Return(true));
65 EXPECT_CALL(*item3, Rollback());
66 EXPECT_CALL(*item2, Rollback());
67 EXPECT_CALL(*item1, Rollback());
68 }
69
70 // Add the items to the list.
71 list->AddWorkItem(item1.release());
72 list->AddWorkItem(item2.release());
73 list->AddWorkItem(item3.release());
74
75 // Do and rollback the list.
76 EXPECT_TRUE(list->Do());
77 list->Rollback();
78 }
79
80 // Execute a ConditionalWorkItemList whose condition is met. Fail in the middle.
81 // Rollback what has been done.
82 TEST(ConditionalWorkItemListTest, ExecutionFailAndRollback) {
83 std::unique_ptr<StrictMockCondition> condition(new StrictMockCondition);
84 EXPECT_CALL(*condition, ShouldRun()).WillOnce(Return(true));
85 std::unique_ptr<WorkItemList> list(
86 WorkItem::CreateConditionalWorkItemList(condition.release()));
87
88 // Create the mock work items.
89 std::unique_ptr<StrictMockWorkItem> item1(new StrictMockWorkItem);
90 std::unique_ptr<StrictMockWorkItem> item2(new StrictMockWorkItem);
91 std::unique_ptr<StrictMockWorkItem> item3(new StrictMockWorkItem);
92
93 {
94 // Expect the two first work items to be done in order then undone.
95 InSequence s;
96
97 EXPECT_CALL(*item1, Do()).WillOnce(Return(true));
98 EXPECT_CALL(*item2, Do()).WillOnce(Return(false));
99 EXPECT_CALL(*item2, Rollback());
100 EXPECT_CALL(*item1, Rollback());
101 }
102
103 // Add the items to the list.
104 list->AddWorkItem(item1.release());
105 list->AddWorkItem(item2.release());
106 list->AddWorkItem(item3.release());
107
108 // Do and rollback the list.
109 EXPECT_FALSE(list->Do());
110 list->Rollback();
111 }
112
113 // Execute a ConditionalWorkItemList whose condition isn't met.
114 TEST(ConditionalWorkItemListTest, ConditionFailure) {
115 std::unique_ptr<StrictMockCondition> condition(new StrictMockCondition);
116 EXPECT_CALL(*condition, ShouldRun()).WillOnce(Return(false));
117 std::unique_ptr<WorkItemList> list(
118 WorkItem::CreateConditionalWorkItemList(condition.release()));
119
120 // Create the mock work items.
121 std::unique_ptr<StrictMockWorkItem> item1(new StrictMockWorkItem);
122 std::unique_ptr<StrictMockWorkItem> item2(new StrictMockWorkItem);
123 std::unique_ptr<StrictMockWorkItem> item3(new StrictMockWorkItem);
124
125 // Don't expect any call to the methods of the work items.
126
127 // Add the items to the list.
128 list->AddWorkItem(item1.release());
129 list->AddWorkItem(item2.release());
130 list->AddWorkItem(item3.release());
131
132 // Do and rollback the list.
133 EXPECT_TRUE(list->Do());
134 list->Rollback();
135 }
136
137 TEST(ConditionalWorkItemListTest, ConditionNot) {
138 std::unique_ptr<StrictMockCondition> condition_true(new StrictMockCondition);
139 EXPECT_CALL(*condition_true, ShouldRun()).WillOnce(Return(true));
140 EXPECT_FALSE(Not(condition_true.release()).ShouldRun());
141
142 std::unique_ptr<StrictMockCondition> condition_false(new StrictMockCondition);
143 EXPECT_CALL(*condition_false, ShouldRun()).WillOnce(Return(false));
144 EXPECT_TRUE(Not(condition_false.release()).ShouldRun());
145 }
146
147 TEST(ConditionalWorkItemListTest, ConditionRunIfFileExists) {
148 base::ScopedTempDir temp_dir;
149 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
150
151 EXPECT_TRUE(ConditionRunIfFileExists(temp_dir.path()).ShouldRun());
152 EXPECT_FALSE(ConditionRunIfFileExists(
153 temp_dir.path().Append(FILE_PATH_LITERAL("DoesNotExist")))
154 .ShouldRun());
155 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698