ObjFW  Check-in [a1fd65f4a6]

Overview
Comment:Migrate OFListTests to ObjFWTest
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | objfwtest
Files: files | file ages | folders
SHA3-256: a1fd65f4a63362d5975f68c4919bc6189953f67efc2461e6f87da28050f7dce8
User & Date: js on 2024-02-18 11:33:22
Other Links: branch diff | manifest | tags
Context
2024-02-18
12:34
Migrate OFDictionaryTests to ObjFWTest check-in: 728cc47880 user: js tags: objfwtest
11:33
Migrate OFListTests to ObjFWTest check-in: a1fd65f4a6 user: js tags: objfwtest
11:08
Migrate OFKernelEventObserverTests to ObjFWTest check-in: aa56dd6d2a user: js tags: objfwtest
Changes

Modified new_tests/Makefile from [f5bf523af6] to [e075bf6c68].

24
25
26
27
28
29
30

31
32
33
34
35
36
37
       OFCryptographicHashTests.m	\
       OFDateTests.m			\
       OFHMACTests.m			\
       OFINIFileTests.m			\
       OFIRITests.m			\
       OFInvocationTests.m		\
       OFJSONTests.m			\

       OFLocaleTests.m			\
       OFMatrix4x4Tests.m		\
       OFMethodSignatureTests.m		\
       OFMutableArrayTests.m		\
       OFMutableSetTests.m		\
       OFMutableStringTests.m		\
       OFMutableUTF8StringTests.m	\







>







24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
       OFCryptographicHashTests.m	\
       OFDateTests.m			\
       OFHMACTests.m			\
       OFINIFileTests.m			\
       OFIRITests.m			\
       OFInvocationTests.m		\
       OFJSONTests.m			\
       OFListTests.m			\
       OFLocaleTests.m			\
       OFMatrix4x4Tests.m		\
       OFMethodSignatureTests.m		\
       OFMutableArrayTests.m		\
       OFMutableSetTests.m		\
       OFMutableStringTests.m		\
       OFMutableUTF8StringTests.m	\

Renamed and modified tests/OFListTests.m [39ffbcd436] to new_tests/OFListTests.m [48a2f18d5f].

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





122

123

124
125
126



127



128


129










130
131
132
133
134
135

136
137

138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
 * Public License, either version 2 or 3, which can be found in the file
 * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
 * file.
 */

#include "config.h"

#import "TestsAppDelegate.h"







static OFString *const module = @"OFList";




static OFString *strings[] = {

	@"Foo",
	@"Bar",
	@"Baz"

};



@implementation TestsAppDelegate (OFListTests)



- (void)listTests



