diff --git a/HTMLKitTests/HTMLKitNodeIteratorTests.m b/HTMLKitTests/HTMLKitNodeIteratorTests.m
index ecea4bf..9eb9c7f 100644
--- a/HTMLKitTests/HTMLKitNodeIteratorTests.m
+++ b/HTMLKitTests/HTMLKitNodeIteratorTests.m
@@ -9,6 +9,23 @@
#import
#import "HTMLDOM.h"
+@interface CommentNodeFilter : NSObject
+@end
+
+@implementation CommentNodeFilter
+
+- (HTMLNodeFilterValue)acceptNode:(HTMLNode *)node
+{
+ if (node.nodeType == HTMLNodeComment) {
+ if ([[(HTMLComment *)node data] rangeOfString:@"second"].location != NSNotFound) {
+ return HTMLNodeFilterAccept;
+ }
+ }
+ return HTMLNodeFilterReject;
+}
+
+@end
+
@interface HTMLKitNodeIteratorTests : XCTestCase
@end
@@ -86,38 +103,77 @@
return root;
}
+- (HTMLDocument *)mixedTree
+{
+
+ /*
+ | doctype
+ | #comment
+ | #comment
+ | html
+ | #text "This is a Text"
+ | div
+ */
+ HTMLDocument *document = [HTMLDocument new];
+ document.documentType = [HTMLDocumentType new];;
+
+ HTMLComment *comment = [[HTMLComment alloc] initWithData:@"This is a Comment"];
+ [document appendNode:comment];
+
+ HTMLComment *secondCommnet = [[HTMLComment alloc] initWithData:@"This is a second Comment"];
+ [document appendNode:secondCommnet];
+
+ HTMLElement *root = [[HTMLElement alloc] initWithTagName:@"html"];
+ [document appendNode:root];
+
+ [root appendNode:[[HTMLText alloc] initWithData:@"This is a Text"]];
+
+ [root appendNode:[[HTMLElement alloc] initWithTagName:@"div"]];
+
+ return document;
+}
+
#pragma mark - Tests
-- (void)testSingle
-{
- HTMLElement *div = self.div;
- NSArray *result = div.nodeIterator.allObjects;
- NSArray *expected = @[@"div"];
- XCTAssertEqualObjects([result valueForKey:@"name"], expected);
-}
-
-- (void)testSimpleTree
+- (void)testNodeIteratorInit
{
HTMLElement *tree = self.simpleTree;
- NSArray *result = tree.nodeIterator.allObjects;
- NSArray *expected = @[@"div", @"a", @"b", @"c"];
- XCTAssertEqualObjects([result valueForKey:@"name"], expected);
+ HTMLNodeIterator *iterator = tree.nodeIterator;
+
+ XCTAssertEqualObjects(iterator.root, tree);
+ XCTAssertEqualObjects(iterator.referenceNode, tree);
+ XCTAssertEqual(iterator.pointerBeforeReferenceNode, YES);
+ XCTAssertEqualObjects(iterator.filter, nil);
+ XCTAssertEqual(iterator.whatToShow, HTMLNodeFilterShowAll);
}
-- (void)testNestedSimpleTree
+- (void)testNewIteratorNextNodeShouldBeRoot
{
- HTMLElement *tree = self.nestedSimpleTree;
- NSArray *result = tree.nodeIterator.allObjects;
- NSArray *expected = @[@"div", @"div", @"a", @"b", @"c", @"div", @"a", @"b", @"c"];
- XCTAssertEqualObjects([result valueForKey:@"name"], expected);
+ HTMLElement *tree = self.simpleTree;
+ HTMLNodeIterator *iterator = tree.nodeIterator;
+
+ XCTAssertEqualObjects(iterator.nextNode, tree);
+ XCTAssertEqual(iterator.pointerBeforeReferenceNode, NO);
}
-- (void)testComplexSimpleTree
+- (void)testNewIteratorPreviousNodeShouldBeNil
{
- HTMLElement *tree = self.complexTree;
- NSArray *result = tree.nodeIterator.allObjects;
- NSArray *expected = @[@"div", @"div",@"div", @"a", @"b", @"c", @"e", @"f", @"div", @"a", @"b", @"c"];
- XCTAssertEqualObjects([result valueForKey:@"name"], expected);
+ HTMLElement *tree = self.simpleTree;
+ HTMLNodeIterator *iterator = tree.nodeIterator;
+
+ XCTAssertEqualObjects(iterator.previousNode, nil);
+ XCTAssertEqual(iterator.pointerBeforeReferenceNode, YES);
+}
+
+- (void)testNewIteratorPreviousNodeShouldBeNextNode
+{
+ HTMLElement *tree = self.simpleTree;
+ HTMLNodeIterator *iterator = tree.nodeIterator;
+
+ HTMLNode *node = iterator.nextNode;
+
+ XCTAssertEqualObjects(iterator.previousNode, node);
+ XCTAssertEqual(iterator.pointerBeforeReferenceNode, YES);
}
- (void)testNextPreviousIteration
@@ -140,4 +196,123 @@
XCTAssertEqualObjects(iterator.previousNode.name, @"div");
}
+- (void)testSingleNodeIteration
+{
+ HTMLElement *div = self.div;
+ NSArray *result = div.nodeIterator.allObjects;
+ NSArray *expected = @[@"div"];
+ XCTAssertEqualObjects([result valueForKey:@"name"], expected);
+}
+
+- (void)testSimpleTreeIteration
+{
+ HTMLElement *tree = self.simpleTree;
+ NSArray *result = tree.nodeIterator.allObjects;
+ NSArray *expected = @[@"div", @"a", @"b", @"c"];
+ XCTAssertEqualObjects([result valueForKey:@"name"], expected);
+}
+
+- (void)testNestedSimpleTreeIteration
+{
+ HTMLElement *tree = self.nestedSimpleTree;
+ NSArray *result = tree.nodeIterator.allObjects;
+ NSArray *expected = @[@"div", @"div", @"a", @"b", @"c", @"div", @"a", @"b", @"c"];
+ XCTAssertEqualObjects([result valueForKey:@"name"], expected);
+}
+
+- (void)testComplexTreeIteration
+{
+ HTMLElement *tree = self.complexTree;
+ NSArray *result = tree.nodeIterator.allObjects;
+ NSArray *expected = @[@"div", @"div",@"div", @"a", @"b", @"c", @"e", @"f", @"div", @"a", @"b", @"c"];
+ XCTAssertEqualObjects([result valueForKey:@"name"], expected);
+}
+
+- (void)testShowDocument
+{
+ HTMLDocument *document = self.mixedTree;
+
+ HTMLNodeIterator *iterator = [document nodeIteratorWithFilter:nil showOptions:HTMLNodeFilterShowDocument];
+ NSArray *result = iterator.allObjects;
+ NSArray *expected = @[@"#document"];
+ XCTAssertEqual(result.count, 1);
+ XCTAssertEqual([result.firstObject class], [HTMLDocument class]);
+ XCTAssertEqualObjects([result valueForKey:@"name"], expected);
+}
+
+- (void)testShowDocumentType
+{
+ HTMLDocument *document = self.mixedTree;
+
+ HTMLNodeIterator *iterator = [document nodeIteratorWithFilter:nil showOptions:HTMLNodeFilterShowDocumentType];
+ NSArray *result = iterator.allObjects;
+ NSArray *expected = @[@"html"];
+ XCTAssertEqual(result.count, 1);
+ XCTAssertEqual([result.firstObject class], [HTMLDocumentType class]);
+ XCTAssertEqualObjects([result valueForKey:@"name"], expected);
+}
+
+- (void)testShowComment
+{
+ HTMLDocument *document = self.mixedTree;
+
+ HTMLNodeIterator *iterator = [document nodeIteratorWithFilter:nil showOptions:HTMLNodeFilterShowComment];
+ NSArray *result = iterator.allObjects;
+ NSArray *expected = @[@"#comment", @"#comment"];
+ XCTAssertEqual(result.count, 2);
+ XCTAssertEqual([result[0] class], [HTMLComment class]);
+ XCTAssertEqual([result[1] class], [HTMLComment class]);
+ XCTAssertEqualObjects([result valueForKey:@"name"], expected);
+}
+
+- (void)testShowText
+{
+ HTMLDocument *document = self.mixedTree;
+
+ HTMLNodeIterator *iterator = [document nodeIteratorWithFilter:nil showOptions:HTMLNodeFilterShowText];
+ NSArray *result = iterator.allObjects;
+ NSArray *expected = @[@"#text"];
+ XCTAssertEqual(result.count, 1);
+ XCTAssertEqual([result.firstObject class], [HTMLText class]);
+ XCTAssertEqualObjects([result valueForKey:@"name"], expected);
+}
+
+- (void)testShowElement
+{
+ HTMLDocument *document = self.mixedTree;
+
+ HTMLNodeIterator *iterator = [document nodeIteratorWithFilter:nil showOptions:HTMLNodeFilterShowElement];
+ NSArray *result = iterator.allObjects;
+ NSArray *expected = @[@"html", @"div"];
+ XCTAssertEqual(result.count, 2);
+ XCTAssertEqual([result.firstObject class], [HTMLElement class]);
+ XCTAssertEqualObjects([result valueForKey:@"name"], expected);
+}
+
+- (void)testShowBitmask
+{
+ HTMLDocument *document = self.mixedTree;
+
+ HTMLNodeIterator *iterator = [document nodeIteratorWithFilter:nil
+ showOptions:HTMLNodeFilterShowElement | HTMLNodeFilterShowText];
+ NSArray *result = iterator.allObjects;
+ NSArray *expected = @[@"html", @"#text", @"div"];
+ XCTAssertEqual(result.count, 3);
+ XCTAssertEqualObjects([result valueForKey:@"name"], expected);
+}
+
+- (void)testNodeFilter
+{
+ HTMLDocument *document = self.mixedTree;
+
+ HTMLNodeIterator *iterator = [document nodeIteratorWithFilter:[CommentNodeFilter new]
+ showOptions:HTMLNodeFilterShowAll];
+
+ NSArray *result = iterator.allObjects;
+ NSArray *expected = @[@"#comment"];
+ XCTAssertEqual(result.count, 1);
+ XCTAssertEqualObjects([result[0] data], @"This is a second Comment");
+ XCTAssertEqualObjects([result valueForKey:@"name"], expected);
+}
+
@end