1
#import "ObjectTesting.h"
2
#import <Foundation/NSAutoreleasePool.h>
3
#import <Foundation/NSFileManager.h>
4
#import <Foundation/NSUserDefaults.h>
5
#import <Foundation/NSXMLParser.h>
8
@interface Handler : NSObject
13
- (void)parserDidStartDocument: (NSXMLParser *)parser;
14
- (void)parserDidEndDocument: (NSXMLParser *)parser;
15
- (void)parser: (NSXMLParser *)parser foundNotationDeclarationWithName: (NSString *)name publicID: (NSString *)publicID systemID: (NSString *)systemID;
16
- (void)parser: (NSXMLParser *)parser foundUnparsedEntityDeclarationWithName: (NSString *)name publicID: (NSString *)publicID systemID: (NSString *)systemID notationName: (NSString *)notationName;
17
- (void)parser: (NSXMLParser *)parser foundAttributeDeclarationWithName: (NSString *)attributeName forElement: (NSString *)elementName type: (NSString *)type defaultValue: (NSString *)defaultValue;
18
- (void)parser: (NSXMLParser *)parser foundElementDeclarationWithName: (NSString *)elementName model: (NSString *)model;
20
- (void)parser: (NSXMLParser *)parser foundInternalEntityDeclarationWithName: (NSString *)name value: (NSString *)value;
22
- (void)parser: (NSXMLParser *)parser foundExternalEntityDeclarationWithName: (NSString *)name publicID: (NSString *)publicID systemID: (NSString *)systemID;
24
- (void)parser: (NSXMLParser *)parser didStartElement: (NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName: (NSString *)qName attributes: (NSDictionary *)attributeDict;
25
- (void)parser: (NSXMLParser *)parser didEndElement: (NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName: (NSString *)qName;
26
- (void)parser: (NSXMLParser *)parser didStartMappingPrefix: (NSString *)prefix toURI: (NSString *)namespaceURI;
27
- (void)parser: (NSXMLParser *)parser didEndMappingPrefix: (NSString *)prefix;
28
- (void)parser: (NSXMLParser *)parser foundCharacters: (NSString *)string;
29
- (void)parser: (NSXMLParser *)parser foundIgnorableWhitespace: (NSString *)whitespaceString;
30
- (void)parser: (NSXMLParser *)parser foundProcessingInstructionWithTarget: (NSString *)target data: (NSString *)data;
31
- (void)parser: (NSXMLParser *)parser foundComment: (NSString *)comment;
32
- (void)parser: (NSXMLParser *)parser foundCDATA: (NSData *)CDATABlock;
33
- (NSData *)parser: (NSXMLParser *)parser resolveExternalEntityName: (NSString *)name systemID: (NSString *)systemID;
34
- (void)parser: (NSXMLParser *)parser parseErrorOccurred: (NSError *)parseError;
35
- (void)parser: (NSXMLParser *)parser validationErrorOccurred: (NSError *)validationError;
38
@implementation Handler
46
- (NSString*) description
53
s = [NSMutableString new];
57
- (void) parserDidStartDocument: (NSXMLParser *)parser
59
[s appendFormat: @"%@\n", NSStringFromSelector(_cmd)];
62
- (void) parserDidEndDocument: (NSXMLParser *)parser
64
[s appendFormat: @"%@\n", NSStringFromSelector(_cmd)];
67
- (void) parser: (NSXMLParser *)parser
68
foundNotationDeclarationWithName: (NSString *)name
69
publicID: (NSString *)publicID
70
systemID: (NSString *)systemID
72
[s appendFormat: @"%@ %@ %@ %@\n", NSStringFromSelector(_cmd), name,
76
- (void) parser: (NSXMLParser *)parser
77
foundUnparsedEntityDeclarationWithName: (NSString *)name
78
publicID: (NSString *)publicID
79
systemID: (NSString *)systemID
80
notationName: (NSString *)notationName
82
[s appendFormat: @"%@ %@ %@ %@ %@\n", NSStringFromSelector(_cmd), name,
83
publicID, systemID, notationName];
86
- (void) parser: (NSXMLParser *)parser
87
foundAttributeDeclarationWithName: (NSString *)attributeName
88
forElement: (NSString *)elementName
89
type: (NSString *)type
90
defaultValue: (NSString *)defaultValue
92
[s appendFormat: @"%@ %@ %@ %@ %@\n", NSStringFromSelector(_cmd),
93
attributeName, elementName, type, defaultValue];
96
- (void) parser: (NSXMLParser *)parser
97
foundElementDeclarationWithName: (NSString *)elementName
98
model: (NSString *)model
100
[s appendFormat: @"%@ %@ %@\n", NSStringFromSelector(_cmd),
105
- (void) parser: (NSXMLParser *)parser
106
foundInternalEntityDeclarationWithName: (NSString *)name
107
value: (NSString *)value
109
[s appendFormat: @"%@ %@ %@\n", NSStringFromSelector(_cmd),
114
- (void) parser: (NSXMLParser *)parser
115
foundExternalEntityDeclarationWithName: (NSString *)name
116
publicID: (NSString *)publicID
117
systemID: (NSString *)systemID
119
[s appendFormat: @"%@ %@ %@ %@\n", NSStringFromSelector(_cmd),
120
name, publicID, systemID];
124
- (void) parser: (NSXMLParser *)parser
125
didStartElement: (NSString *)elementName
126
namespaceURI: (NSString *)namespaceURI
127
qualifiedName: (NSString *)qName
128
attributes: (NSDictionary *)attributeDict
130
static NSDictionary *locale = nil;
135
locale = [[[NSUserDefaults standardUserDefaults]
136
dictionaryRepresentation] retain];
138
d = [attributeDict descriptionWithLocale: locale];
139
[s appendFormat: @"%@ %@ %@ %@ %@\n", NSStringFromSelector(_cmd),
140
elementName, namespaceURI, qName, d];
143
- (void) parser: (NSXMLParser *)parser
144
didEndElement: (NSString *)elementName
145
namespaceURI: (NSString *)namespaceURI
146
qualifiedName: (NSString *)qName
148
[s appendFormat: @"%@ %@ %@ %@\n", NSStringFromSelector(_cmd),
149
elementName, namespaceURI, qName];
152
- (void) parser: (NSXMLParser *)parser
153
didStartMappingPrefix: (NSString *)prefix
154
toURI: (NSString *)namespaceURI
156
[s appendFormat: @"%@ %@ %@\n", NSStringFromSelector(_cmd),
157
prefix, namespaceURI];
160
- (void) parser: (NSXMLParser *)parser
161
didEndMappingPrefix: (NSString *)prefix
163
[s appendFormat: @"%@ %@\n", NSStringFromSelector(_cmd),
167
- (void) parser: (NSXMLParser *)parser
168
foundCharacters: (NSString *)string
170
[s appendFormat: @"%@ %@\n", NSStringFromSelector(_cmd),
174
- (void) parser: (NSXMLParser *)parser
175
foundIgnorableWhitespace: (NSString *)whitespaceString
177
[s appendFormat: @"%@ %@\n", NSStringFromSelector(_cmd),
181
- (void) parser: (NSXMLParser *)parser
182
foundProcessingInstructionWithTarget: (NSString *)target
183
data: (NSString *)data
185
[s appendFormat: @"%@ %@ %@\n", NSStringFromSelector(_cmd),
189
- (void) parser: (NSXMLParser *)parser
190
foundComment: (NSString *)comment
192
[s appendFormat: @"%@ %@\n", NSStringFromSelector(_cmd),
196
- (void) parser: (NSXMLParser *)parser
197
foundCDATA: (NSData *)CDATABlock
199
[s appendFormat: @"%@ %@\n", NSStringFromSelector(_cmd),
203
- (NSData *) parser: (NSXMLParser *)parser
204
resolveExternalEntityName: (NSString *)name
205
systemID: (NSString *)systemID
207
[s appendFormat: @"%@ %@ %@\n", NSStringFromSelector(_cmd),
212
- (void) parser: (NSXMLParser *)parser
213
parseErrorOccurred: (NSError *)parseError
215
[s appendFormat: @"%@ %@\n", NSStringFromSelector(_cmd),
219
- (void) parser: (NSXMLParser *)parser
220
validationErrorOccurred: (NSError *)validationError
222
[s appendFormat: @"%@ %@\n", NSStringFromSelector(_cmd),
233
/* Use these booleans to control parsing behavior.
235
static BOOL setShouldProcessNamespaces = YES;
236
static BOOL setShouldReportNamespacePrefixes = YES;
237
static BOOL setShouldResolveExternalEntities = NO;
240
testParse(NSData *xml, NSString *expect)
242
NSAutoreleasePool *arp = [NSAutoreleasePool new];
246
parser = [[NSXMLParser alloc] initWithData: xml];
248
[parser setShouldProcessNamespaces: setShouldProcessNamespaces];
249
[parser setShouldReportNamespacePrefixes: setShouldReportNamespacePrefixes];
250
[parser setShouldResolveExternalEntities: setShouldResolveExternalEntities];
252
handler = [[Handler new] autorelease];
253
[parser setDelegate: handler];
254
if (NO == [parser parse])
256
NSLog(@"Parsing failed: %@", [parser parserError]);
262
if (NO == [[handler description] isEqual: expect])
264
NSLog(@"######## Expected:\n%@\n######## Parsed:\n%@\n########\n",
265
expect, [handler description]);
275
testParseCString(const char *xmlBytes, NSString *expect)
279
xml = [NSData dataWithBytes: xmlBytes length: strlen(xmlBytes)];
280
return testParse(xml, expect);
285
NSAutoreleasePool *arp = [NSAutoreleasePool new];
286
NSFileManager *mgr = [NSFileManager defaultManager];
287
NSDirectoryEnumerator *dir;
289
const char *x1 = "<?xml version=\"1.0\"?><test x = \"1\"></test>";
290
const char *x1e = "<test x=\"1\"></test>";
292
@"parserDidStartDocument:\nparser:didStartElement:namespaceURI:qualifiedName:attributes: test test {\n x = 1;\n}\nparser:didEndElement:namespaceURI:qualifiedName: test test\nparserDidEndDocument:\n";
294
PASS((testParseCString(x1, e1)), "simple document 1")
295
PASS((testParseCString(x1e, e1)), "simple document 1 without header")
297
/* Now perform any tests using .xml and .result pairs of files in
298
* the ParseData subdirectory.
300
dir = [mgr enumeratorAtPath: @"ParseData"];
301
while ((xmlName = [dir nextObject]) != nil)
303
if ([[xmlName pathExtension] isEqualToString: @"xml"])
310
xmlPath = [@"ParseData" stringByAppendingPathComponent: xmlName];
311
str = [xmlPath stringByDeletingPathExtension];
312
str = [str stringByAppendingPathExtension: @"result"];
313
xmlData = [NSData dataWithContentsOfFile: xmlPath];
314
result = [NSString stringWithContentsOfFile: str];
315
PASS((testParse(xmlData, result)), "%s", [xmlName UTF8String])
319
[arp release]; arp = nil;