// Copyright 2016 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/task_scheduler/task.h" #include "base/bind.h" #include "base/bind_helpers.h" #include "base/location.h" #include "base/task_scheduler/task_traits.h" #include "base/time/time.h" #include "testing/gtest/include/gtest/gtest.h" namespace base { namespace internal { // Verify that the shutdown behavior of a BLOCK_SHUTDOWN delayed task is // adjusted to SKIP_ON_SHUTDOWN. The shutown behavior of other delayed tasks // should not change. TEST(TaskSchedulerTaskTest, ShutdownBehaviorChangeWithDelay) { Task continue_on_shutdown(FROM_HERE, DoNothing(), {TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, TimeDelta::FromSeconds(1)); EXPECT_EQ(TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN, continue_on_shutdown.traits.shutdown_behavior()); Task skip_on_shutdown(FROM_HERE, DoNothing(), {TaskShutdownBehavior::SKIP_ON_SHUTDOWN}, TimeDelta::FromSeconds(1)); EXPECT_EQ(TaskShutdownBehavior::SKIP_ON_SHUTDOWN, skip_on_shutdown.traits.shutdown_behavior()); Task block_shutdown(FROM_HERE, DoNothing(), {TaskShutdownBehavior::BLOCK_SHUTDOWN}, TimeDelta::FromSeconds(1)); EXPECT_EQ(TaskShutdownBehavior::SKIP_ON_SHUTDOWN, block_shutdown.traits.shutdown_behavior()); } // Verify that the shutdown behavior of undelayed tasks is not adjusted. TEST(TaskSchedulerTaskTest, NoShutdownBehaviorChangeNoDelay) { Task continue_on_shutdown(FROM_HERE, DoNothing(), {TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, TimeDelta()); EXPECT_EQ(TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN, continue_on_shutdown.traits.shutdown_behavior()); Task skip_on_shutdown(FROM_HERE, DoNothing(), {TaskShutdownBehavior::SKIP_ON_SHUTDOWN}, TimeDelta()); EXPECT_EQ(TaskShutdownBehavior::SKIP_ON_SHUTDOWN, skip_on_shutdown.traits.shutdown_behavior()); Task block_shutdown(FROM_HERE, DoNothing(), {TaskShutdownBehavior::BLOCK_SHUTDOWN}, TimeDelta()); EXPECT_EQ(TaskShutdownBehavior::BLOCK_SHUTDOWN, block_shutdown.traits.shutdown_behavior()); } } // namespace internal } // namespace base