second_curtain 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. checksums.yaml +8 -8
  2. data/.gitignore +20 -0
  3. data/.travis.yml +7 -0
  4. data/CHANGELOG +20 -0
  5. data/Demo/Demo/ASHAppDelegate.h +15 -0
  6. data/Demo/Demo/ASHAppDelegate.m +18 -0
  7. data/Demo/Demo/ASHViewController.h +13 -0
  8. data/Demo/Demo/ASHViewController.m +30 -0
  9. data/Demo/Demo/Base.lproj/Main.storyboard +30 -0
  10. data/Demo/Demo/Demo-Info.plist +40 -0
  11. data/Demo/Demo/Demo-Prefix.pch +16 -0
  12. data/Demo/Demo/Images.xcassets/AppIcon.appiconset/Contents.json +23 -0
  13. data/Demo/Demo/Images.xcassets/LaunchImage.launchimage/Contents.json +23 -0
  14. data/Demo/Demo/en.lproj/InfoPlist.strings +2 -0
  15. data/Demo/Demo/main.m +18 -0
  16. data/Demo/Demo.xcodeproj/project.pbxproj +517 -0
  17. data/Demo/Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  18. data/Demo/Demo.xcodeproj/project.xcworkspace/xcshareddata/Demo.xccheckout +41 -0
  19. data/Demo/Demo.xcodeproj/project.xcworkspace/xcuserdata/ash.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  20. data/Demo/Demo.xcodeproj/xcshareddata/xcschemes/Demo.xcscheme +96 -0
  21. data/Demo/Demo.xcodeproj/xcuserdata/ash.xcuserdatad/xcschemes/xcschememanagement.plist +27 -0
  22. data/Demo/Demo.xcodeproj/xcuserdata/orta.xcuserdatad/xcschemes/xcschememanagement.plist +27 -0
  23. data/Demo/Demo.xcworkspace/contents.xcworkspacedata +1 -0
  24. data/Demo/Demo.xcworkspace/xcshareddata/Demo.xccheckout +41 -0
  25. data/Demo/Demo.xcworkspace/xcuserdata/ash.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  26. data/Demo/Demo.xcworkspace/xcuserdata/orta.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  27. data/Demo/DemoTests/DemoTests-Info.plist +22 -0
  28. data/Demo/DemoTests/DemoTests.m +52 -0
  29. data/Demo/DemoTests/ReferenceImages/ASHViewControllerSpec/a_view_controller_with_a_loaded_view_should_have_a_valid_snapshot@2x.png +0 -0
  30. data/Demo/DemoTests/ReferenceImages/ASHViewControllerSpec/views_should_be_green@2x.png +0 -0
  31. data/Demo/DemoTests/ReferenceImages/ASHViewControllerSpec/views_should_be_red@2x.png +0 -0
  32. data/Demo/DemoTests/en.lproj/InfoPlist.strings +2 -0
  33. data/Demo/Makefile +15 -0
  34. data/Demo/Podfile +16 -0
  35. data/Demo/Podfile.lock +21 -0
  36. data/Demo/Pods/BuildHeaders/Expecta/EXPBackwardCompatibility.h +42 -0
  37. data/Demo/Pods/BuildHeaders/Expecta/EXPBlockDefinedMatcher.h +25 -0
  38. data/Demo/Pods/BuildHeaders/Expecta/EXPDefines.h +17 -0
  39. data/Demo/Pods/BuildHeaders/Expecta/EXPDoubleTuple.h +13 -0
  40. data/Demo/Pods/BuildHeaders/Expecta/EXPExpect.h +45 -0
  41. data/Demo/Pods/BuildHeaders/Expecta/EXPFloatTuple.h +13 -0
  42. data/Demo/Pods/BuildHeaders/Expecta/EXPMatcher.h +20 -0
  43. data/Demo/Pods/BuildHeaders/Expecta/EXPMatcherHelpers.h +4 -0
  44. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+beCloseTo.h +7 -0
  45. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+beFalsy.h +3 -0
  46. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+beGreaterThan.h +6 -0
  47. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+beGreaterThanOrEqualTo.h +6 -0
  48. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+beIdenticalTo.h +10 -0
  49. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+beInTheRangeOf.h +6 -0
  50. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+beInstanceOf.h +7 -0
  51. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+beKindOf.h +5 -0
  52. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+beLessThan.h +6 -0
  53. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+beLessThanOrEqualTo.h +6 -0
  54. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+beNil.h +5 -0
  55. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+beSubclassOf.h +5 -0
  56. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+beSupersetOf.h +4 -0
  57. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+beTruthy.h +3 -0
  58. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+beginWith.h +5 -0
  59. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+conformTo.h +3 -0
  60. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+contain.h +5 -0
  61. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+endWith.h +3 -0
  62. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+equal.h +5 -0
  63. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+haveCountOf.h +10 -0
  64. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+notify.h +4 -0
  65. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+raise.h +4 -0
  66. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+raiseWithReason.h +3 -0
  67. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers+respondTo.h +3 -0
  68. data/Demo/Pods/BuildHeaders/Expecta/EXPMatchers.h +24 -0
  69. data/Demo/Pods/BuildHeaders/Expecta/EXPUnsupportedObject.h +11 -0
  70. data/Demo/Pods/BuildHeaders/Expecta/Expecta.h +27 -0
  71. data/Demo/Pods/BuildHeaders/Expecta/ExpectaSupport.h +64 -0
  72. data/Demo/Pods/BuildHeaders/Expecta/NSObject+Expecta.h +14 -0
  73. data/Demo/Pods/BuildHeaders/Expecta/NSValue+Expecta.h +8 -0
  74. data/Demo/Pods/BuildHeaders/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h +21 -0
  75. data/Demo/Pods/BuildHeaders/FBSnapshotTestCase/FBSnapshotTestCase.h +87 -0
  76. data/Demo/Pods/BuildHeaders/FBSnapshotTestCase/FBSnapshotTestController.h +147 -0
  77. data/Demo/Pods/BuildHeaders/FBSnapshotTestCase/UIImage+Compare.h +37 -0
  78. data/Demo/Pods/BuildHeaders/FBSnapshotTestCase/UIImage+Diff.h +37 -0
  79. data/Demo/Pods/BuildHeaders/Specta/SPTExample.h +14 -0
  80. data/Demo/Pods/BuildHeaders/Specta/SPTExampleGroup.h +40 -0
  81. data/Demo/Pods/BuildHeaders/Specta/SPTNestedReporter.h +5 -0
  82. data/Demo/Pods/BuildHeaders/Specta/SPTReporter.h +33 -0
  83. data/Demo/Pods/BuildHeaders/Specta/SPTSharedExampleGroups.h +17 -0
  84. data/Demo/Pods/BuildHeaders/Specta/SPTSpec.h +21 -0
  85. data/Demo/Pods/BuildHeaders/Specta/SPTXCTestCase.h +27 -0
  86. data/Demo/Pods/BuildHeaders/Specta/SPTXCTestReporter.h +9 -0
  87. data/Demo/Pods/BuildHeaders/Specta/Specta.h +70 -0
  88. data/Demo/Pods/BuildHeaders/Specta/SpectaSupport.h +46 -0
  89. data/Demo/Pods/BuildHeaders/Specta/SpectaTypes.h +3 -0
  90. data/Demo/Pods/BuildHeaders/Specta/SpectaUtility.h +14 -0
  91. data/Demo/Pods/BuildHeaders/Specta/XCTestCase+Specta.h +4 -0
  92. data/Demo/Pods/BuildHeaders/Specta/XCTestLog+Specta.h +7 -0
  93. data/Demo/Pods/BuildHeaders/Specta/XCTestRun+Specta.h +8 -0
  94. data/Demo/Pods/Expecta/LICENSE +19 -0
  95. data/Demo/Pods/Expecta/README.md +308 -0
  96. data/Demo/Pods/Expecta/src/EXPBackwardCompatibility.h +42 -0
  97. data/Demo/Pods/Expecta/src/EXPBackwardCompatibility.m +17 -0
  98. data/Demo/Pods/Expecta/src/EXPBlockDefinedMatcher.h +25 -0
  99. data/Demo/Pods/Expecta/src/EXPBlockDefinedMatcher.m +60 -0
  100. data/Demo/Pods/Expecta/src/EXPDefines.h +17 -0
  101. data/Demo/Pods/Expecta/src/EXPDoubleTuple.h +13 -0
  102. data/Demo/Pods/Expecta/src/EXPDoubleTuple.m +42 -0
  103. data/Demo/Pods/Expecta/src/EXPExpect.h +45 -0
  104. data/Demo/Pods/Expecta/src/EXPExpect.m +214 -0
  105. data/Demo/Pods/Expecta/src/EXPFloatTuple.h +13 -0
  106. data/Demo/Pods/Expecta/src/EXPFloatTuple.m +42 -0
  107. data/Demo/Pods/Expecta/src/EXPMatcher.h +20 -0
  108. data/Demo/Pods/Expecta/src/EXPUnsupportedObject.h +11 -0
  109. data/Demo/Pods/Expecta/src/EXPUnsupportedObject.m +20 -0
  110. data/Demo/Pods/Expecta/src/Expecta.h +27 -0
  111. data/Demo/Pods/Expecta/src/Expecta.m +15 -0
  112. data/Demo/Pods/Expecta/src/ExpectaSupport.h +64 -0
  113. data/Demo/Pods/Expecta/src/ExpectaSupport.m +187 -0
  114. data/Demo/Pods/Expecta/src/NSObject+Expecta.h +14 -0
  115. data/Demo/Pods/Expecta/src/NSValue+Expecta.h +8 -0
  116. data/Demo/Pods/Expecta/src/NSValue+Expecta.m +21 -0
  117. data/Demo/Pods/Expecta/src/matchers/EXPMatcherHelpers.h +4 -0
  118. data/Demo/Pods/Expecta/src/matchers/EXPMatcherHelpers.m +9 -0
  119. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beCloseTo.h +7 -0
  120. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beCloseTo.m +49 -0
  121. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beFalsy.h +3 -0
  122. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beFalsy.m +24 -0
  123. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThan.h +6 -0
  124. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThan.m +20 -0
  125. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThanOrEqualTo.h +6 -0
  126. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThanOrEqualTo.m +20 -0
  127. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beIdenticalTo.h +10 -0
  128. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beIdenticalTo.m +24 -0
  129. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beInTheRangeOf.h +6 -0
  130. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beInTheRangeOf.m +30 -0
  131. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beInstanceOf.h +7 -0
  132. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beInstanceOf.m +27 -0
  133. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beKindOf.h +5 -0
  134. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beKindOf.m +27 -0
  135. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beLessThan.h +6 -0
  136. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beLessThan.m +20 -0
  137. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beLessThanOrEqualTo.h +6 -0
  138. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beLessThanOrEqualTo.m +20 -0
  139. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beNil.h +5 -0
  140. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beNil.m +16 -0
  141. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beSubclassOf.h +5 -0
  142. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beSubclassOf.m +27 -0
  143. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beSupersetOf.h +4 -0
  144. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beSupersetOf.m +57 -0
  145. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beTruthy.h +3 -0
  146. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beTruthy.m +24 -0
  147. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beginWith.h +5 -0
  148. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+beginWith.m +49 -0
  149. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+conformTo.h +3 -0
  150. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+conformTo.m +33 -0
  151. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+contain.h +5 -0
  152. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+contain.m +38 -0
  153. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+endWith.h +3 -0
  154. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+endWith.m +49 -0
  155. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+equal.h +5 -0
  156. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+equal.m +24 -0
  157. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+haveCountOf.h +10 -0
  158. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+haveCountOf.m +36 -0
  159. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+notify.h +4 -0
  160. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+notify.m +63 -0
  161. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+raise.h +4 -0
  162. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+raise.m +30 -0
  163. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+raiseWithReason.h +3 -0
  164. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+raiseWithReason.m +35 -0
  165. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+respondTo.h +3 -0
  166. data/Demo/Pods/Expecta/src/matchers/EXPMatchers+respondTo.m +28 -0
  167. data/Demo/Pods/Expecta/src/matchers/EXPMatchers.h +24 -0
  168. data/Demo/Pods/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h +21 -0
  169. data/Demo/Pods/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.m +308 -0
  170. data/Demo/Pods/Expecta+Snapshots/LICENSE.md +22 -0
  171. data/Demo/Pods/Expecta+Snapshots/README.md +85 -0
  172. data/Demo/Pods/FBSnapshotTestCase/FBSnapshotTestCase.h +87 -0
  173. data/Demo/Pods/FBSnapshotTestCase/FBSnapshotTestCase.m +82 -0
  174. data/Demo/Pods/FBSnapshotTestCase/FBSnapshotTestController.h +147 -0
  175. data/Demo/Pods/FBSnapshotTestCase/FBSnapshotTestController.m +376 -0
  176. data/Demo/Pods/FBSnapshotTestCase/LICENSE +29 -0
  177. data/Demo/Pods/FBSnapshotTestCase/README.md +83 -0
  178. data/Demo/Pods/FBSnapshotTestCase/UIImage+Compare.h +37 -0
  179. data/Demo/Pods/FBSnapshotTestCase/UIImage+Compare.m +87 -0
  180. data/Demo/Pods/FBSnapshotTestCase/UIImage+Diff.h +37 -0
  181. data/Demo/Pods/FBSnapshotTestCase/UIImage+Diff.m +56 -0
  182. data/Demo/Pods/Headers/Expecta/EXPBackwardCompatibility.h +42 -0
  183. data/Demo/Pods/Headers/Expecta/EXPBlockDefinedMatcher.h +25 -0
  184. data/Demo/Pods/Headers/Expecta/EXPDefines.h +17 -0
  185. data/Demo/Pods/Headers/Expecta/EXPDoubleTuple.h +13 -0
  186. data/Demo/Pods/Headers/Expecta/EXPExpect.h +45 -0
  187. data/Demo/Pods/Headers/Expecta/EXPFloatTuple.h +13 -0
  188. data/Demo/Pods/Headers/Expecta/EXPMatcher.h +20 -0
  189. data/Demo/Pods/Headers/Expecta/EXPMatcherHelpers.h +4 -0
  190. data/Demo/Pods/Headers/Expecta/EXPMatchers+beCloseTo.h +7 -0
  191. data/Demo/Pods/Headers/Expecta/EXPMatchers+beFalsy.h +3 -0
  192. data/Demo/Pods/Headers/Expecta/EXPMatchers+beGreaterThan.h +6 -0
  193. data/Demo/Pods/Headers/Expecta/EXPMatchers+beGreaterThanOrEqualTo.h +6 -0
  194. data/Demo/Pods/Headers/Expecta/EXPMatchers+beIdenticalTo.h +10 -0
  195. data/Demo/Pods/Headers/Expecta/EXPMatchers+beInTheRangeOf.h +6 -0
  196. data/Demo/Pods/Headers/Expecta/EXPMatchers+beInstanceOf.h +7 -0
  197. data/Demo/Pods/Headers/Expecta/EXPMatchers+beKindOf.h +5 -0
  198. data/Demo/Pods/Headers/Expecta/EXPMatchers+beLessThan.h +6 -0
  199. data/Demo/Pods/Headers/Expecta/EXPMatchers+beLessThanOrEqualTo.h +6 -0
  200. data/Demo/Pods/Headers/Expecta/EXPMatchers+beNil.h +5 -0
  201. data/Demo/Pods/Headers/Expecta/EXPMatchers+beSubclassOf.h +5 -0
  202. data/Demo/Pods/Headers/Expecta/EXPMatchers+beSupersetOf.h +4 -0
  203. data/Demo/Pods/Headers/Expecta/EXPMatchers+beTruthy.h +3 -0
  204. data/Demo/Pods/Headers/Expecta/EXPMatchers+beginWith.h +5 -0
  205. data/Demo/Pods/Headers/Expecta/EXPMatchers+conformTo.h +3 -0
  206. data/Demo/Pods/Headers/Expecta/EXPMatchers+contain.h +5 -0
  207. data/Demo/Pods/Headers/Expecta/EXPMatchers+endWith.h +3 -0
  208. data/Demo/Pods/Headers/Expecta/EXPMatchers+equal.h +5 -0
  209. data/Demo/Pods/Headers/Expecta/EXPMatchers+haveCountOf.h +10 -0
  210. data/Demo/Pods/Headers/Expecta/EXPMatchers+notify.h +4 -0
  211. data/Demo/Pods/Headers/Expecta/EXPMatchers+raise.h +4 -0
  212. data/Demo/Pods/Headers/Expecta/EXPMatchers+raiseWithReason.h +3 -0
  213. data/Demo/Pods/Headers/Expecta/EXPMatchers+respondTo.h +3 -0
  214. data/Demo/Pods/Headers/Expecta/EXPMatchers.h +24 -0
  215. data/Demo/Pods/Headers/Expecta/EXPUnsupportedObject.h +11 -0
  216. data/Demo/Pods/Headers/Expecta/Expecta.h +27 -0
  217. data/Demo/Pods/Headers/Expecta/ExpectaSupport.h +64 -0
  218. data/Demo/Pods/Headers/Expecta/NSObject+Expecta.h +14 -0
  219. data/Demo/Pods/Headers/Expecta/NSValue+Expecta.h +8 -0
  220. data/Demo/Pods/Headers/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h +21 -0
  221. data/Demo/Pods/Headers/FBSnapshotTestCase/FBSnapshotTestCase.h +87 -0
  222. data/Demo/Pods/Headers/FBSnapshotTestCase/FBSnapshotTestController.h +147 -0
  223. data/Demo/Pods/Headers/FBSnapshotTestCase/UIImage+Compare.h +37 -0
  224. data/Demo/Pods/Headers/FBSnapshotTestCase/UIImage+Diff.h +37 -0
  225. data/Demo/Pods/Headers/Specta/SPTExample.h +14 -0
  226. data/Demo/Pods/Headers/Specta/SPTExampleGroup.h +40 -0
  227. data/Demo/Pods/Headers/Specta/SPTNestedReporter.h +5 -0
  228. data/Demo/Pods/Headers/Specta/SPTReporter.h +33 -0
  229. data/Demo/Pods/Headers/Specta/SPTSharedExampleGroups.h +17 -0
  230. data/Demo/Pods/Headers/Specta/SPTSpec.h +21 -0
  231. data/Demo/Pods/Headers/Specta/SPTXCTestCase.h +27 -0
  232. data/Demo/Pods/Headers/Specta/SPTXCTestReporter.h +9 -0
  233. data/Demo/Pods/Headers/Specta/Specta.h +70 -0
  234. data/Demo/Pods/Headers/Specta/SpectaSupport.h +46 -0
  235. data/Demo/Pods/Headers/Specta/SpectaTypes.h +3 -0
  236. data/Demo/Pods/Headers/Specta/SpectaUtility.h +14 -0
  237. data/Demo/Pods/Headers/Specta/XCTestCase+Specta.h +4 -0
  238. data/Demo/Pods/Headers/Specta/XCTestLog+Specta.h +7 -0
  239. data/Demo/Pods/Headers/Specta/XCTestRun+Specta.h +8 -0
  240. data/Demo/Pods/Manifest.lock +21 -0
  241. data/Demo/Pods/Pods-DemoTests-EXPMatchers+FBSnapshotTest-Private.xcconfig +6 -0
  242. data/Demo/Pods/Pods-DemoTests-EXPMatchers+FBSnapshotTest-dummy.m +5 -0
  243. data/Demo/Pods/Pods-DemoTests-EXPMatchers+FBSnapshotTest-prefix.pch +5 -0
  244. data/Demo/Pods/Pods-DemoTests-EXPMatchers+FBSnapshotTest.xcconfig +2 -0
  245. data/Demo/Pods/Pods-DemoTests-Expecta+Snapshots-Private.xcconfig +6 -0
  246. data/Demo/Pods/Pods-DemoTests-Expecta+Snapshots-dummy.m +5 -0
  247. data/Demo/Pods/Pods-DemoTests-Expecta+Snapshots-prefix.pch +5 -0
  248. data/Demo/Pods/Pods-DemoTests-Expecta+Snapshots.xcconfig +2 -0
  249. data/Demo/Pods/Pods-DemoTests-Expecta-Private.xcconfig +5 -0
  250. data/Demo/Pods/Pods-DemoTests-Expecta-dummy.m +5 -0
  251. data/Demo/Pods/Pods-DemoTests-Expecta-prefix.pch +5 -0
  252. data/Demo/Pods/Pods-DemoTests-Expecta.xcconfig +1 -0
  253. data/Demo/Pods/Pods-DemoTests-FBSnapshotTestCase-Private.xcconfig +6 -0
  254. data/Demo/Pods/Pods-DemoTests-FBSnapshotTestCase-dummy.m +5 -0
  255. data/Demo/Pods/Pods-DemoTests-FBSnapshotTestCase-prefix.pch +6 -0
  256. data/Demo/Pods/Pods-DemoTests-FBSnapshotTestCase.xcconfig +2 -0
  257. data/Demo/Pods/Pods-DemoTests-Specta-Private.xcconfig +6 -0
  258. data/Demo/Pods/Pods-DemoTests-Specta-dummy.m +5 -0
  259. data/Demo/Pods/Pods-DemoTests-Specta-prefix.pch +5 -0
  260. data/Demo/Pods/Pods-DemoTests-Specta.xcconfig +2 -0
  261. data/Demo/Pods/Pods-DemoTests-acknowledgements.markdown +109 -0
  262. data/Demo/Pods/Pods-DemoTests-acknowledgements.plist +151 -0
  263. data/Demo/Pods/Pods-DemoTests-dummy.m +5 -0
  264. data/Demo/Pods/Pods-DemoTests-environment.h +32 -0
  265. data/Demo/Pods/Pods-DemoTests-resources.sh +68 -0
  266. data/Demo/Pods/Pods-DemoTests.xcconfig +6 -0
  267. data/Demo/Pods/Pods.xcodeproj/project.pbxproj +1390 -0
  268. data/Demo/Pods/Pods.xcodeproj/xcuserdata/ash.xcuserdatad/xcschemes/Pods-DemoTests-Expecta+Snapshots.xcscheme +59 -0
  269. data/Demo/Pods/Pods.xcodeproj/xcuserdata/ash.xcuserdatad/xcschemes/Pods-DemoTests-Expecta.xcscheme +59 -0
  270. data/Demo/Pods/Pods.xcodeproj/xcuserdata/ash.xcuserdatad/xcschemes/Pods-DemoTests-FBSnapshotTestCase.xcscheme +59 -0
  271. data/Demo/Pods/Pods.xcodeproj/xcuserdata/ash.xcuserdatad/xcschemes/Pods-DemoTests-Specta.xcscheme +59 -0
  272. data/Demo/Pods/Pods.xcodeproj/xcuserdata/ash.xcuserdatad/xcschemes/Pods-DemoTests.xcscheme +59 -0
  273. data/Demo/Pods/Pods.xcodeproj/xcuserdata/ash.xcuserdatad/xcschemes/xcschememanagement.plist +62 -0
  274. data/Demo/Pods/Specta/LICENSE +20 -0
  275. data/Demo/Pods/Specta/README.md +146 -0
  276. data/Demo/Pods/Specta/src/SPTExample.h +14 -0
  277. data/Demo/Pods/Specta/src/SPTExample.m +16 -0
  278. data/Demo/Pods/Specta/src/SPTExampleGroup.h +40 -0
  279. data/Demo/Pods/Specta/src/SPTExampleGroup.m +326 -0
  280. data/Demo/Pods/Specta/src/SPTNestedReporter.h +5 -0
  281. data/Demo/Pods/Specta/src/SPTNestedReporter.m +194 -0
  282. data/Demo/Pods/Specta/src/SPTReporter.h +33 -0
  283. data/Demo/Pods/Specta/src/SPTReporter.m +134 -0
  284. data/Demo/Pods/Specta/src/SPTSharedExampleGroups.h +17 -0
  285. data/Demo/Pods/Specta/src/SPTSharedExampleGroups.m +62 -0
  286. data/Demo/Pods/Specta/src/SPTSpec.h +21 -0
  287. data/Demo/Pods/Specta/src/SPTSpec.m +31 -0
  288. data/Demo/Pods/Specta/src/SPTXCTestCase.h +27 -0
  289. data/Demo/Pods/Specta/src/SPTXCTestCase.m +151 -0
  290. data/Demo/Pods/Specta/src/SPTXCTestReporter.h +9 -0
  291. data/Demo/Pods/Specta/src/SPTXCTestReporter.m +11 -0
  292. data/Demo/Pods/Specta/src/Specta.h +70 -0
  293. data/Demo/Pods/Specta/src/Specta.m +144 -0
  294. data/Demo/Pods/Specta/src/SpectaSupport.h +46 -0
  295. data/Demo/Pods/Specta/src/SpectaTypes.h +3 -0
  296. data/Demo/Pods/Specta/src/SpectaUtility.h +14 -0
  297. data/Demo/Pods/Specta/src/SpectaUtility.m +65 -0
  298. data/Demo/Pods/Specta/src/XCTestCase+Specta.h +4 -0
  299. data/Demo/Pods/Specta/src/XCTestCase+Specta.m +26 -0
  300. data/Demo/Pods/Specta/src/XCTestLog+Specta.h +7 -0
  301. data/Demo/Pods/Specta/src/XCTestLog+Specta.m +49 -0
  302. data/Demo/Pods/Specta/src/XCTestRun+Specta.h +8 -0
  303. data/Demo/Pods/Specta/src/XCTestRun+Specta.m +44 -0
  304. data/Gemfile +5 -0
  305. data/LICENSE +21 -0
  306. data/README.md +146 -0
  307. data/Rakefile +7 -0
  308. data/second_curtain.gemspec +20 -0
  309. data/spec/sample_output.txt +79 -0
  310. data/spec/second_shutter/kaleidoscope_command_spec.rb +25 -0
  311. data/spec/second_shutter/parser_spec.rb +39 -0
  312. data/spec/second_shutter/test_suite_spec.rb +32 -0
  313. data/spec/second_shutter/upload_manager_spec.rb +60 -0
  314. data/spec/second_shutter/upload_spec.rb +34 -0
  315. data/spec/second_shutter/xcode_test_case_spec.rb +22 -0
  316. metadata +315 -1
