-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathAppleGuiceAutoInjectorTests.m
More file actions
119 lines (90 loc) · 3.09 KB
/
AppleGuiceAutoInjectorTests.m
File metadata and controls
119 lines (90 loc) · 3.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
//
// AppleGuiceAutoInjectorTests.m
// AppleGuiceTests
//
// Created by Tomer Shiri on 4/9/13.
// Copyright (c) 2013 Tomer Shiri. All rights reserved.
//
#import "AppleGuiceAutoInjectorTests.h"
#import "AppleGuiceAutoInjector.h"
#import "AppleGuiceInjectorProtocol.h"
//OCMock doesn't play well when swizzeling constructors.
@interface AutoInjectorTestsTestClass : NSObject
@end
@interface MockedInjector : NSObject<AppleGuiceInjectorProtocol> {
@public
BOOL didCallInjector;
id calledArg;
}
-(void) reset;
@end
@implementation AppleGuiceAutoInjectorTests {
}
static MockedInjector* mockedInjector;
+(void)initialize {
mockedInjector = [[MockedInjector alloc] init];
}
-(void)setUp {
[super setUp];
[mockedInjector reset];
[AppleGuiceAutoInjector setInjector:mockedInjector];
}
-(void)tearDown {
[super tearDown];
[mockedInjector reset];
[AppleGuiceAutoInjector stopAutoInjector]; //just in case
}
-(void) test__startAutoInjector__call__startsTheService {
Class injectedClassType = [AutoInjectorTestsTestClass class];
[AppleGuiceAutoInjector startAutoInjector];
id result = [[[injectedClassType alloc] init] autorelease];
[AppleGuiceAutoInjector setInjector:nil];
XCTAssertEqual([result retainCount], (NSUInteger)2, @"AutoInjector should not retain");
EXP_expect(result).to.beInstanceOf(injectedClassType);
EXP_expect(mockedInjector->didCallInjector).to.beTruthy();
EXP_expect(mockedInjector->calledArg).to.equal(result);
}
-(void) dtest__stopAutoInjector__call__stopsTheService {
Class injectedClassType = [AutoInjectorTestsTestClass class];
[AppleGuiceAutoInjector startAutoInjector];
[AppleGuiceAutoInjector stopAutoInjector];
id result = [[[injectedClassType alloc] init] autorelease];
[AppleGuiceAutoInjector setInjector:nil];
EXP_expect(result).to.beInstanceOf(injectedClassType);
EXP_expect(mockedInjector->didCallInjector).to.beFalsy();
}
-(void) test__startAutoInjector__callTwice__serviceIsWorkingProperly {
[AppleGuiceAutoInjector startAutoInjector];
[self test__startAutoInjector__call__startsTheService];
}
-(void) dtest__stopsAutoInjector__callTwice__serviceIsWorkingProperly {
Class injectedClassType = [AutoInjectorTestsTestClass class];
[AppleGuiceAutoInjector startAutoInjector];
[AppleGuiceAutoInjector stopAutoInjector];
[AppleGuiceAutoInjector stopAutoInjector];
id result = [[[AutoInjectorTestsTestClass alloc] init] autorelease];
[AppleGuiceAutoInjector setInjector:nil];
EXP_expect(result).to.beInstanceOf(injectedClassType);
EXP_expect(mockedInjector->didCallInjector).to.beFalsy();
}
@end
@implementation MockedInjector
-(id)init {
self = [super init];
if (!self) return self;
[self reset];
return self;
}
-(void) reset {
didCallInjector = NO;
[calledArg release];
calledArg = nil;
}
-(void)injectImplementationsToInstance:(id<NSObject>)classInstance {
didCallInjector = YES;
[calledArg release];
calledArg = [classInstance retain];
}
@end
@implementation AutoInjectorTestsTestClass
@end