main
1//
2// Licensed under the terms in License.txt
3//
4// Copyright 2010 Allen Ding. All rights reserved.
5//
6
7#import "KiwiConfiguration.h"
8#import "KWBlock.h"
9#import "KWVerifying.h"
10#import "KWExpectationType.h"
11#import "KWExampleNode.h"
12#import "KWExampleNodeVisitor.h"
13#import "KWReporting.h"
14#import "KWExampleGroupDelegate.h"
15
16@class KWCallSite;
17@class KWExampleSuite;
18@class KWContextNode;
19@class KWSpec;
20@class KWMatcherFactory;
21
22@interface KWExample : NSObject <KWExampleNodeVisitor, KWReporting> {
23 id<KWExampleNode> exampleNode;
24 BOOL passed;
25}
26@property (nonatomic, retain, readonly) NSMutableArray *lastInContexts;
27@property (nonatomic, assign) KWExampleSuite *suite;
28
29- (id)initWithExampleNode:(id<KWExampleNode>)node;
30
31#pragma mark - Adding Verifiers
32
33- (id)addVerifier:(id<KWVerifying>)aVerifier;
34- (id)addExistVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite;
35- (id)addMatchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite;
36- (id)addAsyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite timeout:(NSInteger)timeout;
37
38#pragma mark - Running
39
40- (void)runWithDelegate:(id<KWExampleDelegate>)delegate;
41
42#pragma mark -
43#pragma mark Anonymous It Node Descriptions
44
45- (NSString *)generateDescriptionForAnonymousItNode;
46
47#pragma mark -
48#pragma mark Checking if last in context
49
50- (BOOL)isLastInContext:(KWContextNode *)context;
51
52#pragma mark -
53#pragma mark Full description with context
54
55- (NSString *)descriptionWithContext;
56
57@end
58
59#pragma mark -
60#pragma mark Building Example Groups
61
62void describe(NSString *aDescription, KWVoidBlock aBlock);
63void context(NSString *aDescription, KWVoidBlock aBlock);
64void registerMatchers(NSString *aNamespacePrefix);
65void beforeAll(KWVoidBlock aBlock);
66void afterAll(KWVoidBlock aBlock);
67void beforeEach(KWVoidBlock aBlock);
68void afterEach(KWVoidBlock aBlock);
69void it(NSString *aDescription, KWVoidBlock aBlock);
70void specify(KWVoidBlock aBlock);
71void pending_(NSString *aDescription, KWVoidBlock ignoredBlock);
72
73void describeWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock aBlock);
74void contextWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock aBlock);
75void registerMatchersWithCallSite(KWCallSite *aCallSite, NSString *aNamespacePrefix);
76void beforeAllWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock);
77void afterAllWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock);
78void beforeEachWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock);
79void afterEachWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock);
80void itWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock aBlock);
81void pendingWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock ignoredBlock);
82
83#define PRAGMA(x) _Pragma (#x)
84#define PENDING(x) PRAGMA(message ( "Pending: " #x ))
85
86#define pending(title, args...) \
87PENDING(title) \
88pending_(title, ## args)
89#define xit(title, args...) \
90PENDING(title) \
91pending_(title, ## args)