blob: 0b7021f9f05c8456dc3731e7d47833cb3db16fe4 [file] [log] [blame]
// Copyright 2019 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/test/bind_test_util.h"
#include "base/bind.h"
#include "base/callback.h"
#include "base/location.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace base {
namespace {
// A helper class for MakeExpectedRunClosure() that fails if it is
// destroyed without Run() having been called. This class may be used
// from multiple threads as long as Run() is called at most once
// before destruction.
class RunChecker {
public:
explicit RunChecker(const Location& location)
: location_(location), called_(false) {}
~RunChecker() {
if (!called_) {
ADD_FAILURE_AT(location_.file_name(), location_.line_number());
}
}
void Run() {
DCHECK(!called_);
called_ = true;
}
private:
Location location_;
bool called_;
};
} // namespace
OnceClosure MakeExpectedRunClosure(const Location& location) {
return BindOnce(&RunChecker::Run, Owned(new RunChecker(location)));
}
OnceClosure MakeExpectedNotRunClosure(const Location& location) {
return BindOnce(
[](const Location& location) {
ADD_FAILURE_AT(location.file_name(), location.line_number());
},
location);
}
} // namespace base