123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- //
- // Licensed under the terms in License.txt
- //
- // Copyright 2010 Allen Ding. All rights reserved.
- //
- #import "KWBlockRaiseMatcher.h"
- #import "KWBlock.h"
- @interface KWBlockRaiseMatcher()
- @property (nonatomic, readwrite, strong) NSException *exception;
- @property (nonatomic, readwrite, strong) NSException *actualException;
- @end
- @implementation KWBlockRaiseMatcher
- #pragma mark - Getting Matcher Strings
- + (NSArray *)matcherStrings {
- return @[@"raise",
- @"raiseWithName:",
- @"raiseWithReason:",
- @"raiseWithName:reason:"];
- }
- #pragma mark - Matching
- - (BOOL)evaluate {
- if (![self.subject isKindOfClass:[KWBlock class]])
- [NSException raise:@"KWMatcherException" format:@"subject must be a KWBlock"];
- @try {
- [self.subject call];
- } @catch (NSException *anException) {
- self.actualException = anException;
- if ([self.exception name] != nil && ![[self.exception name] isEqualToString:[anException name]])
- return NO;
- if ([self.exception reason] != nil && ![[self.exception reason] isEqualToString:[anException reason]])
- return NO;
- return YES;
- }
- return NO;
- }
- #pragma mark - Getting Failure Messages
- + (NSString *)exceptionPhraseWithException:(NSException *)anException {
- if (anException == nil)
- return @"nothing";
- NSString *namePhrase = nil;
- if ([anException name] == nil)
- namePhrase = @"exception";
- else
- namePhrase = [anException name];
- if ([anException reason] == nil)
- return namePhrase;
- return [NSString stringWithFormat:@"%@ \"%@\"", namePhrase, [anException reason]];
- }
- - (NSString *)failureMessageForShould {
- return [NSString stringWithFormat:@"expected %@, but %@ raised",
- [[self class] exceptionPhraseWithException:self.exception],
- [[self class] exceptionPhraseWithException:self.actualException]];
- }
- - (NSString *)failureMessageForShouldNot {
- return [NSString stringWithFormat:@"expected %@ not to be raised",
- [[self class] exceptionPhraseWithException:self.actualException]];
- }
- #pragma mark - Configuring Matchers
- - (void)raise {
- [self raiseWithName:nil reason:nil];
- }
- - (void)raiseWithName:(NSString *)aName {
- [self raiseWithName:aName reason:nil];
- }
- - (void)raiseWithReason:(NSString *)aReason {
- [self raiseWithName:nil reason:aReason];
- }
- - (void)raiseWithName:(NSString *)aName reason:(NSString *)aReason {
- self.exception = [NSException exceptionWithName:aName reason:aReason userInfo:nil];
- }
- - (NSString *)description {
- return [NSString stringWithFormat:@"raise %@", [[self class] exceptionPhraseWithException:self.exception]];
- }
- @end
|