main
 1//
 2//  KWUserDefinedMatcher.h
 3//  Kiwi
 4//
 5//  Created by Luke Redpath on 16/06/2011.
 6//  Copyright 2011 Allen Ding. All rights reserved.
 7//
 8
 9#import <Foundation/Foundation.h>
10#import "KWMatcher.h"
11
12typedef BOOL (^KWUserDefinedMatcherBlock)();
13
14@interface KWUserDefinedMatcher : KWMatcher
15{
16    KWUserDefinedMatcherBlock matcherBlock;
17    SEL selector;
18    NSInvocation *invocation;
19    NSString *failureMessageForShould;
20    NSString *failureMessageForShouldNot;
21}
22@property (nonatomic, assign) SEL selector;
23@property (nonatomic, copy) NSString *failureMessageForShould;
24@property (nonatomic, copy) NSString *failureMessageForShouldNot;
25@property (nonatomic, assign) KWUserDefinedMatcherBlock matcherBlock;
26@property (nonatomic, copy) NSString *description;
27
28+ (id)matcherWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock;
29- (id)initWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock;
30- (void)setSubject:(id)aSubject;
31@end
32
33#pragma mark -
34
35typedef NSString * (^KWUserDefinedMatcherMessageBlock)(id);
36
37@interface KWUserDefinedMatcherBuilder : NSObject
38{
39    KWUserDefinedMatcher *matcher;
40    KWUserDefinedMatcherMessageBlock failureMessageForShouldBlock;
41    KWUserDefinedMatcherMessageBlock failureMessageForShouldNotBlock;
42    NSString *description;
43}
44@property (nonatomic, readonly) NSString *key;
45
46+ (id)builder;
47+ (id)builderForSelector:(SEL)aSelector;
48- (id)initWithSelector:(SEL)aSelector;
49
50#pragma mark -
51#pragma mark Configuring The Matcher
52
53- (void)match:(KWUserDefinedMatcherBlock)block;
54- (void)failureMessageForShould:(KWUserDefinedMatcherMessageBlock)block;
55- (void)failureMessageForShouldNot:(KWUserDefinedMatcherMessageBlock)block;
56- (void)description:(NSString *)description;
57
58#pragma mark -
59#pragma mark Buiding The Matcher
60
61- (KWUserDefinedMatcher *)buildMatcherWithSubject:(id)subject;
62@end