| // |
| // 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 |
| |