thoughtbot-clearance 0.2.0 → 0.2.2

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 (369) hide show
  1. data/Rakefile +99 -0
  2. data/TODO.textile +21 -0
  3. data/generators/clearance/templates/app/views/sessions/new.html.erb +17 -0
  4. data/generators/clearance/templates/app/views/user_mailer/change_password.html.erb +6 -0
  5. data/generators/clearance/templates/app/views/user_mailer/confirmation.html.erb +1 -0
  6. data/generators/clearance/templates/app/views/users/_form.html.erb +7 -0
  7. data/generators/clearance/templates/app/views/users/edit.html.erb +4 -0
  8. data/generators/clearance/templates/app/views/users/new.html.erb +4 -0
  9. data/generators/clearance/templates/test/functional/confirmations_controller_test.rb +5 -0
  10. data/generators/clearance/templates/test/functional/passwords_controller_test.rb +5 -0
  11. data/generators/clearance/templates/test/functional/sessions_controller_test.rb +5 -0
  12. data/lib/clearance/test/functionals/users_controller_test.rb +60 -0
  13. data/lib/clearance/version.rb +7 -0
  14. data/lib/clearance.rb +1 -0
  15. data/test/rails_root/Capfile +3 -0
  16. data/test/rails_root/Rakefile +10 -0
  17. data/test/rails_root/app/controllers/application.rb +5 -0
  18. data/test/rails_root/app/controllers/confirmations_controller.rb +3 -0
  19. data/test/rails_root/app/controllers/passwords_controller.rb +3 -0
  20. data/test/rails_root/app/controllers/sessions_controller.rb +3 -0
  21. data/test/rails_root/app/controllers/users_controller.rb +3 -0
  22. data/test/rails_root/app/helpers/application_helper.rb +5 -0
  23. data/test/rails_root/app/helpers/confirmations_helper.rb +2 -0
  24. data/test/rails_root/app/helpers/passwords_helper.rb +2 -0
  25. data/test/rails_root/app/models/user.rb +3 -0
  26. data/test/rails_root/app/models/user_mailer.rb +7 -0
  27. data/test/rails_root/app/views/confirmations/new.html.erb +4 -0
  28. data/test/rails_root/app/views/layouts/_flashes.erb +5 -0
  29. data/test/rails_root/app/views/layouts/application.html.erb +14 -0
  30. data/test/rails_root/app/views/passwords/edit.html.erb +28 -0
  31. data/test/rails_root/app/views/passwords/new.html.erb +13 -0
  32. data/test/rails_root/app/views/sessions/new.html.erb +17 -0
  33. data/test/rails_root/app/views/user_mailer/change_password.html.erb +6 -0
  34. data/test/rails_root/app/views/user_mailer/confirmation.html.erb +1 -0
  35. data/test/rails_root/app/views/users/_form.html.erb +7 -0
  36. data/test/rails_root/app/views/users/edit.html.erb +4 -0
  37. data/test/rails_root/app/views/users/new.html.erb +4 -0
  38. data/test/rails_root/config/boot.rb +109 -0
  39. data/test/rails_root/config/database.yml +13 -0
  40. data/test/rails_root/config/environment.rb +17 -0
  41. data/test/rails_root/config/environments/development.rb +20 -0
  42. data/test/rails_root/config/environments/test.rb +24 -0
  43. data/test/rails_root/config/initializers/clearance.rb +8 -0
  44. data/test/rails_root/config/initializers/inflections.rb +10 -0
  45. data/test/rails_root/config/initializers/mime_types.rb +5 -0
  46. data/test/rails_root/config/initializers/requires.rb +13 -0
  47. data/test/rails_root/config/initializers/time_formats.rb +4 -0
  48. data/test/rails_root/config/routes.rb +19 -0
  49. data/test/rails_root/db/migrate/001_create_users.rb +18 -0
  50. data/test/rails_root/doc/README_FOR_APP +2 -0
  51. data/test/rails_root/doc/README_FOR_TEMPLATE +15 -0
  52. data/test/rails_root/lib/tasks/bootstrap.rake +16 -0
  53. data/test/rails_root/lib/tasks/capistrano.rake +96 -0
  54. data/test/rails_root/lib/tasks/git_tasks.rake +129 -0
  55. data/test/rails_root/public/404.html +30 -0
  56. data/test/rails_root/public/422.html +30 -0
  57. data/test/rails_root/public/500.html +30 -0
  58. data/test/rails_root/public/dispatch.rb +10 -0
  59. data/test/rails_root/public/favicon.ico +0 -0
  60. data/test/rails_root/public/images/rails.png +0 -0
  61. data/test/rails_root/public/javascripts/application.js +2 -0
  62. data/test/rails_root/public/javascripts/builder.js +136 -0
  63. data/test/rails_root/public/javascripts/controls.js +963 -0
  64. data/test/rails_root/public/javascripts/dragdrop.js +972 -0
  65. data/test/rails_root/public/javascripts/effects.js +1120 -0
  66. data/test/rails_root/public/javascripts/prototype.js +4225 -0
  67. data/test/rails_root/public/javascripts/scriptaculous.js +58 -0
  68. data/test/rails_root/public/javascripts/slider.js +277 -0
  69. data/test/rails_root/public/javascripts/sound.js +60 -0
  70. data/test/rails_root/public/robots.txt +1 -0
  71. data/test/rails_root/script/about +3 -0
  72. data/test/rails_root/script/breakpointer +3 -0
  73. data/test/rails_root/script/console +3 -0
  74. data/test/rails_root/script/create_project.rb +52 -0
  75. data/test/rails_root/script/dbconsole +3 -0
  76. data/test/rails_root/script/destroy +3 -0
  77. data/test/rails_root/script/generate +3 -0
  78. data/test/rails_root/script/performance/benchmarker +3 -0
  79. data/test/rails_root/script/performance/profiler +3 -0
  80. data/test/rails_root/script/performance/request +3 -0
  81. data/test/rails_root/script/plugin +3 -0
  82. data/test/rails_root/script/process/inspector +3 -0
  83. data/test/rails_root/script/process/reaper +3 -0
  84. data/test/rails_root/script/process/spawner +3 -0
  85. data/test/rails_root/script/runner +3 -0
  86. data/test/rails_root/script/server +3 -0
  87. data/test/rails_root/test/factories.rb +9 -0
  88. data/test/rails_root/test/functional/confirmations_controller_test.rb +5 -0
  89. data/test/rails_root/test/functional/passwords_controller_test.rb +5 -0
  90. data/test/rails_root/test/functional/sessions_controller_test.rb +5 -0
  91. data/test/rails_root/test/functional/users_controller_test.rb +5 -0
  92. data/test/rails_root/test/test_helper.rb +27 -0
  93. data/test/rails_root/test/unit/user_mailer_test.rb +6 -0
  94. data/test/rails_root/test/unit/user_test.rb +5 -0
  95. data/test/rails_root/vendor/gems/mocha-0.9.1/COPYING +3 -0
  96. data/test/rails_root/vendor/gems/mocha-0.9.1/MIT-LICENSE +7 -0
  97. data/test/rails_root/vendor/gems/mocha-0.9.1/README +35 -0
  98. data/test/rails_root/vendor/gems/mocha-0.9.1/RELEASE +246 -0
  99. data/test/rails_root/vendor/gems/mocha-0.9.1/Rakefile +188 -0
  100. data/test/rails_root/vendor/gems/mocha-0.9.1/examples/misc.rb +44 -0
  101. data/test/rails_root/vendor/gems/mocha-0.9.1/examples/mocha.rb +26 -0
  102. data/test/rails_root/vendor/gems/mocha-0.9.1/examples/stubba.rb +65 -0
  103. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/any_instance_method.rb +54 -0
  104. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/backtrace_filter.rb +17 -0
  105. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/cardinality.rb +95 -0
  106. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/central.rb +27 -0
  107. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/change_state_side_effect.rb +19 -0
  108. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/class_method.rb +86 -0
  109. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/configuration.rb +60 -0
  110. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/deprecation.rb +22 -0
  111. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/exception_raiser.rb +17 -0
  112. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/expectation.rb +445 -0
  113. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/expectation_error.rb +15 -0
  114. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/expectation_list.rb +50 -0
  115. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/in_state_ordering_constraint.rb +19 -0
  116. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/inspect.rb +39 -0
  117. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/instance_method.rb +16 -0
  118. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/is_a.rb +9 -0
  119. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/logger.rb +15 -0
  120. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/metaclass.rb +7 -0
  121. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/method_matcher.rb +21 -0
  122. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/mock.rb +196 -0
  123. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/mockery.rb +181 -0
  124. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/module_method.rb +16 -0
  125. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/multiple_yields.rb +20 -0
  126. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/names.rb +53 -0
  127. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/no_yields.rb +11 -0
  128. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/object.rb +134 -0
  129. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/all_of.rb +42 -0
  130. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/any_of.rb +47 -0
  131. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/any_parameters.rb +40 -0
  132. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/anything.rb +33 -0
  133. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/base.rb +15 -0
  134. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/equals.rb +42 -0
  135. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/has_entries.rb +45 -0
  136. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/has_entry.rb +56 -0
  137. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/has_key.rb +42 -0
  138. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/has_value.rb +42 -0
  139. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/includes.rb +40 -0
  140. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/instance_of.rb +42 -0
  141. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/is_a.rb +42 -0
  142. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/kind_of.rb +42 -0
  143. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/not.rb +42 -0
  144. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/object.rb +9 -0
  145. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/optionally.rb +55 -0
  146. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/regexp_matches.rb +43 -0
  147. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/responds_with.rb +43 -0
  148. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/yaml_equivalent.rb +43 -0
  149. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers.rb +26 -0
  150. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameters_matcher.rb +37 -0
  151. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/pretty_parameters.rb +28 -0
  152. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/return_values.rb +31 -0
  153. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/sequence.rb +42 -0
  154. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/single_return_value.rb +17 -0
  155. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/single_yield.rb +18 -0
  156. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/standalone.rb +166 -0
  157. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/state_machine.rb +91 -0
  158. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/stubbing_error.rb +16 -0
  159. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/test_case_adapter.rb +103 -0
  160. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/unexpected_invocation.rb +18 -0
  161. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/yield_parameters.rb +31 -0
  162. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha.rb +20 -0
  163. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha_standalone.rb +2 -0
  164. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/stubba.rb +4 -0
  165. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/acceptance_test_helper.rb +38 -0
  166. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/bug_18914_test.rb +43 -0
  167. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/bug_21465_test.rb +34 -0
  168. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/bug_21563_test.rb +25 -0
  169. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/expected_invocation_count_test.rb +196 -0
  170. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/failure_messages_test.rb +64 -0
  171. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/mocha_example_test.rb +98 -0
  172. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/mocha_test_result_test.rb +84 -0
  173. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/mock_test.rb +100 -0
  174. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/mock_with_initializer_block_test.rb +51 -0
  175. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/mocked_methods_dispatch_test.rb +78 -0
  176. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/optional_parameters_test.rb +70 -0
  177. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/parameter_matcher_test.rb +179 -0
  178. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/partial_mocks_test.rb +47 -0
  179. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/return_value_test.rb +52 -0
  180. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/sequence_test.rb +186 -0
  181. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/standalone_test.rb +139 -0
  182. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/states_test.rb +70 -0
  183. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stub_any_instance_method_test.rb +195 -0
  184. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stub_class_method_test.rb +203 -0
  185. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stub_everything_test.rb +56 -0
  186. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stub_instance_method_test.rb +165 -0
  187. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stub_module_method_test.rb +163 -0
  188. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stub_test.rb +52 -0
  189. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubba_example_test.rb +102 -0
  190. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubba_test.rb +15 -0
  191. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubba_test_result_test.rb +66 -0
  192. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubbing_error_backtrace_test.rb +64 -0
  193. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubbing_method_unnecessarily_test.rb +65 -0
  194. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +130 -0
  195. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubbing_non_existent_class_method_test.rb +155 -0
  196. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubbing_non_existent_instance_method_test.rb +145 -0
  197. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubbing_non_public_any_instance_method_test.rb +130 -0
  198. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubbing_non_public_class_method_test.rb +161 -0
  199. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubbing_non_public_instance_method_test.rb +141 -0
  200. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubbing_on_non_mock_object_test.rb +64 -0
  201. data/test/rails_root/vendor/gems/mocha-0.9.1/test/active_record_test_case.rb +36 -0
  202. data/test/rails_root/vendor/gems/mocha-0.9.1/test/deprecation_disabler.rb +15 -0
  203. data/test/rails_root/vendor/gems/mocha-0.9.1/test/execution_point.rb +36 -0
  204. data/test/rails_root/vendor/gems/mocha-0.9.1/test/method_definer.rb +18 -0
  205. data/test/rails_root/vendor/gems/mocha-0.9.1/test/simple_counter.rb +13 -0
  206. data/test/rails_root/vendor/gems/mocha-0.9.1/test/test_helper.rb +11 -0
  207. data/test/rails_root/vendor/gems/mocha-0.9.1/test/test_runner.rb +33 -0
  208. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/any_instance_method_test.rb +126 -0
  209. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/array_inspect_test.rb +16 -0
  210. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/backtrace_filter_test.rb +19 -0
  211. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/cardinality_test.rb +56 -0
  212. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/central_test.rb +65 -0
  213. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/change_state_side_effect_test.rb +41 -0
  214. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/class_method_test.rb +237 -0
  215. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/date_time_inspect_test.rb +21 -0
  216. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/exception_raiser_test.rb +42 -0
  217. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/expectation_list_test.rb +57 -0
  218. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/expectation_test.rb +459 -0
  219. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/hash_inspect_test.rb +16 -0
  220. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/in_state_ordering_constraint_test.rb +43 -0
  221. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/metaclass_test.rb +22 -0
  222. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/method_matcher_test.rb +23 -0
  223. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/mock_test.rb +290 -0
  224. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/mockery_test.rb +149 -0
  225. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/multiple_yields_test.rb +18 -0
  226. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/no_yields_test.rb +18 -0
  227. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/object_inspect_test.rb +37 -0
  228. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/object_test.rb +82 -0
  229. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/all_of_test.rb +26 -0
  230. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/any_of_test.rb +26 -0
  231. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/anything_test.rb +21 -0
  232. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/equals_test.rb +25 -0
  233. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/has_entries_test.rb +51 -0
  234. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/has_entry_test.rb +62 -0
  235. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/has_key_test.rb +36 -0
  236. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/has_value_test.rb +37 -0
  237. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/includes_test.rb +25 -0
  238. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/instance_of_test.rb +25 -0
  239. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/is_a_test.rb +25 -0
  240. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/kind_of_test.rb +25 -0
  241. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/not_test.rb +26 -0
  242. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/regexp_matches_test.rb +25 -0
  243. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/responds_with_test.rb +25 -0
  244. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/stub_matcher.rb +27 -0
  245. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/yaml_equivalent_test.rb +25 -0
  246. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameters_matcher_test.rb +121 -0
  247. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/return_values_test.rb +63 -0
  248. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/sequence_test.rb +104 -0
  249. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/single_return_value_test.rb +14 -0
  250. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/single_yield_test.rb +18 -0
  251. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/state_machine_test.rb +98 -0
  252. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/string_inspect_test.rb +11 -0
  253. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/yield_parameters_test.rb +93 -0
  254. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/CONTRIBUTION_GUIDELINES.rdoc +12 -0
  255. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/MIT-LICENSE +22 -0
  256. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/README.rdoc +132 -0
  257. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/Rakefile +72 -0
  258. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/bin/convert_to_should_syntax +42 -0
  259. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/action_mailer/assertions.rb +39 -0
  260. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/action_mailer.rb +10 -0
  261. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/active_record/assertions.rb +85 -0
  262. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/active_record/macros.rb +715 -0
  263. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/active_record.rb +12 -0
  264. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/assertions.rb +45 -0
  265. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/context.rb +306 -0
  266. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/controller/formats/html.rb +201 -0
  267. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/controller/formats/xml.rb +170 -0
  268. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/controller/helpers.rb +64 -0
  269. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/controller/macros.rb +316 -0
  270. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/controller/resource_options.rb +236 -0
  271. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/controller.rb +30 -0
  272. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/helpers.rb +10 -0
  273. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/macros.rb +74 -0
  274. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/private_helpers.rb +22 -0
  275. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/proc_extensions.rb +14 -0
  276. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/rails.rb +19 -0
  277. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/tasks/list_tests.rake +24 -0
  278. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/tasks/yaml_to_shoulda.rake +28 -0
  279. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/tasks.rb +3 -0
  280. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda.rb +17 -0
  281. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/rails/init.rb +1 -0
  282. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/README +36 -0
  283. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/fail_macros.rb +34 -0
  284. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/fixtures/addresses.yml +3 -0
  285. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/fixtures/friendships.yml +0 -0
  286. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/fixtures/posts.yml +5 -0
  287. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/fixtures/products.yml +0 -0
  288. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/fixtures/taggings.yml +0 -0
  289. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/fixtures/tags.yml +9 -0
  290. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/fixtures/users.yml +6 -0
  291. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/functional/posts_controller_test.rb +104 -0
  292. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/functional/users_controller_test.rb +38 -0
  293. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/other/context_test.rb +145 -0
  294. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/other/convert_to_should_syntax_test.rb +63 -0
  295. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/other/helpers_test.rb +183 -0
  296. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/other/private_helpers_test.rb +34 -0
  297. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/other/should_test.rb +266 -0
  298. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/controllers/application.rb +25 -0
  299. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/controllers/posts_controller.rb +85 -0
  300. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/controllers/users_controller.rb +84 -0
  301. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/helpers/application_helper.rb +3 -0
  302. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/helpers/posts_helper.rb +2 -0
  303. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/helpers/users_helper.rb +2 -0
  304. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/models/address.rb +7 -0
  305. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/models/dog.rb +5 -0
  306. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/models/flea.rb +3 -0
  307. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/models/friendship.rb +4 -0
  308. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/models/post.rb +12 -0
  309. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/models/product.rb +12 -0
  310. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/models/tag.rb +8 -0
  311. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/models/tagging.rb +4 -0
  312. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/models/user.rb +28 -0
  313. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/layouts/posts.rhtml +17 -0
  314. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/layouts/users.rhtml +17 -0
  315. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/layouts/wide.html.erb +1 -0
  316. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/posts/edit.rhtml +27 -0
  317. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/posts/index.rhtml +25 -0
  318. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/posts/new.rhtml +26 -0
  319. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/posts/show.rhtml +18 -0
  320. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/users/edit.rhtml +22 -0
  321. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/users/index.rhtml +22 -0
  322. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/users/new.rhtml +21 -0
  323. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/users/show.rhtml +13 -0
  324. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/config/boot.rb +109 -0
  325. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/config/database.yml +4 -0
  326. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/config/environment.rb +14 -0
  327. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/config/environments/sqlite3.rb +0 -0
  328. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/config/initializers/new_rails_defaults.rb +15 -0
  329. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/config/initializers/shoulda.rb +8 -0
  330. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/config/routes.rb +6 -0
  331. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/001_create_users.rb +18 -0
  332. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/002_create_posts.rb +13 -0
  333. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/003_create_taggings.rb +12 -0
  334. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/004_create_tags.rb +11 -0
  335. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/005_create_dogs.rb +12 -0
  336. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/006_create_addresses.rb +14 -0
  337. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/007_create_fleas.rb +11 -0
  338. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/008_create_dogs_fleas.rb +12 -0
  339. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/009_create_products.rb +17 -0
  340. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/010_create_friendships.rb +14 -0
  341. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/schema.rb +0 -0
  342. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/log/sqlite3.log +1 -0
  343. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/public/404.html +30 -0
  344. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/public/422.html +30 -0
  345. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/public/500.html +30 -0
  346. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/script/console +3 -0
  347. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/script/generate +3 -0
  348. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/test_helper.rb +33 -0
  349. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/unit/address_test.rb +10 -0
  350. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/unit/dog_test.rb +7 -0
  351. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/unit/flea_test.rb +6 -0
  352. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/unit/friendship_test.rb +6 -0
  353. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/unit/post_test.rb +15 -0
  354. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/unit/product_test.rb +27 -0
  355. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/unit/tag_test.rb +14 -0
  356. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/unit/tagging_test.rb +6 -0
  357. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/unit/user_test.rb +52 -0
  358. data/test/rails_root/vendor/plugins/factory_girl_on_rails/MIT-LICENSE +20 -0
  359. data/test/rails_root/vendor/plugins/factory_girl_on_rails/README +34 -0
  360. data/test/rails_root/vendor/plugins/factory_girl_on_rails/init.rb +9 -0
  361. data/test/rails_root/vendor/plugins/factory_girl_on_rails/rails_generators/factory/USAGE +18 -0
  362. data/test/rails_root/vendor/plugins/factory_girl_on_rails/rails_generators/factory/factory_generator.rb +17 -0
  363. data/test/rails_root/vendor/plugins/factory_girl_on_rails/rails_generators/factory/templates/factory.rb +5 -0
  364. data/test/rails_root/vendor/plugins/factory_girl_on_rails/rails_generators/factory/templates/fixtures.yml +19 -0
  365. data/test/rails_root/vendor/plugins/factory_girl_on_rails/rails_generators/factory/templates/migration.rb +16 -0
  366. data/test/rails_root/vendor/plugins/factory_girl_on_rails/rails_generators/factory/templates/model.rb +2 -0
  367. data/test/rails_root/vendor/plugins/factory_girl_on_rails/rails_generators/factory/templates/unit_test.rb +7 -0
  368. metadata +486 -14
  369. data/clearance.gemspec +0 -50
