15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/callback_work_item.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A callback that always fails (returns false). 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestFailureCallback(const CallbackWorkItem& work_item) { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the work item returns false when a callback returns failure. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(CallbackWorkItemTest, TestFailure) { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CallbackWorkItem work_item(base::Bind(&TestFailureCallback)); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(work_item.Do()); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum TestCallbackState { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TCS_UNDEFINED, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TCS_CALLED_FORWARD, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TCS_CALLED_ROLLBACK, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A callback that sets |state| according to whether it is rolling forward or 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// backward. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestForwardBackwardCallback(TestCallbackState* state, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CallbackWorkItem& work_item) { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *state = work_item.IsRollback() ? TCS_CALLED_ROLLBACK : TCS_CALLED_FORWARD; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the callback is invoked correclty during Do() and Rollback(). 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(CallbackWorkItemTest, TestForwardBackward) { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestCallbackState state = TCS_UNDEFINED; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CallbackWorkItem work_item(base::Bind(&TestForwardBackwardCallback, &state)); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(work_item.Do()); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(TCS_CALLED_FORWARD, state); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item.Rollback(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(TCS_CALLED_ROLLBACK, state); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 55