Home | History | Annotate | Download | only in test
      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 #ifndef BASE_TEST_TEST_PENDING_TASK_H_
      6 #define BASE_TEST_TEST_PENDING_TASK_H_
      7 
      8 #include <string>
      9 
     10 #include "base/callback.h"
     11 #include "base/location.h"
     12 #include "base/time/time.h"
     13 #include "base/trace_event/trace_event_argument.h"
     14 
     15 namespace base {
     16 
     17 // TestPendingTask is a helper class for test TaskRunner
     18 // implementations.  See test_simple_task_runner.h for example usage.
     19 
     20 struct TestPendingTask {
     21   enum TestNestability { NESTABLE, NON_NESTABLE };
     22 
     23   TestPendingTask();
     24   TestPendingTask(const TestPendingTask& other);
     25   TestPendingTask(const tracked_objects::Location& location,
     26                   const Closure& task,
     27                   TimeTicks post_time,
     28                   TimeDelta delay,
     29                   TestNestability nestability);
     30   ~TestPendingTask();
     31 
     32   // Returns post_time + delay.
     33   TimeTicks GetTimeToRun() const;
     34 
     35   // Returns true if this task is nestable and |other| isn't, or if
     36   // this task's time to run is strictly earlier than |other|'s time
     37   // to run.
     38   //
     39   // Note that two tasks may both have the same nestability and delay.
     40   // In that case, the caller must use some other criterion (probably
     41   // the position in some queue) to break the tie.  Conveniently, the
     42   // following STL functions already do so:
     43   //
     44   //   - std::min_element
     45   //   - std::stable_sort
     46   //
     47   // but the following STL functions don't:
     48   //
     49   //   - std::max_element
     50   //   - std::sort.
     51   bool ShouldRunBefore(const TestPendingTask& other) const;
     52 
     53   tracked_objects::Location location;
     54   Closure task;
     55   TimeTicks post_time;
     56   TimeDelta delay;
     57   TestNestability nestability;
     58 
     59   // Functions for using test pending task with tracing, useful in unit
     60   // testing.
     61   void AsValueInto(base::trace_event::TracedValue* state) const;
     62   std::unique_ptr<base::trace_event::ConvertableToTraceFormat> AsValue() const;
     63   std::string ToString() const;
     64 };
     65 
     66 // gtest helpers which allow pretty printing of the tasks, very useful in unit
     67 // testing.
     68 std::ostream& operator<<(std::ostream& os, const TestPendingTask& task);
     69 void PrintTo(const TestPendingTask& task, std::ostream* os);
     70 
     71 }  // namespace base
     72 
     73 #endif  // BASE_TEST_TEST_PENDING_TASK_H_
     74