]> git.wincent.com - WOTest.git/blob - WOStub.h
Fix object-to-pointer comparisons on Leopard
[WOTest.git] / WOStub.h
1 //
2 //  WOStub.h
3 //  WOTest
4 //
5 //  Created by Wincent Colaiuta on 14 June 2005.
6 //
7 //  Copyright 2005-2007 Wincent Colaiuta.
8 //  This program is free software: you can redistribute it and/or modify
9 //  it under the terms of the GNU General Public License as published by
10 //  the Free Software Foundation, either version 3 of the License, or
11 //  (at your option) any later version.
12 //
13 //  This program is distributed in the hope that it will be useful,
14 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
15 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 //  GNU General Public License for more details.
17 //
18 //  You should have received a copy of the GNU General Public License
19 //  along with this program.  If not, see <http://www.gnu.org/licenses/>.
20 //
21
22 #import <Foundation/Foundation.h>
23
24 /*! The WOStub class provides a temporary "trampoline" object that can be used to record invocations (selectors and arguments) and desired return values. It is a "stub" because it is a temporary object that operates behind the scenes and is effectively indistinguishable from the object for which it temporarily stands in. It is a "trampoline" because it serves to bounce back the invocations and desired return values to the object for which it temporarily stands in. */
25 @interface WOStub : NSProxy {
26     
27     id              delegate;
28     
29     NSInvocation    *invocation;
30     
31     NSValue         *returnValue;
32         
33     id              exception;
34     
35     /*! YES if the stub should accept any arguments. The default behaviour (NO) indicates that the stub should only accept the arguments that were passed when it was first created and any discrepancies will result in an exception. */
36     BOOL            acceptsAnyArguments;
37 }
38
39 /*! Basic initizialer available for use by subclasses. Do not call directly. */
40 - (id)init;
41
42 /*! Used to indicate that the stub should accept any arguments when determining whether or not an invocation matches. The default is that the stub requires all arguments to match or it will raise an exception. */
43 - (id)anyArguments;
44
45 #pragma mark -
46 #pragma mark Recording
47
48 /*! Used to specify the return value that should be sent in response to messages. */
49 - (id)returning:(NSValue *)aValue;
50
51 /*! Used to specify the exception that should be raised in response to messages. \p anException should respond to the retain, release, autorelease, isEqual and hash selectors. */
52 - (id)raising:(id)anException;
53
54 #pragma mark -
55 #pragma mark Testing equality
56
57 /*! Convenience method for comparing a stub against an invocation. If no invocation has yet been recorded when this method is called raises an exception. Raises if \p anInvocation is nil. */
58 - (BOOL)matchesInvocation:(NSInvocation *)anInvocation;
59
60 #pragma mark -
61 #pragma mark Accessors
62
63 - (BOOL)acceptsAnyArguments;
64 - (void)setAcceptsAnyArguments:(BOOL)flag;
65
66 /*! Returns the recorded invocation object stored by this instance. Raises an exception if no invocation has yet been recorded. */
67 - (NSInvocation *)recordedInvocation;
68
69 /*! Direct access to the invocation instance variable. Should not be used. Use recordedInvocation instead. */
70 - (NSInvocation *)invocation;
71 - (void)setInvocation:(NSInvocation *)anInvocation;
72
73 - (NSValue *)returnValue;
74 - (void)setReturnValue:(NSValue *)aReturnValue;
75
76 - (id)exception;
77 - (void)setException:(id)anException;
78
79 @end