| // | |
| // NSControlRACSupportSpec.m | |
| // ReactiveCocoa | |
| // | |
| // Created by Josh Abernathy on 9/4/12. | |
| // Copyright (c) 2012 GitHub, Inc. All rights reserved. | |
| // | |
| #import "RACControlCommandExamples.h" | |
| #import "NSControl+RACCommandSupport.h" | |
| #import "NSControl+RACTextSignalSupport.h" | |
| #import "NSObject+RACDeallocating.h" | |
| #import "NSObject+RACPropertySubscribing.h" | |
| #import "RACCommand.h" | |
| #import "RACCompoundDisposable.h" | |
| #import "RACDisposable.h" | |
| #import "RACSubject.h" | |
| SpecBegin(NSControlRACSupport) | |
| describe(@"NSButton", ^{ | |
| __block NSButton *button; | |
| beforeEach(^{ | |
| button = [[NSButton alloc] initWithFrame:NSZeroRect]; | |
| expect(button).notTo.beNil(); | |
| }); | |
| itShouldBehaveLike(RACControlCommandExamples, ^{ | |
| return @{ | |
| RACControlCommandExampleControl: button, | |
| RACControlCommandExampleActivateBlock: ^(NSButton *button) { | |
| [button performClick:nil]; | |
| } | |
| }; | |
| }); | |
| }); | |
| describe(@"NSTextField", ^{ | |
| __block NSTextField *field; | |
| __block NSWindow *window; | |
| beforeEach(^{ | |
| field = [[NSTextField alloc] initWithFrame:NSZeroRect]; | |
| expect(field).notTo.beNil(); | |
| [field.cell setSendsActionOnEndEditing:YES]; | |
| window = [[NSWindow alloc] initWithContentRect:NSZeroRect styleMask:NSTitledWindowMask backing:NSBackingStoreBuffered defer:NO]; | |
| expect(window).notTo.beNil(); | |
| [window.contentView addSubview:field]; | |
| expect([window makeFirstResponder:field]).to.beTruthy(); | |
| expect(window.firstResponder).notTo.equal(window); | |
| }); | |
| itShouldBehaveLike(RACControlCommandExamples, ^{ | |
| return @{ | |
| RACControlCommandExampleControl: field, | |
| RACControlCommandExampleActivateBlock: ^(NSTextField *field) { | |
| expect([window makeFirstResponder:nil]).to.beTruthy(); | |
| expect(window.firstResponder).to.equal(window); | |
| } | |
| }; | |
| }); | |
| describe(@"-rac_textSignal", ^{ | |
| it(@"should send changes", ^{ | |
| NSMutableArray *strings = [NSMutableArray array]; | |
| [field.rac_textSignal subscribeNext:^(NSString *str) { | |
| [strings addObject:str]; | |
| }]; | |
| expect(strings).to.equal(@[ @"" ]); | |
| NSText *fieldEditor = (id)window.firstResponder; | |
| expect(fieldEditor).to.beKindOf(NSText.class); | |
| [fieldEditor insertText:@"f"]; | |
| [fieldEditor insertText:@"o"]; | |
| [fieldEditor insertText:@"b"]; | |
| NSArray *expected = @[ @"", @"f", @"fo", @"fob" ]; | |
| expect(strings).to.equal(expected); | |
| }); | |
| it(@"shouldn't give the text field eternal life", ^{ | |
| __block BOOL dealloced = NO; | |
| @autoreleasepool { | |
| NSTextField *field __attribute__((objc_precise_lifetime)) = [[NSTextField alloc] initWithFrame:CGRectZero]; | |
| [field.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ | |
| dealloced = YES; | |
| }]]; | |
| [field.rac_textSignal subscribeNext:^(id x) { | |
| }]; | |
| } | |
| expect(dealloced).will.beTruthy(); | |
| }); | |
| }); | |
| }); | |
| SpecEnd |