1*3ac0a46fSAndroid Build Coastguard Worker// Copyright 2010 The PDFium Authors 2*3ac0a46fSAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be 3*3ac0a46fSAndroid Build Coastguard Worker// found in the LICENSE file. 4*3ac0a46fSAndroid Build Coastguard Worker 5*3ac0a46fSAndroid Build Coastguard Worker#import "gtest_mac.h" 6*3ac0a46fSAndroid Build Coastguard Worker#include <string> 7*3ac0a46fSAndroid Build Coastguard Worker#include <gtest/gtest.h> 8*3ac0a46fSAndroid Build Coastguard Worker#include <gtest/internal/gtest-port.h> 9*3ac0a46fSAndroid Build Coastguard Worker#include <gtest/internal/gtest-string.h> 10*3ac0a46fSAndroid Build Coastguard Worker#ifdef GTEST_OS_MAC 11*3ac0a46fSAndroid Build Coastguard Worker#import <Foundation/Foundation.h> 12*3ac0a46fSAndroid Build Coastguard Workernamespace testing { 13*3ac0a46fSAndroid Build Coastguard Workernamespace internal { 14*3ac0a46fSAndroid Build Coastguard Worker// Handles nil values for |obj| properly by using safe printing of %@ in 15*3ac0a46fSAndroid Build Coastguard Worker// -stringWithFormat:. 16*3ac0a46fSAndroid Build Coastguard Workerstatic inline const char* StringDescription(id<NSObject> obj) { 17*3ac0a46fSAndroid Build Coastguard Worker return [[NSString stringWithFormat:@"%@", obj] UTF8String]; 18*3ac0a46fSAndroid Build Coastguard Worker} 19*3ac0a46fSAndroid Build Coastguard Worker// This overloaded version allows comparison between ObjC objects that conform 20*3ac0a46fSAndroid Build Coastguard Worker// to the NSObject protocol. Used to implement {ASSERT|EXPECT}_EQ(). 21*3ac0a46fSAndroid Build Coastguard WorkerGTEST_API_ AssertionResult CmpHelperNSEQ(const char* expected_expression, 22*3ac0a46fSAndroid Build Coastguard Worker const char* actual_expression, 23*3ac0a46fSAndroid Build Coastguard Worker id<NSObject> expected, 24*3ac0a46fSAndroid Build Coastguard Worker id<NSObject> actual) { 25*3ac0a46fSAndroid Build Coastguard Worker if (expected == actual || [expected isEqual:actual]) { 26*3ac0a46fSAndroid Build Coastguard Worker return AssertionSuccess(); 27*3ac0a46fSAndroid Build Coastguard Worker } 28*3ac0a46fSAndroid Build Coastguard Worker return EqFailure(expected_expression, actual_expression, 29*3ac0a46fSAndroid Build Coastguard Worker std::string(StringDescription(expected)), 30*3ac0a46fSAndroid Build Coastguard Worker std::string(StringDescription(actual)), false); 31*3ac0a46fSAndroid Build Coastguard Worker} 32*3ac0a46fSAndroid Build Coastguard Worker// This overloaded version allows comparison between ObjC objects that conform 33*3ac0a46fSAndroid Build Coastguard Worker// to the NSObject protocol. Used to implement {ASSERT|EXPECT}_NE(). 34*3ac0a46fSAndroid Build Coastguard WorkerGTEST_API_ AssertionResult CmpHelperNSNE(const char* expected_expression, 35*3ac0a46fSAndroid Build Coastguard Worker const char* actual_expression, 36*3ac0a46fSAndroid Build Coastguard Worker id<NSObject> expected, 37*3ac0a46fSAndroid Build Coastguard Worker id<NSObject> actual) { 38*3ac0a46fSAndroid Build Coastguard Worker if (expected != actual && ![expected isEqual:actual]) { 39*3ac0a46fSAndroid Build Coastguard Worker return AssertionSuccess(); 40*3ac0a46fSAndroid Build Coastguard Worker } 41*3ac0a46fSAndroid Build Coastguard Worker Message msg; 42*3ac0a46fSAndroid Build Coastguard Worker msg << "Expected: (" << expected_expression << ") != (" << actual_expression 43*3ac0a46fSAndroid Build Coastguard Worker << "), actual: " << StringDescription(expected) << " vs " 44*3ac0a46fSAndroid Build Coastguard Worker << StringDescription(actual); 45*3ac0a46fSAndroid Build Coastguard Worker return AssertionFailure(msg); 46*3ac0a46fSAndroid Build Coastguard Worker} 47*3ac0a46fSAndroid Build Coastguard Worker#if !defined(GTEST_OS_IOS) 48*3ac0a46fSAndroid Build Coastguard WorkerGTEST_API_ AssertionResult CmpHelperNSEQ(const char* expected_expression, 49*3ac0a46fSAndroid Build Coastguard Worker const char* actual_expression, 50*3ac0a46fSAndroid Build Coastguard Worker const NSRect& expected, 51*3ac0a46fSAndroid Build Coastguard Worker const NSRect& actual) { 52*3ac0a46fSAndroid Build Coastguard Worker if (NSEqualRects(expected, actual)) { 53*3ac0a46fSAndroid Build Coastguard Worker return AssertionSuccess(); 54*3ac0a46fSAndroid Build Coastguard Worker } 55*3ac0a46fSAndroid Build Coastguard Worker return EqFailure(expected_expression, actual_expression, 56*3ac0a46fSAndroid Build Coastguard Worker [NSStringFromRect(expected) UTF8String], 57*3ac0a46fSAndroid Build Coastguard Worker [NSStringFromRect(actual) UTF8String], false); 58*3ac0a46fSAndroid Build Coastguard Worker} 59*3ac0a46fSAndroid Build Coastguard WorkerGTEST_API_ AssertionResult CmpHelperNSNE(const char* expected_expression, 60*3ac0a46fSAndroid Build Coastguard Worker const char* actual_expression, 61*3ac0a46fSAndroid Build Coastguard Worker const NSRect& expected, 62*3ac0a46fSAndroid Build Coastguard Worker const NSRect& actual) { 63*3ac0a46fSAndroid Build Coastguard Worker if (!NSEqualRects(expected, actual)) { 64*3ac0a46fSAndroid Build Coastguard Worker return AssertionSuccess(); 65*3ac0a46fSAndroid Build Coastguard Worker } 66*3ac0a46fSAndroid Build Coastguard Worker Message msg; 67*3ac0a46fSAndroid Build Coastguard Worker msg << "Expected: (" << expected_expression << ") != (" << actual_expression 68*3ac0a46fSAndroid Build Coastguard Worker << "), actual: " << [NSStringFromRect(expected) UTF8String] << " vs " 69*3ac0a46fSAndroid Build Coastguard Worker << [NSStringFromRect(actual) UTF8String]; 70*3ac0a46fSAndroid Build Coastguard Worker return AssertionFailure(msg); 71*3ac0a46fSAndroid Build Coastguard Worker} 72*3ac0a46fSAndroid Build Coastguard WorkerGTEST_API_ AssertionResult CmpHelperNSEQ(const char* expected_expression, 73*3ac0a46fSAndroid Build Coastguard Worker const char* actual_expression, 74*3ac0a46fSAndroid Build Coastguard Worker const NSPoint& expected, 75*3ac0a46fSAndroid Build Coastguard Worker const NSPoint& actual) { 76*3ac0a46fSAndroid Build Coastguard Worker if (NSEqualPoints(expected, actual)) { 77*3ac0a46fSAndroid Build Coastguard Worker return AssertionSuccess(); 78*3ac0a46fSAndroid Build Coastguard Worker } 79*3ac0a46fSAndroid Build Coastguard Worker return EqFailure(expected_expression, actual_expression, 80*3ac0a46fSAndroid Build Coastguard Worker [NSStringFromPoint(expected) UTF8String], 81*3ac0a46fSAndroid Build Coastguard Worker [NSStringFromPoint(actual) UTF8String], false); 82*3ac0a46fSAndroid Build Coastguard Worker} 83*3ac0a46fSAndroid Build Coastguard WorkerGTEST_API_ AssertionResult CmpHelperNSNE(const char* expected_expression, 84*3ac0a46fSAndroid Build Coastguard Worker const char* actual_expression, 85*3ac0a46fSAndroid Build Coastguard Worker const NSPoint& expected, 86*3ac0a46fSAndroid Build Coastguard Worker const NSPoint& actual) { 87*3ac0a46fSAndroid Build Coastguard Worker if (!NSEqualPoints(expected, actual)) { 88*3ac0a46fSAndroid Build Coastguard Worker return AssertionSuccess(); 89*3ac0a46fSAndroid Build Coastguard Worker } 90*3ac0a46fSAndroid Build Coastguard Worker Message msg; 91*3ac0a46fSAndroid Build Coastguard Worker msg << "Expected: (" << expected_expression << ") != (" << actual_expression 92*3ac0a46fSAndroid Build Coastguard Worker << "), actual: " << [NSStringFromPoint(expected) UTF8String] << " vs " 93*3ac0a46fSAndroid Build Coastguard Worker << [NSStringFromPoint(actual) UTF8String]; 94*3ac0a46fSAndroid Build Coastguard Worker return AssertionFailure(msg); 95*3ac0a46fSAndroid Build Coastguard Worker} 96*3ac0a46fSAndroid Build Coastguard Worker#endif // !GTEST_OS_IOS 97*3ac0a46fSAndroid Build Coastguard Worker} // namespace internal 98*3ac0a46fSAndroid Build Coastguard Worker} // namespace testing 99*3ac0a46fSAndroid Build Coastguard Worker#endif // GTEST_OS_MAC 100