KWContainStringMatcher.m 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. //
  2. // KWContainStringMatcher.m
  3. // Kiwi
  4. //
  5. // Created by Kristopher Johnson on 4/28/13.
  6. // Copyright (c) 2013 Allen Ding. All rights reserved.
  7. //
  8. #import "KWContainStringMatcher.h"
  9. #import "KWFormatter.h"
  10. @interface KWContainStringMatcher ()
  11. @property (nonatomic, copy) NSString *substring;
  12. @property (nonatomic) NSStringCompareOptions options;
  13. @end
  14. @implementation KWContainStringMatcher
  15. #pragma mark - Getting Matcher Strings
  16. + (NSArray *)matcherStrings {
  17. return @[@"containString:",
  18. @"containString:options:",
  19. @"startWithString:",
  20. @"endWithString:"];
  21. }
  22. #pragma mark - Matching
  23. - (BOOL)evaluate {
  24. NSString *subjectString = (NSString *)self.subject;
  25. if (![subjectString isKindOfClass:[NSString class]]) {
  26. [NSException raise:@"KWMatcherException" format:@"subject is not a string"];
  27. return NO;
  28. }
  29. NSRange range = [subjectString rangeOfString:self.substring options:self.options];
  30. return (range.location != NSNotFound);
  31. }
  32. #pragma mark - Getting Failure Messages
  33. - (NSString *)failureMessageForShould {
  34. return [NSString stringWithFormat:@"%@ did not contain string \"%@\"",
  35. [KWFormatter formatObject:self.subject],
  36. self.substring];
  37. }
  38. - (NSString *)failureMessageForShouldNot {
  39. return [NSString stringWithFormat:@"expected subject not to contain string \"%@\"",
  40. self.substring];
  41. }
  42. - (NSString *)description {
  43. return [NSString stringWithFormat:@"contain substring \"%@\"", self.substring];
  44. }
  45. #pragma mark - Configuring matchers
  46. - (void)containString:(NSString *)substring {
  47. self.substring = substring;
  48. self.options = 0;
  49. }
  50. - (void)containString:(NSString *)substring options:(NSStringCompareOptions)options {
  51. self.substring = substring;
  52. self.options = options;
  53. }
  54. - (void)startWithString:(NSString *)prefix {
  55. self.substring = prefix;
  56. self.options = NSAnchoredSearch;
  57. }
  58. - (void)endWithString:(NSString *)suffix {
  59. self.substring = suffix;
  60. self.options = NSAnchoredSearch | NSBackwardsSearch;
  61. }
  62. @end