@@ -0,0 +1,445 @@
1
+ require 'mocha/method_matcher'
2
+ require 'mocha/parameters_matcher'
3
+ require 'mocha/expectation_error'
4
+ require 'mocha/return_values'
5
+ require 'mocha/exception_raiser'
6
+ require 'mocha/yield_parameters'
7
+ require 'mocha/is_a'
8
+ require 'mocha/in_state_ordering_constraint'
9
+ require 'mocha/change_state_side_effect'
10
+ require 'mocha/cardinality'
11
+
12
+ module Mocha # :nodoc:
13
+
14
+ # Methods on expectations returned from Mock#expects, Mock#stubs, Object#expects and Object#stubs.
15
+ class Expectation
16
+
17
+ # :call-seq: times(range) -> expectation
18
+ #
19
+ # Modifies expectation so that the number of calls to the expected method must be within a specific +range+.
20
+ #
21
+ # +range+ can be specified as an exact integer or as a range of integers
22
+ # object = mock()
23
+ # object.expects(:expected_method).times(3)
24
+ # 3.times { object.expected_method }
25
+ # # => verify succeeds
26
+ #
27
+ # object = mock()
28
+ # object.expects(:expected_method).times(3)
29
+ # 2.times { object.expected_method }
30
+ # # => verify fails
31
+ #
32
+ # object = mock()
33
+ # object.expects(:expected_method).times(2..4)
34
+ # 3.times { object.expected_method }
35
+ # # => verify succeeds
36
+ #
37
+ # object = mock()
38
+ # object.expects(:expected_method).times(2..4)
39
+ # object.expected_method
40
+ # # => verify fails
41
+ def times(range)
42
+ @cardinality = Cardinality.times(range)
43
+ self
44
+ end
45
+
46
+ # :call-seq: once() -> expectation
47
+ #
48
+ # Modifies expectation so that the expected method must be called exactly once.
49
+ # Note that this is the default behaviour for an expectation, but you may wish to use it for clarity/emphasis.
50
+ # object = mock()
51
+ # object.expects(:expected_method).once
52
+ # object.expected_method
53
+ # # => verify succeeds
54
+ #
55
+ # object = mock()
56
+ # object.expects(:expected_method).once
57
+ # object.expected_method
58
+ # object.expected_method
59
+ # # => verify fails
60
+ #
61
+ # object = mock()
62
+ # object.expects(:expected_method).once
63
+ # # => verify fails
64
+ def once
65
+ @cardinality = Cardinality.exactly(1)
66
+ self
67
+ end
68
+
69
+ # :call-seq: never() -> expectation
70
+ #
71
+ # Modifies expectation so that the expected method must never be called.
72
+ # object = mock()
73
+ # object.expects(:expected_method).never
74
+ # object.expected_method
75
+ # # => verify fails
76
+ #
77
+ # object = mock()
78
+ # object.expects(:expected_method).never
79
+ # object.expected_method
80
+ # # => verify succeeds
81
+ def never
82
+ @cardinality = Cardinality.exactly(0)
83
+ self
84
+ end
85
+
86
+ # :call-seq: at_least(minimum_number_of_times) -> expectation
87
+ #
88
+ # Modifies expectation so that the expected method must be called at least a +minimum_number_of_times+.
89
+ # object = mock()
90
+ # object.expects(:expected_method).at_least(2)
91
+ # 3.times { object.expected_method }
92
+ # # => verify succeeds
93
+ #
94
+ # object = mock()
95
+ # object.expects(:expected_method).at_least(2)
96
+ # object.expected_method
97
+ # # => verify fails
98
+ def at_least(minimum_number_of_times)
99
+ @cardinality = Cardinality.at_least(minimum_number_of_times)
100
+ self
101
+ end
102
+
103
+ # :call-seq: at_least_once() -> expectation
104
+ #
105
+ # Modifies expectation so that the expected method must be called at least once.
106
+ # object = mock()
107
+ # object.expects(:expected_method).at_least_once
108
+ # object.expected_method
109
+ # # => verify succeeds
110
+ #
111
+ # object = mock()
112
+ # object.expects(:expected_method).at_least_once
113
+ # # => verify fails
114
+ def at_least_once
115
+ at_least(1)
116
+ self
117
+ end
118
+
119
+ # :call-seq: at_most(maximum_number_of_times) -> expectation
120
+ #
121
+ # Modifies expectation so that the expected method must be called at most a +maximum_number_of_times+.
122
+ # object = mock()
123
+ # object.expects(:expected_method).at_most(2)
124
+ # 2.times { object.expected_method }
125
+ # # => verify succeeds
126
+ #
127
+ # object = mock()
128
+ # object.expects(:expected_method).at_most(2)
129
+ # 3.times { object.expected_method }
130
+ # # => verify fails
131
+ def at_most(maximum_number_of_times)
132
+ @cardinality = Cardinality.at_most(maximum_number_of_times)
133
+ self
134
+ end
135
+
136
+ # :call-seq: at_most_once() -> expectation
137
+ #
138
+ # Modifies expectation so that the expected method must be called at most once.
139
+ # object = mock()
140
+ # object.expects(:expected_method).at_most_once
141
+ # object.expected_method
142
+ # # => verify succeeds
143
+ #
144
+ # object = mock()
145
+ # object.expects(:expected_method).at_most_once
146
+ # 2.times { object.expected_method }
147
+ # # => verify fails
148
+ def at_most_once()
149
+ at_most(1)
150
+ self
151
+ end
152
+
153
+ # :call-seq: with(*expected_parameters, &matching_block) -> expectation
154
+ #
155
+ # Modifies expectation so that the expected method must be called with +expected_parameters+.
156
+ # object = mock()
157
+ # object.expects(:expected_method).with(:param1, :param2)
158
+ # object.expected_method(:param1, :param2)
159
+ # # => verify succeeds
160
+ #
161
+ # object = mock()
162
+ # object.expects(:expected_method).with(:param1, :param2)
163
+ # object.expected_method(:param3)
164
+ # # => verify fails
165
+ # May be used with parameter matchers in Mocha::ParameterMatchers.
166
+ #
167
+ # If a +matching_block+ is given, the block is called with the parameters passed to the expected method.
168
+ # The expectation is matched if the block evaluates to +true+.
169
+ # object = mock()
170
+ # object.expects(:expected_method).with() { |value| value % 4 == 0 }
171
+ # object.expected_method(16)
172
+ # # => verify succeeds
173
+ #
174
+ # object = mock()
175
+ # object.expects(:expected_method).with() { |value| value % 4 == 0 }
176
+ # object.expected_method(17)
177
+ # # => verify fails
178
+ def with(*expected_parameters, &matching_block)
179
+ @parameters_matcher = ParametersMatcher.new(expected_parameters, &matching_block)
180
+ self
181
+ end
182
+
183
+ # :call-seq: yields(*parameters) -> expectation
184
+ #
185
+ # Modifies expectation so that when the expected method is called, it yields with the specified +parameters+.
186
+ # object = mock()
187
+ # object.expects(:expected_method).yields('result')
188
+ # yielded_value = nil
189
+ # object.expected_method { |value| yielded_value = value }
190
+ # yielded_value # => 'result'
191
+ # May be called multiple times on the same expectation for consecutive invocations. Also see Expectation#then.
192
+ # object = mock()
193
+ # object.stubs(:expected_method).yields(1).then.yields(2)
194
+ # yielded_values_from_first_invocation = []
195
+ # yielded_values_from_second_invocation = []
196
+ # object.expected_method { |value| yielded_values_from_first_invocation << value } # first invocation
197
+ # object.expected_method { |value| yielded_values_from_second_invocation << value } # second invocation
198
+ # yielded_values_from_first_invocation # => [1]
199
+ # yielded_values_from_second_invocation # => [2]
200
+ def yields(*parameters)
201
+ @yield_parameters.add(*parameters)
202
+ self
203
+ end
204
+
205
+ # :call-seq: multiple_yields(*parameter_groups) -> expectation
206
+ #
207
+ # Modifies expectation so that when the expected method is called, it yields multiple times per invocation with the specified +parameter_groups+.
208
+ # object = mock()
209
+ # object.expects(:expected_method).multiple_yields(['result_1', 'result_2'], ['result_3'])
210
+ # yielded_values = []
211
+ # object.expected_method { |*values| yielded_values << values }
212
+ # yielded_values # => [['result_1', 'result_2'], ['result_3]]
213
+ # May be called multiple times on the same expectation for consecutive invocations. Also see Expectation#then.
214
+ # object = mock()
215
+ # object.stubs(:expected_method).multiple_yields([1, 2], [3]).then.multiple_yields([4], [5, 6])
216
+ # yielded_values_from_first_invocation = []
217
+ # yielded_values_from_second_invocation = []
218
+ # object.expected_method { |*values| yielded_values_from_first_invocation << values } # first invocation
219
+ # object.expected_method { |*values| yielded_values_from_second_invocation << values } # second invocation
220
+ # yielded_values_from_first_invocation # => [[1, 2], [3]]
221
+ # yielded_values_from_second_invocation # => [[4], [5, 6]]
222
+ def multiple_yields(*parameter_groups)
223
+ @yield_parameters.multiple_add(*parameter_groups)
224
+ self
225
+ end
226
+
227
+ # :call-seq: returns(value) -> expectation
228
+ # returns(*values) -> expectation
229
+ #
230
+ # Modifies expectation so that when the expected method is called, it returns the specified +value+.
231
+ # object = mock()
232
+ # object.stubs(:stubbed_method).returns('result')
233
+ # object.stubbed_method # => 'result'
234
+ # object.stubbed_method # => 'result'
235
+ # If multiple +values+ are given, these are returned in turn on consecutive calls to the method.
236
+ # object = mock()
237
+ # object.stubs(:stubbed_method).returns(1, 2)
238
+ # object.stubbed_method # => 1
239
+ # object.stubbed_method # => 2
240
+ # May be called multiple times on the same expectation. Also see Expectation#then.
241
+ # object = mock()
242
+ # object.stubs(:expected_method).returns(1, 2).then.returns(3)
243
+ # object.expected_method # => 1
244
+ # object.expected_method # => 2
245
+ # object.expected_method # => 3
246
+ # May be called in conjunction with Expectation#raises on the same expectation.
247
+ # object = mock()
248
+ # object.stubs(:expected_method).returns(1, 2).then.raises(Exception)
249
+ # object.expected_method # => 1
250
+ # object.expected_method # => 2
251
+ # object.expected_method # => raises exception of class Exception1
252
+ def returns(*values)
253
+ @return_values += ReturnValues.build(*values)
254
+ self
255
+ end
256
+
257
+ # :call-seq: raises(exception = RuntimeError, message = nil) -> expectation
258
+ #
259
+ # Modifies expectation so that when the expected method is called, it raises the specified +exception+ with the specified +message+.
260
+ # object = mock()
261
+ # object.expects(:expected_method).raises(Exception, 'message')
262
+ # object.expected_method # => raises exception of class Exception and with message 'message'
263
+ # May be called multiple times on the same expectation. Also see Expectation#then.
264
+ # object = mock()
265
+ # object.stubs(:expected_method).raises(Exception1).then.raises(Exception2)
266
+ # object.expected_method # => raises exception of class Exception1
267
+ # object.expected_method # => raises exception of class Exception2
268
+ # May be called in conjunction with Expectation#returns on the same expectation.
269
+ # object = mock()
270
+ # object.stubs(:expected_method).raises(Exception).then.returns(2, 3)
271
+ # object.expected_method # => raises exception of class Exception1
272
+ # object.expected_method # => 2
273
+ # object.expected_method # => 3
274
+ def raises(exception = RuntimeError, message = nil)
275
+ @return_values += ReturnValues.new(ExceptionRaiser.new(exception, message))
276
+ self
277
+ end
278
+
279
+ # :call-seq: then() -> expectation
280
+ # then(state_machine.is(state)) -> expectation
281
+ #
282
+ # <tt>then()</tt> is used as syntactic sugar to improve readability. It has no effect on state of the expectation.
283
+ # object = mock()
284
+ # object.stubs(:expected_method).returns(1, 2).then.raises(Exception).then.returns(4)
285
+ # object.expected_method # => 1
286
+ # object.expected_method # => 2
287
+ # object.expected_method # => raises exception of class Exception
288
+ # object.expected_method # => 4
289
+ #
290
+ # <tt>then(state_machine.is(state))</tt> is used to change the +state_machine+ to the specified +state+ when the invocation occurs.
291
+ #
292
+ # See also Standalone#states, StateMachine and Expectation#when.
293
+ # power = states('power').starts_as('off')
294
+ #
295
+ # radio = mock('radio')
296
+ # radio.expects(:switch_on).then(power.is('on'))
297
+ # radio.expects(:select_channel).with('BBC Radio 4').when(power.is('on'))
298
+ # radio.expects(:adjust_volume).with(+5).when(power.is('on'))
299
+ # radio.expects(:select_channel).with('BBC World Service').when(power.is('on'))
300
+ # radio.expects(:adjust_volume).with(-5).when(power.is('on'))
301
+ # radio.expects(:switch_off).then(power.is('off'))
302
+ def then(*parameters)
303
+ if parameters.length == 1
304
+ state = parameters.first
305
+ add_side_effect(ChangeStateSideEffect.new(state))
306
+ end
307
+ self
308
+ end
309
+
310
+ # :call-seq: when(state_machine.is(state)) -> exception
311
+ #
312
+ # Constrains the expectation to occur only when the +state_machine+ is in the named +state+.
313
+ #
314
+ # See also Standalone#states, StateMachine#starts_as and Expectation#then.
315
+ # power = states('power').starts_as('off')
316
+ #
317
+ # radio = mock('radio')
318
+ # radio.expects(:switch_on).then(power.is('on'))
319
+ # radio.expects(:select_channel).with('BBC Radio 4').when(power.is('on'))
320
+ # radio.expects(:adjust_volume).with(+5).when(power.is('on'))
321
+ # radio.expects(:select_channel).with('BBC World Service').when(power.is('on'))
322
+ # radio.expects(:adjust_volume).with(-5).when(power.is('on'))
323
+ # radio.expects(:switch_off).then(power.is('off'))
324
+ def when(state_predicate)
325
+ add_ordering_constraint(InStateOrderingConstraint.new(state_predicate))
326
+ self
327
+ end
328
+
329
+ # :call-seq: in_sequence(*sequences) -> expectation
330
+ #
331
+ # Constrains this expectation so that it must be invoked at the current point in the sequence.
332
+ #
333
+ # To expect a sequence of invocations, write the expectations in order and add the in_sequence(sequence) clause to each one.
334
+ #
335
+ # Expectations in a sequence can have any invocation count.
336
+ #
337
+ # If an expectation in a sequence is stubbed, rather than expected, it can be skipped in the sequence.
338
+ #
339
+ # See also Standalone#sequence.
340
+ # breakfast = sequence('breakfast')
341
+ #
342
+ # egg = mock('egg')
343
+ # egg.expects(:crack).in_sequence(breakfast)
344
+ # egg.expects(:fry).in_sequence(breakfast)
345
+ # egg.expects(:eat).in_sequence(breakfast)
346
+ def in_sequence(*sequences)
347
+ sequences.each { |sequence| add_in_sequence_ordering_constraint(sequence) }
348
+ self
349
+ end
350
+
351
+ # :stopdoc:
352
+
353
+ attr_reader :backtrace
354
+
355
+ def initialize(mock, expected_method_name, backtrace = nil)
356
+ @mock = mock
357
+ @method_matcher = MethodMatcher.new(expected_method_name.to_sym)
358
+ @parameters_matcher = ParametersMatcher.new
359
+ @ordering_constraints = []
360
+ @side_effects = []
361
+ @cardinality, @invocation_count = Cardinality.exactly(1), 0
362
+ @return_values = ReturnValues.new
363
+ @yield_parameters = YieldParameters.new
364
+ @backtrace = backtrace || caller
365
+ end
366
+
367
+ def add_ordering_constraint(ordering_constraint)
368
+ @ordering_constraints << ordering_constraint
369
+ end
370
+
371
+ def add_in_sequence_ordering_constraint(sequence)
372
+ sequence.constrain_as_next_in_sequence(self)
373
+ end
374
+
375
+ def add_side_effect(side_effect)
376
+ @side_effects << side_effect
377
+ end
378
+
379
+ def perform_side_effects
380
+ @side_effects.each { |side_effect| side_effect.perform }
381
+ end
382
+
383
+ def in_correct_order?
384
+ @ordering_constraints.all? { |ordering_constraint| ordering_constraint.allows_invocation_now? }
385
+ end
386
+
387
+ def matches_method?(method_name)
388
+ @method_matcher.match?(method_name)
389
+ end
390
+
391
+ def match?(actual_method_name, *actual_parameters)
392
+ @method_matcher.match?(actual_method_name) && @parameters_matcher.match?(actual_parameters) && in_correct_order?
393
+ end
394
+
395
+ def invocations_allowed?
396
+ @cardinality.invocations_allowed?(@invocation_count)
397
+ end
398
+
399
+ def satisfied?
400
+ @cardinality.satisfied?(@invocation_count)
401
+ end
402
+
403
+ def invoke
404
+ @invocation_count += 1
405
+ perform_side_effects()
406
+ if block_given? then
407
+ @yield_parameters.next_invocation.each do |yield_parameters|
408
+ yield(*yield_parameters)
409
+ end
410
+ end
411
+ @return_values.next
412
+ end
413
+
414
+ def verified?(assertion_counter = nil)
415
+ assertion_counter.increment if assertion_counter && @cardinality.needs_verifying?
416
+ @cardinality.verified?(@invocation_count)
417
+ end
418
+
419
+ def used?
420
+ @cardinality.used?(@invocation_count)
421
+ end
422
+
423
+ def mocha_inspect
424
+ message = "#{@cardinality.mocha_inspect}, "
425
+ message << case @invocation_count
426
+ when 0 then "not yet invoked"
427
+ when 1 then "already invoked once"
428
+ when 2 then "already invoked twice"
429
+ else "already invoked #{@invocation_count} times"
430
+ end
431
+ message << ": "
432
+ message << method_signature
433
+ message << "; #{@ordering_constraints.map { |oc| oc.mocha_inspect }.join("; ")}" unless @ordering_constraints.empty?
434
+ message
435
+ end
436
+
437
+ def method_signature
438
+ "#{@mock.mocha_inspect}.#{@method_matcher.mocha_inspect}#{@parameters_matcher.mocha_inspect}"
439
+ end
440
+
441
+ # :startdoc:
442
+
443
+ end
444
+
445
+ end
@@ -0,0 +1,15 @@
1
+ require 'mocha/backtrace_filter'
2
+
3
+ module Mocha
4
+
5
+ class ExpectationError < StandardError
6
+
7
+ def initialize(message = nil, backtrace = [])
8
+ super(message)
9
+ filter = BacktraceFilter.new
10
+ set_backtrace(filter.filtered(backtrace))
11
+ end
12
+
13
+ end
14
+
15
+ end
@@ -0,0 +1,50 @@
1
+ module Mocha # :nodoc:
2
+
3
+ class ExpectationList
4
+
5
+ def initialize
6
+ @expectations = []
7
+ end
8
+
9
+ def add(expectation)
10
+ @expectations.unshift(expectation)
11
+ expectation
12
+ end
13
+
14
+ def matches_method?(method_name)
15
+ @expectations.any? { |expectation| expectation.matches_method?(method_name) }
16
+ end
17
+
18
+ def match(method_name, *arguments)
19
+ matching_expectations(method_name, *arguments).first
20
+ end
21
+
22
+ def match_allowing_invocation(method_name, *arguments)
23
+ matching_expectations(method_name, *arguments).detect { |e| e.invocations_allowed? }
24
+ end
25
+
26
+ def verified?(assertion_counter = nil)
27
+ @expectations.all? { |expectation| expectation.verified?(assertion_counter) }
28
+ end
29
+
30
+ def to_a
31
+ @expectations
32
+ end
33
+
34
+ def to_set
35
+ @expectations.to_set
36
+ end
37
+
38
+ def length
39
+ @expectations.length
40
+ end
41
+
42
+ private
43
+
44
+ def matching_expectations(method_name, *arguments)
45
+ @expectations.select { |e| e.match?(method_name, *arguments) }
46
+ end
47
+
48
+ end
49
+
50
+ end
@@ -0,0 +1,19 @@
1
+ module Mocha
2
+
3
+ class InStateOrderingConstraint
4
+
5
+ def initialize(state_predicate)
6
+ @state_predicate = state_predicate
7
+ end
8
+
9
+ def allows_invocation_now?
10
+ @state_predicate.active?
11
+ end
12
+
13
+ def mocha_inspect
14
+ "when #{@state_predicate.mocha_inspect}"
15
+ end
16
+
17
+ end
18
+
19
+ end
@@ -0,0 +1,39 @@
1
+ require 'date'
2
+
3
+ class Object
4
+ def mocha_inspect
5
+ address = self.__id__ * 2
6
+ address += 0x100000000 if address < 0
7
+ inspect =~ /#</ ? "#<#{self.class}:0x#{'%x' % address}>" : inspect
8
+ end
9
+ end
10
+
11
+ class String
12
+ def mocha_inspect
13
+ inspect.gsub(/\"/, "'")
14
+ end
15
+ end
16
+
17
+ class Array
18
+ def mocha_inspect
19
+ "[#{collect { |member| member.mocha_inspect }.join(', ')}]"
20
+ end
21
+ end
22
+
23
+ class Hash
24
+ def mocha_inspect
25
+ "{#{collect { |key, value| "#{key.mocha_inspect} => #{value.mocha_inspect}" }.join(', ')}}"
26
+ end
27
+ end
28
+
29
+ class Time
30
+ def mocha_inspect
31
+ "#{inspect} (#{to_f} secs)"
32
+ end
33
+ end
34
+
35
+ class Date
36
+ def mocha_inspect
37
+ to_s
38
+ end
39
+ end
@@ -0,0 +1,16 @@
1
+ require 'mocha/class_method'
2
+
3
+ module Mocha
4
+
5
+ class InstanceMethod < ClassMethod
6
+
7
+ def method_exists?(method)
8
+ return true if stubbee.public_methods(false).include?(method)
9
+ return true if stubbee.protected_methods(false).include?(method)
10
+ return true if stubbee.private_methods(false).include?(method)
11
+ return false
12
+ end
13
+
14
+ end
15
+
16
+ end
@@ -0,0 +1,9 @@
1
+ class Object
2
+
3
+ # :stopdoc:
4
+
5
+ alias_method :__is_a__, :is_a?
6
+
7
+ # :startdoc:
8
+
9
+ end
@@ -0,0 +1,15 @@
1
+ module Mocha
2
+
3
+ class Logger
4
+
5
+ def initialize(io)
6
+ @io = io
7
+ end
8
+
9
+ def warn(message)
10
+ @io.puts "WARNING: #{message}"
11
+ end
12
+
13
+ end
14
+
15
+ end
@@ -0,0 +1,7 @@
1
+ class Object
2
+
3
+ def __metaclass__
4
+ class << self; self; end
5
+ end
6
+
7
+ end
@@ -0,0 +1,21 @@
1
+ module Mocha
2
+
3
+ class MethodMatcher
4
+
5
+ attr_reader :expected_method_name
6
+
7
+ def initialize(expected_method_name)
8
+ @expected_method_name = expected_method_name
9
+ end
10
+
11
+ def match?(actual_method_name)
12
+ @expected_method_name == actual_method_name
13
+ end
14
+
15
+ def mocha_inspect
16
+ "#{@expected_method_name}"
17
+ end
18
+
19
+ end
20
+
21
+ end