| // |
| // RACControlCommandExamples.m |
| // ReactiveCocoa |
| // |
| // Created by Justin Spahr-Summers on 2013-08-15. |
| // Copyright (c) 2013 GitHub, Inc. All rights reserved. |
| // |
| |
| #import "RACControlCommandExamples.h" |
| |
| #import "RACCommand.h" |
| #import "RACSubject.h" |
| #import "RACUnit.h" |
| |
| NSString * const RACControlCommandExamples = @"RACControlCommandExamples"; |
| NSString * const RACControlCommandExampleControl = @"RACControlCommandExampleControl"; |
| NSString * const RACControlCommandExampleActivateBlock = @"RACControlCommandExampleActivateBlock"; |
| |
| // Methods used by the unit test that would otherwise require platform-specific |
| // imports. |
| @interface NSObject (RACControlCommandExamples) |
| |
| @property (nonatomic, strong) RACCommand *rac_command; |
| |
| - (BOOL)isEnabled; |
| |
| @end |
| |
| SharedExampleGroupsBegin(RACControlCommandExamples) |
| |
| sharedExamplesFor(RACControlCommandExamples, ^(NSDictionary *data) { |
| __block id control; |
| __block void (^activate)(id); |
| |
| __block RACSubject *enabledSubject; |
| __block RACCommand *command; |
| |
| beforeEach(^{ |
| control = data[RACControlCommandExampleControl]; |
| activate = [data[RACControlCommandExampleActivateBlock] copy]; |
| |
| enabledSubject = [RACSubject subject]; |
| command = [[RACCommand alloc] initWithEnabled:enabledSubject signalBlock:^(id sender) { |
| return [RACSignal return:sender]; |
| }]; |
| |
| [control setRac_command:command]; |
| }); |
| |
| it(@"should bind the control's enabledness to the command", ^{ |
| expect([control isEnabled]).will.beTruthy(); |
| |
| [enabledSubject sendNext:@NO]; |
| expect([control isEnabled]).will.beFalsy(); |
| |
| [enabledSubject sendNext:@YES]; |
| expect([control isEnabled]).will.beTruthy(); |
| }); |
| |
| it(@"should execute the control's command when activated", ^{ |
| __block BOOL executed = NO; |
| [[command.executionSignals flatten] subscribeNext:^(id sender) { |
| expect(sender).to.equal(control); |
| executed = YES; |
| }]; |
| |
| activate(control); |
| expect(executed).will.beTruthy(); |
| }); |
| |
| it(@"should overwrite an existing command when setting a new one", ^{ |
| RACCommand *secondCommand = [[RACCommand alloc] initWithSignalBlock:^(id _) { |
| return [RACSignal return:RACUnit.defaultUnit]; |
| }]; |
| |
| [control setRac_command:secondCommand]; |
| expect([control rac_command]).to.beIdenticalTo(secondCommand); |
| }); |
| }); |
| |
| SharedExampleGroupsEnd |