Skip to content

Commit

Permalink
Merge pull request #8 from uber/artman/weak-tests
Browse files Browse the repository at this point in the history
Added tests to verify that listener is not retained.
  • Loading branch information
alanzeino committed Sep 4, 2015
2 parents bd739dd + f5d1ab9 commit b47b03a
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 6 deletions.
12 changes: 6 additions & 6 deletions UberSignals/UBSignal.m
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ - (instancetype)initWithProtocol:(Protocol *)protocol
if (protocol_conformsToProtocol(protocol, @protocol(EmptySignal))) {
_fire = (UBSignalFire) ^void() {
__strong typeof(weakSelf) strongSelf = weakSelf;
[strongSelf _fireData:nil forSignalObservers:weakSelf.signalObservers];
[strongSelf _fireData:nil forSignalObservers:strongSelf.signalObservers];
};
_fireForSignalObserver = (UBSignalFire) ^void(UBSignalObserver *signalObserver) {
__strong typeof(weakSelf) strongSelf = weakSelf;
Expand All @@ -68,7 +68,7 @@ - (instancetype)initWithProtocol:(Protocol *)protocol
} else if (protocol_conformsToProtocol(protocol, @protocol(UBSignalArgumentCount1))) {
_fire = ^void(id arg1) {
__strong typeof(weakSelf) strongSelf = weakSelf;
[strongSelf _fireNewData:@[WrapNil(arg1)] forSignalObservers:weakSelf.signalObservers];
[strongSelf _fireNewData:@[WrapNil(arg1)] forSignalObservers:strongSelf.signalObservers];
};
_fireForSignalObserver = ^void(UBSignalObserver *signalObserver, id arg1) {
__strong typeof(weakSelf) strongSelf = weakSelf;
Expand All @@ -77,7 +77,7 @@ - (instancetype)initWithProtocol:(Protocol *)protocol
} else if (protocol_conformsToProtocol(protocol, @protocol(UBSignalArgumentCount2))) {
_fire = ^void(id arg1, id arg2) {
__strong typeof(weakSelf) strongSelf = weakSelf;
[strongSelf _fireNewData:@[WrapNil(arg1), WrapNil(arg2)] forSignalObservers:weakSelf.signalObservers];
[strongSelf _fireNewData:@[WrapNil(arg1), WrapNil(arg2)] forSignalObservers:strongSelf.signalObservers];
};
_fireForSignalObserver = ^void(UBSignalObserver *signalObserver, id arg1, id arg2) {
__strong typeof(weakSelf) strongSelf = weakSelf;
Expand All @@ -86,7 +86,7 @@ - (instancetype)initWithProtocol:(Protocol *)protocol
} else if (protocol_conformsToProtocol(protocol, @protocol(UBSignalArgumentCount3))) {
_fire = ^void(id arg1, id arg2, id arg3) {
__strong typeof(weakSelf) strongSelf = weakSelf;
[strongSelf _fireNewData:@[WrapNil(arg1), WrapNil(arg2), WrapNil(arg3)] forSignalObservers:weakSelf.signalObservers];
[strongSelf _fireNewData:@[WrapNil(arg1), WrapNil(arg2), WrapNil(arg3)] forSignalObservers:strongSelf.signalObservers];
};
_fireForSignalObserver = ^void(UBSignalObserver *signalObserver, id arg1, id arg2, id arg3) {
__strong typeof(weakSelf) strongSelf = weakSelf;
Expand All @@ -95,7 +95,7 @@ - (instancetype)initWithProtocol:(Protocol *)protocol
} else if (protocol_conformsToProtocol(protocol, @protocol(UBSignalArgumentCount4))) {
_fire = ^void(id arg1, id arg2, id arg3, id arg4) {
__strong typeof(weakSelf) strongSelf = weakSelf;
[strongSelf _fireNewData:@[WrapNil(arg1), WrapNil(arg2), WrapNil(arg3), WrapNil(arg4)] forSignalObservers:weakSelf.signalObservers];
[strongSelf _fireNewData:@[WrapNil(arg1), WrapNil(arg2), WrapNil(arg3), WrapNil(arg4)] forSignalObservers:strongSelf.signalObservers];
};
_fireForSignalObserver = ^void(UBSignalObserver *signalObserver, id arg1, id arg2, id arg3, id arg4) {
__strong typeof(weakSelf) strongSelf = weakSelf;
Expand All @@ -104,7 +104,7 @@ - (instancetype)initWithProtocol:(Protocol *)protocol
} else if (protocol_conformsToProtocol(protocol, @protocol(UBSignalArgumentCount5))) {
_fire = ^void(id arg1, id arg2, id arg3, id arg4, id arg5) {
__strong typeof(weakSelf) strongSelf = weakSelf;
[strongSelf _fireNewData:@[WrapNil(arg1), WrapNil(arg2), WrapNil(arg3), WrapNil(arg4), WrapNil(arg5)] forSignalObservers:weakSelf.signalObservers];
[strongSelf _fireNewData:@[WrapNil(arg1), WrapNil(arg2), WrapNil(arg3), WrapNil(arg4), WrapNil(arg5)] forSignalObservers:strongSelf.signalObservers];
};
_fireForSignalObserver = ^void(UBSignalObserver *signalObserver, id arg1, id arg2, id arg3, id arg4, id arg5) {
__strong typeof(weakSelf) strongSelf = weakSelf;
Expand Down
46 changes: 46 additions & 0 deletions UberSignalsTests/UBSignalTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -671,4 +671,50 @@ - (void)testAddListenerWhileInObserverCallback {
XCTAssertEqual(fireCount, 3u, @"Signal fired");
}

- (void)testFiringShouldNotRetainObserver {
UBSignalEmitter *emitter = [[UBSignalEmitter alloc] init];

__block NSUInteger fireCount = 0;


NSObject *observer = [[NSObject alloc] init];
__weak NSObject *weakObserver = observer;

@autoreleasepool {
[emitter.onEmptySignal addObserver:observer callback:^(typeof(self) self) {
fireCount++;
}];
emitter.onEmptySignal.fire();
emitter.onEmptySignal.fire();
}

observer = nil;

XCTAssertEqual(fireCount, 2u, @"Signal fired");
XCTAssertNil(weakObserver, @"Should have deallocated observer");
}

- (void)testRemovingObserverWhileFiringShouldNotRetainObserver {
UBSignalEmitter *emitter = [[UBSignalEmitter alloc] init];

__block NSUInteger fireCount = 0;

NSObject *observer = [[NSObject alloc] init];
__weak NSObject *weakObserver = observer;

@autoreleasepool {
[emitter.onEmptySignal addObserver:observer callback:^(typeof(self) self) {
fireCount++;
[emitter.onEmptySignal removeObserver:observer];
}];

emitter.onEmptySignal.fire();
emitter.onEmptySignal.fire();

observer = nil;
}
XCTAssertEqual(fireCount, 1u, @"Signal fired");
XCTAssertNil(weakObserver, @"Should have deallocated observer");
}

@end

0 comments on commit b47b03a

Please sign in to comment.