1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
|
// Copyright 2010 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "gtest_mac.h"
#include <string>
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/googletest/src/googletest/include/gtest/internal/gtest-port.h"
#include "third_party/googletest/src/googletest/include/gtest/internal/gtest-string.h"
// /!\ WARNING!
//
// Chromium compiles this file as ARC, but other dependencies pull it in and
// compile it as non-ARC. Be sure that this file compiles correctly with either
// build setting.
//
// /!\ WARNING!
#ifdef GTEST_OS_MAC
#import <Foundation/Foundation.h>
namespace testing::internal {
static std::string StringFromNSString(NSString* string) {
// Note that -[NSString UTF8String] is banned in Chromium code because
// base::SysNSStringToUTF8() is safer, but //testing isn't allowed to depend
// on //base, so deliberately ignore that function ban.
const char* utf_string = string.UTF8String;
return utf_string ? std::string(utf_string) : std::string("(nil nsstring)");
}
// Handles nil values for |obj| properly by using safe printing of %@ in
// -stringWithFormat:.
std::string StringDescription(id<NSObject> obj) {
return StringFromNSString([NSString stringWithFormat:@"%@", obj]);
}
// This overloaded version allows comparison between ObjC objects that conform
// to the NSObject protocol. Used to implement {ASSERT|EXPECT}_EQ().
GTEST_API_ AssertionResult CmpHelperNSEQ(const char* expected_expression,
const char* actual_expression,
id<NSObject> expected,
id<NSObject> actual) {
if (expected == actual || [expected isEqual:actual]) {
return AssertionSuccess();
}
return EqFailure(expected_expression, actual_expression,
StringDescription(expected), StringDescription(actual),
false);
}
// This overloaded version allows comparison between ObjC objects that conform
// to the NSObject protocol. Used to implement {ASSERT|EXPECT}_NE().
GTEST_API_ AssertionResult CmpHelperNSNE(const char* expected_expression,
const char* actual_expression,
id<NSObject> expected,
id<NSObject> actual) {
if (expected != actual && ![expected isEqual:actual]) {
return AssertionSuccess();
}
Message msg;
msg << "Expected: (" << expected_expression << ") != (" << actual_expression
<< "), actual: " << StringDescription(expected)
<< " vs " << StringDescription(actual);
return AssertionFailure(msg);
}
#if !defined(GTEST_OS_IOS)
GTEST_API_ AssertionResult CmpHelperNSEQ(const char* expected_expression,
const char* actual_expression,
const NSRect& expected,
const NSRect& actual) {
if (NSEqualRects(expected, actual)) {
return AssertionSuccess();
}
return EqFailure(expected_expression, actual_expression,
StringFromNSString(NSStringFromRect(expected)),
StringFromNSString(NSStringFromRect(actual)), false);
}
GTEST_API_ AssertionResult CmpHelperNSNE(const char* expected_expression,
const char* actual_expression,
const NSRect& expected,
const NSRect& actual) {
if (!NSEqualRects(expected, actual)) {
return AssertionSuccess();
}
Message msg;
msg << "Expected: (" << expected_expression << ") != (" << actual_expression
<< "), actual: " << StringFromNSString(NSStringFromRect(expected))
<< " vs " << StringFromNSString(NSStringFromRect(actual));
return AssertionFailure(msg);
}
GTEST_API_ AssertionResult CmpHelperNSEQ(const char* expected_expression,
const char* actual_expression,
const NSPoint& expected,
const NSPoint& actual) {
if (NSEqualPoints(expected, actual)) {
return AssertionSuccess();
}
return EqFailure(expected_expression, actual_expression,
StringFromNSString(NSStringFromPoint(expected)),
StringFromNSString(NSStringFromPoint(actual)), false);
}
GTEST_API_ AssertionResult CmpHelperNSNE(const char* expected_expression,
const char* actual_expression,
const NSPoint& expected,
const NSPoint& actual) {
if (!NSEqualPoints(expected, actual)) {
return AssertionSuccess();
}
Message msg;
msg << "Expected: (" << expected_expression << ") != (" << actual_expression
<< "), actual: " << StringFromNSString(NSStringFromPoint(expected))
<< " vs " << StringFromNSString(NSStringFromPoint(actual));
return AssertionFailure(msg);
}
GTEST_API_ AssertionResult CmpHelperNSEQ(const char* expected_expression,
const char* actual_expression,
const NSRange& expected,
const NSRange& actual) {
if (NSEqualRanges(expected, actual)) {
return AssertionSuccess();
}
return EqFailure(expected_expression, actual_expression,
StringFromNSString(NSStringFromRange(expected)),
StringFromNSString(NSStringFromRange(actual)), false);
}
GTEST_API_ AssertionResult CmpHelperNSNE(const char* expected_expression,
const char* actual_expression,
const NSRange& expected,
const NSRange& actual) {
if (!NSEqualRanges(expected, actual)) {
return AssertionSuccess();
}
Message msg;
msg << "Expected: (" << expected_expression << ") != (" << actual_expression
<< "), actual: " << StringFromNSString(NSStringFromRange(expected))
<< " vs " << StringFromNSString(NSStringFromRange(actual));
return AssertionFailure(msg);
}
#endif // !GTEST_OS_IOS
} // namespace testing::internal
#endif // GTEST_OS_MAC
|