KWSuiteConfigurationBase.m 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //
  2. // KWSuiteConfigurationBase.m
  3. // Kiwi
  4. //
  5. // Created by Adam Sharp on 14/12/2013.
  6. // Copyright (c) 2013 Allen Ding. All rights reserved.
  7. //
  8. #import "KWSuiteConfigurationBase.h"
  9. #import "KWSpec.h"
  10. #define INVOKE(block) if((block)) { (block)(); }
  11. void beforeEachSpec(void (^block)(void));
  12. void afterEachSpec(void (^block)(void));
  13. @interface KWSuiteConfigurationBase ()
  14. @property (nonatomic, copy) void (^beforeEachSpecBlock)(void);
  15. @property (nonatomic, copy) void (^afterEachSpecBlock)(void);
  16. @end
  17. @implementation KWSuiteConfigurationBase
  18. + (instancetype)defaultConfiguration
  19. {
  20. static Class configClass;
  21. static KWSuiteConfigurationBase *defaultConfiguration;
  22. static dispatch_once_t onceToken;
  23. dispatch_once(&onceToken, ^{
  24. configClass = NSClassFromString(@"KWSuiteConfiguration");
  25. if (configClass && [configClass isSubclassOfClass:[self class]]) {
  26. defaultConfiguration = [configClass new];
  27. }
  28. });
  29. return defaultConfiguration;
  30. }
  31. - (void)configureSuite {}
  32. - (void)setUp {
  33. [self configureSuite];
  34. INVOKE(self.beforeAllSpecsBlock);
  35. }
  36. - (void)tearDown {
  37. INVOKE(self.afterAllSpecsBlock);
  38. }
  39. #pragma mark - Unused methods
  40. - (void)setUpSpec:(KWSpec *)spec {
  41. INVOKE(self.beforeEachSpecBlock);
  42. }
  43. - (void)tearDownSpec:(KWSpec *)spec {
  44. INVOKE(self.afterEachSpecBlock);
  45. }
  46. @end
  47. void beforeAllSpecs(void (^block)(void)) {
  48. [[KWSuiteConfigurationBase defaultConfiguration] setBeforeAllSpecsBlock:block];
  49. }
  50. void afterAllSpecs(void (^block)(void)) {
  51. [[KWSuiteConfigurationBase defaultConfiguration] setAfterAllSpecsBlock:block];
  52. }
  53. void beforeEachSpec(void (^block)(void)) {
  54. [[KWSuiteConfigurationBase defaultConfiguration] setBeforeEachSpecBlock:block];
  55. }
  56. void afterEachSpec(void (^block)(void)) {
  57. [[KWSuiteConfigurationBase defaultConfiguration] setAfterEachSpecBlock:block];
  58. }