@@ -0,0 +1,27 @@
1
+ #import "EXPMatchers+beSubclassOf.h"
2
+ #import "NSValue+Expecta.h"
3
+ #import <objc/runtime.h>
4
+
5
+ EXPMatcherImplementationBegin(beSubclassOf, (Class expected)) {
6
+ __block BOOL actualIsClass = YES;
7
+
8
+ prerequisite(^BOOL {
9
+ actualIsClass = class_isMetaClass(object_getClass(actual));
10
+ return actualIsClass;
11
+ });
12
+
13
+ match(^BOOL{
14
+ return [actual isSubclassOfClass:expected];
15
+ });
16
+
17
+ failureMessageForTo(^NSString *{
18
+ if(!actualIsClass) return @"the actual value is not a Class";
19
+ return [NSString stringWithFormat:@"expected: a subclass of %@, got: a class %@, which is not a subclass of %@", [expected class], actual, [expected class]];
20
+ });
21
+
22
+ failureMessageForNotTo(^NSString *{
23
+ if(!actualIsClass) return @"the actual value is not a Class";
24
+ return [NSString stringWithFormat:@"expected: not a subclass of %@, got: a class %@, which is a subclass of %@", [expected class], actual, [expected class]];
25
+ });
26
+ }
27
+ EXPMatcherImplementationEnd
@@ -0,0 +1,4 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(beSupersetOf, (id subset));
4
+
@@ -0,0 +1,57 @@
1
+ #import "EXPMatchers+contain.h"
2
+
3
+ EXPMatcherImplementationBegin(beSupersetOf, (id subset)) {
4
+ BOOL actualIsCompatible = [actual isKindOfClass:[NSDictionary class]] || [actual respondsToSelector:@selector(containsObject:)];
5
+ BOOL subsetIsNil = (subset == nil);
6
+
7
+ // For some instances the isKindOfClass: method returns false, even though
8
+ // they are both actually dictionaries. e.g. Comparing a NSCFDictionary and a
9
+ // NSDictionary.
10
+ BOOL bothAreDictionaries = [actual isKindOfClass:[NSDictionary class]] && [subset isKindOfClass:[NSDictionary class]];
11
+
12
+ BOOL classMatches = bothAreDictionaries || [subset isKindOfClass:[actual class]];
13
+
14
+ prerequisite(^BOOL{
15
+ return actualIsCompatible && !subsetIsNil && classMatches;
16
+ });
17
+
18
+ match(^BOOL{
19
+ if(!actualIsCompatible) return NO;
20
+
21
+ if([actual isKindOfClass:[NSDictionary class]]) {
22
+ for (id key in subset) {
23
+ id actualValue = [actual valueForKey:key];
24
+ id subsetValue = [subset valueForKey:key];
25
+
26
+ if (![subsetValue isEqual:actualValue]) return NO;
27
+ }
28
+ } else {
29
+ for (id object in subset) {
30
+ if (![actual containsObject:object]) return NO;
31
+ }
32
+ }
33
+
34
+ return YES;
35
+ });
36
+
37
+ failureMessageForTo(^NSString *{
38
+ if(!actualIsCompatible) return [NSString stringWithFormat:@"%@ is not an instance of NSDictionary and does not implement -containsObject:", EXPDescribeObject(actual)];
39
+
40
+ if(subsetIsNil) return @"the expected value is nil/null";
41
+
42
+ if(!classMatches) return [NSString stringWithFormat:@"%@ does not match the class of %@", EXPDescribeObject(subset), EXPDescribeObject(actual)];
43
+
44
+ return [NSString stringWithFormat:@"expected %@ to be a superset of %@", EXPDescribeObject(actual), EXPDescribeObject(subset)];
45
+ });
46
+
47
+ failureMessageForNotTo(^NSString *{
48
+ if(!actualIsCompatible) return [NSString stringWithFormat:@"%@ is not an instance of NSDictionary and does not implement -containsObject:", EXPDescribeObject(actual)];
49
+
50
+ if(subsetIsNil) return @"the expected value is nil/null";
51
+
52
+ if(!classMatches) return [NSString stringWithFormat:@"%@ does not match the class of %@", EXPDescribeObject(subset), EXPDescribeObject(actual)];
53
+
54
+ return [NSString stringWithFormat:@"expected %@ not to be a superset of %@", EXPDescribeObject(actual), EXPDescribeObject(subset)];
55
+ });
56
+ }
57
+ EXPMatcherImplementationEnd
@@ -0,0 +1,3 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(beTruthy, (void));
@@ -0,0 +1,24 @@
1
+ #import "EXPMatchers+beTruthy.h"
2
+ #import "EXPMatcherHelpers.h"
3
+
4
+ EXPMatcherImplementationBegin(beTruthy, (void)) {
5
+ match(^BOOL{
6
+ if([actual isKindOfClass:[NSNumber class]]) {
7
+ return !![(NSNumber *)actual boolValue];
8
+ } else if([actual isKindOfClass:[NSValue class]]) {
9
+ if(EXPIsValuePointer((NSValue *)actual)) {
10
+ return !![(NSValue *)actual pointerValue];
11
+ }
12
+ }
13
+ return !!actual;
14
+ });
15
+
16
+ failureMessageForTo(^NSString *{
17
+ return [NSString stringWithFormat:@"expected: a truthy value, got: %@, which is falsy", EXPDescribeObject(actual)];
18
+ });
19
+
20
+ failureMessageForNotTo(^NSString *{
21
+ return [NSString stringWithFormat:@"expected: a non-truthy value, got: %@, which is truthy", EXPDescribeObject(actual)];
22
+ });
23
+ }
24
+ EXPMatcherImplementationEnd
@@ -0,0 +1,5 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(beginWith, (id expected));
4
+
5
+ #define startWith beginWith
@@ -0,0 +1,49 @@
1
+ #import "EXPMatchers+beginWith.h"
2
+
3
+ EXPMatcherImplementationBegin(beginWith, (id expected)) {
4
+ BOOL actualIsNil = (actual == nil);
5
+ BOOL expectedIsNil = (expected == nil);
6
+ //This condition allows the comparison of an immutable string or ordered collection to the mutable type of the same
7
+ BOOL actualAndExpectedAreCompatible = (([actual isKindOfClass:[NSString class]] && [expected isKindOfClass:[NSString class]])
8
+ || ([actual isKindOfClass:[NSArray class]] && [expected isKindOfClass:[NSArray class]])
9
+ || ([actual isKindOfClass:[NSOrderedSet class]] && [expected isKindOfClass:[NSOrderedSet class]]));
10
+
11
+ prerequisite(^BOOL {
12
+ return actualAndExpectedAreCompatible;
13
+ });
14
+
15
+ match(^BOOL {
16
+ if ([actual isKindOfClass:[NSString class]]) {
17
+ return [actual hasPrefix:expected];
18
+ } else if ([actual isKindOfClass:[NSArray class]]) {
19
+ if ([expected count] > [actual count] || [expected count] == 0) {
20
+ return NO;
21
+ }
22
+ NSArray *subArray = [actual subarrayWithRange:NSMakeRange(0, [expected count])];
23
+ return [subArray isEqualToArray:expected];
24
+ } else {
25
+ if ([expected count] > [actual count] || [expected count] == 0) {
26
+ return NO;
27
+ }
28
+
29
+ NSOrderedSet *subset = [NSOrderedSet orderedSetWithOrderedSet:actual range:NSMakeRange(0, [expected count]) copyItems:NO];
30
+ return [subset isEqualToOrderedSet:expected];
31
+ }
32
+ });
33
+
34
+ failureMessageForTo(^NSString *{
35
+ if (actualIsNil) return @"the object is nil/null";
36
+ if (expectedIsNil) return @"the expected value is nil/null";
37
+ if (!actualAndExpectedAreCompatible) return [NSString stringWithFormat:@"%@ and %@ are not instances of one of %@, %@, or %@", EXPDescribeObject(actual), EXPDescribeObject(expected), [NSString class], [NSArray class], [NSOrderedSet class]];
38
+ return [NSString stringWithFormat:@"expected: %@ to begin with %@", EXPDescribeObject(actual), EXPDescribeObject(expected)];
39
+ });
40
+
41
+ failureMessageForNotTo(^NSString *{
42
+ if (actualIsNil) return @"the object is nil/null";
43
+ if (expectedIsNil) return @"the expected value is nil/null";
44
+ if (!actualAndExpectedAreCompatible) return [NSString stringWithFormat:@"%@ and %@ are not instances of one of %@, %@, or %@", EXPDescribeObject(actual), EXPDescribeObject(expected), [NSString class], [NSArray class], [NSOrderedSet class]];
45
+
46
+ return [NSString stringWithFormat:@"expected: %@ not to begin with %@", EXPDescribeObject(actual), EXPDescribeObject(expected)];
47
+ });
48
+ }
49
+ EXPMatcherImplementationEnd
@@ -0,0 +1,3 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(conformTo, (Protocol *expected));
@@ -0,0 +1,33 @@
1
+ #import "EXPMatchers+conformTo.h"
2
+ #import "NSValue+Expecta.h"
3
+ #import <objc/runtime.h>
4
+
5
+ EXPMatcherImplementationBegin(conformTo, (Protocol *expected)) {
6
+ BOOL actualIsNil = (actual == nil);
7
+ BOOL expectedIsNil = (expected == nil);
8
+
9
+ prerequisite(^BOOL{
10
+ return !(actualIsNil || expectedIsNil);
11
+ });
12
+
13
+ match(^BOOL{
14
+ return [actual conformsToProtocol:expected];
15
+ });
16
+
17
+ failureMessageForTo(^NSString *{
18
+ if(actualIsNil) return @"the object is nil/null";
19
+ if(expectedIsNil) return @"the protocol is nil/null";
20
+
21
+ NSString *name = NSStringFromProtocol(expected);
22
+ return [NSString stringWithFormat:@"expected: %@ to conform to %@", actual, name];
23
+ });
24
+
25
+ failureMessageForNotTo(^NSString *{
26
+ if(actualIsNil) return @"the object is nil/null";
27
+ if(expectedIsNil) return @"the protocol is nil/null";
28
+
29
+ NSString *name = NSStringFromProtocol(expected);
30
+ return [NSString stringWithFormat:@"expected: %@ not to conform to %@", actual, name];
31
+ });
32
+ }
33
+ EXPMatcherImplementationEnd
@@ -0,0 +1,5 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(_contain, (id expected));
4
+ EXPMatcherInterface(contain, (id expected)); // to aid code completion
5
+ #define contain(expected) _contain(EXPObjectify((expected)))
@@ -0,0 +1,38 @@
1
+ #import "EXPMatchers+contain.h"
2
+
3
+ EXPMatcherImplementationBegin(_contain, (id expected)) {
4
+ BOOL actualIsCompatible = [actual isKindOfClass:[NSString class]] || [actual conformsToProtocol:@protocol(NSFastEnumeration)];
5
+ BOOL expectedIsNil = (expected == nil);
6
+
7
+ prerequisite(^BOOL{
8
+ return actualIsCompatible && !expectedIsNil;
9
+ });
10
+
11
+ match(^BOOL{
12
+ if(actualIsCompatible) {
13
+ if([actual isKindOfClass:[NSString class]]) {
14
+ return [(NSString *)actual rangeOfString:[expected description]].location != NSNotFound;
15
+ } else {
16
+ for (id object in actual) {
17
+ if ([object isEqual:expected]) {
18
+ return YES;
19
+ }
20
+ }
21
+ }
22
+ }
23
+ return NO;
24
+ });
25
+
26
+ failureMessageForTo(^NSString *{
27
+ if(!actualIsCompatible) return [NSString stringWithFormat:@"%@ is not an instance of NSString or NSFastEnumeration", EXPDescribeObject(actual)];
28
+ if(expectedIsNil) return @"the expected value is nil/null";
29
+ return [NSString stringWithFormat:@"expected %@ to contain %@", EXPDescribeObject(actual), EXPDescribeObject(expected)];
30
+ });
31
+
32
+ failureMessageForNotTo(^NSString *{
33
+ if(!actualIsCompatible) return [NSString stringWithFormat:@"%@ is not an instance of NSString or NSFastEnumeration", EXPDescribeObject(actual)];
34
+ if(expectedIsNil) return @"the expected value is nil/null";
35
+ return [NSString stringWithFormat:@"expected %@ not to contain %@", EXPDescribeObject(actual), EXPDescribeObject(expected)];
36
+ });
37
+ }
38
+ EXPMatcherImplementationEnd
@@ -0,0 +1,3 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(endWith, (id expected));
@@ -0,0 +1,49 @@
1
+ #import "EXPMatchers+endWith.h"
2
+
3
+ EXPMatcherImplementationBegin(endWith, (id expected)) {
4
+ BOOL actualIsNil = (actual == nil);
5
+ BOOL expectedIsNil = (expected == nil);
6
+ //This condition allows the comparison of an immutable string or ordered collection to the mutable type of the same
7
+ BOOL actualAndExpectedAreCompatible = (([actual isKindOfClass:[NSString class]] && [expected isKindOfClass:[NSString class]])
8
+ || ([actual isKindOfClass:[NSArray class]] && [expected isKindOfClass:[NSArray class]])
9
+ || ([actual isKindOfClass:[NSOrderedSet class]] && [expected isKindOfClass:[NSOrderedSet class]]));
10
+
11
+ prerequisite(^BOOL {
12
+ return actualAndExpectedAreCompatible;
13
+ });
14
+
15
+ match(^BOOL {
16
+ if ([actual isKindOfClass:[NSString class]]) {
17
+ return [actual hasSuffix:expected];
18
+ } else if ([actual isKindOfClass:[NSArray class]]) {
19
+ if ([expected count] > [actual count] || [expected count] == 0) {
20
+ return NO;
21
+ }
22
+ NSArray *subArray = [actual subarrayWithRange:NSMakeRange([actual count] - [expected count], [expected count])];
23
+ return [subArray isEqualToArray:expected];
24
+ } else {
25
+ if ([expected count] > [actual count] || [expected count] == 0) {
26
+ return NO;
27
+ }
28
+
29
+ NSOrderedSet *subset = [NSOrderedSet orderedSetWithOrderedSet:actual range:NSMakeRange([actual count] - [expected count], [expected count]) copyItems:NO];
30
+ return [subset isEqualToOrderedSet:expected];
31
+ }
32
+ });
33
+
34
+ failureMessageForTo(^NSString *{
35
+ if (actualIsNil) return @"the object is nil/null";
36
+ if (expectedIsNil) return @"the expected value is nil/null";
37
+ if (!actualAndExpectedAreCompatible) return [NSString stringWithFormat:@"%@ and %@ are not instances of one of %@, %@, or %@", EXPDescribeObject(actual), EXPDescribeObject(expected), [NSString class], [NSArray class], [NSOrderedSet class]];
38
+ return [NSString stringWithFormat:@"expected: %@ to end with %@", EXPDescribeObject(actual), EXPDescribeObject(expected)];
39
+ });
40
+
41
+ failureMessageForNotTo(^NSString *{
42
+ if (actualIsNil) return @"the object is nil/null";
43
+ if (expectedIsNil) return @"the expected value is nil/null";
44
+ if (!actualAndExpectedAreCompatible) return [NSString stringWithFormat:@"%@ and %@ are not instances of one of %@, %@, or %@", EXPDescribeObject(actual), EXPDescribeObject(expected), [NSString class], [NSArray class], [NSOrderedSet class]];
45
+
46
+ return [NSString stringWithFormat:@"expected: %@ not to end with %@", EXPDescribeObject(actual), EXPDescribeObject(expected)];
47
+ });
48
+ }
49
+ EXPMatcherImplementationEnd
@@ -0,0 +1,5 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(_equal, (id expected));
4
+ EXPMatcherInterface(equal, (id expected)); // to aid code completion
5
+ #define equal(...) _equal(EXPObjectify((__VA_ARGS__)))
@@ -0,0 +1,24 @@
1
+ #import "EXPMatchers+equal.h"
2
+ #import "EXPMatcherHelpers.h"
3
+
4
+ EXPMatcherImplementationBegin(_equal, (id expected)) {
5
+ match(^BOOL{
6
+ if((actual == expected) || [actual isEqual:expected]) {
7
+ return YES;
8
+ } else if([actual isKindOfClass:[NSNumber class]] && [expected isKindOfClass:[NSNumber class]]) {
9
+ if(EXPIsNumberFloat((NSNumber *)actual) || EXPIsNumberFloat((NSNumber *)expected)) {
10
+ return [(NSNumber *)actual floatValue] == [(NSNumber *)expected floatValue];
11
+ }
12
+ }
13
+ return NO;
14
+ });
15
+
16
+ failureMessageForTo(^NSString *{
17
+ return [NSString stringWithFormat:@"expected: %@, got: %@", EXPDescribeObject(expected), EXPDescribeObject(actual)];
18
+ });
19
+
20
+ failureMessageForNotTo(^NSString *{
21
+ return [NSString stringWithFormat:@"expected: not %@, got: %@", EXPDescribeObject(expected), EXPDescribeObject(actual)];
22
+ });
23
+ }
24
+ EXPMatcherImplementationEnd
@@ -0,0 +1,10 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(haveCountOf, (NSUInteger expected));
4
+
5
+ #define haveCount haveCountOf
6
+ #define haveACountOf haveCountOf
7
+ #define haveLength haveCountOf
8
+ #define haveLengthOf haveCountOf
9
+ #define haveALengthOf haveCountOf
10
+ #define beEmpty() haveCountOf(0)
@@ -0,0 +1,36 @@
1
+ #import "EXPMatchers+haveCountOf.h"
2
+
3
+ EXPMatcherImplementationBegin(haveCountOf, (NSUInteger expected)) {
4
+ BOOL actualIsStringy = [actual isKindOfClass:[NSString class]] || [actual isKindOfClass:[NSAttributedString class]];
5
+ BOOL actualIsCompatible = actualIsStringy || [actual respondsToSelector:@selector(count)];
6
+
7
+ prerequisite(^BOOL{
8
+ return actualIsCompatible;
9
+ });
10
+
11
+ NSUInteger (^count)(id) = ^(id actual) {
12
+ if(actualIsStringy) {
13
+ return [actual length];
14
+ } else {
15
+ return [actual count];
16
+ }
17
+ };
18
+
19
+ match(^BOOL{
20
+ if(actualIsCompatible) {
21
+ return count(actual) == expected;
22
+ }
23
+ return NO;
24
+ });
25
+
26
+ failureMessageForTo(^NSString *{
27
+ if(!actualIsCompatible) return [NSString stringWithFormat:@"%@ is not an instance of NSString, NSAttributedString, NSArray, NSSet, NSOrderedSet, or NSDictionary", EXPDescribeObject(actual)];
28
+ return [NSString stringWithFormat:@"expected %@ to have a count of %zi but got %zi", EXPDescribeObject(actual), expected, count(actual)];
29
+ });
30
+
31
+ failureMessageForNotTo(^NSString *{
32
+ if(!actualIsCompatible) return [NSString stringWithFormat:@"%@ is not an instance of NSString, NSAttributedString, NSArray, NSSet, NSOrderedSet, or NSDictionary", EXPDescribeObject(actual)];
33
+ return [NSString stringWithFormat:@"expected %@ not to have a count of %zi", EXPDescribeObject(actual), expected];
34
+ });
35
+ }
36
+ EXPMatcherImplementationEnd
@@ -0,0 +1,4 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(notify, (id expectedNotification));
4
+
@@ -0,0 +1,63 @@
1
+ #import "EXPMatchers+notify.h"
2
+
3
+ EXPMatcherImplementationBegin(notify, (id expected)){
4
+ BOOL actualIsNil = (actual == nil);
5
+ BOOL expectedIsNil = (expected == nil);
6
+ BOOL isNotification = [expected isKindOfClass:[NSNotification class]];
7
+ BOOL isName = [expected isKindOfClass:[NSString class]];
8
+
9
+ __block NSString *expectedName;
10
+ __block BOOL expectedNotificationOccurred = NO;
11
+ __block id observer;
12
+
13
+ prerequisite(^BOOL{
14
+ expectedNotificationOccurred = NO;
15
+ if (actualIsNil || expectedIsNil) return NO;
16
+ if (isNotification) {
17
+ expectedName = [expected name];
18
+ }else if(isName) {
19
+ expectedName = expected;
20
+ }else{
21
+ return NO;
22
+ }
23
+
24
+ observer = [[NSNotificationCenter defaultCenter] addObserverForName:expectedName object:nil queue:nil usingBlock:^(NSNotification *note){
25
+ if (isNotification) {
26
+ expectedNotificationOccurred |= [expected isEqual:note];
27
+ }else{
28
+ expectedNotificationOccurred = YES;
29
+ }
30
+ }];
31
+ ((EXPBasicBlock)actual)();
32
+ return YES;
33
+ });
34
+
35
+ match(^BOOL{
36
+ if(expectedNotificationOccurred) {
37
+ [[NSNotificationCenter defaultCenter] removeObserver:observer];
38
+ }
39
+ return expectedNotificationOccurred;
40
+ });
41
+
42
+ failureMessageForTo(^NSString *{
43
+ if (observer) {
44
+ [[NSNotificationCenter defaultCenter] removeObserver:observer];
45
+ }
46
+ if(actualIsNil) return @"the actual value is nil/null";
47
+ if(expectedIsNil) return @"the expected value is nil/null";
48
+ if(!(isNotification || isName)) return @"the actual value is not a notification or string";
49
+ return [NSString stringWithFormat:@"expected: %@, got: none",expectedName];
50
+ });
51
+
52
+ failureMessageForNotTo(^NSString *{
53
+ if (observer) {
54
+ [[NSNotificationCenter defaultCenter] removeObserver:observer];
55
+ }
56
+ if(actualIsNil) return @"the actual value is nil/null";
57
+ if(expectedIsNil) return @"the expected value is nil/null";
58
+ if(!(isNotification || isName)) return @"the actual value is not a notification or string";
59
+ return [NSString stringWithFormat:@"expected: none, got: %@", expectedName];
60
+ });
61
+ }
62
+
63
+ EXPMatcherImplementationEnd
@@ -0,0 +1,4 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(raise, (NSString *expectedExceptionName));
4
+ #define raiseAny() raise(nil)
@@ -0,0 +1,30 @@
1
+ #import "EXPMatchers+raise.h"
2
+ #import "EXPDefines.h"
3
+
4
+ EXPMatcherImplementationBegin(raise, (NSString *expectedExceptionName)) {
5
+ __block NSException *exceptionCaught = nil;
6
+
7
+ match(^BOOL{
8
+ BOOL expectedExceptionCaught = NO;
9
+ @try {
10
+ ((EXPBasicBlock)actual)();
11
+ } @catch(NSException *e) {
12
+ exceptionCaught = e;
13
+ expectedExceptionCaught = (expectedExceptionName == nil) || [[exceptionCaught name] isEqualToString:expectedExceptionName];
14
+ }
15
+ return expectedExceptionCaught;
16
+ });
17
+
18
+ failureMessageForTo(^NSString *{
19
+ return [NSString stringWithFormat:@"expected: %@, got: %@",
20
+ expectedExceptionName ? expectedExceptionName : @"any exception",
21
+ exceptionCaught ? [exceptionCaught name] : @"no exception"];
22
+ });
23
+
24
+ failureMessageForNotTo(^NSString *{
25
+ return [NSString stringWithFormat:@"expected: %@, got: %@",
26
+ expectedExceptionName ? [NSString stringWithFormat:@"not %@", expectedExceptionName] : @"no exception",
27
+ exceptionCaught ? [exceptionCaught name] : @"no exception"];
28
+ });
29
+ }
30
+ EXPMatcherImplementationEnd
@@ -0,0 +1,3 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(raiseWithReason, (NSString *expectedExceptionName, NSString *expectedReason));
@@ -0,0 +1,35 @@
1
+ #import "EXPMatchers+raiseWithReason.h"
2
+ #import "EXPDefines.h"
3
+
4
+ EXPMatcherImplementationBegin(raiseWithReason, (NSString *expectedExceptionName, NSString *expectedReason)) {
5
+ __block NSException *exceptionCaught = nil;
6
+
7
+ match(^BOOL{
8
+ BOOL expectedExceptionCaught = NO;
9
+ @try {
10
+ ((EXPBasicBlock)actual)();
11
+ } @catch(NSException *e) {
12
+ exceptionCaught = e;
13
+ expectedExceptionCaught = (((expectedExceptionName == nil) || [[exceptionCaught name] isEqualToString:expectedExceptionName]) &&
14
+ ((expectedReason == nil) || ([[exceptionCaught reason] isEqualToString:expectedReason])));
15
+ }
16
+ return expectedExceptionCaught;
17
+ });
18
+
19
+ failureMessageForTo(^NSString *{
20
+ return [NSString stringWithFormat:@"expected: %@ (%@), got: %@ (%@)",
21
+ expectedExceptionName ?: @"any exception",
22
+ expectedReason ?: @"any reason",
23
+ exceptionCaught ? [exceptionCaught name] : @"no exception",
24
+ exceptionCaught ? [exceptionCaught reason] : @""];
25
+ });
26
+
27
+ failureMessageForNotTo(^NSString *{
28
+ return [NSString stringWithFormat:@"expected: %@ (%@), got: %@ (%@)",
29
+ expectedExceptionName ? [NSString stringWithFormat:@"not %@", expectedExceptionName] : @"no exception",
30
+ expectedReason ? [NSString stringWithFormat:@"not '%@'", expectedReason] : @"no reason",
31
+ exceptionCaught ? [exceptionCaught name] : @"no exception",
32
+ exceptionCaught ? [exceptionCaught reason] : @"no reason"];
33
+ });
34
+ }
35
+ EXPMatcherImplementationEnd
@@ -0,0 +1,3 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(respondTo, (SEL expected));
@@ -0,0 +1,28 @@
1
+ #import "EXPMatchers+respondTo.h"
2
+ #import "EXPMatcherHelpers.h"
3
+
4
+ EXPMatcherImplementationBegin(respondTo, (SEL expected)) {
5
+ BOOL actualIsNil = (actual == nil);
6
+ BOOL expectedIsNull = (expected == NULL);
7
+
8
+ prerequisite (^BOOL {
9
+ return !(actualIsNil || expectedIsNull);
10
+ });
11
+
12
+ match(^BOOL {
13
+ return [actual respondsToSelector:expected];
14
+ });
15
+
16
+ failureMessageForTo(^NSString *{
17
+ if (actualIsNil) return @"the object is nil/null";
18
+ if (expectedIsNull) return @"the selector is null";
19
+ return [NSString stringWithFormat:@"expected: %@ to respond to %@", EXPDescribeObject(actual), NSStringFromSelector(expected)];
20
+ });
21
+
22
+ failureMessageForNotTo(^NSString *{
23
+ if (actualIsNil) return @"the object is nil/null";
24
+ if (expectedIsNull) return @"the selector is null";
25
+ return [NSString stringWithFormat:@"expected: %@ not to respond to %@", EXPDescribeObject(actual), NSStringFromSelector(expected)];
26
+ });
27
+ }
28
+ EXPMatcherImplementationEnd
@@ -0,0 +1,24 @@
1
+ #import "EXPMatchers+beNil.h"
2
+ #import "EXPMatchers+equal.h"
3
+ #import "EXPMatchers+beInstanceOf.h"
4
+ #import "EXPMatchers+beKindOf.h"
5
+ #import "EXPMatchers+beSubclassOf.h"
6
+ #import "EXPMatchers+conformTo.h"
7
+ #import "EXPMatchers+beTruthy.h"
8
+ #import "EXPMatchers+beFalsy.h"
9
+ #import "EXPMatchers+contain.h"
10
+ #import "EXPMatchers+beSupersetOf.h"
11
+ #import "EXPMatchers+haveCountOf.h"
12
+ #import "EXPMatchers+beIdenticalTo.h"
13
+ #import "EXPMatchers+beGreaterThan.h"
14
+ #import "EXPMatchers+beGreaterThanOrEqualTo.h"
15
+ #import "EXPMatchers+beLessThan.h"
16
+ #import "EXPMatchers+beLessThanOrEqualTo.h"
17
+ #import "EXPMatchers+beInTheRangeOf.h"
18
+ #import "EXPMatchers+beCloseTo.h"
19
+ #import "EXPMatchers+raise.h"
20
+ #import "EXPMatchers+raiseWithReason.h"
21
+ #import "EXPMatchers+respondTo.h"
22
+ #import "EXPMatchers+notify.h"
23
+ #import "EXPMatchers+beginWith.h"
24
+ #import "EXPMatchers+endWith.h"
@@ -0,0 +1,21 @@
1
+ //
2
+ // EXPMatchers+FBSnapshotTest.h
3
+ // Artsy
4
+ //
5
+ // Created by Daniel Doubrovkine on 1/14/14.
6
+ // Copyright (c) 2014 Artsy Inc. All rights reserved.
7
+ //
8
+
9
+ #import <Expecta/Expecta.h>
10
+
11
+ @interface EXPExpectFBSnapshotTest : NSObject
12
+ @end
13
+
14
+ /// Set the default folder for image tests to run in
15
+ extern void setGlobalReferenceImageDir(char *reference);
16
+
17
+ EXPMatcherInterface(haveValidSnapshot, (void));
18
+ EXPMatcherInterface(recordSnapshot, (void));
19
+
20
+ EXPMatcherInterface(haveValidSnapshotNamed, (NSString *snapshot));
21
+ EXPMatcherInterface(recordSnapshotNamed, (NSString *snapshot));