{
	void *pool = objc_autoreleasePoolPush();
	OFList *list;
	OFEnumerator *enumerator;

	OFListItem iter;
	OFString *object;
	size_t i;
	bool ok;



	TEST(@"+[list]", (list = [OFList list]))




	TEST(@"-[appendObject:]", [list appendObject: strings[0]] &&


	    [list appendObject: strings[1]] && [list appendObject: strings[2]])




	TEST(@"-[firstListItem]",

	    [OFListItemObject(list.firstListItem) isEqual: strings[0]])

	TEST(@"OFListItemNext()",
	    [OFListItemObject(OFListItemNext(list.firstListItem))

	    isEqual: strings[1]])


	TEST(@"-[lastListItem]",



	    [OFListItemObject(list.lastListItem) isEqual: strings[2]])











	TEST(@"OFListItemPrevious()",


	    [OFListItemObject(OFListItemPrevious(list.lastListItem))

	    isEqual: strings[1]])


	TEST(@"-[removeListItem:]",

	    R([list removeListItem: list.lastListItem]) &&
	    [list.lastObject isEqual: strings[1]] &&
	    R([list removeListItem: list.firstListItem]) &&
	    [list.firstObject isEqual: list.lastObject])

	TEST(@"-[insertObject:beforeListItem:]",

	    [list insertObject: strings[0] beforeListItem: list.lastListItem] &&
	    [OFListItemObject(OFListItemPrevious(list.lastListItem))
	    isEqual: strings[0]])

	TEST(@"-[insertObject:afterListItem:]",
	    [list insertObject: strings[2]

		 afterListItem: OFListItemNext(list.firstListItem)] &&
	    [list.lastObject isEqual: strings[2]])




	TEST(@"-[count]", list.count == 3)





	TEST(@"-[containsObject:]",


	    [list containsObject: strings[1]] &&



	    ![list containsObject: @"nonexistent"])




	TEST(@"-[containsObjectIdenticalTo:]",
	    [list containsObjectIdenticalTo: strings[1]] &&
	    ![list containsObjectIdenticalTo:

	    [OFString stringWithString: strings[1]]])





	TEST(@"-[copy]", (list = [[list copy] autorelease]) &&


	    [list.firstObject isEqual: strings[0]] &&
	    [OFListItemObject(OFListItemNext(list.firstListItem))
	    isEqual: strings[1]] &&

	    [list.lastObject isEqual: strings[2]])


	TEST(@"-[isEqual:]", [list isEqual: [[list copy] autorelease]])


	TEST(@"-[description]",



	    [list.description isEqual: @"[\n\tFoo,\n\tBar,\n\tBaz\n]"])




	TEST(@"-[objectEnumerator]", (enumerator = [list objectEnumerator]))


	iter = list.firstListItem;
	i = 0;



	ok = true;

	while ((object = [enumerator nextObject]) != nil) {

		if (![object isEqual: OFListItemObject(iter)])


			ok = false;


		iter = OFListItemNext(iter);
		i++;



	}


	if (list.count != i)
		ok = false;


	TEST(@"OFEnumerator's -[nextObject]", ok);


	[list removeListItem: list.firstListItem];

	EXPECT_EXCEPTION(@"Detection of mutation during enumeration",


	    OFEnumerationMutationException, [enumerator nextObject])

	[list prependObject: strings[0]];


	iter = list.firstListItem;
	i = 0;





	ok = true;



	for (OFString *object_ in list) {
		if (![object_ isEqual: OFListItemObject(iter)])
			ok = false;







		iter = OFListItemNext(iter);


		i++;










	}

	if (list.count != i)
		ok = false;

	TEST(@"Fast Enumeration", ok)


	ok = false;

	@try {
		for (OFString *object_ in list) {
			(void)object_;

			[list removeListItem: list.lastListItem];
		}
	} @catch (OFEnumerationMutationException *e) {
		ok = true;
	}

	TEST(@"Detection of mutation during Fast Enumeration", ok)

	objc_autoreleasePoolPop(pool);
}
@end







|
>

>
>
>
>
>
|
>
>
>
>
|
>
|
|
|
>
|
>
|
>
|
>
>
>
|
>
>
>
|
|
<
<
>
|
|
|
|
>
>

|
>

>
>
|
>
>
|
>
>
|
>
|
>
|
|
|
|
>
|
>

|
>
>
>
|
>
|
>
>
>
>
>
>
>
>
>
|
>
>
|
>
|
>
|
|
>
|
|
|
|

|
>
|
|
|
|
|
|
>
|
|
>

>
>
|
>
>

>
>
|
>
>
|
>
>
>
|
>
>
>

|
|
|
>
|
>
>

>
>
|
>
>
|
|
|
>
|
>
|
|
>
|
|
>
>
>
|
>
>
>
|
|
>
|
|
|
>
>
>
|
>
|
>
|
>
>
|
>
|
|
|
>
>
>
|
>

|
|
>
|
|
>
|
|
|
|
>
>
|
|
|
>
|
|
|
>
>
>
>
>
|
>
|
>
|
|
|
>
>
>

>
>
>
|
>
>
|
>
>
>
>
>
>
>
>
>
>
|
|
|
|
|
|
>
|
|
>

|
|
<
|


|


<
|
<


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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268

269
270
271
272
273
274

275

276
277
 * Public License, either version 2 or 3, which can be found in the file
 * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
 * file.
 */

#include "config.h"

#import "ObjFW.h"
#import "ObjFWTest.h"

@interface OFListTests: OTTestCase
{
	OFList *_list;
}
@end

@implementation OFListTests
- (void)setUp
{
	[super setUp];

	_list = [[OFList alloc] init];
	[_list appendObject: @"Foo"];
	[_list appendObject: @"Bar"];
	[_list appendObject: @"Baz"];
}

- (void)dealloc
{
	[_list release];

	[super dealloc];
}

- (void)testCount
{
	OTAssertEqual(_list.count, 3);
}

- (void)testAppendObject


{
	OFListItem item;

	[_list appendObject: @"Qux"];

	item = _list.firstListItem;
	OTAssertEqualObjects(OFListItemObject(item), @"Foo");

	item = OFListItemNext(item);
	OTAssertEqualObjects(OFListItemObject(item), @"Bar");

	item = OFListItemNext(item);
	OTAssertEqualObjects(OFListItemObject(item), @"Baz");

	item = OFListItemNext(item);
	OTAssertEqualObjects(OFListItemObject(item), @"Qux");

	item = OFListItemNext(item);
	OTAssertEqual(item, NULL);
}

