blob: 535e0ceb554791b4dced37a969ebcc5a7fc950df [file] [log] [blame]
//
// GTMNSArray+MergeTest.m
//
// Copyright 2008 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 "GTMNSArray+Merge.h"
@interface GTMNSArray_MergeTest : GTMTestCase
@end
@interface NSString (GTMStringMergingTestAdditions)
- (NSString *)mergeString:(NSString *)stringB;
@end
@implementation GTMNSArray_MergeTest
- (void)testMergingTwoEmptyArrays {
NSArray *emptyArrayA = [NSArray array];
NSArray *emptyArrayB = [NSArray array];
NSArray *mergedArray = [emptyArrayA gtm_mergeArray:emptyArrayB
mergeSelector:nil];
XCTAssertNil(mergedArray,
@"merge of two empty arrays with no merger should render nil");
}
- (void)testMergingTwoEmptyArraysWithMerger {
NSArray *emptyArrayA = [NSArray array];
NSArray *emptyArrayB = [NSArray array];
NSArray *mergedArray
= [emptyArrayA gtm_mergeArray:emptyArrayB
mergeSelector:@selector(mergeString:)];
XCTAssertNil(mergedArray,
@"merge of two empty arrays with merger should render nil");
}
- (void)testMergingEmptyWithNilArray {
NSArray *emptyArrayA = [NSArray array];
NSArray *nilArrayB = nil;
NSArray *mergedArray = [emptyArrayA gtm_mergeArray:nilArrayB
mergeSelector:nil];
XCTAssertNil(mergedArray,
@"merge of empty with nil array with no merger should render nil");
}
- (void)testMergingEmptyWithNilArrayWithMerger {
NSArray *emptyArrayA = [NSArray array];
NSArray *nilArrayB = nil;
NSArray *mergedArray
= [emptyArrayA gtm_mergeArray:nilArrayB
mergeSelector:@selector(mergeString:)];
XCTAssertNil(mergedArray,
@"merge of empty with nil array with merger should render nil");
}
- (void)testMergingTwoOneItemArraysThatDontMatch {
NSArray *arrayA = [NSArray arrayWithObject:@"abc.def"];
NSArray *arrayB = [NSArray arrayWithObject:@"abc.ghi"];
NSArray *mergedArray = [arrayA gtm_mergeArray:arrayB
mergeSelector:nil];
XCTAssertNotNil(mergedArray,
@"merge of two non empty arrays with no merger should render "
@"an array");
XCTAssertEqual([mergedArray count], (NSUInteger)2,
@"merged array should have two items");
XCTAssertEqualObjects([mergedArray objectAtIndex:0], @"abc.def");
XCTAssertEqualObjects([mergedArray objectAtIndex:1], @"abc.ghi");
}
- (void)testMergingTwoOneItemArraysThatDontMatchWithMerger {
NSArray *arrayA = [NSArray arrayWithObject:@"abc.def"];
NSArray *arrayB = [NSArray arrayWithObject:@"abc.ghi"];
NSArray *mergedArray = [arrayA gtm_mergeArray:arrayB
mergeSelector:@selector(mergeString:)];
XCTAssertNotNil(mergedArray,
@"merge of two non empty arrays with merger should render "
@"an array");
XCTAssertEqual([mergedArray count], (NSUInteger)2,
@"merged array should have two items");
XCTAssertEqualObjects([mergedArray objectAtIndex:0], @"abc.def");
XCTAssertEqualObjects([mergedArray objectAtIndex:1], @"abc.ghi");
}
- (void)testMergingTwoOneItemArraysThatMatch {
NSArray *arrayA = [NSArray arrayWithObject:@"abc.def"];
NSArray *arrayB = [NSArray arrayWithObject:@"abc.def"];
NSArray *mergedArray = [arrayA gtm_mergeArray:arrayB
mergeSelector:nil];
XCTAssertNotNil(mergedArray,
@"merge of two matching arrays with no merger should render "
@"an array");
XCTAssertEqual([mergedArray count], (NSUInteger)2,
@"merged array with no merger should have two items");
XCTAssertEqualObjects([mergedArray objectAtIndex:0], @"abc.def");
XCTAssertEqualObjects([mergedArray objectAtIndex:1], @"abc.def");
}
- (void)testMergingTwoOneItemArraysThatMatchWithMerger {
NSArray *arrayA = [NSArray arrayWithObject:@"abc.def"];
NSArray *arrayB = [NSArray arrayWithObject:@"abc.def"];
NSArray *mergedArray = [arrayA gtm_mergeArray:arrayB
mergeSelector:@selector(mergeString:)];
XCTAssertNotNil(mergedArray,
@"merge of two matching arrays with merger should render "
@"an array");
XCTAssertEqual([mergedArray count], (NSUInteger)1,
@"merged array with merger should have one items");
XCTAssertEqualObjects([mergedArray objectAtIndex:0], @"abc.def");
}
- (void)testMergingMultipleItemArray {
NSArray *arrayA = [NSArray arrayWithObjects:
@"Kansas",
@"Arkansas",
@"Wisconson",
@"South Carolina",
nil];
NSArray *arrayB = [NSArray arrayWithObjects:
@"South Carolina",
@"Quebec",
@"British Columbia",
@"Arkansas",
@"South Hamptom",
nil];
NSArray *mergedArray = [arrayA gtm_mergeArray:arrayB
mergeSelector:nil];
XCTAssertNotNil(mergedArray,
@"merge of two non empty arrays with no merger should render "
@"an array");
XCTAssertEqual([mergedArray count], (NSUInteger)9,
@"merged array should have 9 items");
}
- (void)testMergingMultipleItemArrayWithMerger {
NSArray *arrayA = [NSArray arrayWithObjects:
@"Kansas",
@"Arkansas",
@"Wisconson",
@"South Carolina",
nil];
NSArray *arrayB = [NSArray arrayWithObjects:
@"South Carolina",
@"Quebec",
@"British Columbia",
@"Arkansas",
@"South Hamptom",
nil];
NSArray *mergedArray = [arrayA gtm_mergeArray:arrayB
mergeSelector:@selector(mergeString:)];
XCTAssertNotNil(mergedArray,
@"merge of two non empty arrays with merger should render "
@"an array");
XCTAssertEqual([mergedArray count], (NSUInteger)7,
@"merged array should have 7 items");
}
- (void)testMergeWithEmptyArrays {
NSArray *arrayA = [NSArray arrayWithObjects:@"xyz", @"abc", @"mno", nil];
NSArray *arrayB = [NSArray array];
NSArray *expected = [NSArray arrayWithObjects:@"abc", @"mno", @"xyz", nil];
XCTAssertNotNil(arrayA);
XCTAssertNotNil(arrayB);
XCTAssertNotNil(expected);
NSArray *mergedArray;
// no merger
mergedArray = [arrayA gtm_mergeArray:arrayB
mergeSelector:nil];
XCTAssertNotNil(mergedArray);
XCTAssertEqualObjects(mergedArray, expected);
// w/ merger
mergedArray = [arrayA gtm_mergeArray:arrayB
mergeSelector:@selector(mergeString:)];
XCTAssertNotNil(mergedArray);
XCTAssertEqualObjects(mergedArray, expected);
// no merger and array args reversed
mergedArray = [arrayB gtm_mergeArray:arrayA
mergeSelector:nil];
XCTAssertNotNil(mergedArray);
XCTAssertEqualObjects(mergedArray, expected);
// w/ merger and array args reversed
mergedArray = [arrayB gtm_mergeArray:arrayA
mergeSelector:@selector(mergeString:)];
XCTAssertNotNil(mergedArray);
XCTAssertEqualObjects(mergedArray, expected);
}
@end
@implementation NSString (GTMStringMergingTestAdditions)
- (NSString *)mergeString:(NSString *)stringB {
return stringB;
}
@end