blob: 034cc815dd10b36705198660d330a724f99abe04 [file] [log] [blame] [edit]
//
// 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