KWRegularExpressionPatternMatcher.m 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. //
  2. // KWRegularExpressionPatternMatcher.m
  3. // Kiwi
  4. //
  5. // Created by Kristopher Johnson on 4/11/13.
  6. // Copyright (c) 2013 Allen Ding. All rights reserved.
  7. //
  8. #import "KWRegularExpressionPatternMatcher.h"
  9. #import "KWFormatter.h"
  10. @interface KWRegularExpressionPatternMatcher ()
  11. @property (nonatomic, copy) NSString *pattern;
  12. @property (nonatomic) NSRegularExpressionOptions options;
  13. @end
  14. @implementation KWRegularExpressionPatternMatcher
  15. #pragma mark - Getting Matcher Strings
  16. + (NSArray *)matcherStrings {
  17. return @[@"matchPattern:", @"matchPattern:options:"];
  18. }
  19. #pragma mark - Matching
  20. - (BOOL)evaluate {
  21. if (![self.subject isKindOfClass:[NSString class]]) {
  22. return NO;
  23. }
  24. NSString *subjectString = (NSString *)self.subject;
  25. NSRange subjectStringRange = NSMakeRange(0, subjectString.length);
  26. NSError *error = nil;
  27. NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:self.pattern
  28. options:self.options
  29. error:&error];
  30. if (!regex) {
  31. NSLog(@"%s: Unable to create regular expression for pattern \"%@\": %@",
  32. __PRETTY_FUNCTION__, self.pattern, [error localizedDescription]);
  33. return NO;
  34. }
  35. NSUInteger numberOfMatches = [regex numberOfMatchesInString:subjectString
  36. options:0
  37. range:subjectStringRange];
  38. return (numberOfMatches == 1);
  39. }
  40. #pragma mark - Getting Failure Messages
  41. - (NSString *)failureMessageForShould {
  42. return [NSString stringWithFormat:@"%@ did not match pattern \"%@\"",
  43. [KWFormatter formatObject:self.subject],
  44. self.pattern];
  45. }
  46. - (NSString *)failureMessageForShouldNot {
  47. return [NSString stringWithFormat:@"expected subject not to match pattern \"%@\"",
  48. self.pattern];
  49. }
  50. - (NSString *)description {
  51. return [NSString stringWithFormat:@"match pattern \"%@\"", self.pattern];
  52. }
  53. - (void)matchPattern:(NSString *)pattern {
  54. self.pattern = pattern;
  55. self.options = 0;
  56. }
  57. - (void)matchPattern:(NSString *)pattern options:(NSRegularExpressionOptions)options {
  58. self.pattern = pattern;
  59. self.options = options;
  60. }
  61. @end