︙ | | | ︙ | |
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#import "OFAutoreleasePool.h"
#import "OFString.h"
#import "OFExceptions.h"
#import "TestsAppDelegate.h"
static OFString *module = @"OFXMLParser";
static int i = 0;
enum event_type {
PROCESSING_INSTRUCTIONS,
TAG_START,
TAG_END,
STRING,
|
>
|
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#import "OFAutoreleasePool.h"
#import "OFString.h"
#import "OFExceptions.h"
#import "TestsAppDelegate.h"
static OFString *module = @"OFXMLParser";
static OFXMLParser *parser;
static int i = 0;
enum event_type {
PROCESSING_INSTRUCTIONS,
TAG_START,
TAG_END,
STRING,
|
︙ | | | ︙ | |
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
[string isEqual: @"p?i"])
break;
case 3:
TEST(msg, et == TAG_START && [name isEqual: @"root"] &&
prefix == nil && ns == nil && [attrs count] == 0)
break;
case 4:
TEST(msg, et == STRING && [string isEqual: @"\n "])
break;
case 5:
TEST(msg, et == CDATA && [string isEqual: @"f<]]]oo"])
break;
case 6:
TEST(msg, et == TAG_START && [name isEqual: @"bar"] &&
prefix == nil && ns == nil && attrs == nil)
break;
case 7:
TEST(msg, et == TAG_END && [name isEqual: @"bar"] &&
|
|
|
>
|
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
[string isEqual: @"p?i"])
break;
case 3:
TEST(msg, et == TAG_START && [name isEqual: @"root"] &&
prefix == nil && ns == nil && [attrs count] == 0)
break;
case 4:
TEST(msg, et == STRING && [string isEqual: @"\n\n "])
break;
case 5:
TEST(msg, et == CDATA && [string isEqual: @"f<]]]oo"] &&
[parser lineNumber] == 3)
break;
case 6:
TEST(msg, et == TAG_START && [name isEqual: @"bar"] &&
prefix == nil && ns == nil && attrs == nil)
break;
case 7:
TEST(msg, et == TAG_END && [name isEqual: @"bar"] &&
|
︙ | | | ︙ | |
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
|
return nil;
}
- (void)XMLParserTests
{
OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init];
OFXMLParser *parser;
const char *str = "<?xml version='1.0'?><?p?i?>"
"<!DOCTYPE <<><<>>>><root>\n"
" <![CDATA[f<]]]oo]]><bar/>\n"
" <foobar xmlns='urn:objfw:test:foobar'>\n"
" <qux xmlns:foo='urn:objfw:test:foo'>\n"
" <foo:bla foo:bla = 'bla' blafoo='foo'>\n"
" <blup foo:qux='asd' quxqux='test'/>\n"
" <bla:bla\r\rxmlns:bla\r=\t\"urn:objfw:test:bla\" qux='qux'\r\n"
" bla:foo='blafoo'/>\n"
" <abc xmlns='urn:objfw:test:abc' abc='abc' foo:abc='abc'/>\n"
" </foo:bla>\n"
|
<
|
|
|
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
|
return nil;
}
- (void)XMLParserTests
{
OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init];
const char *str = "<?xml version='1.0'?><?p?i?>"
"<!DOCTYPE <<><<>>>><root>\r\r"
" <![CDATA[f<]]]oo]]><bar/>\n"
" <foobar xmlns='urn:objfw:test:foobar'>\r\n"
" <qux xmlns:foo='urn:objfw:test:foo'>\n"
" <foo:bla foo:bla = 'bla' blafoo='foo'>\n"
" <blup foo:qux='asd' quxqux='test'/>\n"
" <bla:bla\r\rxmlns:bla\r=\t\"urn:objfw:test:bla\" qux='qux'\r\n"
" bla:foo='blafoo'/>\n"
" <abc xmlns='urn:objfw:test:abc' abc='abc' foo:abc='abc'/>\n"
" </foo:bla>\n"
|
︙ | | | ︙ | |
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
|
[parser parseBuffer: str + j
withSize: 1];
else
[parser parseBuffer: str + j
withSize: 2];
}
TEST(@"Checking if everything was parsed", i == 32)
TEST(@"-[finishedParsing]", [parser finishedParsing])
TEST(@"Parsing whitespaces after the document",
R([parser parseString: @" \t\r\n "]))
EXPECT_EXCEPTION(@"Detection of junk after the document",
OFMalformedXMLException, [parser parseString: @"a"])
[pool drain];
}
@end
|
|
>
|
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
|
[parser parseBuffer: str + j
withSize: 1];
else
[parser parseBuffer: str + j
withSize: 2];
}
TEST(@"Checking if everything was parsed",
i == 32 && [parser lineNumber] == 18)
TEST(@"-[finishedParsing]", [parser finishedParsing])
TEST(@"Parsing whitespaces after the document",
R([parser parseString: @" \t\r\n "]))
EXPECT_EXCEPTION(@"Detection of junk after the document",
OFMalformedXMLException, [parser parseString: @"a"])
[pool drain];
}
@end
|