| 
9 | 9 | SpecBegin(StringArray)  | 
10 | 10 | 
 
  | 
11 | 11 | describe(@"String arrays", ^{  | 
12 |  | -	__block NSArray *originalArray = nil;  | 
13 |  | -	__block git_strarray strArray;  | 
14 |  | -	  | 
15 |  | -	beforeEach(^{  | 
16 |  | -		originalArray = @[ @"First", @"Second", @"Third", @"Fourth", @"Fifth", @"Sixth" ];  | 
17 |  | -		strArray = originalArray.git_strarray;  | 
18 |  | -	});  | 
19 |  | -	  | 
20 |  | -	afterEach(^{  | 
21 |  | -		git_strarray_free(&strArray);  | 
22 |  | -	});  | 
23 |  | -	  | 
24 |  | -	it(@"should return null for an empty array", ^{  | 
25 |  | -		NSArray *emptyArray = [NSArray array];  | 
26 |  | -		expect(emptyArray.git_strarray.count).to.equal(0);  | 
27 |  | -		expect(emptyArray.git_strarray.strings).to.beNil();  | 
28 |  | -	});  | 
29 | 12 | 
 
  | 
30 |  | -	void (^validateStrArray)(git_strarray) = ^(git_strarray arrayToValidate) {  | 
31 |  | -		expect(arrayToValidate.count).to.equal(originalArray.count);  | 
32 |  | -		  | 
33 |  | -		for (NSUInteger idx = 0; idx < originalArray.count; idx++) {  | 
34 |  | -			const char *convertedString = arrayToValidate.strings[idx];  | 
35 |  | -			NSString *comparisonString = [NSString stringWithUTF8String:convertedString];  | 
36 |  | -			expect(originalArray[idx]).to.equal(comparisonString);  | 
 | 13 | +	void (^validateStrArray)(NSArray *, git_strarray) = ^(NSArray *array, git_strarray strArray) {  | 
 | 14 | +		expect(strArray.count).to.equal(array.count);  | 
 | 15 | + | 
 | 16 | +		for (NSUInteger idx = 0; idx < array.count; idx++) {  | 
 | 17 | +			const char *convertedString = strArray.strings[idx];  | 
 | 18 | +			NSString *comparisonString = @(convertedString);  | 
 | 19 | +			expect(array[idx]).to.equal(comparisonString);  | 
37 | 20 | 		}  | 
38 | 21 | 	};  | 
39 |  | -	  | 
40 |  | -	it(@"should correctly translate the strings", ^{  | 
41 |  | -		validateStrArray(strArray);  | 
42 |  | -	});  | 
43 |  | -	  | 
44 |  | -	it(@"should be able to be copied", ^{  | 
45 |  | -		git_strarray copiedArray;  | 
46 |  | -		git_strarray_copy(&copiedArray, &strArray);  | 
47 |  | -		validateStrArray(copiedArray);  | 
48 |  | -		git_strarray_free(&copiedArray);  | 
 | 22 | + | 
 | 23 | +	describe(@"allow conversion to a git_strarray", ^{  | 
 | 24 | +		__block NSArray *originalArray = nil;  | 
 | 25 | +		__block git_strarray strArray;  | 
 | 26 | + | 
 | 27 | +		beforeEach(^{  | 
 | 28 | +			originalArray = @[ @"First", @"Second", @"Third", @"Fourth", @"Fifth", @"Sixth" ];  | 
 | 29 | +			strArray = originalArray.git_strarray;  | 
 | 30 | +		});  | 
 | 31 | + | 
 | 32 | +		afterEach(^{  | 
 | 33 | +			git_strarray_free(&strArray);  | 
 | 34 | +		});  | 
 | 35 | + | 
 | 36 | +		it(@"should return null for an empty array", ^{  | 
 | 37 | +			NSArray *emptyArray = [NSArray array];  | 
 | 38 | +			expect(emptyArray.git_strarray.count).to.equal(0);  | 
 | 39 | +			expect(emptyArray.git_strarray.strings).to.beNil();  | 
 | 40 | +		});  | 
 | 41 | + | 
 | 42 | +		it(@"should correctly translate the strings", ^{  | 
 | 43 | +			validateStrArray(originalArray, strArray);  | 
 | 44 | +		});  | 
 | 45 | + | 
 | 46 | +		it(@"should be able to be copied", ^{  | 
 | 47 | +			git_strarray copiedArray;  | 
 | 48 | +			git_strarray_copy(&copiedArray, &strArray);  | 
 | 49 | +			validateStrArray(originalArray, copiedArray);  | 
 | 50 | +			git_strarray_free(&copiedArray);  | 
 | 51 | +		});  | 
 | 52 | + | 
 | 53 | +		it(@"should stay valid outside of an autorelease pool", ^{  | 
 | 54 | +			git_strarray dontAutoreleaseThis;  | 
 | 55 | +			@autoreleasepool {  | 
 | 56 | +				dontAutoreleaseThis = originalArray.git_strarray;  | 
 | 57 | +			}  | 
 | 58 | + | 
 | 59 | +			validateStrArray(originalArray, dontAutoreleaseThis);  | 
 | 60 | +		});  | 
49 | 61 | 	});  | 
50 |  | -	  | 
51 |  | -	it(@"should stay valid outside of an autorelease pool", ^{  | 
52 |  | -		git_strarray dontAutoreleaseThis;  | 
53 |  | -		@autoreleasepool {  | 
54 |  | -			dontAutoreleaseThis = originalArray.git_strarray;  | 
55 |  | -		}  | 
56 |  | -		  | 
57 |  | -		validateStrArray(dontAutoreleaseThis);  | 
 | 62 | + | 
 | 63 | +	describe(@"allows conversion from a git_strarray", ^{  | 
 | 64 | +		__block git_strarray originalStrArray;  | 
 | 65 | + | 
 | 66 | +		beforeEach(^{  | 
 | 67 | +			originalStrArray.count = 3;  | 
 | 68 | +			originalStrArray.strings = calloc(originalStrArray.count, sizeof(char *));  | 
 | 69 | +			originalStrArray.strings[0] = "First";  | 
 | 70 | +			originalStrArray.strings[1] = "Second";  | 
 | 71 | +			originalStrArray.strings[2] = "Third";  | 
 | 72 | +		});  | 
 | 73 | + | 
 | 74 | +		afterEach(^{  | 
 | 75 | +			free(originalStrArray.strings);  | 
 | 76 | +		});  | 
 | 77 | + | 
 | 78 | +		it(@"should return an empty array for an NULL strarray", ^{  | 
 | 79 | +			git_strarray strarray = { .strings = NULL, .count = 0 };  | 
 | 80 | +			NSArray *array = [NSArray git_arrayWithStrarray:strarray];  | 
 | 81 | +			expect(array.count).to.equal(0);  | 
 | 82 | +		});  | 
 | 83 | + | 
 | 84 | +		it(@"should correctly translate the strarray", ^{  | 
 | 85 | +			NSArray *array = [NSArray git_arrayWithStrarray:originalStrArray];  | 
 | 86 | +			validateStrArray(array, originalStrArray);  | 
 | 87 | +		});  | 
 | 88 | + | 
 | 89 | +		it(@"should omit NULL strings", ^{  | 
 | 90 | +			originalStrArray.strings[1] = NULL;  | 
 | 91 | + | 
 | 92 | +			NSArray *array = [NSArray git_arrayWithStrarray:originalStrArray];  | 
 | 93 | +			expect(array).to.equal((@[ @"First", @"Third" ]));  | 
 | 94 | +		});  | 
58 | 95 | 	});  | 
59 | 96 | });  | 
60 | 97 | 
 
  | 
 | 
0 commit comments