diff --git a/ChangeLog b/ChangeLog index 5054fa603..4cbc54c34 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-06-05 Wolfgang Lux + + * Tests/gui/TextSystem/deallocation.m: Add new test to verify + proper deallocation of text network elements. + 2012-06-05 Wolfgang Lux * Source/GSLayoutManager.m (-dealloc): Set layout manager of every diff --git a/Tests/gui/TextSystem/deallocation.m b/Tests/gui/TextSystem/deallocation.m new file mode 100644 index 000000000..e0c2a8817 --- /dev/null +++ b/Tests/gui/TextSystem/deallocation.m @@ -0,0 +1,75 @@ +/* + (C) Copyright 2012 Wolfgang Lux + + Check that no dangling pointers are left when elements of a text network + are deallocated. + + FIXME In its present form, this test is unlikely to yield correct results + with a garbage collected runtime. +*/ + +#import "Testing.h" +#import +#import +#import +#import +#import +#import + +int +main(int argc, char **argv) +{ + NSLayoutManager *lm; + NSTextStorage *ts; + NSTextContainer *tc; + NSTextView *tv; + CREATE_AUTORELEASE_POOL(arp); + + // Create shared application object (required by NSTextView) + [NSApplication sharedApplication]; + + // Set up text network retaining all elements + ts = [NSTextStorage new]; + lm = [NSLayoutManager new]; + [ts addLayoutManager: lm]; + tc = [[NSTextContainer alloc] initWithContainerSize: NSMakeSize(100, 100)]; + [lm addTextContainer: tc]; + tv = + [[NSTextView alloc] initWithFrame: NSMakeRect(0, 0, 100, 100) + textContainer: tc]; + + // Check text view returns the expected elements + pass([tv textContainer] == tc, + "NSTextView -textContainer returns text container"); + pass([tv layoutManager] == lm, + "NSTextView -layoutManager returns layout manager"); + pass([tv textStorage] == ts, + "NSTextView -textStorage returns text storage"); + + // Release text storage + [ts release]; + RECREATE_AUTORELEASE_POOL(arp); + pass([tv textContainer] == tc, + "NSTextView -textContainer returns text container"); + pass([tv layoutManager] == lm, + "NSTextView -layoutManager returns layout manager"); + pass([tv textStorage] == nil, "NSTextView -textStorage returns nil"); + + // Release layout manager + [lm release]; + RECREATE_AUTORELEASE_POOL(arp); + pass([tv textContainer] == tc, + "NSTextView -textContainer returns text container"); + pass([tv layoutManager] == nil, "NSTextView -layoutManager returns nil"); + pass([tv textStorage] == nil, "NSTextView -textStorage returns nil"); + + // Release text container + [tc release]; + RECREATE_AUTORELEASE_POOL(arp); + pass([tv textContainer] == nil, "NSTextView -textContainer returns nil"); + pass([tv layoutManager] == nil, "NSTextView -layoutManager returns nil"); + pass([tv textStorage] == nil, "NSTextView -textStorage returns nil"); + + DESTROY(arp); + return 0; +}