diff --git a/ChangeLog b/ChangeLog index 98689e838..d137d5856 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-03-05 Fred Kiefer + + * Source/NSXMLElement.m (-addAttribute:): Raise correct exception. + * Tests/base/NSXMLNode/children.m: Add test cases for attributes. + 2012-03-05 Eric Wasylishen * Tests/base/NSString/locale.m: Expand test of compare: diff --git a/Source/NSXMLElement.m b/Source/NSXMLElement.m index 63320e860..e4df45b68 100644 --- a/Source/NSXMLElement.m +++ b/Source/NSXMLElement.m @@ -155,7 +155,7 @@ GS_PRIVATE_INTERNAL(NSXMLElement) if (nil != [attribute parent]) { - [NSException raise: @"NSInvalidArgumentException" + [NSException raise: NSInternalInconsistencyException format: @"Tried to add attribute to multiple parents."]; } diff --git a/Tests/base/NSXMLNode/children.m b/Tests/base/NSXMLNode/children.m index f1092d362..e30a070b7 100644 --- a/Tests/base/NSXMLNode/children.m +++ b/Tests/base/NSXMLNode/children.m @@ -11,23 +11,34 @@ int main() NS_DURING { NSXMLElement *node = [[NSXMLElement alloc] initWithKind: NSXMLElementKind]; - NSXMLDocument *docA = [[NSXMLDocument alloc] initWithRootElement: node]; + NSXMLDocument *docA = nil; NSXMLDocument *docB = nil; NSXMLNode *attr; + [node setName: @"name"]; + attr = [NSXMLNode attributeWithName: @"key" stringValue: @"value"]; + [node addAttribute: attr]; + PASS(node == [attr parent], "Attr parent is set to node"); + + PASS_EXCEPTION([node addAttribute: attr], NSInternalInconsistencyException, "Cannot add attribute twice"); + + [node release]; + PASS(nil == [attr parent], "Attr parent is set to nil"); + + node = [[NSXMLElement alloc] initWithKind: NSXMLElementKind]; + [node setName: @"name"]; + [node addAttribute: attr]; + docA = [[NSXMLDocument alloc] initWithRootElement: node]; + PASS(docA == [node parent], "Parent is set to docA"); + // NSLog(@"Here..."); [node detach]; - PASS(docB = [[NSXMLDocument alloc] initWithRootElement: node], "Detached children can be reattached."); + PASS((docB = [[NSXMLDocument alloc] initWithRootElement: node]), "Detached children can be reattached."); [docA release]; // NSLog(@"Here... again"); PASS(docB == [node parent], "Parent is set to docB"); - [node setName: @"name"]; - attr = [NSXMLNode attributeWithName: @"key" stringValue: @"value"]; - [node addAttribute: attr]; - - PASS(node == [attr parent], "Attr parent is set to node"); [docB release]; PASS(nil == [node parent], "Parent is set to nil"); docA = [[NSXMLDocument alloc] initWithRootElement: node]; @@ -35,12 +46,12 @@ int main() PASS_EXCEPTION(docB = [[NSXMLDocument alloc] initWithRootElement: node], NSInternalInconsistencyException, "Reusing a child throws an exception"); // NSLog(@"Last time"); - //[node release]; + [node release]; //[docA release]; } NS_HANDLER { - PASS (NO, "NSXML child handling working."); // I don't think this is valid... commenting out for now. + PASS (0 == 1, "NSXML child handling working."); // I don't think this is valid... commenting out for now. } NS_ENDHANDLER END_SET("NSXMLNode - handling children")