diff --git a/Sources/HTMLDocument.m b/Sources/HTMLDocument.m index 0d34a78..2266489 100644 --- a/Sources/HTMLDocument.m +++ b/Sources/HTMLDocument.m @@ -20,8 +20,8 @@ @interface HTMLDocument () { HTMLDocument *_inertTemplateDocument; - NSMutableArray *_nodeIterators; NSMutableArray *_ranges; + NSHashTable *_nodeIterators; } @property (nonatomic, assign) HTMLDocumentReadyState readyState; @end @@ -41,8 +41,8 @@ self = [super initWithName:@"#document" type:HTMLNodeDocument]; if (self) { _readyState = HTMLDocumentLoading; - _nodeIterators = [NSMutableArray new]; _ranges = [NSMutableArray new]; + _nodeIterators = [[NSHashTable alloc] initWithOptions:NSHashTableWeakMemory capacity:10]; } return self; } diff --git a/Tests/HTMLKitTestUtil.h b/Tests/HTMLKitTestUtil.h index 47abfae..700561e 100644 --- a/Tests/HTMLKitTestUtil.h +++ b/Tests/HTMLKitTestUtil.h @@ -11,5 +11,6 @@ @interface HTMLKitTestUtil : NSObject + (NSInvocation *)addTestToClass:(Class)cls withName:(NSString *)name block:(id)block; ++ (id)ivarForInstacne:(id)instance name:(NSString *)name; @end diff --git a/Tests/HTMLKitTestUtil.m b/Tests/HTMLKitTestUtil.m index ac43bee..c24f526 100644 --- a/Tests/HTMLKitTestUtil.m +++ b/Tests/HTMLKitTestUtil.m @@ -26,4 +26,10 @@ return invocation; } ++ (id)ivarForInstacne:(id)instance name:(NSString *)name +{ + Ivar ivar = class_getInstanceVariable([instance class], [name UTF8String]); + return object_getIvar(instance, ivar); +} + @end diff --git a/Tests/HTMLNodeIteratorTests.m b/Tests/HTMLNodeIteratorTests.m index 7ff6823..914d9d4 100644 --- a/Tests/HTMLNodeIteratorTests.m +++ b/Tests/HTMLNodeIteratorTests.m @@ -8,6 +8,7 @@ #import #import "HTMLDOM.h" +#import "HTMLKitTestUtil.h" @interface HTMLKitNodeIteratorTests : XCTestCase @@ -565,4 +566,30 @@ static HTMLNode * (^ LastDescendant)(HTMLNode *) = ^ HTMLNode * (HTMLNode *node) XCTAssertEqual(iterator.pointerBeforeReferenceNode, NO); } +#pragma mark - Bug Fixes + +- (void)testBugFix_Issue_4 +{ + HTMLDocument *document = [HTMLDocument documentWithString:@"