xref: /aosp_15_r20/external/pdfium/testing/gtest_mac.mm (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
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