mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
Teach googletest to use raw_ostream instead of just std::ostream.
This can break when there are implicit conversions from types raw_ostream understands but std::ostream doesn't, but it increases the number of cases that Just Work. llvm-svn: 81093
This commit is contained in:
parent
3aafa8d4a3
commit
25713a50a3
@ -16,13 +16,6 @@ using namespace llvm;
|
|||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
// Support APInt output to an std::ostream.
|
|
||||||
inline std::ostream &operator<<(std::ostream &OS, const APInt &Value) {
|
|
||||||
raw_os_ostream RawOS(OS);
|
|
||||||
RawOS << Value;
|
|
||||||
return OS;
|
|
||||||
}
|
|
||||||
|
|
||||||
class ConstantRangeTest : public ::testing::Test {
|
class ConstantRangeTest : public ::testing::Test {
|
||||||
protected:
|
protected:
|
||||||
static ConstantRange Full;
|
static ConstantRange Full;
|
||||||
|
@ -24,3 +24,8 @@ $ perl -pi -e 's|^#include "src/|#include "gtest/internal/|' *.cc
|
|||||||
$ rm -f gtest-all.cc gtest_main.cc
|
$ rm -f gtest-all.cc gtest_main.cc
|
||||||
|
|
||||||
$ mv COPYING LICENSE.TXT
|
$ mv COPYING LICENSE.TXT
|
||||||
|
|
||||||
|
|
||||||
|
Modified as follows:
|
||||||
|
* To GTestStreamToHelper in include/gtest/internal/gtest-internal.h,
|
||||||
|
added the ability to stream with raw_os_ostream.
|
||||||
|
@ -56,6 +56,8 @@
|
|||||||
#include <gtest/internal/gtest-filepath.h>
|
#include <gtest/internal/gtest-filepath.h>
|
||||||
#include <gtest/internal/gtest-type-util.h>
|
#include <gtest/internal/gtest-type-util.h>
|
||||||
|
|
||||||
|
#include "llvm/Support/raw_os_ostream.h"
|
||||||
|
|
||||||
// Due to C++ preprocessor weirdness, we need double indirection to
|
// Due to C++ preprocessor weirdness, we need double indirection to
|
||||||
// concatenate two tokens when one of them is __LINE__. Writing
|
// concatenate two tokens when one of them is __LINE__. Writing
|
||||||
//
|
//
|
||||||
@ -92,9 +94,27 @@
|
|||||||
// ::operator<<;" in the definition of Message's operator<<. That fix
|
// ::operator<<;" in the definition of Message's operator<<. That fix
|
||||||
// doesn't require a helper function, but unfortunately doesn't
|
// doesn't require a helper function, but unfortunately doesn't
|
||||||
// compile with MSVC.
|
// compile with MSVC.
|
||||||
|
|
||||||
|
// LLVM INTERNAL CHANGE: To allow operator<< to work with both
|
||||||
|
// std::ostreams and LLVM's raw_ostreams, we define a special
|
||||||
|
// std::ostream with an implicit conversion to raw_ostream& and stream
|
||||||
|
// to that. This causes the compiler to prefer std::ostream overloads
|
||||||
|
// but still find raw_ostream& overloads.
|
||||||
|
namespace llvm {
|
||||||
|
class convertible_fwd_ostream : public std::ostream {
|
||||||
|
std::ostream& os_;
|
||||||
|
raw_os_ostream ros_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
convertible_fwd_ostream(std::ostream& os)
|
||||||
|
: std::ostream(os.rdbuf()), os_(os), ros_(*this) {}
|
||||||
|
operator raw_ostream&() { return ros_; }
|
||||||
|
};
|
||||||
|
}
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline void GTestStreamToHelper(std::ostream* os, const T& val) {
|
inline void GTestStreamToHelper(std::ostream* os, const T& val) {
|
||||||
*os << val;
|
llvm::convertible_fwd_ostream cos(*os);
|
||||||
|
cos << val;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace testing {
|
namespace testing {
|
||||||
|
Loading…
Reference in New Issue
Block a user