- (void)testFirstListItem
{
	OTAssertEqualObjects(OFListItemObject(_list.firstListItem), @"Foo");
}

- (void)testFirstObject
{
	OTAssertEqualObjects(_list.firstObject, @"Foo");
}

- (void)testLastListItem
{
	OTAssertEqualObjects(OFListItemObject(_list.lastListItem), @"Baz");
}

- (void)testLastObject
{
	OTAssertEqualObjects(_list.lastObject, @"Baz");
}

- (void)testListItemNext
{
	OTAssertEqualObjects(
	    OFListItemObject(OFListItemNext(_list.firstListItem)), @"Bar");
}

- (void)testListItemPrevious
{
	OTAssertEqualObjects(
	    OFListItemObject(OFListItemPrevious(_list.lastListItem)), @"Bar");
}

- (void)testRemoveListItem
{
	OFListItem item;

	[_list removeListItem: OFListItemNext(_list.firstListItem)];

	item = _list.firstListItem;
	OTAssertEqualObjects(OFListItemObject(item), @"Foo");

	item = OFListItemNext(item);
	OTAssertEqualObjects(OFListItemObject(item), @"Baz");

	item = OFListItemNext(item);
	OTAssertEqual(item, NULL);
}

- (void)testInsertObjectBeforeListItem
{
	OFListItem item;

	[_list insertObject: @"Qux" beforeListItem: _list.lastListItem];

	item = _list.firstListItem;
	OTAssertEqualObjects(OFListItemObject(item), @"Foo");

	item = OFListItemNext(item);
	OTAssertEqualObjects(OFListItemObject(item), @"Bar");

	item = OFListItemNext(item);
	OTAssertEqualObjects(OFListItemObject(item), @"Qux");

	item = OFListItemNext(item);
	OTAssertEqualObjects(OFListItemObject(item), @"Baz");

	item = OFListItemNext(item);
	OTAssertEqual(item, NULL);
}

- (void)testInsertObjectAfterListItem
{
	OFListItem item;

	[_list insertObject: @"Qux" afterListItem: _list.firstListItem];

	item = _list.firstListItem;
	OTAssertEqualObjects(OFListItemObject(item), @"Foo");

	item = OFListItemNext(item);
	OTAssertEqualObjects(OFListItemObject(item), @"Qux");

	item = OFListItemNext(item);
	OTAssertEqualObjects(OFListItemObject(item), @"Bar");

	item = OFListItemNext(item);
	OTAssertEqualObjects(OFListItemObject(item), @"Baz");

	item = OFListItemNext(item);
	OTAssertEqual(item, NULL);
}

- (void)testContainsObject
{
	OTAssertTrue([_list containsObject: @"Foo"]);
	OTAssertFalse([_list containsObject: @"Qux"]);
}

- (void)testContainsObjectIdenticalTo
{
	OFString *foo = _list.firstObject;

	OTAssertTrue([_list containsObjectIdenticalTo: foo]);
	OTAssertFalse(
	    [_list containsObjectIdenticalTo: [[foo mutableCopy] autorelease]]);
}

- (void)testIsEqual
{
	OFList *list = [OFList list];

	[list appendObject: @"Foo"];
	[list appendObject: @"Bar"];
	[list appendObject: @"Baz"];

	OTAssertEqualObjects(list, _list);

	[list appendObject: @"Qux"];

	OTAssertNotEqualObjects(list, _list);
}

- (void)testHash
{
	OFList *list = [OFList list];

	[list appendObject: @"Foo"];
	[list appendObject: @"Bar"];
	[list appendObject: @"Baz"];

	OTAssertEqual(list.hash, _list.hash);

	[list appendObject: @"Qux"];

	OTAssertNotEqual(list.hash, _list.hash);
}

- (void)testCopy
{
	OTAssertEqualObjects([[_list copy] autorelease], _list);
}

- (void)testDescription
{
	OTAssertEqualObjects(_list.description, @"[\n\tFoo,\n\tBar,\n\tBaz\n]");
}

