ObjFW  Check-in [3791ec8e42]

Overview
Comment:Improve OFKernelEventObserverTests
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 3791ec8e4216fff03ef2e7f67f09362b22146a377c8ba7f04a0d143ec895163d
User & Date: js on 2015-05-03 09:39:03
Other Links: manifest | tags
Context
2015-05-03
10:16
OFTCPSocket: Add -[setTCPNoDelayEnabled:] check-in: 12fbe85aab user: js tags: trunk
09:39
Improve OFKernelEventObserverTests check-in: 3791ec8e42 user: js tags: trunk
2015-05-02
23:52
OF_ENSURE: Wrap in do / while (0) check-in: e1b2c4bb1e user: js tags: trunk
Changes

Modified tests/OFKernelEventObserverTests.m from [ce29c0174f] to [5bcda94d87].

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







-
+
+













-
+

-
-
-
+
+
-
-



+
-
-
-
-
+
+
+
+
+
+
+








#import "TestsAppDelegate.h"

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

@implementation ObserverDelegate
- (void)objectIsReadyForReading: (id)object
{
	events++;

	OF_ENSURE(object == expectedObject);

	if ([object isListening]) {
		OFTCPSocket *client = [object accept];
		accepted = [[object accept] retain];

		[observer addObjectForReading: client];
		[client writeBuffer: "0"
			     length: 1];
		[accepted writeBuffer: "0"
			       length: 1];

		return;
	} else if (readData) {
		char buf;

		if (expectEOS)
		[object readIntoBuffer: &buf
				length: 1];

		OF_ENSURE(buf == '0');
			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)
- (void)kernelEventObserverTests
{
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
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







-
+
+




-
+


-
+


+
+
+
+
+
-
+

-
+




	TEST(@"-[addObjectForReading:]",
	    R([observer addObjectForReading: sock1]))

	[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])

	[accepted close];
	TEST(@"-[observe] closed connection",
	    R(readData = true) && R(expectEOS = true) &&
	    R(readData = false) && [observer observeForTimeInterval: 0.01] == 0)
	    [observer observeForTimeInterval: 0.01])

	TEST(@"-[observe] correct number of events", events == 3)
	TEST(@"-[observe] correct number of events", events == 4)

	[pool drain];
}
@end