Skip to content

Commit

Permalink
* ns aware name tests are done
Browse files Browse the repository at this point in the history
  • Loading branch information
itod committed May 29, 2014
1 parent c0db520 commit b927b24
Show file tree
Hide file tree
Showing 9 changed files with 56 additions and 34 deletions.
13 changes: 6 additions & 7 deletions libxml2/XPLibXmlNodeImpl.m
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ @interface XPNodeSetValue ()
@end

static NSString *XPSTR(const xmlChar *zstr) {
NSString *res = nil;
NSString *res = @"";
if (zstr) {
res = [NSString stringWithUTF8String:(const char *)zstr];
}
Expand Down Expand Up @@ -247,8 +247,7 @@ - (NSString *)name {
NSString *qName = nil;
NSString *localName = [self localName];
NSString *prefix = [self prefix];
if (prefix) {
XPAssert([prefix length]);
if ([prefix length]) {
qName = [NSString stringWithFormat:@"%@:%@", prefix, localName];
} else {
qName = localName;
Expand All @@ -260,7 +259,7 @@ - (NSString *)name {

- (NSString *)localName {
XPAssert(_node);
NSString *localName = nil;
NSString *localName = @"";
switch (self.nodeType) {
case XPNodeTypeElement:
case XPNodeTypeAttribute:
Expand All @@ -284,7 +283,7 @@ - (NSString *)localName {

- (NSString *)prefix {
XPAssert(_node);
NSString *prefix = nil;
NSString *prefix = @"";

xmlNsPtr ns = _node->ns;
if (ns) {
Expand All @@ -297,7 +296,7 @@ - (NSString *)prefix {

- (NSString *)namespaceURI {
XPAssert(_node);
NSString *nsURI = nil;
NSString *nsURI = @"";

xmlNsPtr ns = _node->ns;
if (ns) {
Expand All @@ -318,7 +317,7 @@ - (NSString *)attributeValueForURI:(NSString *)nsURI localName:(NSString *)local

- (NSString *)namespaceURIForPrefix:(NSString *)prefix {
XPAssert(_node);
NSString *nsURI = nil;
NSString *nsURI = @"";

XPAssert(_node->doc);
xmlNsPtr ns = xmlSearchNs(_node->doc, _node, (xmlChar *)[prefix UTF8String]);
Expand Down
15 changes: 15 additions & 0 deletions nsxml/XPNSXMLDocumentImpl.m
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,19 @@ - (XPNodeType)nodeType {
return nil;
}


- (NSString *)name {
return @"";
}


- (NSString *)prefix {
return @"";
}


- (NSString *)namespaceURI {
return @"";
}

@end
15 changes: 10 additions & 5 deletions nsxml/XPNSXMLNodeImpl.m
Original file line number Diff line number Diff line change
Expand Up @@ -169,31 +169,36 @@ - (XPNodeType)nodeType {

- (NSString *)stringValue {
XPAssert(self.node);
return [self.node stringValue];
NSString *str = [self.node stringValue];
return str ? str : @"";
}


- (NSString *)name {
XPAssert(self.node);
return [self.node name];
NSString *str = [self.node name];
return str ? str : @"";
}


- (NSString *)localName {
XPAssert(self.node);
return [self.node localName];
NSString *str = [self.node localName];
return str ? str : @"";
}


- (NSString *)prefix {
XPAssert(self.node);
return [self.node prefix];
NSString *str = [self.node prefix];
return str ? str : @"";
}


- (NSString *)namespaceURI {
XPAssert(self.node);
return [self.node URI];
NSString *str = [self.node URI];
return str ? str : @"";
}


Expand Down
8 changes: 1 addition & 7 deletions src/FNNamespaceURI.m
Original file line number Diff line number Diff line change
Expand Up @@ -65,13 +65,7 @@ - (NSString *)evaluateAsStringInContext:(XPContext *)ctx {
node = ctx.contextNode;
}

NSString *prefix = [node prefix];
NSString *nsURI = @"";

if ([prefix length]) {
nsURI = [node namespaceURIForPrefix:prefix];
}

NSString *nsURI = [node namespaceURI];
return nsURI;
}

Expand Down
4 changes: 2 additions & 2 deletions src/XPAssembler.m
Original file line number Diff line number Diff line change
Expand Up @@ -496,7 +496,7 @@ - (void)parser:(PKParser *)p didMatchSpecificPITest:(PKAssembly *)a {
PKToken *typeTok = [a pop];
XPAssert([typeTok.stringValue isEqualToString:@"processing-instruction"]);

XPNameTest *nameTest = [[[XPNameTest alloc] initWithNamespaceURI:nil localName:localName] autorelease];
XPNameTest *nameTest = [[[XPNameTest alloc] initWithNamespaceURI:@"" localName:localName] autorelease];
nameTest.nodeType = XPNodeTypePI;

NSUInteger offset = typeTok.offset;
Expand All @@ -511,7 +511,7 @@ - (void)parser:(PKParser *)p didMatchNameTest:(PKAssembly *)a {
XPAssertToken(nameTok);

NSString *localName = nameTok.stringValue;
NSString *nsURI = nil;
NSString *nsURI = @"";
id peek = [a pop];
if ([_colon isEqualTo:peek]) {
PKToken *prefixTok = [a pop];
Expand Down
24 changes: 15 additions & 9 deletions src/XPNameTest.m
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,21 @@ @interface XPNameTest ()
@property (nonatomic, copy, readwrite) NSString *namespaceURI;
@property (nonatomic, copy, readwrite) NSString *localName;
@property (nonatomic, assign) BOOL isInNullNamespace;
@property (nonatomic, assign) BOOL isWildcard;
@property (nonatomic, assign) BOOL isNamespaceURIWildcard;
@property (nonatomic, assign) BOOL isLocalNameWildcard;
@end

@implementation XPNameTest

- (instancetype)initWithNamespaceURI:(NSString *)nsURI localName:(NSString *)localName {
self = [super init];
if (self) {
self.namespaceURI = nsURI;
self.namespaceURI = nsURI ? nsURI : @"";
self.localName = localName;
self.isInNullNamespace = 0 == [nsURI length];
self.isWildcard = [localName isEqualToString:@"*"];

self.isLocalNameWildcard = [localName isEqualToString:@"*"];
self.isNamespaceURIWildcard = [nsURI isEqualToString:@"*"] || (_isLocalNameWildcard && 0 == [_namespaceURI length]);

self.nodeType = XPNodeTypeNode;
}
return self;
Expand All @@ -39,23 +42,26 @@ - (void)dealloc {


- (NSString *)description {
if (_isInNullNamespace) {
return _localName;
} else {
if ([_namespaceURI length]) {
return [NSString stringWithFormat:@"%@:%@", _namespaceURI, _localName];
} else {
return _localName;
}
}


- (BOOL)matches:(XPNodeType)nodeType namespaceURI:(NSString *)nsURI localName:(NSString *)localName {
XPAssert(nsURI);
XPAssert(localName);

BOOL nsURIMatches = NO;
BOOL localNameMatches = NO;
BOOL typeMatches = (XPNodeTypeNode == nodeType || self.nodeType == nodeType);

if (typeMatches) {
nsURIMatches = (_isInNullNamespace && 0 == [nsURI length]) || [_namespaceURI isEqualToString:nsURI];
nsURIMatches = _isNamespaceURIWildcard || [_namespaceURI isEqualToString:nsURI];
if (nsURIMatches) {
localNameMatches = _isWildcard || [_localName isEqualToString:localName];
localNameMatches = _isLocalNameWildcard || [_localName isEqualToString:localName];
}
}

Expand Down
2 changes: 2 additions & 0 deletions test/XPLocationPathLibxmlTest.m
Original file line number Diff line number Diff line change
Expand Up @@ -574,6 +574,7 @@ - (void)testSlashSlashPara {


- (void)testSlashSlashFoobarColonPara {
[_env declareNamespaceURI:@"bar" forPrefix:@"foobar"];
[self eval:@"//foobar:para"];

id <XPNodeEnumeration>enm = [_res enumerate];
Expand Down Expand Up @@ -1574,6 +1575,7 @@ - (void)testSlashSlashChapterPredicate1PredicateNamespaceURIEqEmptyStr {


- (void)testSlashSlashChapterPredicate1PredicateNamespaceURIAtFooColonBazEqBar {
[_env declareNamespaceURI:@"bar" forPrefix:@"foobar"];
[self eval:@"//chapter[1]/@*[namespace-uri(.)='bar']/.."];

id <XPNodeEnumeration>enm = [_res enumerate];
Expand Down
3 changes: 2 additions & 1 deletion test/XPLocationPathNSXMLTest.m
Original file line number Diff line number Diff line change
Expand Up @@ -1442,6 +1442,7 @@ - (void)testSlashSlashChapterPredicate1PredicateNamespaceURIEqEmptyStr {


- (void)testSlashSlashChapterPredicate1PredicateNamespaceURIAtFooColonBazEqBar {
[_env declareNamespaceURI:@"bar" forPrefix:@"foobar"];
[self eval:@"//chapter[1]/@*[namespace-uri(.)='bar']/.."];

id <XPNodeEnumeration>enm = [_res enumerate];
Expand Down Expand Up @@ -1489,7 +1490,7 @@ - (void)testSlashSlashComment {
id <XPNodeEnumeration>enm = [_res enumerate];

id <XPNodeInfo>node = [enm nextObject];
TDEqualObjects(nil, node.name);
TDEqualObjects(@"", node.name);
TDEquals(XPNodeTypeComment, node.nodeType);
TDEqualObjects(_comments[0], [node stringValue]);

Expand Down
6 changes: 3 additions & 3 deletions test/XPStepTest.m
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ - (void)testDotDot {
id <XPNodeEnumeration>enm = [_res enumerate];

id <XPNodeInfo>node = [enm nextObject];
TDEqualObjects(nil, node.name);
TDEqualObjects(@"", node.name);
TDEquals(XPNodeTypeRoot, node.nodeType);

TDFalse([enm hasMoreObjects]);
Expand All @@ -173,7 +173,7 @@ - (void)testDotSlashDotDot {
id <XPNodeEnumeration>enm = [_res enumerate];

id <XPNodeInfo>node = [enm nextObject];
TDEqualObjects(nil, node.name);
TDEqualObjects(@"", node.name);
TDEquals(XPNodeTypeRoot, node.nodeType);

TDFalse([enm hasMoreObjects]);
Expand All @@ -189,7 +189,7 @@ - (void)testDotDotSlashDot {
id <XPNodeEnumeration>enm = [_res enumerate];

id <XPNodeInfo>node = [enm nextObject];
TDEqualObjects(nil, node.name);
TDEqualObjects(@"", node.name);
TDEquals(XPNodeTypeRoot, node.nodeType);

TDFalse([enm hasMoreObjects]);
Expand Down

0 comments on commit b927b24

Please sign in to comment.