- (void)testEnumerator
{
	OFEnumerator *enumerator = [_list objectEnumerator];

	OTAssertEqualObjects([enumerator nextObject], @"Foo");
	OTAssertEqualObjects([enumerator nextObject], @"Bar");
	OTAssertEqualObjects([enumerator nextObject], @"Baz");
	OTAssertNil([enumerator nextObject]);
}

- (void)testDetectMutationDuringEnumeration
{
	OFEnumerator *enumerator = [_list objectEnumerator];

	[_list removeListItem: _list.firstListItem];

	OTAssertThrowsSpecific([enumerator nextObject],
	    OFEnumerationMutationException);
}

- (void)testFastEnumeration
{
	size_t i = 0;

	for (OFString *object in _list) {
		OTAssertLessThan(i, 3);

		switch (i++) {
		case 0:
			OTAssertEqualObjects(object, @"Foo");
			break;
		case 1:
			OTAssertEqualObjects(object, @"Bar");
			break;
		case 2:
			OTAssertEqualObjects(object, @"Baz");
			break;
		}
	}

	OTAssertEqual(i, 3);
}

- (void)testDetectMutationDuringFastEnumeration
{
	bool detected = false;

	@try {
		for (OFString *object in _list) {
			(void)object;

			[_list removeListItem: _list.firstListItem];
		}
	} @catch (OFEnumerationMutationException *e) {
		detected = true;
	}


	OTAssertTrue(detected);

}
@end

Modified tests/Makefile from [dd9695c4fc] to [0052f277ec].

11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
	${PROG_NOINST}.rpx
DISTCLEAN = Info.plist

PROG_NOINST = tests${PROG_SUFFIX}
STATIC_LIB_NOINST = ${TESTS_STATIC_LIB}
SRCS = OFDataTests.m			\
       OFDictionaryTests.m		\
       OFListTests.m			\
       OFMemoryStreamTests.m		\
       OFStreamTests.m			\
       OFValueTests.m			\
       OFXMLNodeTests.m			\
       OFXMLParserTests.m		\
       TestsAppDelegate.m








<







11
12
13
14
15
16
17

18
19
20
21
22
23
24
	${PROG_NOINST}.rpx
DISTCLEAN = Info.plist

PROG_NOINST = tests${PROG_SUFFIX}
STATIC_LIB_NOINST = ${TESTS_STATIC_LIB}
SRCS = OFDataTests.m			\
       OFDictionaryTests.m		\

       OFMemoryStreamTests.m		\
       OFStreamTests.m			\
       OFValueTests.m			\
       OFXMLNodeTests.m			\
       OFXMLParserTests.m		\
       TestsAppDelegate.m

Modified tests/TestsAppDelegate.h from [71616f115a] to [7fbacd34af].

63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
- (void)dataTests;
@end

@interface TestsAppDelegate (OFDictionaryTests)
- (void)dictionaryTests;
@end

@interface TestsAppDelegate (OFListTests)
- (void)listTests;
@end

@interface TestsAppDelegate  (OFMemoryStreamTests)
- (void)memoryStreamTests;
@end

@interface TestsAppDelegate (OFStreamTests)
- (void)streamTests;
@end







<
<
<
<







63
64
65
66
67
68
69




70
71
72
73
74
75
76
- (void)dataTests;
@end

@interface TestsAppDelegate (OFDictionaryTests)
- (void)dictionaryTests;
@end





@interface TestsAppDelegate  (OFMemoryStreamTests)
- (void)memoryStreamTests;
@end

@interface TestsAppDelegate (OFStreamTests)
- (void)streamTests;
@end

Modified tests/TestsAppDelegate.m from [5330eaa06d] to [29381a3f39].

368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
#if defined(OF_WII) && defined(OF_HAVE_FILES)
	[[OFFileManager defaultManager]
	    changeCurrentDirectoryPath: @"/apps/objfw-tests"];
#endif

	[self dataTests];
	[self dictionaryTests];
	[self listTests];
	[self valueTests];
	[self streamTests];
	[self memoryStreamTests];
	[self XMLParserTests];
	[self XMLNodeTests];

	[OFStdOut reset];







<







368
369
370
371
372
373
374

375
376
377
378
379
380
381
#if defined(OF_WII) && defined(OF_HAVE_FILES)
	[[OFFileManager defaultManager]
	    changeCurrentDirectoryPath: @"/apps/objfw-tests"];
#endif

	[self dataTests];
	[self dictionaryTests];

	[self valueTests];
	[self streamTests];
	[self memoryStreamTests];
	[self XMLParserTests];
	[self XMLNodeTests];

	[OFStdOut reset];