Index: tests/OFKernelEventObserverTests.m ================================================================== --- tests/OFKernelEventObserverTests.m +++ tests/OFKernelEventObserverTests.m @@ -25,11 +25,12 @@ static OFString *module = @"OFKernelEventObserverSocket"; static OFKernelEventObserver *observer; static int events = 0; static id expectedObject; -static bool readData = false; +static bool readData = false, expectEOS = false; +static OFTCPSocket *accepted = nil; @interface ObserverDelegate: OFObject - (void)objectIsReadyForReading: (id)object; @end @@ -39,24 +40,25 @@ events++; OF_ENSURE(object == expectedObject); if ([object isListening]) { - OFTCPSocket *client = [object accept]; + accepted = [[object accept] retain]; - [observer addObjectForReading: client]; - [client writeBuffer: "0" - length: 1]; - - return; + [accepted writeBuffer: "0" + length: 1]; } else if (readData) { char buf; - [object readIntoBuffer: &buf - length: 1]; - - OF_ENSURE(buf == '0'); + if (expectEOS) + OF_ENSURE([object readIntoBuffer: &buf + length: 1] == 0); + else { + OF_ENSURE([object readIntoBuffer: &buf + length: 1] == 1); + OF_ENSURE(buf == '0'); + } } } @end @implementation TestsAppDelegate (OFKernelEventObserverTests) @@ -82,23 +84,29 @@ [sock2 connectToHost: @"127.0.0.1" port: port]; TEST(@"-[observe] waiting for connection", (expectedObject = sock1) && - [observer observeForTimeInterval: 0.01] == 1) + [observer observeForTimeInterval: 0.01]) + [accepted autorelease]; TEST(@"-[observe] waiting for data", (expectedObject = sock2) && R([observer addObjectForReading: sock2]) && - [observer observeForTimeInterval: 0.01] == 1) + [observer observeForTimeInterval: 0.01]) TEST(@"-[observe] keeping event until read", - R(readData = true) && [observer observeForTimeInterval: 0.01] == 1) + R(readData = true) && [observer observeForTimeInterval: 0.01]) TEST(@"-[observe] time out due to no events", - R(readData = false) && [observer observeForTimeInterval: 0.01] == 0) + R(readData = false) && ![observer observeForTimeInterval: 0.01]) + + [accepted close]; + TEST(@"-[observe] closed connection", + R(readData = true) && R(expectEOS = true) && + [observer observeForTimeInterval: 0.01]) - TEST(@"-[observe] correct number of events", events == 3) + TEST(@"-[observe] correct number of events", events == 4) [pool drain]; } @end