forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This adds adds four macros when compiling using GTEST_OS_MAC:
{ASSERT,EXPECT}_NS{NE,EQ}. These test ObjC objects using |-isEqual:| and prints failures using the |-description| selector. This allows for better debugging output with ObjC++ test cases. BUG=http://code.google.com/p/googletest/issues/detail?id=303 TEST=Covered by unit tests. Review URL: http://codereview.chromium.org/3028047 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@55180 0039d316-1c4b-4281-b951-d872f2087c98
- Loading branch information
rsesek@chromium.org
committed
Aug 6, 2010
1 parent
8abe765
commit ecebcc9
Showing
5 changed files
with
151 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
// Copyright (c) 2010 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
#ifndef TESTING_GTEST_MAC_H_ | ||
#define TESTING_GTEST_MAC_H_ | ||
|
||
#include <gtest/internal/gtest-port.h> | ||
#include <gtest/gtest.h> | ||
|
||
#ifdef GTEST_OS_MAC | ||
|
||
#import <Foundation/Foundation.h> | ||
|
||
namespace testing { | ||
namespace internal { | ||
|
||
// 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); | ||
|
||
// 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); | ||
|
||
} // namespace internal | ||
} // namespace testing | ||
|
||
// Tests that [expected isEqual:actual]. | ||
#define EXPECT_NSEQ(expected, actual) \ | ||
EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNSEQ, expected, actual) | ||
#define EXPECT_NSNE(val1, val2) \ | ||
EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNSNE, val1, val2) | ||
|
||
#define ASSERT_NSEQ(expected, actual) \ | ||
ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNSEQ, expected, actual) | ||
#define ASSERT_NSNE(val1, val2) \ | ||
ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNSNE, val1, val2) | ||
|
||
#endif // GTEST_OS_MAC | ||
|
||
#endif // TESTING_GTEST_MAC_H_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
// Copyright (c) 2010 The Chromium Authors. All rights reserved. | ||
// 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 <gtest/internal/gtest-port.h> | ||
#include <gtest/internal/gtest-string.h> | ||
#include <gtest/gtest.h> | ||
|
||
#ifdef GTEST_OS_MAC | ||
|
||
#import <Foundation/Foundation.h> | ||
|
||
namespace testing { | ||
namespace internal { | ||
|
||
// 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 isEqual:actual]) { | ||
return AssertionSuccess(); | ||
} | ||
return EqFailure(expected_expression, | ||
actual_expression, | ||
String([[expected description] UTF8String]), | ||
String([[actual description] UTF8String]), | ||
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 isEqual:actual]) { | ||
return AssertionSuccess(); | ||
} | ||
Message msg; | ||
msg << "Expected: (" << expected_expression << ") != (" << actual_expression | ||
<< "), actual: " << String([[expected description] UTF8String]) | ||
<< " vs " << String([[actual description] UTF8String]); | ||
return AssertionFailure(msg); | ||
} | ||
|
||
} // namespace internal | ||
} // namespace testing | ||
|
||
#endif // GTEST_OS_MAC |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
// Copyright (c) 2010 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
// Note that while this file is in testing/ and tests GTest macros, it is built | ||
// as part of Chromium's unit_tests target because the project does not build | ||
// or run GTest's internal test suite. | ||
|
||
#import "testing/gtest_mac.h" | ||
|
||
#import <Foundation/Foundation.h> | ||
|
||
#include "base/scoped_nsautorelease_pool.h" | ||
#include "testing/gtest/include/gtest/internal/gtest-port.h" | ||
#include "testing/gtest/include/gtest/gtest.h" | ||
|
||
TEST(GTestMac, ExpectNSEQ) { | ||
base::ScopedNSAutoreleasePool pool; | ||
|
||
EXPECT_NSEQ(@"a", @"a"); | ||
|
||
NSString* s1 = [NSString stringWithUTF8String:"a"]; | ||
NSString* s2 = [NSString stringWithString:@"a"]; | ||
EXPECT_NE(s1, s2); | ||
EXPECT_NSEQ(s1, s2); | ||
} | ||
|
||
TEST(GTestMac, AssertNSEQ) { | ||
base::ScopedNSAutoreleasePool pool; | ||
|
||
NSNumber* n1 = [NSNumber numberWithInt:42]; | ||
NSNumber* n2 = [NSNumber numberWithInt:42]; | ||
EXPECT_NE(n1, n2); | ||
ASSERT_NSEQ(n1, n2); | ||
} | ||
|
||
TEST(GTestMac, ExpectNSNE) { | ||
base::ScopedNSAutoreleasePool pool; | ||
|
||
EXPECT_NSNE([NSNumber numberWithInt:2], [NSNumber numberWithInt:42]); | ||
} | ||
|
||
TEST(GTestMac, AssertNSNE) { | ||
base::ScopedNSAutoreleasePool pool; | ||
|
||
ASSERT_NSNE(@"a", @"b"); | ||
} |