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 9namespace { 10 11// A callback that always fails (returns false). 12bool 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. 19TEST(CallbackWorkItemTest, TestFailure) { 20 CallbackWorkItem work_item(base::Bind(&TestFailureCallback)); 21 22 EXPECT_FALSE(work_item.Do()); 23} 24 25namespace { 26 27enum 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. 35bool 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(). 44TEST(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