mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-10 16:20:42 +00:00
* Source/NSXMLNode.m (-detach): Don't handle the namespace case.
* Source/NSXMLElement.m (-removeNamespaceForPrefix:): Implement. * Tests/base/NSXMLNode/basic.m: Move tests from here ... * Tests/base/NSXMLElement/basic.m: ... to here. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@34927 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
86330f01a7
commit
18c64eae4f
5 changed files with 96 additions and 51 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2012-03-12 Fred Kiefer <FredKiefer@gmx.de>
|
||||||
|
|
||||||
|
* Source/NSXMLNode.m (-detach): Don't handle the namespace case.
|
||||||
|
* Source/NSXMLElement.m (-removeNamespaceForPrefix:): Implement.
|
||||||
|
* Tests/base/NSXMLNode/basic.m: Move tests from here ...
|
||||||
|
* Tests/base/NSXMLElement/basic.m: ... to here.
|
||||||
|
|
||||||
2012-03-12 Fred Kiefer <FredKiefer@gmx.de>
|
2012-03-12 Fred Kiefer <FredKiefer@gmx.de>
|
||||||
|
|
||||||
* Source/NSXMLElement.m: Correct used namespace field.
|
* Source/NSXMLElement.m: Correct used namespace field.
|
||||||
|
|
|
@ -294,11 +294,44 @@ GS_PRIVATE_INTERNAL(NSXMLElement)
|
||||||
cur = cur->next;
|
cur = cur->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
[self _addSubNode: aNamespace];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) removeNamespaceForPrefix: (NSString*)name
|
- (void) removeNamespaceForPrefix: (NSString*)name
|
||||||
{
|
{
|
||||||
[self notImplemented: _cmd];
|
if (internal->node->nsDef != NULL)
|
||||||
|
{
|
||||||
|
xmlNsPtr cur = internal->node->nsDef;
|
||||||
|
xmlNsPtr last = NULL;
|
||||||
|
const xmlChar *prefix = XMLSTRING(name);
|
||||||
|
|
||||||
|
while (cur != NULL)
|
||||||
|
{
|
||||||
|
if (xmlStrcmp(prefix, cur->prefix) == 0)
|
||||||
|
{
|
||||||
|
if (last == NULL)
|
||||||
|
{
|
||||||
|
internal->node->nsDef = cur->next;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
last->next = cur->next;
|
||||||
|
}
|
||||||
|
cur->next = NULL;
|
||||||
|
if (cur->_private != NULL)
|
||||||
|
{
|
||||||
|
[self _removeSubNode: (NSXMLNode *)cur->_private];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
xmlFreeNode(cur);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
last = cur;
|
||||||
|
cur = cur->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setNamespaces: (NSArray*)namespaces
|
- (void) setNamespaces: (NSArray*)namespaces
|
||||||
|
@ -312,17 +345,7 @@ GS_PRIVATE_INTERNAL(NSXMLElement)
|
||||||
// internal->node->nsDef = NULL;
|
// internal->node->nsDef = NULL;
|
||||||
while ((namespace = (NSXMLNode *)[en nextObject]) != nil)
|
while ((namespace = (NSXMLNode *)[en nextObject]) != nil)
|
||||||
{
|
{
|
||||||
xmlNsPtr ns = (xmlNsPtr)[namespace _node];
|
[self addNamespace: namespace];
|
||||||
if (internal->node->nsDef == NULL)
|
|
||||||
{
|
|
||||||
internal->node->nsDef = ns;
|
|
||||||
cur = ns;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cur->next = ns;
|
|
||||||
cur = ns;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -543,7 +566,7 @@ joinTextNodes(xmlNodePtr nodeA, xmlNodePtr nodeB, NSMutableArray *nodesToDelete)
|
||||||
subEnum = [nodesToDelete objectEnumerator];
|
subEnum = [nodesToDelete objectEnumerator];
|
||||||
while ((subNode = [subEnum nextObject]))
|
while ((subNode = [subEnum nextObject]))
|
||||||
{
|
{
|
||||||
[self _removeSubNode:subNode];
|
[self _removeSubNode: subNode];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1052,9 +1052,17 @@ execute_xpath(NSXMLNode *xmlNode, NSString *xpath_exp, NSString *nmspaces)
|
||||||
{
|
{
|
||||||
NSXMLNode *parent = [self parent];
|
NSXMLNode *parent = [self parent];
|
||||||
|
|
||||||
|
if (node->type == XML_NAMESPACE_DECL)
|
||||||
|
{
|
||||||
|
// FIXME
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
// separate our node from its parent and siblings
|
// separate our node from its parent and siblings
|
||||||
xmlUnlinkNode(node);
|
xmlUnlinkNode(node);
|
||||||
xmlSetTreeDoc(node, NULL);
|
xmlSetTreeDoc(node, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
if (parent)
|
if (parent)
|
||||||
{
|
{
|
||||||
[parent _removeSubNode: self];
|
[parent _removeSubNode: self];
|
||||||
|
|
|
@ -7,10 +7,18 @@ int main()
|
||||||
NSAutoreleasePool *arp = [NSAutoreleasePool new];
|
NSAutoreleasePool *arp = [NSAutoreleasePool new];
|
||||||
NSXMLElement *node;
|
NSXMLElement *node;
|
||||||
NSXMLElement *other;
|
NSXMLElement *other;
|
||||||
|
NSXMLElement *xml;
|
||||||
|
NSXMLNode *attr;
|
||||||
|
NSArray *instances;
|
||||||
|
|
||||||
node = [[NSXMLElement alloc] initWithName: @"node"];
|
node = [[NSXMLElement alloc] initWithName: @"node"];
|
||||||
|
xml = [[NSXMLElement alloc] initWithXMLString: @"<element attr=\"value\"></element>"
|
||||||
|
error: NULL];
|
||||||
|
other = [NSXMLNode elementWithName: @"other" children: nil attributes: nil];
|
||||||
|
instances = [NSArray arrayWithObjects: node, other, xml, nil];
|
||||||
test_alloc(@"NSXMLElement");
|
test_alloc(@"NSXMLElement");
|
||||||
test_NSObject(@"NSXMLElement", [NSArray arrayWithObject: node]);
|
test_NSObject(@"NSXMLElement", instances);
|
||||||
|
test_NSCopying(@"NSXMLElement", @"NSXMLElement", instances, NO, YES);
|
||||||
|
|
||||||
other = [[NSXMLElement alloc] initWithName: @"other"];
|
other = [[NSXMLElement alloc] initWithName: @"other"];
|
||||||
PASS(NO == [other isEqual: node], "differently named elements are not equal");
|
PASS(NO == [other isEqual: node], "differently named elements are not equal");
|
||||||
|
@ -21,7 +29,7 @@ int main()
|
||||||
|
|
||||||
[other release];
|
[other release];
|
||||||
|
|
||||||
PASS(NSXMLElementKind == [node kind], "invalid node kind is correct");
|
PASS(NSXMLElementKind == [node kind], "element node kind is correct");
|
||||||
PASS(0 == [node level], "element node level is zero");
|
PASS(0 == [node level], "element node level is zero");
|
||||||
PASS_EQUAL([node URI], nil, "element node URI is nil");
|
PASS_EQUAL([node URI], nil, "element node URI is nil");
|
||||||
PASS_EQUAL([node objectValue], @"", "element node object value is empty");
|
PASS_EQUAL([node objectValue], @"", "element node object value is empty");
|
||||||
|
@ -46,6 +54,37 @@ int main()
|
||||||
|
|
||||||
[node release];
|
[node release];
|
||||||
|
|
||||||
|
// Equality tests.
|
||||||
|
node = [[NSXMLNode alloc] initWithKind: NSXMLElementKind];
|
||||||
|
other = [[NSXMLNode alloc] initWithKind: NSXMLElementKind];
|
||||||
|
[other setName: @"test"];
|
||||||
|
[node setName: @"test"];
|
||||||
|
PASS([node isEqual: other],
|
||||||
|
"Elements with the same name are equal");
|
||||||
|
|
||||||
|
attr = [NSXMLNode attributeWithName: @"key"
|
||||||
|
stringValue: @"value"];
|
||||||
|
[node addAttribute:attr];
|
||||||
|
PASS(![node isEqual: other],
|
||||||
|
"Elements with different attributes are NOT equal");
|
||||||
|
|
||||||
|
attr = [NSXMLNode attributeWithName: @"key"
|
||||||
|
stringValue: @"value"];
|
||||||
|
[other addAttribute:attr];
|
||||||
|
PASS([node isEqual: other],
|
||||||
|
"Elements with the same attributes are equal");
|
||||||
|
|
||||||
|
[other setStringValue: @"value"];
|
||||||
|
PASS(![node isEqual: other],
|
||||||
|
"Elements with different values are NOT equal");
|
||||||
|
|
||||||
|
[node setStringValue: @"value"];
|
||||||
|
PASS([node isEqual: other],
|
||||||
|
"Elements with same values are equal");
|
||||||
|
|
||||||
|
[node release];
|
||||||
|
[other release];
|
||||||
|
|
||||||
[arp release];
|
[arp release];
|
||||||
arp = nil;
|
arp = nil;
|
||||||
|
|
||||||
|
|
|
@ -103,6 +103,7 @@ int main()
|
||||||
PASS_EQUAL([attr stringValue], @"value", "string value on attr node works");
|
PASS_EQUAL([attr stringValue], @"value", "string value on attr node works");
|
||||||
// In libxml2 the value is on a child node
|
// In libxml2 the value is on a child node
|
||||||
//PASS_EQUAL([attr children], nil, "attr node children is nil");
|
//PASS_EQUAL([attr children], nil, "attr node children is nil");
|
||||||
|
//PASS([attr childCount] == 0, "No child on attr node");
|
||||||
|
|
||||||
[attr setName: @"name"];
|
[attr setName: @"name"];
|
||||||
PASS_EQUAL([attr name], @"name",
|
PASS_EQUAL([attr name], @"name",
|
||||||
|
@ -110,39 +111,6 @@ int main()
|
||||||
[attr setStringValue: @"aString"];
|
[attr setStringValue: @"aString"];
|
||||||
PASS_EQUAL([attr stringValue], @"aString",
|
PASS_EQUAL([attr stringValue], @"aString",
|
||||||
"setting string value on attr node works");
|
"setting string value on attr node works");
|
||||||
// In libxml2 the value is on a child node
|
|
||||||
//PASS([attr childCount] == 0, "No child on attr node");
|
|
||||||
|
|
||||||
// Equality tests.
|
|
||||||
node = [[NSXMLNode alloc] initWithKind: NSXMLElementKind];
|
|
||||||
other = [[NSXMLNode alloc] initWithKind: NSXMLElementKind];
|
|
||||||
[other setName: @"test"];
|
|
||||||
[node setName: @"test"];
|
|
||||||
PASS([node isEqual: other],
|
|
||||||
"Nodes with the same name are equal");
|
|
||||||
|
|
||||||
attr = [NSXMLNode attributeWithName: @"key"
|
|
||||||
stringValue: @"value"];
|
|
||||||
[node addAttribute:attr];
|
|
||||||
PASS(![node isEqual: other],
|
|
||||||
"Nodes with different attributes are NOT equal");
|
|
||||||
|
|
||||||
attr = [NSXMLNode attributeWithName: @"key"
|
|
||||||
stringValue: @"value"];
|
|
||||||
[other addAttribute:attr];
|
|
||||||
PASS([node isEqual: other],
|
|
||||||
"Nodes with the same attributes are equal");
|
|
||||||
|
|
||||||
[other setStringValue: @"value"];
|
|
||||||
PASS(![node isEqual: other],
|
|
||||||
"Nodes with different values are NOT equal");
|
|
||||||
|
|
||||||
[node setStringValue: @"value"];
|
|
||||||
PASS([node isEqual: other],
|
|
||||||
"Nodes with different values are equal");
|
|
||||||
|
|
||||||
[node release];
|
|
||||||
[other release];
|
|
||||||
|
|
||||||
[arp release];
|
[arp release];
|
||||||
arp = nil;
|
arp = nil;
|
||||||
|
|
Loading…
Reference in a new issue