12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- //
- // Licensed under the terms in License.txt
- //
- // Copyright 2010 Allen Ding. All rights reserved.
- //
- #import "KWContainMatcher.h"
- #import "KWFormatter.h"
- #import "KWGenericMatchingAdditions.h"
- @interface KWContainMatcher()
- @property (nonatomic, readwrite, strong) id objects;
- @end
- @implementation KWContainMatcher
- #pragma mark - Getting Matcher Strings
- + (NSArray *)matcherStrings {
- return @[@"contain:", @"containObjectsInArray:"];
- }
- #pragma mark - Matching
- - (BOOL)evaluate {
- if (![self.subject respondsToSelector:@selector(containsObjectEqualToOrMatching:)])
- [NSException raise:@"KWMatcherException" format:@"subject does not respond to -containsObjectEqualToOrMatching:"];
- for (id object in self.objects) {
- if (![self.subject containsObjectEqualToOrMatching:object])
- return NO;
- }
- return YES;
- }
- #pragma mark - Getting Failure Messages
- - (NSString *)objectsPhrase {
- if ([self.objects count] == 1)
- return [KWFormatter formatObject:(self.objects)[0]];
- return [NSString stringWithFormat:@"all of %@", [KWFormatter formatObject:self.objects]];
- }
- - (NSString *)failureMessageForShould {
- return [NSString stringWithFormat:@"expected subject to contain %@", [self objectsPhrase]];
- }
- - (NSString *)description {
- return [NSString stringWithFormat:@"contain %@", [self objectsPhrase]];
- }
- #pragma mark - Configuring Matchers
- - (void)contain:(id)anObject {
- self.objects = @[anObject];
- }
- - (void)containObjectsInArray:(NSArray *)anArray {
- self.objects = anArray;
- }
- @end
- @implementation KWMatchVerifier(KWContainMatcherAdditions)
- #pragma mark - Verifying
- - (void)containObjects:(id)firstObject, ... {
- NSMutableArray *objects = [NSMutableArray array];
- va_list argumentList;
- va_start(argumentList, firstObject);
- id object = firstObject;
- while (object != nil) {
- [objects addObject:object];
- object = va_arg(argumentList, id);
- }
- va_end(argumentList);
- [(id)self containObjectsInArray:objects];
- }
- @end
|