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