diff options
Diffstat (limited to 'Foundation/GTMNSDictionary+CaseInsensitiveTest.m')
-rw-r--r-- | Foundation/GTMNSDictionary+CaseInsensitiveTest.m | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/Foundation/GTMNSDictionary+CaseInsensitiveTest.m b/Foundation/GTMNSDictionary+CaseInsensitiveTest.m new file mode 100644 index 0000000..67584ff --- /dev/null +++ b/Foundation/GTMNSDictionary+CaseInsensitiveTest.m @@ -0,0 +1,119 @@ +// +// GTMNSDictionary+CaseInsensitiveTest.m +// +// Copyright 2009 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +#import "GTMSenTestCase.h" +#import "GTMNSDictionary+CaseInsensitive.h" + +@interface GTMNSDictionary_CaseInsensitiveTest : GTMTestCase +@end + +@implementation GTMNSDictionary_CaseInsensitiveTest + +- (void)testNSDictionaryCaseInsensitiveAdditions { + NSURL *objKey = [NSURL URLWithString:@"http://WWW.Google.COM/"]; + NSURL *lcObjKey = [NSURL URLWithString:[[objKey absoluteString] + lowercaseString]]; + + NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: + @"value", @"key", + @"value", @"KEY", + @"bar", @"FOO", + @"yes", objKey, + nil]; + + NSDictionary *ciDict = + [NSDictionary gtm_dictionaryWithDictionaryCaseInsensitive:dict]; + + STAssertNotNil(ciDict, @"gtm_dictionaryWithDictionaryCaseInsensitive failed"); + + STAssertTrue([ciDict count] == 3, + @"wrong count, multiple 'key' entries should be folded."); + + STAssertEqualStrings([ciDict objectForKey:@"foo"], @"bar", + @"case insensitive key lookup failed"); + + STAssertEqualStrings([ciDict objectForKey:@"kEy"], @"value", + @"case insensitive key lookup failed"); + + STAssertNotNil([ciDict objectForKey:objKey], + @"exact matches on non-NSString objects should still work."); + + STAssertNil([ciDict objectForKey:lcObjKey], + @"only NSString and subclasses are case-insensitive."); + + STAssertNotNil([NSDictionary gtm_dictionaryWithDictionaryCaseInsensitive: + [NSDictionary dictionary]], + @"empty dictionary should not return nil"); + + STAssertNotNil([NSDictionary gtm_dictionaryWithDictionaryCaseInsensitive: + nil], + @"nil dictionary should return empty dictionary"); + + STAssertNotNil([[[NSDictionary alloc] gtm_initWithDictionaryCaseInsensitive: + nil] autorelease], + @"nil dictionary should return empty dictionary"); +} + +- (void)testNSMutableDictionaryCaseInsensitiveAdditions { + NSURL *objKey = [NSURL URLWithString:@"http://WWW.Google.COM/"]; + NSURL *lcObjKey = [NSURL URLWithString:[[objKey absoluteString] + lowercaseString]]; + + NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: + @"value", @"key", + @"value", @"KEY", + @"bar", @"FOO", + @"yes", objKey, + nil]; + + NSMutableDictionary *ciDict = + [NSMutableDictionary gtm_dictionaryWithDictionaryCaseInsensitive:dict]; + + STAssertNotNil(ciDict, @"gtm_dictionaryWithDictionaryCaseInsensitive failed"); + + STAssertTrue([ciDict count] == 3, + @"wrong count, multiple 'key' entries should be folded."); + + STAssertEqualStrings([ciDict objectForKey:@"foo"], @"bar", + @"case insensitive key lookup failed"); + + STAssertEqualStrings([ciDict objectForKey:@"kEy"], @"value", + @"case insensitive key lookup failed"); + + STAssertNotNil([ciDict objectForKey:objKey], + @"exact matches on non-NSString objects should still work."); + + STAssertNil([ciDict objectForKey:lcObjKey], + @"only NSString and subclasses are case-insensitive."); + + NSObject *obj = [[[NSObject alloc] init] autorelease]; + [ciDict setObject:obj forKey:@"kEy"]; + STAssertEquals([ciDict objectForKey:@"key"], obj, + @"mutable dictionary value not overwritten"); + + STAssertNotNil( + [NSMutableDictionary gtm_dictionaryWithDictionaryCaseInsensitive: + [NSDictionary dictionary]], + @"empty dictionary should not return nil"); + + STAssertNotNil( + [NSMutableDictionary gtm_dictionaryWithDictionaryCaseInsensitive:nil], + @"nil dictionary should return empty dictionary"); +} + +@end |