Avoids unnecessary printing of call into to internal buffers;
Made the universal value printer safer when printing char[]; Removed duplicated code in InvokeWith; Improved gmock_doctor.py.
This commit is contained in:
@@ -485,75 +485,58 @@ TEST(PrintPointerTest, MemberFunctionPointer) {
|
||||
|
||||
// Tests printing C arrays.
|
||||
|
||||
// One-dimensional array.
|
||||
|
||||
void ArrayHelper1(int (&a)[5]) { // NOLINT
|
||||
EXPECT_EQ("{ 1, 2, 3, 4, 5 }", Print(a));
|
||||
// The difference between this and Print() is that it ensures that the
|
||||
// argument is a reference to an array.
|
||||
template <typename T, size_t N>
|
||||
string PrintArrayHelper(T (&a)[N]) {
|
||||
return Print(a);
|
||||
}
|
||||
|
||||
// One-dimensional array.
|
||||
TEST(PrintArrayTest, OneDimensionalArray) {
|
||||
int a[5] = { 1, 2, 3, 4, 5 };
|
||||
ArrayHelper1(a);
|
||||
EXPECT_EQ("{ 1, 2, 3, 4, 5 }", PrintArrayHelper(a));
|
||||
}
|
||||
|
||||
// Two-dimensional array.
|
||||
|
||||
void ArrayHelper2(int (&a)[2][5]) { // NOLINT
|
||||
EXPECT_EQ("{ { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 0 } }", Print(a));
|
||||
}
|
||||
|
||||
TEST(PrintArrayTest, TwoDimensionalArray) {
|
||||
int a[2][5] = {
|
||||
{ 1, 2, 3, 4, 5 },
|
||||
{ 6, 7, 8, 9, 0 }
|
||||
};
|
||||
ArrayHelper2(a);
|
||||
EXPECT_EQ("{ { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 0 } }", PrintArrayHelper(a));
|
||||
}
|
||||
|
||||
// Array of const elements.
|
||||
|
||||
void ArrayHelper3(const bool (&a)[1]) { // NOLINT
|
||||
EXPECT_EQ("{ false }", Print(a));
|
||||
}
|
||||
|
||||
TEST(PrintArrayTest, ConstArray) {
|
||||
const bool a[1] = { false };
|
||||
ArrayHelper3(a);
|
||||
EXPECT_EQ("{ false }", PrintArrayHelper(a));
|
||||
}
|
||||
|
||||
// Char array.
|
||||
|
||||
void ArrayHelper4(char (&a)[3]) { // NOLINT
|
||||
EXPECT_EQ(PrintPointer(a) + " pointing to \"Hi\"", Print(a));
|
||||
}
|
||||
|
||||
TEST(PrintArrayTest, CharArray) {
|
||||
char a[3] = "Hi";
|
||||
ArrayHelper4(a);
|
||||
// Array a contains '\0' in the middle and doesn't end with '\0'.
|
||||
char a[3] = { 'H', '\0', 'i' };
|
||||
EXPECT_EQ("\"H\\0i\"", PrintArrayHelper(a));
|
||||
}
|
||||
|
||||
// Const char array.
|
||||
|
||||
void ArrayHelper5(const char (&a)[3]) { // NOLINT
|
||||
EXPECT_EQ(Print(a), PrintPointer(a) + " pointing to \"Hi\"");
|
||||
}
|
||||
|
||||
TEST(PrintArrayTest, ConstCharArray) {
|
||||
const char a[3] = "Hi";
|
||||
ArrayHelper5(a);
|
||||
const char a[4] = "\0Hi";
|
||||
EXPECT_EQ("\"\\0Hi\\0\"", PrintArrayHelper(a));
|
||||
}
|
||||
|
||||
// Array of objects.
|
||||
TEST(PrintArrayTest, ObjectArray) {
|
||||
string a[3] = { "Hi", "Hello", "Ni hao" };
|
||||
EXPECT_EQ("{ \"Hi\", \"Hello\", \"Ni hao\" }", Print(a));
|
||||
EXPECT_EQ("{ \"Hi\", \"Hello\", \"Ni hao\" }", PrintArrayHelper(a));
|
||||
}
|
||||
|
||||
// Array with many elements.
|
||||
TEST(PrintArrayTest, BigArray) {
|
||||
int a[100] = { 1, 2, 3 };
|
||||
EXPECT_EQ("{ 1, 2, 3, 0, 0, 0, 0, 0, ..., 0, 0, 0, 0, 0, 0, 0, 0 }",
|
||||
Print(a));
|
||||
PrintArrayHelper(a));
|
||||
}
|
||||
|
||||
// Tests printing ::string and ::std::string.
|
||||
@@ -995,6 +978,11 @@ TEST(PrintToStringTest, WorksForReference) {
|
||||
UniversalPrinter<const int&>::PrintToString(n));
|
||||
}
|
||||
|
||||
TEST(PrintToStringTest, WorksForArray) {
|
||||
int n[3] = { 1, 2, 3 };
|
||||
EXPECT_EQ("{ 1, 2, 3 }", UniversalPrinter<int[3]>::PrintToString(n));
|
||||
}
|
||||
|
||||
TEST(UniversalTersePrintTest, WorksForNonReference) {
|
||||
::std::stringstream ss;
|
||||
UniversalTersePrint(123, &ss);
|
||||
|
||||
Reference in New Issue
Block a user