Comment: | Rename tests files so they are named after the category they implement. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
7bbce47bda00518f993b4d0633f6b34d |
User & Date: | js on 2010-04-07 21:06:16 |
Other Links: | manifest | tags |
2010-04-07
| ||
21:10 | Make glibc happy. check-in: f93fd1838d user: js tags: trunk | |
21:06 | Rename tests files so they are named after the category they implement. check-in: 7bbce47bda user: js tags: trunk | |
20:56 | Make tests an OFApplicationDelegate. check-in: 666d38f8be user: js tags: trunk | |
Modified configure.ac from [fea6d80c3f] to [0dd5d4b06d].
︙ | ︙ | |||
48 49 50 51 52 53 54 | @end ], [ Foo *foo = nil; [foo setBar: nil]; [foo bar]; ], [ AC_DEFINE(OF_HAVE_PROPERTIES, 1, [Compiler support for properties]) | | | 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | @end ], [ Foo *foo = nil; [foo setBar: nil]; [foo bar]; ], [ AC_DEFINE(OF_HAVE_PROPERTIES, 1, [Compiler support for properties]) AC_SUBST(PROPERTIESTESTS_M, "PropertiesTests.m") AC_MSG_RESULT(yes) ], [ AC_MSG_RESULT(no)]) AC_CHECK_HEADERS([objfw-rt.h objc/objc.h]) test x"$ac_cv_header_objfw_rt_h" = x"yes" && objc_runtime="ObjFW-RT" |
︙ | ︙ | |||
108 109 110 111 112 113 114 115 116 117 118 119 120 121 | AC_DEFINE(HAVE_OBJC_ENUMERATIONMUTATION, 1, [Whether we have objc_enumerationMutation])]) BUILDSYS_LIB AC_DEFINE_UNQUOTED(PLUGIN_SUFFIX, "$PLUGIN_SUFFIX", [Suffix for plugins]) if test x"$PLUGIN_SUFFIX" != "x"; then AC_SUBST(OFPLUGIN_M, "OFPlugin.m") AC_SUBST(TESTPLUGIN, "plugin") AC_DEFINE(OF_PLUGINS, 1, [Whether we have plugin support]) AC_SUBST(OFPLUGINS_DEF, "-DOF_PLUGINS") fi AC_C_BIGENDIAN([ AC_DEFINE(OF_BIG_ENDIAN, 1, [Whether we are big endian]) | > | 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | AC_DEFINE(HAVE_OBJC_ENUMERATIONMUTATION, 1, [Whether we have objc_enumerationMutation])]) BUILDSYS_LIB AC_DEFINE_UNQUOTED(PLUGIN_SUFFIX, "$PLUGIN_SUFFIX", [Suffix for plugins]) if test x"$PLUGIN_SUFFIX" != "x"; then AC_SUBST(OFPLUGIN_M, "OFPlugin.m") AC_SUBST(OFPLUGINTESTS_M, "OFPluginTests.m") AC_SUBST(TESTPLUGIN, "plugin") AC_DEFINE(OF_PLUGINS, 1, [Whether we have plugin support]) AC_SUBST(OFPLUGINS_DEF, "-DOF_PLUGINS") fi AC_C_BIGENDIAN([ AC_DEFINE(OF_BIG_ENDIAN, 1, [Whether we are big endian]) |
︙ | ︙ | |||
196 197 198 199 200 201 202 203 204 205 206 207 208 209 | ], [ AC_MSG_ERROR(No supported threads found!)]) ;; esac AC_DEFINE(OF_THREADS, 1, [Whether we have threads]) AC_SUBST(OFTHREAD_M, "OFThread.m") AC_SUBST(THREADING_H, "threading.h") AC_CHECK_FUNC(objc_sync_enter,, [ AC_SUBST(OBJC_SYNC_M, "objc_sync.m") AC_DEFINE(NEED_OBJC_SYNC_INIT, 1, [Whether objc_sync_init needs to be called])]) | > | 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 | ], [ AC_MSG_ERROR(No supported threads found!)]) ;; esac AC_DEFINE(OF_THREADS, 1, [Whether we have threads]) AC_SUBST(OFTHREAD_M, "OFThread.m") AC_SUBST(OFTHREADTESTS_M, "OFThreadTests.m") AC_SUBST(THREADING_H, "threading.h") AC_CHECK_FUNC(objc_sync_enter,, [ AC_SUBST(OBJC_SYNC_M, "objc_sync.m") AC_DEFINE(NEED_OBJC_SYNC_INIT, 1, [Whether objc_sync_init needs to be called])]) |
︙ | ︙ |
Modified extra.mk.in from [f586e93b1d] to [ea8c58d171].
1 2 3 4 5 6 7 8 9 10 | OBJFW_LIB_MAJOR = 2 OBJFW_LIB_MINOR = 0 OBJFW_LIB_MAJOR_MINOR = ${OBJFW_LIB_MAJOR}.${OBJFW_LIB_MINOR} ASPRINTF_M = @ASPRINTF_M@ ATOMIC_H = @ATOMIC_H@ OBJC_PROPERTIES_M = @OBJC_PROPERTIES_M@ OBJC_SYNC_M = @OBJC_SYNC_M@ OFPLUGIN_M = @OFPLUGIN_M@ OFTHREAD_M = @OFTHREAD_M@ | > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | OBJFW_LIB_MAJOR = 2 OBJFW_LIB_MINOR = 0 OBJFW_LIB_MAJOR_MINOR = ${OBJFW_LIB_MAJOR}.${OBJFW_LIB_MINOR} ASPRINTF_M = @ASPRINTF_M@ ATOMIC_H = @ATOMIC_H@ OBJC_PROPERTIES_M = @OBJC_PROPERTIES_M@ OBJC_SYNC_M = @OBJC_SYNC_M@ OFPLUGIN_M = @OFPLUGIN_M@ OFPLUGINTESTS_M = @OFPLUGINTESTS_M@ OFTHREAD_M = @OFTHREAD_M@ OFTHREADTESTS_M = @OFTHREADTESTS_M@ PROPERTIESTESTS_M = @PROPERTIESTESTS_M@ TESTPLUGIN = @TESTPLUGIN@ TESTS = @TESTS@ TEST_LAUNCHER = @TEST_LAUNCHER@ THREADING_H = @THREADING_H@ |
Modified tests/Makefile from [be540c194d] to [091f700834].
1 2 3 4 5 | include ../extra.mk SUBDIRS = ${TESTPLUGIN} PROG_NOINST = tests${PROG_SUFFIX} | | | | | | | | | | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | include ../extra.mk SUBDIRS = ${TESTPLUGIN} PROG_NOINST = tests${PROG_SUFFIX} SRCS = OFArrayTests.m \ OFDataArrayTests.m \ OFDictionaryTests.m \ OFHashesTests.m \ OFListTests.m \ OFNumberTests.m \ OFObjectTests.m \ ${OFPLUGINTESTS_M} \ OFStreamTests.m \ OFStringTests.m \ OFTCPSocketTests.m \ ${OFTHREADTESTS_M} \ OFXMLElementTests.m \ OFXMLParserTests.m \ ${PROPERTIES_TESTS_M} \ TestsAppDelegate.m IPHONE_USER = mobile IPHONE_TMP = /tmp/objfw-test .PHONY: run run-tests run-on-iphone run: all |
︙ | ︙ |
Deleted tests/OFArray.m version [004dd7f704].
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added tests/OFArrayTests.m version [004dd7f704].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 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 | /* * Copyright (c) 2008 - 2010 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #include "config.h" #import "OFArray.h" #import "OFAutoreleasePool.h" #import "OFString.h" #import "OFExceptions.h" #import "TestsAppDelegate.h" static OFString *module = @"OFArray"; static OFString *c_ary[] = { @"Foo", @"Bar", @"Baz", nil }; @implementation TestsAppDelegate (OFArrayTests) - (void)arrayTests { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFArray *a[3]; OFMutableArray *m[2]; OFEnumerator *enumerator; id obj; BOOL ok; size_t i; TEST(@"+[array]", (m[0] = [OFMutableArray array])) TEST(@"+[arrayWithObjects:]", (a[0] = [OFArray arrayWithObjects: @"Foo", @"Bar", @"Baz", nil])) TEST(@"+[arrayWithCArray:]", (a[1] = [OFArray arrayWithCArray: c_ary])) TEST(@"+[arrayWithCArray:length:]", (a[2] = [OFArray arrayWithCArray: c_ary length: 3]) && [a[2] isEqual: a[1]]) TEST(@"-[addObject:]", [m[0] addObject: c_ary[0]] && [m[0] addObject: c_ary[2]]) TEST(@"-[addObject:atIndex:]", [m[0] addObject: c_ary[1] atIndex: 1]) TEST(@"-[count]", [m[0] count] == 3 && [a[0] count] == 3 && [a[1] count] == 3) TEST(@"-[isEqual:]", [m[0] isEqual: a[0]] && [a[0] isEqual: a[1]]) TEST(@"-[objectAtIndex:]", [[m[0] objectAtIndex: 0] isEqual: c_ary[0]] && [[m[0] objectAtIndex: 1] isEqual: c_ary[1]] && [[m[0] objectAtIndex: 2] isEqual: c_ary[2]] && [[a[0] objectAtIndex: 0] isEqual: c_ary[0]] && [[a[0] objectAtIndex: 1] isEqual: c_ary[1]] && [[a[0] objectAtIndex: 2] isEqual: c_ary[2]] && [[a[1] objectAtIndex: 0] isEqual: c_ary[0]] && [[a[1] objectAtIndex: 1] isEqual: c_ary[1]] && [[a[1] objectAtIndex: 2] isEqual: c_ary[2]]) TEST(@"-[indexOfObject:]", [a[0] indexOfObject: c_ary[1]] == 1) TEST(@"-[indexOfObjectIdenticalTo:]", [a[1] indexOfObjectIdenticalTo: c_ary[1]] == 1) TEST(@"-[replaceObject:withObject:]", [m[0] replaceObject: c_ary[1] withObject: c_ary[0]] && [[m[0] objectAtIndex: 0] isEqual: c_ary[0]] && [[m[0] objectAtIndex: 1] isEqual: c_ary[0]] && [[m[0] objectAtIndex: 2] isEqual: c_ary[2]]) TEST(@"-[replaceObject:identicalTo:]", [m[0] replaceObjectIdenticalTo: c_ary[0] withObject: c_ary[1]] && [[m[0] objectAtIndex: 0] isEqual: c_ary[1]] && [[m[0] objectAtIndex: 1] isEqual: c_ary[1]] && [[m[0] objectAtIndex: 2] isEqual: c_ary[2]]) TEST(@"-[replaceObjectAtIndex:withObject:]", [m[0] replaceObjectAtIndex: 0 withObject: c_ary[0]] && [[m[0] objectAtIndex: 0] isEqual: c_ary[0]] && [[m[0] objectAtIndex: 1] isEqual: c_ary[1]] && [[m[0] objectAtIndex: 2] isEqual: c_ary[2]]) TEST(@"-[removeObject:]", [m[0] removeObject: c_ary[1]] && [m[0] count] == 2) TEST(@"-[removeObjectIdenticalTo:]", [m[0] removeObjectIdenticalTo: c_ary[2]] && [m[0] count] == 1) [m[0] addObject: c_ary[0]]; [m[0] addObject: c_ary[1]]; TEST(@"-[removeNObjects:]", [m[0] removeNObjects: 2] && [m[0] count] == 1 && [[m[0] objectAtIndex: 0] isEqual: c_ary[0]]) m[1] = [[a[0] mutableCopy] autorelease]; TEST(@"-[removeObjectAtIndex:]", [m[1] removeObjectAtIndex: 1] && [m[1] count] == 2 && [[m[1] objectAtIndex: 1] isEqual: c_ary[2]]) m[1] = [[a[0] mutableCopy] autorelease]; TEST(@"-[removeNObjects:atIndex:]", [m[1] removeNObjects: 2 atIndex: 0] && [m[1] count] == 1 && [[m[1] objectAtIndex: 0] isEqual: c_ary[2]]) EXPECT_EXCEPTION(@"Detect out of range in -[objectAtIndex:]", OFOutOfRangeException, [a[0] objectAtIndex: [a[0] count]]) EXPECT_EXCEPTION(@"Detect out of range in -[removeNItems:]", OFOutOfRangeException, [m[0] removeNObjects: [m[0] count] + 1]) TEST(@"-[componentsJoinedByString:]", (a[1] = [OFArray arrayWithObjects: @"foo", @"bar", @"baz", nil]) && [[a[1] componentsJoinedByString: @" "] isEqual: @"foo bar baz"] && (a[1] = [OFArray arrayWithObject: @"foo"]) && [[a[1] componentsJoinedByString: @" "] isEqual: @"foo"]) m[0] = [[a[0] mutableCopy] autorelease]; ok = YES; i = 0; TEST(@"-[enumerator]", (enumerator = [m[0] enumerator])) while ((obj = [enumerator nextObject]) != nil) { if (![obj isEqual: c_ary[i]]) ok = NO; [m[0] replaceObjectAtIndex: i withObject: @""]; i++; } TEST(@"OFEnumerator's -[nextObject]", ok) [enumerator reset]; [m[0] removeObjectAtIndex: 0]; EXPECT_EXCEPTION(@"Detection of mutation during enumeration", OFEnumerationMutationException, [enumerator nextObject]) #ifdef OF_HAVE_FAST_ENUMERATION m[0] = [[a[0] mutableCopy] autorelease]; ok = YES; i = 0; for (OFString *s in m[0]) { if (![s isEqual: c_ary[i]]) ok = NO; [m[0] replaceObjectAtIndex: i withObject: @""]; i++; } TEST(@"Fast Enumeration", ok) [m[0] replaceObjectAtIndex: 0 withObject: c_ary[0]]; [m[0] replaceObjectAtIndex: 1 withObject: c_ary[1]]; [m[0] replaceObjectAtIndex: 2 withObject: c_ary[2]]; ok = NO; @try { for (OFString *s in m[0]) [m[0] addObject: @""]; } @catch (OFEnumerationMutationException *e) { ok = YES; [e dealloc]; } TEST(@"Detection of mutation during Fast Enumeration", ok) [m[0] removeNObjects: 1]; #endif [pool drain]; } @end |
Deleted tests/OFDataArray.m version [106dfbcd0f].
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added tests/OFDataArrayTests.m version [106dfbcd0f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 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 | /* * Copyright (c) 2008 - 2010 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #include "config.h" #include <string.h> #import "OFDataArray.h" #import "OFAutoreleasePool.h" #import "OFString.h" #import "OFExceptions.h" #import "TestsAppDelegate.h" static OFString *module; const char *str = "Hello!"; @implementation TestsAppDelegate (OFDataArrayTests) - (void)dataArrayTestsWithClass: (Class)class { OFDataArray *array[4]; void *data[2]; Class other; TEST(@"+[dataArrayWithItemSize:]", (array[0] = [class dataArrayWithItemSize: 4096])) data[0] = [array[0] allocMemoryWithSize: 4096]; data[1] = [array[0] allocMemoryWithSize: 4096]; memset(data[0], 0xFF, 4096); memset(data[1], 0x42, 4096); TEST(@"-[addItem:]", [array[0] addItem: data[0]] && [array[0] addItem: data[1]]) TEST(@"-[itemAtIndex:]", !memcmp([array[0] itemAtIndex: 0], data[0], 4096) && !memcmp([array[0] itemAtIndex: 1], data[1], 4096)) TEST(@"-[lastItem]", !memcmp([array[0] lastItem], data[1], 4096)) TEST(@"-[count]", [array[0] count] == 2) other = (class == [OFDataArray class] ? [OFBigDataArray class] : [OFDataArray class]); TEST(@"-[isEqual:]", (array[1] = [other dataArrayWithItemSize: 4096]) && [array[1] addNItems: [array[0] count] fromCArray: [array[0] cArray]] && [array[1] isEqual: array[0]] && [array[1] removeNItems: 1] && ![array[0] isEqual: array[1]]) TEST(@"-[copy]", (array[1] = [[array[0] copy] autorelease]) && [array[0] isEqual: array[1]]) array[2] = [OFDataArray dataArrayWithItemSize: 1]; array[3] = [OFDataArray dataArrayWithItemSize: 1]; [array[2] addItem: "a"]; [array[2] addItem: "a"]; [array[3] addItem: "z"]; TEST(@"-[compare]", [array[0] compare: array[1]] == 0 && [array[1] removeNItems: 1] && [array[0] compare: array[1]] == OF_ORDERED_DESCENDING && [array[1] compare: array[0]] == OF_ORDERED_ASCENDING && [array[2] compare: array[3]] == OF_ORDERED_ASCENDING) TEST(@"-[hash]", [array[0] hash] == 0xC54621B6) array[0] = [class dataArrayWithItemSize: 1]; [array[0] addNItems: 6 fromCArray: "abcdef"]; TEST(@"-[removeNItems:]", [array[0] removeNItems: 1] && [array[0] count] == 5 && !memcmp([array[0] cArray], "abcde", 5)) TEST(@"-[removeNItems:atIndex:]", [array[0] removeNItems: 2 atIndex: 1] && [array[0] count] == 3 && !memcmp([array[0] cArray], "ade", 3)) TEST(@"-[addNItems:atIndex:]", [array[0] addNItems: 2 fromCArray: "bc" atIndex: 1] && [array[0] count] == 5 && !memcmp([array[0] cArray], "abcde", 5)) TEST(@"Building strings", (array[0] = [class dataArrayWithItemSize: 1]) && [array[0] addNItems: 6 fromCArray: (void*)str] && [array[0] addItem: ""] && !strcmp([array[0] cArray], str)) EXPECT_EXCEPTION(@"Detect out of range in -[itemAtIndex:]", OFOutOfRangeException, [array[0] itemAtIndex: [array[0] count]]) EXPECT_EXCEPTION(@"Detect out of range in -[addNItems:fromCArray:]", OFOutOfRangeException, [array[0] addNItems: SIZE_MAX fromCArray: NULL]) EXPECT_EXCEPTION(@"Detect out of range in -[removeNItems:]", OFOutOfRangeException, [array[0] removeNItems: [array[0] count] + 1]) } - (void)dataArrayTests { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; module = @"OFDataArray"; [self dataArrayTestsWithClass: [OFDataArray class]]; module = @"OFBigDataArray"; [self dataArrayTestsWithClass: [OFBigDataArray class]]; [pool drain]; } @end |
Deleted tests/OFDictionary.m version [3031e7357f].
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added tests/OFDictionaryTests.m version [3031e7357f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 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 | /* * Copyright (c) 2008 - 2010 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #include "config.h" #import "OFDictionary.h" #import "OFArray.h" #import "OFAutoreleasePool.h" #import "OFString.h" #import "OFExceptions.h" #import "TestsAppDelegate.h" static OFString *module = @"OFDictionary"; static OFString *keys[] = { @"key1", @"key2" }; static OFString *values[] = { @"value1", @"value2" }; @implementation TestsAppDelegate (OFDictionaryTests) - (void)dictionaryTests { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFMutableDictionary *dict = [OFMutableDictionary dictionary], *dict2; OFEnumerator *key_enum, *obj_enum; OFArray *akeys, *avalues; [dict setObject: values[0] forKey: keys[0]]; [dict setObject: values[1] forKey: keys[1]]; TEST(@"-[objectForKey:]", [[dict objectForKey: keys[0]] isEqual: values[0]] && [[dict objectForKey: keys[1]] isEqual: values[1]] && [dict objectForKey: @"key3"] == nil) TEST(@"-[keyEnumerator]", (key_enum = [dict keyEnumerator])) TEST(@"-[objectEnumerator]", (obj_enum = [dict objectEnumerator])) TEST(@"OFEnumerator's -[nextObject]", [[key_enum nextObject] isEqual: keys[0]] && [[obj_enum nextObject] isEqual: values[0]] && [[key_enum nextObject] isEqual: keys[1]] && [[obj_enum nextObject] isEqual: values[1]] && [key_enum nextObject] == nil && [obj_enum nextObject] == nil) [key_enum reset]; [dict removeObjectForKey: keys[0]]; EXPECT_EXCEPTION(@"Detection of mutation during enumeration", OFEnumerationMutationException, [key_enum nextObject]); [dict setObject: values[0] forKey: keys[0]]; #ifdef OF_HAVE_FAST_ENUMERATION size_t i = 0; BOOL ok = YES; for (OFString *key in dict) { if (![key isEqual: keys[i]]) ok = NO; [dict setObject: [dict objectForKey: key] forKey: key]; i++; } TEST(@"Fast Enumeration", ok) ok = NO; @try { for (OFString *key in dict) [dict setObject: @"" forKey: @""]; } @catch (OFEnumerationMutationException *e) { ok = YES; [e dealloc]; } TEST(@"Detection of mutation during Fast Enumeration", ok) [dict removeObjectForKey: @""]; #endif TEST(@"-[count]", [dict count] == 2) TEST(@"+[dictionaryWithKeysAndObjects:]", (dict = [OFDictionary dictionaryWithKeysAndObjects: @"foo", @"bar", @"baz", @"qux", nil]) && [[dict objectForKey: @"foo"] isEqual: @"bar"] && [[dict objectForKey: @"baz"] isEqual: @"qux"]) TEST(@"+[dictionaryWithObject:forKey:]", (dict = [OFDictionary dictionaryWithObject: @"bar" forKey: @"foo"]) && [[dict objectForKey: @"foo"] isEqual: @"bar"]) akeys = [OFArray arrayWithObjects: keys[0], keys[1], nil]; avalues = [OFArray arrayWithObjects: values[0], values[1], nil]; TEST(@"+[dictionaryWithObjects:forKeys:]", (dict = [OFDictionary dictionaryWithObjects: avalues forKeys: akeys]) && [[dict objectForKey: keys[0]] isEqual: values[0]] && [[dict objectForKey: keys[1]] isEqual: values[1]]) TEST(@"-[copy]", (dict = [[dict copy] autorelease]) && [[dict objectForKey: keys[0]] isEqual: values[0]] && [[dict objectForKey: keys[1]] isEqual: values[1]]) dict2 = dict; TEST(@"-[mutableCopy]", (dict = [[dict mutableCopy] autorelease]) && [dict count] == [dict2 count] && [[dict objectForKey: keys[0]] isEqual: values[0]] && [[dict objectForKey: keys[1]] isEqual: values[1]] && [dict setObject: @"value3" forKey: @"key3"] && [[dict objectForKey: @"key3"] isEqual: @"value3"] && [dict setObject: @"foo" forKey: keys[0]] && [[dict objectForKey: keys[0]] isEqual: @"foo"]) TEST(@"-[removeObjectForKey:]", [dict removeObjectForKey: keys[0]] && [dict objectForKey: keys[0]] == nil) [dict setObject: @"foo" forKey: keys[0]]; TEST(@"-[isEqual:]", ![dict isEqual: dict2] && [dict removeObjectForKey: @"key3"] && ![dict isEqual: dict2] && [dict setObject: values[0] forKey: keys[0]] && [dict isEqual: dict2]) [pool drain]; } @end |
Deleted tests/OFHashes.m version [9cfde3ad08].
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added tests/OFHashesTests.m version [9cfde3ad08].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 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 | /* * Copyright (c) 2008 - 2010 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #include "config.h" #include <string.h> #import "OFHashes.h" #import "OFFile.h" #import "OFAutoreleasePool.h" #import "OFString.h" #import "OFExceptions.h" #import "TestsAppDelegate.h" static OFString *module = @"OFHashes"; const uint8_t testfile_md5[OF_MD5_DIGEST_SIZE] = "\x00\x8B\x9D\x1B\x58\xDF\xF8\xFE\xEE\xF3\xAE\x8D\xBB\x68\x2D\x38"; const uint8_t testfile_sha1[OF_SHA1_DIGEST_SIZE] = "\xC9\x9A\xB8\x7E\x1E\xC8\xEC\x65\xD5\xEB\xE4\x2E\x0D\xA6\x80\x96\xF5" "\x94\xE7\x17"; @implementation TestsAppDelegate (OFHashesTests) - (void)hashesTests { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFMD5Hash *md5; OFSHA1Hash *sha1; OFFile *f = [OFFile fileWithPath: @"testfile" mode: @"rb"]; TEST(@"+[md5Hash]", (md5 = [OFMD5Hash md5Hash])) TEST(@"+[sha1Hash]", (sha1 = [OFSHA1Hash sha1Hash])) while (![f atEndOfStream]) { char buf[64]; size_t len = [f readNBytes: 64 intoBuffer: buf]; [md5 updateWithBuffer: buf ofSize: len]; [sha1 updateWithBuffer: buf ofSize: len]; } [f close]; TEST(@"-[digest]", !memcmp([md5 digest], testfile_md5, OF_MD5_DIGEST_SIZE) && !memcmp([sha1 digest], testfile_sha1, OF_MD5_DIGEST_SIZE)) EXPECT_EXCEPTION(@"Detect invalid call of -[updateWithBuffer] #1", OFHashAlreadyCalculatedException, [md5 updateWithBuffer: "" ofSize: 1]) EXPECT_EXCEPTION(@"Detect invalid call of -[updateWithBuffer] #2", OFHashAlreadyCalculatedException, [sha1 updateWithBuffer: "" ofSize: 1]) [pool drain]; } @end |
Deleted tests/OFList.m version [20f31495db].
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added tests/OFListTests.m version [20f31495db].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 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 | /* * Copyright (c) 2008 - 2010 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #include "config.h" #import "OFList.h" #import "OFAutoreleasePool.h" #import "OFString.h" #import "OFExceptions.h" #import "TestsAppDelegate.h" static OFString *module = @"OFList"; static OFString *strings[] = { @"Foo", @"Bar", @"Baz" }; @implementation TestsAppDelegate (OFListTests) - (void)listTests { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFList *list; TEST(@"+[list]", (list = [OFList list])) TEST(@"-[append:]", [list append: strings[0]] && [list append: strings[1]] && [list append: strings[2]]) TEST(@"-[first]", [[list first]->object isEqual: strings[0]]) TEST(@"-[first]->next", [[list first]->next->object isEqual: strings[1]]) TEST(@"-[last]", [[list last]->object isEqual: strings[2]]) TEST(@"-[last]->prev", [[list last]->prev->object isEqual: strings[1]]) TEST(@"-[remove:]", [list remove: [list last]] && [[list last]->object isEqual: strings[1]] && [list remove: [list first]] && [[list first]->object isEqual: [list last]->object]) TEST(@"-[insert:before:]", [list insert: strings[0] before: [list last]] && [[list last]->prev->object isEqual: strings[0]]) TEST(@"-[insert:after:]", [list insert: strings[2] after: [list first]->next] && [[list last]->object isEqual: strings[2]]) TEST(@"-[count]", [list count] == 3) TEST(@"-[copy]", (list = [[list copy] autorelease]) && [[list first]->object isEqual: strings[0]] && [[list first]->next->object isEqual: strings[1]] && [[list last]->object isEqual: strings[2]]) TEST(@"-[isEqual:]", [list isEqual: [[list copy] autorelease]]) [pool drain]; } @end |
Deleted tests/OFNumber.m version [389ac325a5].
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added tests/OFNumberTests.m version [389ac325a5].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 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 | /* * Copyright (c) 2008 - 2010 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #include "config.h" #import "OFString.h" #import "OFNumber.h" #import "OFAutoreleasePool.h" #import "TestsAppDelegate.h" static OFString *module = @"OFNumber"; @implementation TestsAppDelegate (OFNumberTests) - (void)numberTests { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFNumber *num; TEST(@"+[numberWithIntMax:]", (num = [OFNumber numberWithIntMax: 123456789])) TEST(@"-[isEqual:]", [num isEqual: [OFNumber numberWithUInt32: 123456789]]) TEST(@"-[hash]", [num hash] == 123456789) TEST(@"-[asDouble]", [num asDouble] == 123456789.L) TEST(@"-[decrease]", [[num decrease] isEqual: [OFNumber numberWithInt32: 123456788]]) TEST(@"-[divideBy:]", [[num divideBy: [OFNumber numberWithInt: 2]] asInt] == 61728394) TEST(@"-[xor:]", [[num xor: [OFNumber numberWithInt: 123456831]] asInt] == 42) TEST(@"-[shiftRight:]", [[num shiftRight: [OFNumber numberWithInt: 8]] asInt] == 482253) [pool drain]; } @end |
Deleted tests/OFObject.m version [d56cd335e9].
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added tests/OFObjectTests.m version [d56cd335e9].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 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 | /* * Copyright (c) 2008 - 2010 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #include "config.h" #import "OFString.h" #import "OFAutoreleasePool.h" #import "OFExceptions.h" #import "TestsAppDelegate.h" static OFString *module = @"OFObject"; @implementation TestsAppDelegate (OFObjectTests) - (void)objectTests { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFObject *obj = [[[OFObject alloc] init] autorelease]; void *p, *q, *r; EXPECT_EXCEPTION(@"Detect freeing of memory not allocated by object", OFMemoryNotPartOfObjectException, [obj freeMemory: (void*)1]) TEST(@"Allocating 4096 bytes", (p = [obj allocMemoryWithSize: 4096]) != NULL) TEST(@"Freeing memory", [obj freeMemory: p]) EXPECT_EXCEPTION(@"Detect freeing of memory twice", OFMemoryNotPartOfObjectException, [obj freeMemory: p]) TEST(@"Allocating and freeing 4096 bytes 3 times", (p = [obj allocMemoryWithSize: 4096]) != NULL && (q = [obj allocMemoryWithSize: 4096]) != NULL && (r = [obj allocMemoryWithSize: 4096]) != NULL && [obj freeMemory: p] && [obj freeMemory: q] && [obj freeMemory: r]) EXPECT_EXCEPTION(@"Detect out of memory on alloc", OFOutOfMemoryException, [obj allocMemoryWithSize: SIZE_MAX]) EXPECT_EXCEPTION(@"Detect out of memory on resize", OFOutOfMemoryException, { p = [obj allocMemoryWithSize: 1]; [obj resizeMemory: p toSize: SIZE_MAX]; }) [obj freeMemory: p]; TEST(@"Allocate when trying to resize NULL", (p = [obj resizeMemory: NULL toSize: 1024]) != NULL) [obj freeMemory: p]; EXPECT_EXCEPTION(@"Detect resizing of memory not allocated by object", OFMemoryNotPartOfObjectException, [obj resizeMemory: (void*)1 toSize: 1024]) [pool drain]; } @end |
Deleted tests/OFPlugin.m version [964d21d8c4].
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added tests/OFPluginTests.m version [964d21d8c4].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 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 | /* * Copyright (c) 2008 - 2010 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #include "config.h" #import "OFPlugin.h" #import "OFAutoreleasePool.h" #import "OFString.h" #import "OFExceptions.h" #import "TestsAppDelegate.h" #import "plugin/TestPlugin.h" static OFString *module = @"OFPlugin"; @implementation TestsAppDelegate (OFPluginTests) - (void)pluginTests { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; TestPlugin *plugin; TEST(@"+[pluginFromFile:]", (plugin = [OFPlugin pluginFromFile: @"plugin/TestPlugin"])) TEST(@"TestPlugin's -[test:]", [plugin test: 1234] == 2468) [pool drain]; } @end |
Deleted tests/OFStream.m version [f89e698465].
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added tests/OFStreamTests.m version [f89e698465].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 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 | /* * Copyright (c) 2008 - 2010 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #include "config.h" #include <string.h> #import "OFString.h" #import "OFStream.h" #import "OFAutoreleasePool.h" #import "TestsAppDelegate.h" static OFString *module = @"OFStream"; @interface StreamTester: OFStream { int state; } @end @implementation StreamTester - (BOOL)atEndOfStreamWithoutCache { return (state > 1 ? YES : NO); } - (size_t)readNBytesWithoutCache: (size_t)size intoBuffer: (char*)buf { switch (state) { case 0: if (size < 1) return 0; memcpy(buf, "f", 1); state++; return 1; case 1: if (size < of_pagesize) return 0; memcpy(buf, "oo\n", 3); memset(buf + 3, 'X', of_pagesize - 3); state++; return of_pagesize; } return 0; } @end @implementation TestsAppDelegate (OFStreamTests) - (void)streamTests { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; StreamTester *t = [[[StreamTester alloc] init] autorelease]; OFString *str; char *cstr; cstr = [t allocMemoryWithSize: of_pagesize - 2]; memset(cstr, 'X', of_pagesize - 3); cstr[of_pagesize - 3] = '\0'; TEST(@"-[readLine]", [[t readLine] isEqual: @"foo"] && [(str = [t readLine]) length] == of_pagesize - 3 && !strcmp([str cString], cstr)) [pool drain]; } @end |
Deleted tests/OFString.m version [ac7e540eac].
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added tests/OFStringTests.m version [ac7e540eac].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 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 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 | /* * Copyright (c) 2008 - 2010 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #include "config.h" #import "OFString.h" #import "OFArray.h" #import "OFAutoreleasePool.h" #import "OFExceptions.h" #import "TestsAppDelegate.h" static OFString *module = @"OFString"; static OFString* whitespace[] = { @" \r \t\n\t \tasd \t \t\t\r\n", @" \t\t \t\t \t \t" }; @interface EntityHandler: OFObject <OFXMLUnescapingDelegate> @end @implementation EntityHandler - (OFString*)foundUnknownEntityNamed: (OFString*)entity { if ([entity isEqual: @"foo"]) return @"bar"; return nil; } @end @implementation TestsAppDelegate (OFStringTests) - (void)stringTests { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFMutableString *s[3]; OFArray *a; int i; EntityHandler *h; s[0] = [OFMutableString stringWithString: @"täs€"]; s[1] = [OFMutableString string]; s[2] = [[s[0] copy] autorelease]; TEST(@"-[isEqual:]", [s[0] isEqual: s[2]] && ![s[0] isEqual: [[[OFObject alloc] init] autorelease]]) TEST(@"-[compare:]", [s[0] compare: s[2]] == OF_ORDERED_SAME && [s[0] compare: @""] != OF_ORDERED_SAME && [@"" compare: @"a"] == OF_ORDERED_ASCENDING && [@"a" compare: @"b"] == OF_ORDERED_ASCENDING && [@"cd" compare: @"bc"] == OF_ORDERED_DESCENDING && [@"ä" compare: @"ö"] == OF_ORDERED_ASCENDING && [@"€" compare: @"ß"] == OF_ORDERED_DESCENDING && [@"aa" compare: @"z"] == OF_ORDERED_ASCENDING) TEST(@"-[caseInsensitiveCompare:]", [@"a" caseInsensitiveCompare: @"A"] == OF_ORDERED_SAME && [@"Ä" caseInsensitiveCompare: @"ä"] == OF_ORDERED_SAME && [@"я" caseInsensitiveCompare: @"Я"] == OF_ORDERED_SAME && [@"€" caseInsensitiveCompare: @"ß"] == OF_ORDERED_DESCENDING && [@"ß" caseInsensitiveCompare: @"→"] == OF_ORDERED_ASCENDING && [@"AA" caseInsensitiveCompare: @"z"] == OF_ORDERED_ASCENDING) TEST(@"-[hash] is the same if -[isEqual:] is YES", [s[0] hash] == [s[2] hash]) TEST(@"-[appendString:] and -[appendCString:]", [s[1] appendCString: "1𝄞"] && [s[1] appendString: @"3"] && [[s[0] appendString: s[1]] isEqual: @"täs€1𝄞3"]) TEST(@"-[length]", [s[0] length] == 7) TEST(@"-[cStringLength]", [s[0] cStringLength] == 13) TEST(@"-[hash]", [s[0] hash] == 0x8AC1EEF6) TEST(@"-[characterAtIndex:]", [s[0] characterAtIndex: 0] == 't' && [s[0] characterAtIndex: 1] == 0xE4 && [s[0] characterAtIndex: 3] == 0x20AC && [s[0] characterAtIndex: 5] == 0x1D11E) EXPECT_EXCEPTION(@"Detect out of range in -[characterAtIndex:]", OFOutOfRangeException, [s[0] characterAtIndex: 7]) TEST(@"-[reverse]", [[s[0] reverse] isEqual: @"3𝄞1€sät"]) s[1] = [OFMutableString stringWithString: @"abc"]; TEST(@"-[upper]", [[s[0] upper] isEqual: @"3𝄞1€SÄT"] && [[s[1] upper] isEqual: @"ABC"]) TEST(@"-[lower]", [[s[0] lower] isEqual: @"3𝄞1€sät"] && [[s[1] lower] isEqual: @"abc"]) TEST(@"+[stringWithCString:length:]", (s[0] = [OFMutableString stringWithCString: "foobar" length: 3]) && [s[0] isEqual: @"foo"]) TEST(@"-[appendCStringWithLength:]", [[s[0] appendCString: "foobarqux" + 3 withLength: 3] isEqual: @"foobar"]) EXPECT_EXCEPTION(@"Detection of invalid UTF-8 encoding #1", OFInvalidEncodingException, [OFString stringWithCString: "\xE0\x80"]) EXPECT_EXCEPTION(@"Detection of invalid UTF-8 encoding #2", OFInvalidEncodingException, [OFString stringWithCString: "\xF0\x80\x80\xC0"]) TEST(@"-[reverse] on UTF-8 strings", (s[0] = [[OFMutableString stringWithCString: "äöü€𝄞"] reverse]) && [s[0] isEqual: @"𝄞€üöä"]) TEST(@"Conversion of ISO 8859-1 to UTF-8", [[OFString stringWithCString: "\xE4\xF6\xFC" encoding: OF_STRING_ENCODING_ISO_8859_1] isEqual: @"äöü"]) TEST(@"Conversion of ISO 8859-15 to UTF-8", [[OFString stringWithCString: "\xA4\xA6\xA8\xB4\xB8\xBC\xBD\xBE" encoding: OF_STRING_ENCODING_ISO_8859_15] isEqual: @"€ŠšŽžŒœŸ"]) TEST(@"Conversion of Windows 1252 to UTF-8", [[OFString stringWithCString: "\x80\x82\x83\x84\x85\x86\x87\x88" "\x89\x8A\x8B\x8C\x8E\x91\x92\x93" "\x94\x95\x96\x97\x98\x99\x9A\x9B" "\x9C\x9E\x9F" encoding: OF_STRING_ENCODING_WINDOWS_1252] isEqual: @"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ"]) TEST(@"+[stringWithFormat:]", [(s[0] = [OFMutableString stringWithFormat: @"%s: %d", "test", 123]) isEqual: @"test: 123"]) TEST(@"-[appendFormat:]", [([s[0] appendFormat: @"%02X", 15]) isEqual: @"test: 1230F"]) TEST(@"-[indexOfFirstOccurrenceOfString:]", [@"𝄞öö" indexOfFirstOccurrenceOfString: @"öö"] == 1 && [@"𝄞öö" indexOfFirstOccurrenceOfString: @"ö"] == 1 && [@"𝄞öö" indexOfFirstOccurrenceOfString: @"𝄞"] == 0 && [@"𝄞öö" indexOfFirstOccurrenceOfString: @"x"] == SIZE_MAX) TEST(@"-[indexOfLastOccurrenceOfString:]", [@"𝄞öö" indexOfLastOccurrenceOfString: @"öö"] == 1 && [@"𝄞öö" indexOfLastOccurrenceOfString: @"ö"] == 2 && [@"𝄞öö" indexOfLastOccurrenceOfString: @"𝄞"] == 0 && [@"𝄞öö" indexOfLastOccurrenceOfString: @"x"] == SIZE_MAX) TEST(@"-[substringFromIndexToIndex:]", [[@"𝄞öö" substringFromIndex: 1 toIndex: 2] isEqual: @"ö"] && [[@"𝄞öö" substringFromIndex: 3 toIndex: 3] isEqual: @""]) EXPECT_EXCEPTION(@"Detect out of range in " @"-[substringFromIndex:toIndex:] #1", OFOutOfRangeException, [@"𝄞öö" substringFromIndex: 2 toIndex: 4]) EXPECT_EXCEPTION(@"Detect out of range in " @"-[substringFromIndex:toIndex:] #2", OFOutOfRangeException, [@"𝄞öö" substringFromIndex: 4 toIndex: 4]) EXPECT_EXCEPTION(@"Detect start > end in " @"-[substringFromIndex:toIndex:]", OFInvalidArgumentException, [@"𝄞öö" substringFromIndex: 2 toIndex: 0]) TEST(@"-[stringByAppendingString:]", [[@"foo" stringByAppendingString: @"bar"] isEqual: @"foobar"]) TEST(@"-[hasPrefix:]", [@"foobar" hasPrefix: @"foo"] && ![@"foobar" hasPrefix: @"foobar0"]) TEST(@"-[hasSuffix:]", [@"foobar" hasSuffix: @"bar"] && ![@"foobar" hasSuffix: @"foobar0"]) i = 0; TEST(@"-[componentsSeparatedByString:]", (a = [@"fooXXbarXXXXbazXXXX" componentsSeparatedByString: @"XX"]) && [[a objectAtIndex: i++] isEqual: @"foo"] && [[a objectAtIndex: i++] isEqual: @"bar"] && [[a objectAtIndex: i++] isEqual: @""] && [[a objectAtIndex: i++] isEqual: @"baz"] && [[a objectAtIndex: i++] isEqual: @""] && [[a objectAtIndex: i++] isEqual: @""]) TEST(@"-[decimalValueAsInteger]", [@"1234" decimalValueAsInteger] == 1234 && [@"-500" decimalValueAsInteger] == -500 && [@"" decimalValueAsInteger] == 0) TEST(@"-[hexadecimalValueAsInteger]", [@"123f" hexadecimalValueAsInteger] == 0x123f && [@"0xABcd" hexadecimalValueAsInteger] == 0xABCD && [@"xbCDE" hexadecimalValueAsInteger] == 0xBCDE && [@"$CdEf" hexadecimalValueAsInteger] == 0xCDEF && [@"" hexadecimalValueAsInteger] == 0) EXPECT_EXCEPTION(@"Detect invalid characters in " @"-[decimalValueAsInteger] #1", OFInvalidEncodingException, [@"abc" decimalValueAsInteger]) EXPECT_EXCEPTION(@"Detect invalid characters in " @"-[decimalValueAsInteger] #2", OFInvalidEncodingException, [@"0a" decimalValueAsInteger]) EXPECT_EXCEPTION(@"Detect invalid chars in " @"-[hexadecimalValueAsInteger] #1", OFInvalidEncodingException, [@"0xABCDEFG" hexadecimalValueAsInteger]) EXPECT_EXCEPTION(@"Detect invalid chars in " @"-[hexadecimalValueAsInteger] #2", OFInvalidEncodingException, [@"0x" hexadecimalValueAsInteger]) EXPECT_EXCEPTION(@"Detect invalid chars in " @"-[hexadecimalValueAsInteger] #3", OFInvalidEncodingException, [@"$" hexadecimalValueAsInteger]) EXPECT_EXCEPTION(@"Detect out of range in -[decimalValueAsInteger", OFOutOfRangeException, [@"12345678901234567890123456789012345678901234567890" @"12345678901234567890123456789012345678901234567890" decimalValueAsInteger]) EXPECT_EXCEPTION(@"Detect out of range in -[hexadecilamValueAsInteger", OFOutOfRangeException, [@"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF" @"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF" hexadecimalValueAsInteger]) TEST(@"-[md5Hash]", [[@"asdfoobar" md5Hash] isEqual: @"184dce2ec49b5422c7cfd8728864db4c"]) TEST(@"-[sha1Hash]", [[@"asdfoobar" sha1Hash] isEqual: @"f5f81ac0a8b5cbfdc4585ec1ad32e7b3a12b9b49"]) TEST(@"-[stringByURLEncoding]", [[@"foo\"ba'_~$" stringByURLEncoding] isEqual: @"foo%22ba%27_~%24"]) TEST(@"-[stringByURLDecoding]", [[@"foo%20bar%22+%24" stringByURLDecoding] isEqual: @"foo bar\" $"]) EXPECT_EXCEPTION(@"Detect invalid encoding in -[stringByURLDecoding] " @"#1", OFInvalidEncodingException, [@"foo%bar" stringByURLDecoding]) EXPECT_EXCEPTION(@"Detect invalid encoding in -[stringByURLDecoding] " @"#2", OFInvalidEncodingException, [@"foo%FFbar" stringByURLDecoding]) TEST(@"-[removeCharactersFromIndex:toIndex:]", (s[0] = [OFMutableString stringWithString: @"𝄞öööbä€"]) && [s[0] removeCharactersFromIndex: 1 toIndex: 4] && [s[0] isEqual: @"𝄞bä€"] && [s[0] removeCharactersFromIndex: 0 toIndex: 4] && [s[0] isEqual: @""]) EXPECT_EXCEPTION(@"Detect OoR in " @"-[removeCharactersFromIndex:toIndex:] #1", OFOutOfRangeException, { s[0] = [OFMutableString stringWithString: @"𝄞öö"]; [s[0] substringFromIndex: 2 toIndex: 4]; }) EXPECT_EXCEPTION(@"Detect OoR in " @"-[removeCharactersFromIndex:toIndex:] #2", OFOutOfRangeException, [s[0] substringFromIndex: 4 toIndex: 4]) EXPECT_EXCEPTION(@"Detect s > e in " @"-[removeCharactersFromIndex:toIndex:]", OFInvalidArgumentException, [s[0] substringFromIndex: 2 toIndex: 0]) TEST(@"-[replaceOccurrencesOfString:withString:]", [[[OFMutableString stringWithString: @"asd fo asd fofo asd"] replaceOccurrencesOfString: @"fo" withString: @"foo"] isEqual: @"asd foo asd foofoo asd"] && [[[OFMutableString stringWithString: @"XX"] replaceOccurrencesOfString: @"X" withString: @"XX"] isEqual: @"XXXX"]) TEST(@"-[removeLeadingWhitespaces]", (s[0] = [OFMutableString stringWithString: whitespace[0]]) && [[s[0] removeLeadingWhitespaces] isEqual: @"asd \t \t\t\r\n"] && (s[0] = [OFMutableString stringWithString: whitespace[1]]) && [[s[0] removeLeadingWhitespaces] isEqual: @""]) TEST(@"-[removeTrailingWhitespaces]", (s[0] = [OFMutableString stringWithString: whitespace[0]]) && [[s[0] removeTrailingWhitespaces] isEqual: @" \r \t\n\t \tasd"] && (s[0] = [OFMutableString stringWithString: whitespace[1]]) && [[s[0] removeTrailingWhitespaces] isEqual: @""]) TEST(@"-[removeLeadingAndTrailingWhitespaces]", (s[0] = [OFMutableString stringWithString: whitespace[0]]) && [[s[0] removeLeadingAndTrailingWhitespaces] isEqual: @"asd"] && (s[0] = [OFMutableString stringWithString: whitespace[1]]) && [[s[0] removeLeadingAndTrailingWhitespaces] isEqual: @""]) TEST(@"-[stringByXMLEscaping]", (s[0] = [@"<hello> &world'\"!&" stringByXMLEscaping]) && [s[0] isEqual: @"<hello> &world'"!&"]) TEST(@"-[stringByXMLUnescaping]", [[s[0] stringByXMLUnescaping] isEqual: @"<hello> &world'\"!&"] && [[@"y" stringByXMLUnescaping] isEqual: @"y"] && [[@"ä" stringByXMLUnescaping] isEqual: @"ä"] && [[@"€" stringByXMLUnescaping] isEqual: @"€"] && [[@"𝄞" stringByXMLUnescaping] isEqual: @"𝄞"]) EXPECT_EXCEPTION(@"Detect invalid entities in -[stringByXMLUnescaping] " @"#1", OFInvalidEncodingException, [@"&foo;" stringByXMLUnescaping]) EXPECT_EXCEPTION(@"Detect invalid entities in -[stringByXMLUnescaping] " @"#2", OFInvalidEncodingException, [@"x&" stringByXMLUnescaping]) EXPECT_EXCEPTION(@"Detect invalid entities in -[stringByXMLUnescaping] " @"#3", OFInvalidEncodingException, [@"&#;" stringByXMLUnescaping]) EXPECT_EXCEPTION(@"Detect invalid entities in -[stringByXMLUnescaping] " @"#4", OFInvalidEncodingException, [@"&#x;" stringByXMLUnescaping]) EXPECT_EXCEPTION(@"Detect invalid entities in -[stringByXMLUnescaping] " @"#5", OFInvalidEncodingException, [@"&#g;" stringByXMLUnescaping]) EXPECT_EXCEPTION(@"Detect invalid entities in -[stringByXMLUnescaping] " @"#6", OFInvalidEncodingException, [@"&#xg;" stringByXMLUnescaping]) TEST(@"-[stringByXMLUnescapingWithHandler:]", (h = [[[EntityHandler alloc] init] autorelease]) && (s[0] = [@"x&foo;y" stringByXMLUnescapingWithHandler: h]) && [s[0] isEqual: @"xbary"]) [pool drain]; } @end |
Deleted tests/OFTCPSocket.m version [0def59b121].
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added tests/OFTCPSocketTests.m version [0def59b121].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 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 | /* * Copyright (c) 2008 - 2010 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #include "config.h" #include <stdlib.h> #include <string.h> #include <time.h> #import "OFTCPSocket.h" #import "OFAutoreleasePool.h" #import "OFString.h" #import "OFExceptions.h" #import "macros.h" #import "TestsAppDelegate.h" static OFString *module = @"OFTCPSocket"; @implementation TestsAppDelegate (OFTCPSocketTests) - (void)TCPSocketTests { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFTCPSocket *server, *client = nil, *accepted; OFString *service, *msg; uint16_t port; char buf[6]; srand(time(NULL)); port = (uint16_t)rand(); if (port < 1024) port += 1024; service = [OFString stringWithFormat: @"%d", port]; TEST(@"+[socket]", (server = [OFTCPSocket socket]) && (client = [OFTCPSocket socket])) msg = [OFString stringWithFormat: @"-[bindService:onNode:withFamily:] (port %d)", port]; TEST(msg, [server bindService: service onNode: @"localhost" withFamily: AF_INET]) TEST(@"-[listen]", [server listen]) TEST(@"-[connectToService:onNode:]", [client connectToService: service onNode: @"localhost"]) TEST(@"-[accept]", (accepted = [server accept])) TEST(@"-[writeString:]", [client writeString: @"Hello!"]) TEST(@"-[readNBytes:intoBuffer:]", [accepted readNBytes: 6 intoBuffer: buf] && !memcmp(buf, "Hello!", 6)) [pool drain]; } @end |
Deleted tests/OFThread.m version [40840a8d67].
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added tests/OFThreadTests.m version [40840a8d67].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 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 | /* * Copyright (c) 2008 - 2010 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #include "config.h" #import "OFThread.h" #import "OFAutoreleasePool.h" #import "OFString.h" #import "OFExceptions.h" #import "TestsAppDelegate.h" static OFString *module = @"OFThread"; @interface TestThread: OFThread @end @implementation TestThread - main { if ([object isEqual: @"foo"]) return @"success"; return nil; } @end @implementation TestsAppDelegate (OFThreadTests) - (void)threadTests { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; TestThread *t; OFTLSKey *key; TEST(@"+[threadWithObject:]", (t = [TestThread threadWithObject: @"foo"])) TEST(@"-[join]", [[t join] isEqual: @"success"]) TEST(@"OFTLSKey's +[tlsKey]", (key = [OFTLSKey tlsKey])) TEST(@"+[setObject:forTLSKey:]", [OFThread setObject: @"foo" forTLSKey: key]) TEST(@"+[objectForTLSKey:]", [[OFThread objectForTLSKey: key] isEqual: @"foo"]) [pool drain]; } @end |
Deleted tests/OFXMLElement.m version [df22df1a10].
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added tests/OFXMLElementTests.m version [df22df1a10].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 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 | /* * Copyright (c) 2008 - 2010 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #include "config.h" #import "OFXMLElement.h" #import "OFString.h" #import "OFArray.h" #import "OFAutoreleasePool.h" #import "OFString.h" #import "OFExceptions.h" #import "TestsAppDelegate.h" static OFString *module = @"OFXMLElement"; @implementation TestsAppDelegate (OFXMLElementTests) - (void)XMLElementTests { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFXMLElement *elem[2]; TEST(@"+[elementWithName:]", (elem[0] = [OFXMLElement elementWithName: @"foo"]) && [[elem[0] string] isEqual: @"<foo/>"]) TEST(@"+[elementWithName:stringValue:]", (elem[1] = [OFXMLElement elementWithName: @"foo" stringValue: @"b&ar"]) && [[elem[1] string] isEqual: @"<foo>b&ar</foo>"]) TEST(@"-[addAttributeWithName:stringValue:]", [elem[0] addAttributeWithName: @"foo" stringValue: @"b&ar"] && [[elem[0] string] isEqual: @"<foo foo='b&ar'/>"] && [elem[1] addAttributeWithName: @"foo" stringValue: @"b&ar"] && [[elem[1] string] isEqual: @"<foo foo='b&ar'>b&ar</foo>"]) TEST(@"-[addChild:]", [elem[0] addChild: [OFXMLElement elementWithName: @"bar"]] && [[elem[0] string] isEqual: @"<foo foo='b&ar'><bar/></foo>"]) [pool drain]; } @end |
Deleted tests/OFXMLParser.m version [23648ec2a7].
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added tests/OFXMLParserTests.m version [23648ec2a7].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 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 | /* * Copyright (c) 2008 - 2010 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #include "config.h" #include <string.h> #import "OFXMLParser.h" #import "OFString.h" #import "OFArray.h" #import "OFAutoreleasePool.h" #import "OFString.h" #import "OFExceptions.h" #import "TestsAppDelegate.h" static OFString *module = @"OFXMLParser"; static int i = 0; enum event_type { TAG_START, TAG_END, STRING, COMMENT }; @implementation TestsAppDelegate (OFXMLParser) - (void)xmlParserCallbackWithEventType: (enum event_type)et name: (OFString*)name prefix: (OFString*)prefix namespace: (OFString*)ns attributes: (OFArray*)attrs string: (OFString*)string comment: (OFString*)comment { OFString *msg; id *carray; size_t count; i++; msg = [OFString stringWithFormat: @"Parsing part #%d", i]; switch (i) { case 1: case 5: TEST(msg, et == STRING && [string isEqual: @"bar"]) break; case 2: /* FIXME: Namespace */ carray = [attrs cArray]; count = [attrs count]; TEST(msg, et == TAG_START && [name isEqual: @"bar"] && [prefix isEqual: @"foo"] && ns == nil && attrs != nil && count == 2 && /* Attribute 1 */ [[carray[0] name] isEqual: @"bar"] && [carray[0] prefix] == nil && [[carray[0] stringValue] isEqual: @"b&az"] && [carray[0] namespace] == nil && /* Attribute 2 */ [[carray[1] name] isEqual: @"qux"] && [[carray[1] prefix] isEqual: @"qux"] && [[carray[1] stringValue] isEqual: @" quux "] && [carray[1] namespace] == nil) break; case 3: TEST(msg, et == STRING && [string isEqual: @"foo<bar"]) break; case 4: TEST(msg, et == TAG_START && [name isEqual: @"qux"] && prefix == nil && ns == nil) break; case 6: carray = [attrs cArray]; count = [attrs count]; TEST(msg, et == TAG_START && [name isEqual: @"baz"] && prefix == nil && ns == nil && attrs != nil && count == 2 && /* Attribute 1 */ [[carray[0] name] isEqual: @"name"] && [carray[0] prefix] == nil && [[carray[0] stringValue] isEqual: @""] && [carray[0] namespace] == nil && /* Attribute 2 */ [[carray[1] name] isEqual: @"test"] && [carray[1] prefix] == nil && [[carray[1] stringValue] isEqual: @"foobar"] && [carray[1] namespace] == nil) break; case 7: TEST(msg, et == TAG_END && [name isEqual: @"baz"] && prefix == nil && ns == nil) break; case 8: TEST(msg, et == STRING && [string isEqual: @"quxbar"]) break; case 9: TEST(msg, et == TAG_END && [name isEqual: @"qux"] && prefix == nil && ns == nil) break; case 10: /* FIXME: Namespace */ TEST(msg, et == TAG_END && [name isEqual: @"bar"] && [prefix isEqual: @"foo"] && ns == nil) break; case 11: TEST(msg, et == COMMENT && [comment isEqual: @"foo bär-baz"]) break; default: TEST(msg, NO) break; } } - (void)xmlParser: (OFXMLParser*)parser didStartTagWithName: (OFString*)name prefix: (OFString*)prefix namespace: (OFString*)ns attributes: (OFArray*)attrs { [self xmlParserCallbackWithEventType: TAG_START name: name prefix: prefix namespace: ns attributes: attrs string: nil comment: nil]; } - (void)xmlParser: (OFXMLParser*)parser didEndTagWithName: (OFString*)name prefix: (OFString*)prefix namespace: (OFString*)ns { [self xmlParserCallbackWithEventType: TAG_END name: name prefix: prefix namespace: ns attributes: nil string: nil comment: nil]; } - (void)xmlParser: (OFXMLParser*)parser foundString: (OFString*)string { [self xmlParserCallbackWithEventType: STRING name: nil prefix: nil namespace: nil attributes: nil string: string comment: nil]; } - (void)xmlParser: (OFXMLParser*)parser foundComment: (OFString*)comment { [self xmlParserCallbackWithEventType: COMMENT name: nil prefix: nil namespace: nil attributes: nil string: nil comment: comment]; } - (OFString*)xmlParser: (OFXMLParser*)parser foundUnknownEntityNamed: (OFString*)entity { if ([entity isEqual: @"foo"]) return @"foobar"; return nil; } - (void)XMLParserTests { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFXMLParser *parser; const char *str = "bar<foo:bar bar='b&az' qux:qux=\" quux \">\r\n" "foo<bar<qux >bar <baz name='' test='&foo;'/> quxbar\r\n</qux>" "</foo:bar><!-- foo bär-baz -->"; size_t j, len; TEST(@"+[xmlParser]", (parser = [OFXMLParser xmlParser])) TEST(@"-[setDelegate:]", [parser setDelegate: self]) /* Simulate a stream where we only get chunks */ len = strlen(str); for (j = 0; j < len; j+= 2) { if (j + 2 > len) [parser parseBuffer: str + j withSize: 1]; else [parser parseBuffer: str + j withSize: 2]; } TEST(@"Checking if everything was parsed", i == 11) [pool drain]; } @end |
Added tests/PropertiesTests.m version [a4728313bf].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 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 | /* * Copyright (c) 2008 - 2010 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #include "config.h" #import "OFString.h" #import "OFAutoreleasePool.h" #import "TestsAppDelegate.h" static OFString *module = @"Properties"; @interface PropertiesTest: OFObject { OFString *foo; OFString *bar; } @property (copy, nonatomic) OFString *foo; @property (retain) OFString *bar; @end @implementation PropertiesTest @synthesize foo; @synthesize bar; - (void)dealloc { [foo release]; [bar release]; [super dealloc]; } @end @implementation TestsAppDelegate (PropertiesTests) - (void)propertiesTests { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; PropertiesTest *pt = [[[PropertiesTest alloc] init] autorelease]; OFString *t = [OFMutableString stringWithString: @"foo"]; [pt setFoo: t]; TEST(@"copy, nonatomic", [[pt foo] isEqual: @"foo"] && [pt foo] != @"foo" && [[pt foo] retainCount] == 1) [pt setBar: t]; TEST(@"retain, atomic", [pt bar] == t && [t retainCount] == 3) [pool drain]; } @end |
Deleted tests/properties.m version [a4728313bf].
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |