Skip to content

Commit

Permalink
Bug fix for issue #20 - [DDXMLNode name] should return qualified name
Browse files Browse the repository at this point in the history
  • Loading branch information
robbiehanson committed Nov 2, 2011
1 parent 50e9101 commit 430a40d
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 5 deletions.
56 changes: 51 additions & 5 deletions KissXML/DDXMLNode.m
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -373,17 +373,35 @@ - (void)setName:(NSString *)name
- (NSString *)name - (NSString *)name
{ {
// Note: DDXMLNamespaceNode overrides this method // Note: DDXMLNamespaceNode overrides this method
// Note: DDXMLAttributeNode overrides this method


#if DDXML_DEBUG_MEMORY_ISSUES #if DDXML_DEBUG_MEMORY_ISSUES
DDXMLNotZombieAssert(); DDXMLNotZombieAssert();
#endif #endif


const char *name = (const char *)((xmlStdPtr)genericPtr)->name; const xmlChar *xmlName = ((xmlStdPtr)genericPtr)->name;

if (xmlName == NULL)
if (name == NULL) {
return nil; return nil;
else }
return [NSString stringWithUTF8String:name];
NSString *name = [NSString stringWithUTF8String:(const char *)xmlName];

if (IsXmlNodePtr(genericPtr))
{
xmlNodePtr node = (xmlNodePtr)genericPtr;

NSRange range = [name rangeOfString:@":"];
if (range.length == 0)
{
if (node->ns && node->ns->prefix)
{
return [NSString stringWithFormat:@"%s:%@", node->ns->prefix, name];
}
}
}

return name;
} }


- (void)setStringValue:(NSString *)string - (void)setStringValue:(NSString *)string
Expand Down Expand Up @@ -2500,6 +2518,34 @@ - (void)dealloc
#pragma mark Properties #pragma mark Properties
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


- (NSString *)name
{
#if DDXML_DEBUG_MEMORY_ISSUES
DDXMLNotZombieAssert();
#endif

xmlAttrPtr attr = (xmlAttrPtr)genericPtr;

const xmlChar *xmlName = attr->name;
if (xmlName == NULL)
{
return nil;
}

NSString *name = [NSString stringWithUTF8String:(const char *)xmlName];

NSRange range = [name rangeOfString:@":"];
if (range.length == 0)
{
if (attr->ns && attr->ns->prefix)
{
return [NSString stringWithFormat:@"%s:%@", attr->ns->prefix, name];
}
}

return name;
}

- (void)setStringValue:(NSString *)string - (void)setStringValue:(NSString *)string
{ {
#if DDXML_DEBUG_MEMORY_ISSUES #if DDXML_DEBUG_MEMORY_ISSUES
Expand Down
33 changes: 33 additions & 0 deletions UnitTesting/DDXMLTesting.m
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ @interface DDAssertionHandler : NSAssertionHandler
@interface DDXMLTesting (Tests) @interface DDXMLTesting (Tests)
+ (void)setUp; + (void)setUp;
+ (void)tearDown; + (void)tearDown;
+ (void)testName;
+ (void)testLocalName; + (void)testLocalName;
+ (void)testPrefixName; + (void)testPrefixName;
+ (void)testDoubleAdd; + (void)testDoubleAdd;
Expand Down Expand Up @@ -60,6 +61,7 @@ + (void)performTests


[self setUp]; [self setUp];


[self testName];
[self testLocalName]; [self testLocalName];
[self testPrefixName]; [self testPrefixName];
[self testDoubleAdd]; [self testDoubleAdd];
Expand Down Expand Up @@ -146,6 +148,37 @@ + (NSException *)tryCatch:(void (^)())block
return result; return result;
} }


+ (void)testName
{
NSLog(@"Starting %@...", NSStringFromSelector(_cmd));
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSString *str = @"<body xmlns:food='http://example.com/' food:genre='italian'>"
@" <food:pizza>yumyum</food:pizza>"
@"</body>";

NSError *error = nil;

NSXMLElement *nsBody = [[NSXMLElement alloc] initWithXMLString:str error:&error];
DDXMLElement *ddBody = [[DDXMLElement alloc] initWithXMLString:str error:&error];

// Test 1 - elements

NSString *nsNodeName = [[nsBody childAtIndex:0] name];
NSString *ddNodeName = [[ddBody childAtIndex:0] name];

NSAssert([nsNodeName isEqualToString:ddNodeName], @"Failed test 1");

// Test 2 - attributes

NSString *nsAttrName = [[nsBody attributeForName:@"food:genre"] name];
NSString *ddAttrName = [[ddBody attributeForName:@"food:genre"] name];

NSAssert([nsAttrName isEqualToString:ddAttrName], @"Failed test 2");

[pool release];
}

+ (void)testLocalName + (void)testLocalName
{ {
NSLog(@"Starting %@...", NSStringFromSelector(_cmd)); NSLog(@"Starting %@...", NSStringFromSelector(_cmd));
Expand Down

0 comments on commit 430a40d

Please sign in to comment.