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,187 @@
1
+ #import "ExpectaSupport.h"
2
+ #import "NSValue+Expecta.h"
3
+ #import "NSObject+Expecta.h"
4
+ #import "EXPUnsupportedObject.h"
5
+ #import "EXPFloatTuple.h"
6
+ #import "EXPDoubleTuple.h"
7
+ #import "EXPDefines.h"
8
+ #import <objc/runtime.h>
9
+
10
+ @interface NSException (ExpectaSenTestFailure)
11
+
12
+ + (NSException *)failureInFile:(NSString *)filename atLine:(int)lineNumber withDescription:(NSString *)formatString, ...;
13
+
14
+ @end
15
+
16
+ @interface NSObject (ExpectaXCTestRecordFailure)
17
+
18
+ // suppress warning
19
+ - (void)recordFailureWithDescription:(NSString *)description inFile:(NSString *)filename atLine:(NSUInteger)lineNumber expected:(BOOL)expected;
20
+
21
+ @end
22
+
23
+ id _EXPObjectify(const char *type, ...) {
24
+ va_list v;
25
+ va_start(v, type);
26
+ id obj = nil;
27
+ if(strcmp(type, @encode(char)) == 0) {
28
+ char actual = (char)va_arg(v, int);
29
+ obj = [NSNumber numberWithChar:actual];
30
+ } else if(strcmp(type, @encode(_Bool)) == 0) {
31
+ _Static_assert(sizeof(_Bool) <= sizeof(int), "Expected _Bool to be subject to vararg type promotion");
32
+ _Bool actual = (_Bool)va_arg(v, int);
33
+ obj = [NSNumber numberWithBool:actual];
34
+ } else if(strcmp(type, @encode(double)) == 0) {
35
+ double actual = (double)va_arg(v, double);
36
+ obj = [NSNumber numberWithDouble:actual];
37
+ } else if(strcmp(type, @encode(float)) == 0) {
38
+ float actual = (float)va_arg(v, double);
39
+ obj = [NSNumber numberWithFloat:actual];
40
+ } else if(strcmp(type, @encode(int)) == 0) {
41
+ int actual = (int)va_arg(v, int);
42
+ obj = [NSNumber numberWithInt:actual];
43
+ } else if(strcmp(type, @encode(long)) == 0) {
44
+ long actual = (long)va_arg(v, long);
45
+ obj = [NSNumber numberWithLong:actual];
46
+ } else if(strcmp(type, @encode(long long)) == 0) {
47
+ long long actual = (long long)va_arg(v, long long);
48
+ obj = [NSNumber numberWithLongLong:actual];
49
+ } else if(strcmp(type, @encode(short)) == 0) {
50
+ short actual = (short)va_arg(v, int);
51
+ obj = [NSNumber numberWithShort:actual];
52
+ } else if(strcmp(type, @encode(unsigned char)) == 0) {
53
+ unsigned char actual = (unsigned char)va_arg(v, unsigned int);
54
+ obj = [NSNumber numberWithUnsignedChar:actual];
55
+ } else if(strcmp(type, @encode(unsigned int)) == 0) {
56
+ unsigned int actual = (int)va_arg(v, unsigned int);
57
+ obj = [NSNumber numberWithUnsignedInt:actual];
58
+ } else if(strcmp(type, @encode(unsigned long)) == 0) {
59
+ unsigned long actual = (unsigned long)va_arg(v, unsigned long);
60
+ obj = [NSNumber numberWithUnsignedLong:actual];
61
+ } else if(strcmp(type, @encode(unsigned long long)) == 0) {
62
+ unsigned long long actual = (unsigned long long)va_arg(v, unsigned long long);
63
+ obj = [NSNumber numberWithUnsignedLongLong:actual];
64
+ } else if(strcmp(type, @encode(unsigned short)) == 0) {
65
+ unsigned short actual = (unsigned short)va_arg(v, unsigned int);
66
+ obj = [NSNumber numberWithUnsignedShort:actual];
67
+ } else if(strstr(type, @encode(EXPBasicBlock)) != NULL) {
68
+ // @encode(EXPBasicBlock) returns @? as of clang 4.1.
69
+ // This condition must occur before the test for id/class type,
70
+ // otherwise blocks will be treated as vanilla objects.
71
+ id actual = va_arg(v, EXPBasicBlock);
72
+ obj = [[actual copy] autorelease];
73
+ } else if((strstr(type, @encode(id)) != NULL) || (strstr(type, @encode(Class)) != 0)) {
74
+ id actual = va_arg(v, id);
75
+ obj = actual;
76
+ } else if(strcmp(type, @encode(__typeof__(nil))) == 0) {
77
+ obj = nil;
78
+ } else if(strstr(type, "ff}{") != NULL) { //TODO: of course this only works for a 2x2 e.g. CGRect
79
+ obj = [[[EXPFloatTuple alloc] initWithFloatValues:(float *)va_arg(v, float[4]) size:4] autorelease];
80
+ } else if(strstr(type, "=ff}") != NULL) {
81
+ obj = [[[EXPFloatTuple alloc] initWithFloatValues:(float *)va_arg(v, float[2]) size:2] autorelease];
82
+ } else if(strstr(type, "=ffff}") != NULL) {
83
+ obj = [[[EXPFloatTuple alloc] initWithFloatValues:(float *)va_arg(v, float[4]) size:4] autorelease];
84
+ } else if(strstr(type, "dd}{") != NULL) { //TODO: same here
85
+ obj = [[[EXPDoubleTuple alloc] initWithDoubleValues:(double *)va_arg(v, double[4]) size:4] autorelease];
86
+ } else if(strstr(type, "=dd}") != NULL) {
87
+ obj = [[[EXPDoubleTuple alloc] initWithDoubleValues:(double *)va_arg(v, double[2]) size:2] autorelease];
88
+ } else if(strstr(type, "=dddd}") != NULL) {
89
+ obj = [[[EXPDoubleTuple alloc] initWithDoubleValues:(double *)va_arg(v, double[4]) size:4] autorelease];
90
+ } else if(type[0] == '{') {
91
+ EXPUnsupportedObject *actual = [[[EXPUnsupportedObject alloc] initWithType:@"struct"] autorelease];
92
+ obj = actual;
93
+ } else if(type[0] == '(') {
94
+ EXPUnsupportedObject *actual = [[[EXPUnsupportedObject alloc] initWithType:@"union"] autorelease];
95
+ obj = actual;
96
+ } else {
97
+ void *actual = va_arg(v, void *);
98
+ obj = (actual == NULL ? nil :[NSValue valueWithPointer:actual]);
99
+ }
100
+ if([obj isKindOfClass:[NSValue class]] && ![obj isKindOfClass:[NSNumber class]]) {
101
+ [(NSValue *)obj set_EXP_objCType:type];
102
+ }
103
+ va_end(v);
104
+ return obj;
105
+ }
106
+
107
+ EXPExpect *_EXP_expect(id testCase, int lineNumber, const char *fileName, EXPIdBlock actualBlock) {
108
+ return [EXPExpect expectWithActualBlock:actualBlock testCase:testCase lineNumber:lineNumber fileName:fileName];
109
+ }
110
+
111
+ void EXPFail(id testCase, int lineNumber, const char *fileName, NSString *message) {
112
+ NSLog(@"%s:%d %@", fileName, lineNumber, message);
113
+ NSString *reason = [NSString stringWithFormat:@"%s:%d %@", fileName, lineNumber, message];
114
+ NSException *exception = [NSException exceptionWithName:@"Expecta Error" reason:reason userInfo:nil];
115
+
116
+ if(testCase && [testCase respondsToSelector:@selector(failWithException:)]) {
117
+ if([[(Class)objc_getMetaClass("NSException") class] instancesRespondToSelector:@selector(failureInFile:atLine:withDescription:)]) {
118
+ exception = [NSException failureInFile:[NSString stringWithUTF8String:fileName] atLine:lineNumber withDescription:message];
119
+ }
120
+ [testCase failWithException:exception];
121
+ } else if(testCase && [testCase respondsToSelector:@selector(recordFailureWithDescription:inFile:atLine:expected:)]){
122
+ [testCase recordFailureWithDescription:message
123
+ inFile:[NSString stringWithUTF8String:fileName]
124
+ atLine:lineNumber
125
+ expected:NO];
126
+ } else {
127
+ [exception raise];
128
+ }
129
+ }
130
+
131
+ NSString *EXPDescribeObject(id obj) {
132
+ if(obj == nil) {
133
+ return @"nil/null";
134
+ } else if([obj isKindOfClass:[NSValue class]] && ![obj isKindOfClass:[NSNumber class]]) {
135
+ const char *type = [(NSValue *)obj _EXP_objCType];
136
+ if(type) {
137
+ if(strcmp(type, @encode(SEL)) == 0) {
138
+ return [NSString stringWithFormat:@"@selector(%@)", NSStringFromSelector([obj pointerValue])];
139
+ } else if(strcmp(type, @encode(Class)) == 0) {
140
+ return NSStringFromClass([obj pointerValue]);
141
+ }
142
+ }
143
+ }
144
+ NSString *description = [obj description];
145
+ if([obj isKindOfClass:[NSArray class]]) {
146
+ NSMutableArray *arr = [NSMutableArray arrayWithCapacity:[obj count]];
147
+ for(id o in obj) {
148
+ [arr addObject:EXPDescribeObject(o)];
149
+ }
150
+ description = [NSString stringWithFormat:@"(%@)", [arr componentsJoinedByString:@", "]];
151
+ } else if([obj isKindOfClass:[NSSet class]] || [obj isKindOfClass:[NSOrderedSet class]]) {
152
+ NSMutableArray *arr = [NSMutableArray arrayWithCapacity:[obj count]];
153
+ for(id o in obj) {
154
+ [arr addObject:EXPDescribeObject(o)];
155
+ }
156
+ description = [NSString stringWithFormat:@"{(%@)}", [arr componentsJoinedByString:@", "]];
157
+ } else if([obj isKindOfClass:[NSDictionary class]]) {
158
+ NSMutableArray *arr = [NSMutableArray arrayWithCapacity:[obj count]];
159
+ for(id k in obj) {
160
+ id v = [obj objectForKey:k];
161
+ [arr addObject:[NSString stringWithFormat:@"%@ = %@;",EXPDescribeObject(k), EXPDescribeObject(v)]];
162
+ }
163
+ description = [NSString stringWithFormat:@"{%@}", [arr componentsJoinedByString:@" "]];
164
+ } else if([obj isKindOfClass:[NSAttributedString class]]) {
165
+ description = [obj string];
166
+ } else {
167
+ description = [description stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"];
168
+ }
169
+ return description;
170
+ }
171
+
172
+ void EXP_prerequisite(EXPBoolBlock block) {
173
+ [[[[NSThread currentThread] threadDictionary] objectForKey:@"EXP_currentMatcher"] setPrerequisiteBlock:block];
174
+ }
175
+
176
+ void EXP_match(EXPBoolBlock block) {
177
+ [[[[NSThread currentThread] threadDictionary] objectForKey:@"EXP_currentMatcher"] setMatchBlock:block];
178
+ }
179
+
180
+ void EXP_failureMessageForTo(EXPStringBlock block) {
181
+ [[[[NSThread currentThread] threadDictionary] objectForKey:@"EXP_currentMatcher"] setFailureMessageForToBlock:block];
182
+ }
183
+
184
+ void EXP_failureMessageForNotTo(EXPStringBlock block) {
185
+ [[[[NSThread currentThread] threadDictionary] objectForKey:@"EXP_currentMatcher"] setFailureMessageForNotToBlock:block];
186
+ }
187
+
@@ -0,0 +1,14 @@
1
+ #import <Foundation/Foundation.h>
2
+
3
+ @interface NSObject (Expecta)
4
+
5
+ #ifdef USE_XCTEST
6
+ - (void)recordFailureWithDescription:(NSString *)description
7
+ inFile:(NSString *)filename
8
+ atLine:(NSUInteger)lineNumber
9
+ expected:(BOOL)expected;
10
+ #else
11
+ - (void)failWithException:(NSException *)exception;
12
+ #endif
13
+
14
+ @end
@@ -0,0 +1,8 @@
1
+ #import <Foundation/Foundation.h>
2
+
3
+ @interface NSValue (Expecta)
4
+
5
+ - (const char *)_EXP_objCType;
6
+ - (void)set_EXP_objCType:(const char *)_EXP_objCType;
7
+
8
+ @end
@@ -0,0 +1,21 @@
1
+ #import "NSValue+Expecta.h"
2
+ #import <objc/runtime.h>
3
+ #import "Expecta.h"
4
+
5
+ EXPFixCategoriesBug(NSValue_Expecta);
6
+
7
+ @implementation NSValue (Expecta)
8
+
9
+ static char _EXP_typeKey;
10
+
11
+ - (const char *)_EXP_objCType {
12
+ return [(NSString *)objc_getAssociatedObject(self, &_EXP_typeKey) cStringUsingEncoding:NSASCIIStringEncoding];
13
+ }
14
+
15
+ - (void)set_EXP_objCType:(const char *)_EXP_objCType {
16
+ objc_setAssociatedObject(self, &_EXP_typeKey,
17
+ [NSString stringWithCString:_EXP_objCType encoding:NSASCIIStringEncoding],
18
+ OBJC_ASSOCIATION_COPY_NONATOMIC);
19
+ }
20
+
21
+ @end
@@ -0,0 +1,4 @@
1
+ #import <Foundation/Foundation.h>
2
+
3
+ BOOL EXPIsValuePointer(NSValue *value);
4
+ BOOL EXPIsNumberFloat(NSNumber *number);
@@ -0,0 +1,9 @@
1
+ #import "EXPMatcherHelpers.h"
2
+
3
+ BOOL EXPIsValuePointer(NSValue *value) {
4
+ return [value objCType][0] == @encode(void *)[0];
5
+ }
6
+
7
+ BOOL EXPIsNumberFloat(NSNumber *number) {
8
+ return strcmp([number objCType], @encode(float)) == 0;
9
+ }
@@ -0,0 +1,7 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(_beCloseToWithin, (id expected, id within));
4
+ EXPMatcherInterface(beCloseToWithin, (id expected, id within));
5
+
6
+ #define beCloseTo(expected) _beCloseToWithin(EXPObjectify((expected)), nil)
7
+ #define beCloseToWithin(expected, range) _beCloseToWithin(EXPObjectify((expected)), EXPObjectify((range)))
@@ -0,0 +1,49 @@
1
+ #import "EXPMatchers+beCloseTo.h"
2
+ #import "EXPMatcherHelpers.h"
3
+
4
+ EXPMatcherImplementationBegin(_beCloseToWithin, (id expected, id within)) {
5
+ prerequisite(^BOOL{
6
+ return [actual isKindOfClass:[NSNumber class]] &&
7
+ [expected isKindOfClass:[NSNumber class]] &&
8
+ ([within isKindOfClass:[NSNumber class]] || (within == nil));
9
+ });
10
+
11
+ match(^BOOL{
12
+ double actualValue = [actual doubleValue];
13
+ double expectedValue = [expected doubleValue];
14
+
15
+ if (within != nil) {
16
+ double withinValue = [within doubleValue];
17
+ double lowerBound = expectedValue - withinValue;
18
+ double upperBound = expectedValue + withinValue;
19
+ return (actualValue >= lowerBound) && (actualValue <= upperBound);
20
+ } else {
21
+ double diff = fabs(actualValue - expectedValue);
22
+ actualValue = fabs(actualValue);
23
+ expectedValue = fabs(expectedValue);
24
+ double largest = (expectedValue > actualValue) ? expectedValue : actualValue;
25
+ return (diff <= largest * FLT_EPSILON);
26
+ }
27
+ });
28
+
29
+ failureMessageForTo(^NSString *{
30
+ if (within) {
31
+ return [NSString stringWithFormat:@"expected %@ to be close to %@ within %@",
32
+ EXPDescribeObject(actual), EXPDescribeObject(expected), EXPDescribeObject(within)];
33
+ } else {
34
+ return [NSString stringWithFormat:@"expected %@ to be close to %@",
35
+ EXPDescribeObject(actual), EXPDescribeObject(expected)];
36
+ }
37
+ });
38
+
39
+ failureMessageForNotTo(^NSString *{
40
+ if (within) {
41
+ return [NSString stringWithFormat:@"expected %@ not to be close to %@ within %@",
42
+ EXPDescribeObject(actual), EXPDescribeObject(expected), EXPDescribeObject(within)];
43
+ } else {
44
+ return [NSString stringWithFormat:@"expected %@ not to be close to %@",
45
+ EXPDescribeObject(actual), EXPDescribeObject(expected)];
46
+ }
47
+ });
48
+ }
49
+ EXPMatcherImplementationEnd
@@ -0,0 +1,3 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(beFalsy, (void));
@@ -0,0 +1,24 @@
1
+ #import "EXPMatchers+beFalsy.h"
2
+ #import "EXPMatcherHelpers.h"
3
+
4
+ EXPMatcherImplementationBegin(beFalsy, (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 falsy value, got: %@, which is truthy", EXPDescribeObject(actual)];
18
+ });
19
+
20
+ failureMessageForNotTo(^NSString *{
21
+ return [NSString stringWithFormat:@"expected: a non-falsy value, got: %@, which is falsy", EXPDescribeObject(actual)];
22
+ });
23
+ }
24
+ EXPMatcherImplementationEnd
@@ -0,0 +1,6 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(_beGreaterThan, (id expected));
4
+ EXPMatcherInterface(beGreaterThan, (id expected));
5
+
6
+ #define beGreaterThan(expected) _beGreaterThan(EXPObjectify((expected)))
@@ -0,0 +1,20 @@
1
+ #import "EXPMatchers+beGreaterThan.h"
2
+ #import "EXPMatcherHelpers.h"
3
+
4
+ EXPMatcherImplementationBegin(_beGreaterThan, (id expected)) {
5
+ match(^BOOL{
6
+ if ([actual respondsToSelector:@selector(compare:)]) {
7
+ return [actual compare:expected] == NSOrderedDescending;
8
+ }
9
+ return NO;
10
+ });
11
+
12
+ failureMessageForTo(^NSString *{
13
+ return [NSString stringWithFormat:@"expected: %@ to be greater than %@", EXPDescribeObject(actual), EXPDescribeObject(expected)];
14
+ });
15
+
16
+ failureMessageForNotTo(^NSString *{
17
+ return [NSString stringWithFormat:@"expected: %@ not to be greater than %@", EXPDescribeObject(actual), EXPDescribeObject(expected)];
18
+ });
19
+ }
20
+ EXPMatcherImplementationEnd
@@ -0,0 +1,6 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(_beGreaterThanOrEqualTo, (id expected));
4
+ EXPMatcherInterface(beGreaterThanOrEqualTo, (id expected));
5
+
6
+ #define beGreaterThanOrEqualTo(expected) _beGreaterThanOrEqualTo(EXPObjectify((expected)))
@@ -0,0 +1,20 @@
1
+ #import "EXPMatchers+beGreaterThanOrEqualTo.h"
2
+ #import "EXPMatcherHelpers.h"
3
+
4
+ EXPMatcherImplementationBegin(_beGreaterThanOrEqualTo, (id expected)) {
5
+ match(^BOOL{
6
+ if ([actual respondsToSelector:@selector(compare:)]) {
7
+ return [actual compare:expected] != NSOrderedAscending;
8
+ }
9
+ return NO;
10
+ });
11
+
12
+ failureMessageForTo(^NSString *{
13
+ return [NSString stringWithFormat:@"expected: %@ to be greater than or equal to %@", EXPDescribeObject(actual), EXPDescribeObject(expected)];
14
+ });
15
+
16
+ failureMessageForNotTo(^NSString *{
17
+ return [NSString stringWithFormat:@"expected: %@ not to be greater than or equal to %@", EXPDescribeObject(actual), EXPDescribeObject(expected)];
18
+ });
19
+ }
20
+ EXPMatcherImplementationEnd
@@ -0,0 +1,10 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(_beIdenticalTo, (void *expected));
4
+ EXPMatcherInterface(beIdenticalTo, (void *expected)); // to aid code completion
5
+
6
+ #if __has_feature(objc_arc)
7
+ #define beIdenticalTo(expected) _beIdenticalTo((__bridge void*)expected)
8
+ #else
9
+ #define beIdenticalTo _beIdenticalTo
10
+ #endif
@@ -0,0 +1,24 @@
1
+ #import "EXPMatchers+equal.h"
2
+ #import "EXPMatcherHelpers.h"
3
+
4
+ EXPMatcherImplementationBegin(beIdenticalTo, (void *expected)) {
5
+ match(^BOOL{
6
+ if(actual == expected) {
7
+ return YES;
8
+ } else if([actual isKindOfClass:[NSValue class]] && EXPIsValuePointer((NSValue *)actual)) {
9
+ if([(NSValue *)actual pointerValue] == expected) {
10
+ return YES;
11
+ }
12
+ }
13
+ return NO;
14
+ });
15
+
16
+ failureMessageForTo(^NSString *{
17
+ return [NSString stringWithFormat:@"expected: <%p>, got: <%p>", expected, actual];
18
+ });
19
+
20
+ failureMessageForNotTo(^NSString *{
21
+ return [NSString stringWithFormat:@"expected: not <%p>, got: <%p>", expected, actual];
22
+ });
23
+ }
24
+ EXPMatcherImplementationEnd
@@ -0,0 +1,6 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(_beInTheRangeOf, (id expectedLowerBound, id expectedUpperBound));
4
+ EXPMatcherInterface(beInTheRangeOf, (id expectedLowerBound, id expectedUpperBound));
5
+
6
+ #define beInTheRangeOf(expectedLowerBound, expectedUpperBound) _beInTheRangeOf(EXPObjectify((expectedLowerBound)), EXPObjectify((expectedUpperBound)))
@@ -0,0 +1,30 @@
1
+ #import "EXPMatchers+beInTheRangeOf.h"
2
+ #import "EXPMatcherHelpers.h"
3
+
4
+ EXPMatcherImplementationBegin(_beInTheRangeOf, (id expectedLowerBound, id expectedUpperBound)) {
5
+ match(^BOOL{
6
+ if ([actual respondsToSelector:@selector(compare:)]) {
7
+ NSComparisonResult compareLowerBound = [expectedLowerBound compare: actual];
8
+ NSComparisonResult compareUpperBound = [expectedUpperBound compare: actual];
9
+ if (compareLowerBound == NSOrderedSame) {
10
+ return YES;
11
+ }
12
+ if (compareUpperBound == NSOrderedSame) {
13
+ return YES;
14
+ }
15
+ if ((compareLowerBound == NSOrderedAscending) && (compareUpperBound == NSOrderedDescending)) {
16
+ return YES;
17
+ }
18
+ }
19
+ return NO;
20
+ });
21
+
22
+ failureMessageForTo(^NSString *{
23
+ return [NSString stringWithFormat:@"expected: %@ to be in the range [%@, %@] (inclusive)", EXPDescribeObject(actual), EXPDescribeObject(expectedLowerBound), EXPDescribeObject(expectedUpperBound)];
24
+ });
25
+
26
+ failureMessageForNotTo(^NSString *{
27
+ return [NSString stringWithFormat:@"expected: %@ not to be in the range [%@, %@] (inclusive)", EXPDescribeObject(actual), EXPDescribeObject(expectedLowerBound), EXPDescribeObject(expectedUpperBound)];
28
+ });
29
+ }
30
+ EXPMatcherImplementationEnd
@@ -0,0 +1,7 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(beInstanceOf, (Class expected));
4
+
5
+ #define beAnInstanceOf beInstanceOf
6
+ #define beMemberOf beInstanceOf
7
+ #define beAMemberOf beInstanceOf
@@ -0,0 +1,27 @@
1
+ #import "EXPMatchers+beInstanceOf.h"
2
+
3
+ EXPMatcherImplementationBegin(beInstanceOf, (Class expected)) {
4
+ BOOL actualIsNil = (actual == nil);
5
+ BOOL expectedIsNil = (expected == nil);
6
+
7
+ prerequisite(^BOOL{
8
+ return !(actualIsNil || expectedIsNil);
9
+ });
10
+
11
+ match(^BOOL{
12
+ return [actual isMemberOfClass:expected];
13
+ });
14
+
15
+ failureMessageForTo(^NSString *{
16
+ if(actualIsNil) return @"the actual value is nil/null";
17
+ if(expectedIsNil) return @"the expected value is nil/null";
18
+ return [NSString stringWithFormat:@"expected: an instance of %@, got: an instance of %@", [expected class], [actual class]];
19
+ });
20
+
21
+ failureMessageForNotTo(^NSString *{
22
+ if(actualIsNil) return @"the actual value is nil/null";
23
+ if(expectedIsNil) return @"the expected value is nil/null";
24
+ return [NSString stringWithFormat:@"expected: not an instance of %@, got: an instance of %@", [expected class], [actual class]];
25
+ });
26
+ }
27
+ EXPMatcherImplementationEnd
@@ -0,0 +1,5 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(beKindOf, (Class expected));
4
+
5
+ #define beAKindOf beKindOf
@@ -0,0 +1,27 @@
1
+ #import "EXPMatchers+beKindOf.h"
2
+
3
+ EXPMatcherImplementationBegin(beKindOf, (Class expected)) {
4
+ BOOL actualIsNil = (actual == nil);
5
+ BOOL expectedIsNil = (expected == nil);
6
+
7
+ prerequisite(^BOOL{
8
+ return !(actualIsNil || expectedIsNil);
9
+ });
10
+
11
+ match(^BOOL{
12
+ return [actual isKindOfClass:expected];
13
+ });
14
+
15
+ failureMessageForTo(^NSString *{
16
+ if(actualIsNil) return @"the actual value is nil/null";
17
+ if(expectedIsNil) return @"the expected value is nil/null";
18
+ return [NSString stringWithFormat:@"expected: a kind of %@, got: an instance of %@, which is not a kind of %@", [expected class], [actual class], [expected class]];
19
+ });
20
+
21
+ failureMessageForNotTo(^NSString *{
22
+ if(actualIsNil) return @"the actual value is nil/null";
23
+ if(expectedIsNil) return @"the expected value is nil/null";
24
+ return [NSString stringWithFormat:@"expected: not a kind of %@, got: an instance of %@, which is a kind of %@", [expected class], [actual class], [expected class]];
25
+ });
26
+ }
27
+ EXPMatcherImplementationEnd
@@ -0,0 +1,6 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(_beLessThan, (id expected));
4
+ EXPMatcherInterface(beLessThan, (id expected));
5
+
6
+ #define beLessThan(expected) _beLessThan(EXPObjectify((expected)))
@@ -0,0 +1,20 @@
1
+ #import "EXPMatchers+beLessThan.h"
2
+ #import "EXPMatcherHelpers.h"
3
+
4
+ EXPMatcherImplementationBegin(_beLessThan, (id expected)) {
5
+ match(^BOOL{
6
+ if ([actual respondsToSelector:@selector(compare:)]) {
7
+ return [actual compare:expected] == NSOrderedAscending;
8
+ }
9
+ return NO;
10
+ });
11
+
12
+ failureMessageForTo(^NSString *{
13
+ return [NSString stringWithFormat:@"expected: %@ to be less than %@", EXPDescribeObject(actual), EXPDescribeObject(expected)];
14
+ });
15
+
16
+ failureMessageForNotTo(^NSString *{
17
+ return [NSString stringWithFormat:@"expected: %@ not to be less than %@", EXPDescribeObject(actual), EXPDescribeObject(expected)];
18
+ });
19
+ }
20
+ EXPMatcherImplementationEnd
@@ -0,0 +1,6 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(_beLessThanOrEqualTo, (id expected));
4
+ EXPMatcherInterface(beLessThanOrEqualTo, (id expected));
5
+
6
+ #define beLessThanOrEqualTo(expected) _beLessThanOrEqualTo(EXPObjectify((expected)))
@@ -0,0 +1,20 @@
1
+ #import "EXPMatchers+beLessThanOrEqualTo.h"
2
+ #import "EXPMatcherHelpers.h"
3
+
4
+ EXPMatcherImplementationBegin(_beLessThanOrEqualTo, (id expected)) {
5
+ match(^BOOL{
6
+ if ([actual respondsToSelector:@selector(compare:)]) {
7
+ return [actual compare:expected] != NSOrderedDescending;
8
+ }
9
+ return NO;
10
+ });
11
+
12
+ failureMessageForTo(^NSString *{
13
+ return [NSString stringWithFormat:@"expected: %@ to be less than or equal to %@", EXPDescribeObject(actual), EXPDescribeObject(expected)];
14
+ });
15
+
16
+ failureMessageForNotTo(^NSString *{
17
+ return [NSString stringWithFormat:@"expected: %@ not to be less than or equal to %@", EXPDescribeObject(actual), EXPDescribeObject(expected)];
18
+ });
19
+ }
20
+ EXPMatcherImplementationEnd
@@ -0,0 +1,5 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(beNil, (void));
4
+
5
+ #define beNull beNil
@@ -0,0 +1,16 @@
1
+ #import "EXPMatchers+beNil.h"
2
+
3
+ EXPMatcherImplementationBegin(beNil, (void)) {
4
+ match(^BOOL{
5
+ return actual == nil;
6
+ });
7
+
8
+ failureMessageForTo(^NSString *{
9
+ return [NSString stringWithFormat:@"expected: nil/null, got: %@", EXPDescribeObject(actual)];
10
+ });
11
+
12
+ failureMessageForNotTo(^NSString *{
13
+ return [NSString stringWithFormat:@"expected: not nil/null, got: %@", EXPDescribeObject(actual)];
14
+ });
15
+ }
16
+ EXPMatcherImplementationEnd
@@ -0,0 +1,5 @@
1
+ #import "Expecta.h"
2
+
3
+ EXPMatcherInterface(beSubclassOf, (Class expected));
4
+
5
+ #define beASubclassOf beSubclassOf