Chromium Code Reviews| Index: base/mac/foundation_util_unittest.mm |
| diff --git a/base/mac/foundation_util_unittest.mm b/base/mac/foundation_util_unittest.mm |
| index cfd4fc60b3e335c69aab24d25af372108df0fc6f..a8b8cb510a9b70703b6576c3370d928a79838ce1 100644 |
| --- a/base/mac/foundation_util_unittest.mm |
| +++ b/base/mac/foundation_util_unittest.mm |
| @@ -5,6 +5,7 @@ |
| #include "base/mac/foundation_util.h" |
| #include "base/mac/scoped_cftyperef.h" |
| +#include "base/mac/scoped_nsautorelease_pool.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| TEST(FoundationUtilTest, CFCast) { |
| @@ -159,3 +160,115 @@ TEST(FoundationUtilTest, CFCast) { |
| EXPECT_FALSE(base::mac::CFCastStrict<CFSetRef>(NULL)); |
| EXPECT_FALSE(base::mac::CFCastStrict<CFStringRef>(NULL)); |
| } |
| + |
| +TEST(FoundationUtilTest, ObjCCast) { |
| + base::mac::ScopedNSAutoreleasePool pool; |
| + |
| + id test_array = [NSArray arrayWithObjects: |
|
Mark Mentovai
2011/10/20 14:14:16
[NSArray array], [NSMutableArray array], [NSDictio
KushalP
2011/10/20 14:56:33
I decided to choose slightly more interesting test
|
| + @"whoomp", @"there", @"it", @"is", nil]; |
| + id test_array_mutable = [NSMutableArray arrayWithObjects: |
| + @"a man", @"a plan", |
| + @"a canal", @"panama", |
| + nil]; |
| + id test_data = [NSData data]; |
|
Mark Mentovai
2011/10/20 14:14:16
Why no test_data_mutable? You had a mutable versio
KushalP
2011/10/20 14:56:33
Added
On 2011/10/20 14:14:16, Mark Mentovai wrote
|
| + id test_date = [NSDate date]; |
| + id test_dict = |
| + [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:42] |
| + forKey:@"meaning"]; |
| + id test_dict_mutable = [NSMutableDictionary dictionaryWithCapacity:10]; |
| + id test_number = [NSNumber numberWithInt:42]; |
| + id test_null = [NSNull null]; |
| + id test_set = [NSSet setWithObject:@"string object"]; |
| + id test_set_mutable = [NSMutableSet setWithCapacity:10]; |
| + id test_str = [NSString string]; |
| + id test_str_const = @"bonjour"; |
| + id test_str_mutable = [NSMutableString stringWithCapacity:10]; |
| + |
| + // Make sure the allocations of NS types are good. |
| + EXPECT_TRUE(test_array); |
| + EXPECT_TRUE(test_array_mutable); |
| + EXPECT_TRUE(test_data); |
| + EXPECT_TRUE(test_date); |
| + EXPECT_TRUE(test_dict); |
| + EXPECT_TRUE(test_dict_mutable); |
| + EXPECT_TRUE(test_number); |
| + EXPECT_TRUE(test_null); |
| + EXPECT_TRUE(test_set); |
| + EXPECT_TRUE(test_set_mutable); |
| + EXPECT_TRUE(test_str); |
| + EXPECT_TRUE(test_str_const); |
| + EXPECT_TRUE(test_str_mutable); |
| + |
| + // Casting the id correctly provides the same pointer. |
| + EXPECT_EQ(test_array, base::mac::ObjCCast<NSArray>(test_array)); |
| + EXPECT_EQ(test_array_mutable, |
| + base::mac::ObjCCast<NSArray>(test_array_mutable)); |
| + EXPECT_EQ(test_data, base::mac::ObjCCast<NSData>(test_data)); |
| + EXPECT_EQ(test_date, base::mac::ObjCCast<NSDate>(test_date)); |
| + EXPECT_EQ(test_dict, base::mac::ObjCCast<NSDictionary>(test_dict)); |
| + EXPECT_EQ(test_dict_mutable, |
| + base::mac::ObjCCast<NSDictionary>(test_dict_mutable)); |
| + EXPECT_EQ(test_number, base::mac::ObjCCast<NSNumber>(test_number)); |
| + EXPECT_EQ(test_null, base::mac::ObjCCast<NSNull>(test_null)); |
| + EXPECT_EQ(test_set, base::mac::ObjCCast<NSSet>(test_set)); |
| + EXPECT_EQ(test_set_mutable, base::mac::ObjCCast<NSSet>(test_set_mutable)); |
| + EXPECT_EQ(test_str, base::mac::ObjCCast<NSString>(test_str)); |
| + EXPECT_EQ(test_str_const, base::mac::ObjCCast<NSString>(test_str_const)); |
| + EXPECT_EQ(test_str_mutable, |
| + base::mac::ObjCCast<NSString>(test_str_mutable)); |
| + |
| + // When given an incorrect ObjC cast, provide nil. |
| + EXPECT_FALSE(base::mac::ObjCCast<NSString>(test_array)); |
| + EXPECT_FALSE(base::mac::ObjCCast<NSString>(test_array_mutable)); |
| + EXPECT_FALSE(base::mac::ObjCCast<NSString>(test_data)); |
| + EXPECT_FALSE(base::mac::ObjCCast<NSSet>(test_date)); |
| + EXPECT_FALSE(base::mac::ObjCCast<NSSet>(test_dict)); |
| + EXPECT_FALSE(base::mac::ObjCCast<NSNumber>(test_dict_mutable)); |
| + EXPECT_FALSE(base::mac::ObjCCast<NSNull>(test_number)); |
| + EXPECT_FALSE(base::mac::ObjCCast<NSDictionary>(test_null)); |
| + EXPECT_FALSE(base::mac::ObjCCast<NSDictionary>(test_set)); |
| + EXPECT_FALSE(base::mac::ObjCCast<NSDate>(test_set_mutable)); |
| + EXPECT_FALSE(base::mac::ObjCCast<NSData>(test_str)); |
| + EXPECT_FALSE(base::mac::ObjCCast<NSData>(test_str_const)); |
| + EXPECT_FALSE(base::mac::ObjCCast<NSArray>(test_str_mutable)); |
| + |
| + // Giving a nil provides a nil. |
| + EXPECT_FALSE(base::mac::ObjCCast<NSArray>(nil)); |
| + EXPECT_FALSE(base::mac::ObjCCast<NSData>(nil)); |
| + EXPECT_FALSE(base::mac::ObjCCast<NSDate>(nil)); |
| + EXPECT_FALSE(base::mac::ObjCCast<NSDictionary>(nil)); |
| + EXPECT_FALSE(base::mac::ObjCCast<NSNull>(nil)); |
| + EXPECT_FALSE(base::mac::ObjCCast<NSNumber>(nil)); |
| + EXPECT_FALSE(base::mac::ObjCCast<NSSet>(nil)); |
| + EXPECT_FALSE(base::mac::ObjCCast<NSString>(nil)); |
| + |
| + // ObjCCastStrict: correct cast results in correct pointer being returned. |
| + EXPECT_EQ(test_array, base::mac::ObjCCastStrict<NSArray>(test_array)); |
| + EXPECT_EQ(test_array_mutable, |
| + base::mac::ObjCCastStrict<NSArray>(test_array_mutable)); |
| + EXPECT_EQ(test_data, base::mac::ObjCCastStrict<NSData>(test_data)); |
| + EXPECT_EQ(test_date, base::mac::ObjCCastStrict<NSDate>(test_date)); |
| + EXPECT_EQ(test_dict, base::mac::ObjCCastStrict<NSDictionary>(test_dict)); |
| + EXPECT_EQ(test_dict_mutable, |
| + base::mac::ObjCCastStrict<NSDictionary>(test_dict_mutable)); |
| + EXPECT_EQ(test_number, base::mac::ObjCCastStrict<NSNumber>(test_number)); |
| + EXPECT_EQ(test_null, base::mac::ObjCCastStrict<NSNull>(test_null)); |
| + EXPECT_EQ(test_set, base::mac::ObjCCastStrict<NSSet>(test_set)); |
| + EXPECT_EQ(test_set_mutable, |
| + base::mac::ObjCCastStrict<NSSet>(test_set_mutable)); |
| + EXPECT_EQ(test_str, base::mac::ObjCCastStrict<NSString>(test_str)); |
| + EXPECT_EQ(test_str_const, |
| + base::mac::ObjCCastStrict<NSString>(test_str_const)); |
| + EXPECT_EQ(test_str_mutable, |
| + base::mac::ObjCCastStrict<NSString>(test_str_mutable)); |
| + |
| + // ObjCCastStrict: Giving a nil provides a nil. |
| + EXPECT_FALSE(base::mac::ObjCCastStrict<NSArray>(nil)); |
| + EXPECT_FALSE(base::mac::ObjCCastStrict<NSData>(nil)); |
| + EXPECT_FALSE(base::mac::ObjCCastStrict<NSDate>(nil)); |
| + EXPECT_FALSE(base::mac::ObjCCastStrict<NSDictionary>(nil)); |
| + EXPECT_FALSE(base::mac::ObjCCastStrict<NSNull>(nil)); |
| + EXPECT_FALSE(base::mac::ObjCCastStrict<NSNumber>(nil)); |
| + EXPECT_FALSE(base::mac::ObjCCastStrict<NSSet>(nil)); |
| + EXPECT_FALSE(base::mac::ObjCCastStrict<NSString>(nil)); |
| +} |