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