ObjFW  Diff

Differences From Artifact [ce29c0174f]:

To Artifact [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