| // Copyright (c) 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. |
| |
| #include "base/bind.h" |
| #include "chrome/installer/util/callback_work_item.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace { |
| |
| // A callback that always fails (returns false). |
| bool TestFailureCallback(const CallbackWorkItem& work_item) { |
| return false; |
| } |
| |
| } // namespace |
| |
| // Test that the work item returns false when a callback returns failure. |
| TEST(CallbackWorkItemTest, TestFailure) { |
| CallbackWorkItem work_item(base::Bind(&TestFailureCallback)); |
| |
| EXPECT_FALSE(work_item.Do()); |
| } |
| |
| namespace { |
| |
| enum TestCallbackState { |
| TCS_UNDEFINED, |
| TCS_CALLED_FORWARD, |
| TCS_CALLED_ROLLBACK, |
| }; |
| |
| // A callback that sets |state| according to whether it is rolling forward or |
| // backward. |
| bool TestForwardBackwardCallback(TestCallbackState* state, |
| const CallbackWorkItem& work_item) { |
| *state = work_item.IsRollback() ? TCS_CALLED_ROLLBACK : TCS_CALLED_FORWARD; |
| return true; |
| } |
| |
| } // namespace |
| |
| // Test that the callback is invoked correclty during Do() and Rollback(). |
| TEST(CallbackWorkItemTest, TestForwardBackward) { |
| TestCallbackState state = TCS_UNDEFINED; |
| |
| CallbackWorkItem work_item(base::Bind(&TestForwardBackwardCallback, &state)); |
| |
| EXPECT_TRUE(work_item.Do()); |
| EXPECT_EQ(TCS_CALLED_FORWARD, state); |
| |
| work_item.Rollback(); |
| EXPECT_EQ(TCS_CALLED_ROLLBACK, state); |
| } |