1 // Copyright (c) 2012 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 "base/bind.h" 6 #include "chrome/installer/util/callback_work_item.h" 7 #include "testing/gtest/include/gtest/gtest.h" 8 9 namespace { 10 11 // A callback that always fails (returns false). 12 bool TestFailureCallback(const CallbackWorkItem& work_item) { 13 return false; 14 } 15 16 } // namespace 17 18 // Test that the work item returns false when a callback returns failure. 19 TEST(CallbackWorkItemTest, TestFailure) { 20 CallbackWorkItem work_item(base::Bind(&TestFailureCallback)); 21 22 EXPECT_FALSE(work_item.Do()); 23 } 24 25 namespace { 26 27 enum TestCallbackState { 28 TCS_UNDEFINED, 29 TCS_CALLED_FORWARD, 30 TCS_CALLED_ROLLBACK, 31 }; 32 33 // A callback that sets |state| according to whether it is rolling forward or 34 // backward. 35 bool TestForwardBackwardCallback(TestCallbackState* state, 36 const CallbackWorkItem& work_item) { 37 *state = work_item.IsRollback() ? TCS_CALLED_ROLLBACK : TCS_CALLED_FORWARD; 38 return true; 39 } 40 41 } // namespace 42 43 // Test that the callback is invoked correclty during Do() and Rollback(). 44 TEST(CallbackWorkItemTest, TestForwardBackward) { 45 TestCallbackState state = TCS_UNDEFINED; 46 47 CallbackWorkItem work_item(base::Bind(&TestForwardBackwardCallback, &state)); 48 49 EXPECT_TRUE(work_item.Do()); 50 EXPECT_EQ(TCS_CALLED_FORWARD, state); 51 52 work_item.Rollback(); 53 EXPECT_EQ(TCS_CALLED_ROLLBACK, state); 54 } 55