rr 1.1.1 → 3.0.0

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 (223) hide show
  1. checksums.yaml +5 -5
  2. data/Appraisals +6 -0
  3. data/CHANGES.md +102 -1
  4. data/CREDITS.md +5 -0
  5. data/Gemfile +3 -0
  6. data/README.md +91 -110
  7. data/Rakefile +43 -0
  8. data/doc/02_syntax_comparison.md +1 -0
  9. data/gemfiles/ruby_19_rspec_2.gemfile +14 -0
  10. data/gemfiles/ruby_19_rspec_2.gemfile.lock +49 -0
  11. data/gemfiles/ruby_19_rspec_2_rails_4.gemfile +15 -0
  12. data/gemfiles/ruby_19_rspec_2_rails_4.gemfile.lock +119 -0
  13. data/lib/rr/class_instance_method_defined.rb +1 -1
  14. data/lib/rr/core_ext/array.rb +2 -0
  15. data/lib/rr/core_ext/hash.rb +2 -0
  16. data/lib/rr/deprecations.rb +97 -0
  17. data/lib/rr/double.rb +28 -10
  18. data/lib/rr/double_definitions/double_definition.rb +39 -16
  19. data/lib/rr/double_definitions/double_definition_create.rb +5 -5
  20. data/lib/rr/double_definitions/double_definition_create_blank_slate.rb +10 -4
  21. data/lib/rr/double_definitions/double_injections/any_instance_of.rb +1 -1
  22. data/lib/rr/double_definitions/double_injections/instance.rb +2 -2
  23. data/lib/rr/double_definitions/strategies/strategy.rb +27 -8
  24. data/lib/rr/double_definitions/strategies/verification/mock.rb +8 -2
  25. data/lib/rr/double_matches.rb +4 -3
  26. data/lib/rr/dsl.rb +152 -0
  27. data/lib/rr/expectations/any_argument_expectation.rb +4 -4
  28. data/lib/rr/expectations/argument_equality_expectation.rb +43 -5
  29. data/lib/rr/injections/double_injection.rb +67 -19
  30. data/lib/rr/injections/method_missing_injection.rb +37 -6
  31. data/lib/rr/integrations.rb +13 -12
  32. data/lib/rr/integrations/decorator.rb +4 -1
  33. data/lib/rr/integrations/minitest_4.rb +1 -1
  34. data/lib/rr/integrations/minitest_4_active_support.rb +1 -1
  35. data/lib/rr/integrations/rspec/invocation_matcher.rb +0 -8
  36. data/lib/rr/integrations/rspec_2.rb +28 -3
  37. data/lib/rr/keyword_arguments.rb +15 -0
  38. data/lib/rr/method_dispatches/base_method_dispatch.rb +22 -5
  39. data/lib/rr/method_dispatches/method_dispatch.rb +21 -10
  40. data/lib/rr/method_dispatches/method_missing_dispatch.rb +14 -5
  41. data/lib/rr/recorded_call.rb +35 -0
  42. data/lib/rr/recorded_calls.rb +23 -9
  43. data/lib/rr/space.rb +15 -5
  44. data/lib/rr/spy_verification.rb +13 -5
  45. data/lib/rr/version.rb +1 -2
  46. data/lib/rr/wildcard_matchers.rb +10 -10
  47. data/lib/rr/without_autohook.rb +7 -14
  48. data/rr.gemspec +14 -5
  49. data/spec/custom_formatter_for_rspec.rb +18 -0
  50. data/spec/custom_formatter_for_rspec_2.rb +40 -0
  51. data/spec/defines_spec_suite_tasks.rb +57 -0
  52. data/spec/fixtures/rubygems_patch_for_187.rb +598 -0
  53. data/spec/global_helper.rb +38 -0
  54. data/spec/spec.opts +3 -0
  55. data/spec/spec_suite_configuration.rb +126 -0
  56. data/spec/spec_suite_runner.rb +47 -0
  57. data/spec/suites.yml +10 -0
  58. data/spec/suites/rspec_2/functional/any_instance_of_spec.rb +147 -0
  59. data/spec/suites/rspec_2/functional/dont_allow_spec.rb +17 -0
  60. data/spec/suites/rspec_2/functional/mock_bang_spec.rb +20 -0
  61. data/spec/suites/rspec_2/functional/mock_instance_of_spec.rb +14 -0
  62. data/spec/suites/rspec_2/functional/mock_instance_of_strong_spec.rb +15 -0
  63. data/spec/suites/rspec_2/functional/mock_proxy_instance_of_spec.rb +15 -0
  64. data/spec/suites/rspec_2/functional/mock_proxy_spec.rb +14 -0
  65. data/spec/suites/rspec_2/functional/mock_spec.rb +17 -0
  66. data/spec/suites/rspec_2/functional/mock_strong_spec.rb +14 -0
  67. data/spec/suites/rspec_2/functional/received_spec.rb +16 -0
  68. data/spec/suites/rspec_2/functional/spy_spec.rb +102 -0
  69. data/spec/suites/rspec_2/functional/stub_bang_spec.rb +20 -0
  70. data/spec/suites/rspec_2/functional/stub_instance_of_spec.rb +15 -0
  71. data/spec/suites/rspec_2/functional/stub_instance_of_strong_spec.rb +15 -0
  72. data/spec/suites/rspec_2/functional/stub_proxy_instance_of_spec.rb +16 -0
  73. data/spec/suites/rspec_2/functional/stub_proxy_spec.rb +45 -0
  74. data/spec/suites/rspec_2/functional/stub_spec.rb +71 -0
  75. data/spec/suites/rspec_2/functional/stub_strong_spec.rb +15 -0
  76. data/spec/suites/rspec_2/functional/wildcard_matchers_spec.rb +128 -0
  77. data/spec/suites/rspec_2/helper.rb +28 -0
  78. data/spec/suites/rspec_2/integration/minitest_4_spec.rb +109 -0
  79. data/spec/suites/rspec_2/integration/minitest_spec.rb +109 -0
  80. data/spec/suites/rspec_2/spec_helper.rb +3 -0
  81. data/spec/suites/rspec_2/support/matchers/wildcard_matcher_matchers.rb +32 -0
  82. data/spec/suites/rspec_2/support/mixins/double_definition_creator_helpers.rb +173 -0
  83. data/spec/suites/rspec_2/support/mixins/mock_definition_creator_helpers.rb +45 -0
  84. data/spec/suites/rspec_2/support/mixins/proxy_definition_creator_helpers.rb +33 -0
  85. data/spec/suites/rspec_2/support/mixins/stub_creator_helpers.rb +43 -0
  86. data/spec/suites/rspec_2/support/mixins/stub_definition_creator_helpers.rb +45 -0
  87. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/argument_expectations_with_never_called_qualifier.rb +39 -0
  88. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/argument_expectations_with_times_called_qualifier.rb +50 -0
  89. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/argument_expectations_without_qualifiers.rb +131 -0
  90. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/dont_allow.rb +148 -0
  91. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_instance_of.rb +26 -0
  92. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_instance_of_strong.rb +28 -0
  93. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_proxy.rb +11 -0
  94. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_strong.rb +37 -0
  95. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mocking.rb +107 -0
  96. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_instance_of.rb +32 -0
  97. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_instance_of_strong.rb +39 -0
  98. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_proxy.rb +11 -0
  99. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_strong.rb +37 -0
  100. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stubbing.rb +57 -0
  101. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/array_flatten_bug.rb +35 -0
  102. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/block_form.rb +31 -0
  103. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/comparing_arity.rb +63 -0
  104. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/object_is_proxy.rb +43 -0
  105. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/sequential_invocations.rb +26 -0
  106. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/setting_implementation.rb +51 -0
  107. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/yields.rb +81 -0
  108. data/spec/suites/rspec_2/support/shared_examples/space.rb +13 -0
  109. data/spec/suites/rspec_2/support/shared_examples/times_called_expectation.rb +9 -0
  110. data/spec/suites/rspec_2/unit/core_ext/array_spec.rb +39 -0
  111. data/spec/suites/rspec_2/unit/core_ext/enumerable_spec.rb +53 -0
  112. data/spec/suites/rspec_2/unit/core_ext/hash_spec.rb +55 -0
  113. data/spec/suites/rspec_2/unit/core_ext/range_spec.rb +41 -0
  114. data/spec/suites/rspec_2/unit/core_ext/regexp_spec.rb +41 -0
  115. data/spec/suites/rspec_2/unit/deprecations_spec.rb +27 -0
  116. data/spec/suites/rspec_2/unit/double_definitions/child_double_definition_create_spec.rb +114 -0
  117. data/spec/suites/rspec_2/unit/double_definitions/double_definition_create_blank_slate_spec.rb +93 -0
  118. data/spec/suites/rspec_2/unit/double_definitions/double_definition_create_spec.rb +446 -0
  119. data/spec/suites/rspec_2/unit/dsl/double_creators_spec.rb +133 -0
  120. data/spec/suites/rspec_2/unit/dsl/space_spec.rb +99 -0
  121. data/spec/suites/rspec_2/unit/dsl/wildcard_matchers_spec.rb +67 -0
  122. data/spec/suites/rspec_2/unit/errors/rr_error_spec.rb +67 -0
  123. data/spec/suites/rspec_2/unit/expectations/any_argument_expectation_spec.rb +48 -0
  124. data/spec/suites/rspec_2/unit/expectations/anything_argument_equality_expectation_spec.rb +14 -0
  125. data/spec/suites/rspec_2/unit/expectations/argument_equality_expectation_spec.rb +135 -0
  126. data/spec/suites/rspec_2/unit/expectations/boolean_argument_equality_expectation_spec.rb +30 -0
  127. data/spec/suites/rspec_2/unit/expectations/hash_including_argument_equality_expectation_spec.rb +92 -0
  128. data/spec/suites/rspec_2/unit/expectations/satisfy_argument_equality_expectation_spec.rb +61 -0
  129. data/spec/suites/rspec_2/unit/expectations/times_called_expectation/any_times_matcher_spec.rb +22 -0
  130. data/spec/suites/rspec_2/unit/expectations/times_called_expectation/at_least_matcher_spec.rb +37 -0
  131. data/spec/suites/rspec_2/unit/expectations/times_called_expectation/at_most_matcher_spec.rb +43 -0
  132. data/spec/suites/rspec_2/unit/expectations/times_called_expectation/integer_matcher_spec.rb +58 -0
  133. data/spec/suites/rspec_2/unit/expectations/times_called_expectation/proc_matcher_spec.rb +35 -0
  134. data/spec/suites/rspec_2/unit/expectations/times_called_expectation/range_matcher_spec.rb +39 -0
  135. data/spec/suites/rspec_2/unit/hash_with_object_id_key_spec.rb +88 -0
  136. data/spec/suites/rspec_2/unit/injections/double_injection/double_injection_spec.rb +533 -0
  137. data/spec/suites/rspec_2/unit/injections/double_injection/double_injection_verify_spec.rb +32 -0
  138. data/spec/suites/rspec_2/unit/integrations/rspec/invocation_matcher_spec.rb +297 -0
  139. data/spec/suites/rspec_2/unit/integrations/rspec_spec.rb +70 -0
  140. data/spec/suites/rspec_2/unit/rr_spec.rb +28 -0
  141. data/spec/suites/rspec_2/unit/space_spec.rb +598 -0
  142. data/spec/suites/rspec_2/unit/spy_verification_spec.rb +133 -0
  143. data/spec/suites/rspec_2/unit/times_called_matchers/any_times_matcher_spec.rb +46 -0
  144. data/spec/suites/rspec_2/unit/times_called_matchers/at_least_matcher_spec.rb +54 -0
  145. data/spec/suites/rspec_2/unit/times_called_matchers/at_most_matcher_spec.rb +69 -0
  146. data/spec/suites/rspec_2/unit/times_called_matchers/integer_matcher_spec.rb +69 -0
  147. data/spec/suites/rspec_2/unit/times_called_matchers/proc_matcher_spec.rb +54 -0
  148. data/spec/suites/rspec_2/unit/times_called_matchers/range_matcher_spec.rb +75 -0
  149. data/spec/suites/rspec_2/unit/times_called_matchers/times_called_matcher_spec.rb +117 -0
  150. data/spec/suites/rspec_2/unit/wildcard_matchers/anything_spec.rb +33 -0
  151. data/spec/suites/rspec_2/unit/wildcard_matchers/boolean_spec.rb +45 -0
  152. data/spec/suites/rspec_2/unit/wildcard_matchers/duck_type_spec.rb +64 -0
  153. data/spec/suites/rspec_2/unit/wildcard_matchers/hash_including_spec.rb +64 -0
  154. data/spec/suites/rspec_2/unit/wildcard_matchers/is_a_spec.rb +55 -0
  155. data/spec/suites/rspec_2/unit/wildcard_matchers/numeric_spec.rb +46 -0
  156. data/spec/suites/rspec_2/unit/wildcard_matchers/satisfy_spec.rb +57 -0
  157. data/spec/support/adapter.rb +22 -0
  158. data/spec/support/adapter_tests/base.rb +45 -0
  159. data/spec/support/adapter_tests/minitest.rb +7 -0
  160. data/spec/support/adapter_tests/rspec.rb +70 -0
  161. data/spec/support/adapter_tests/test_unit.rb +47 -0
  162. data/spec/support/command_runner.rb +105 -0
  163. data/spec/support/generator.rb +56 -0
  164. data/spec/support/integration_tests/base.rb +64 -0
  165. data/spec/support/integration_tests/rails.rb +60 -0
  166. data/spec/support/integration_tests/rails_minitest.rb +13 -0
  167. data/spec/support/integration_tests/rails_rspec.rb +13 -0
  168. data/spec/support/integration_tests/rails_test_unit.rb +13 -0
  169. data/spec/support/integration_tests/rails_test_unit_like.rb +13 -0
  170. data/spec/support/integration_tests/ruby.rb +7 -0
  171. data/spec/support/integration_tests/ruby_minitest.rb +13 -0
  172. data/spec/support/integration_tests/ruby_rspec.rb +13 -0
  173. data/spec/support/integration_tests/ruby_test_unit.rb +13 -0
  174. data/spec/support/matchers/be_a_subset_of_matcher.rb +24 -0
  175. data/spec/support/project/cucumber.rb +50 -0
  176. data/spec/support/project/generator.rb +348 -0
  177. data/spec/support/project/minitest.rb +39 -0
  178. data/spec/support/project/rails.rb +199 -0
  179. data/spec/support/project/rails_minitest.rb +17 -0
  180. data/spec/support/project/rails_rspec.rb +50 -0
  181. data/spec/support/project/rails_test_unit.rb +17 -0
  182. data/spec/support/project/rails_test_unit_like.rb +17 -0
  183. data/spec/support/project/rspec.rb +69 -0
  184. data/spec/support/project/ruby.rb +34 -0
  185. data/spec/support/project/ruby_minitest.rb +11 -0
  186. data/spec/support/project/ruby_rspec.rb +29 -0
  187. data/spec/support/project/ruby_test_unit.rb +11 -0
  188. data/spec/support/project/ruby_test_unit_like.rb +21 -0
  189. data/spec/support/project/test_unit.rb +29 -0
  190. data/spec/support/project/test_unit_like.rb +7 -0
  191. data/spec/support/project/tests_runner.rb +22 -0
  192. data/spec/support/test.sqlite3 +0 -0
  193. data/spec/support/test_case/generator.rb +53 -0
  194. data/spec/support/test_case/minitest.rb +13 -0
  195. data/spec/support/test_case/rspec.rb +19 -0
  196. data/spec/support/test_case/test_unit.rb +21 -0
  197. data/spec/support/test_file/generator.rb +120 -0
  198. data/spec/support/test_file/minitest.rb +19 -0
  199. data/spec/support/test_file/rails_minitest.rb +7 -0
  200. data/spec/support/test_file/rails_rspec.rb +12 -0
  201. data/spec/support/test_file/rails_test_unit.rb +25 -0
  202. data/spec/support/test_file/rspec.rb +33 -0
  203. data/spec/support/test_file/test_unit.rb +36 -0
  204. data/spec/support/test_helper/generator.rb +27 -0
  205. data/spec/support/test_helper/minitest.rb +7 -0
  206. data/spec/support/test_helper/rails.rb +31 -0
  207. data/spec/support/test_helper/rails_minitest.rb +7 -0
  208. data/spec/support/test_helper/rails_rspec.rb +25 -0
  209. data/spec/support/test_helper/rails_test_unit.rb +23 -0
  210. data/spec/support/test_helper/rspec.rb +7 -0
  211. data/spec/support/test_helper/ruby.rb +31 -0
  212. data/spec/support/test_helper/test_unit.rb +7 -0
  213. metadata +240 -19
  214. data/VERSION +0 -1
  215. data/lib/rr/adapters.rb +0 -44
  216. data/lib/rr/adapters/rr_methods.rb +0 -142
  217. data/lib/rr/integrations/rspec_1.rb +0 -46
  218. data/lib/rr/integrations/test_unit_1.rb +0 -63
  219. data/lib/rr/integrations/test_unit_2.rb +0 -15
  220. data/lib/rr/integrations/test_unit_200.rb +0 -27
  221. data/lib/rr/integrations/test_unit_200_active_support.rb +0 -25
  222. data/lib/rr/integrations/test_unit_2_active_support.rb +0 -38
  223. data/lib/rr/proc_from_block.rb +0 -11
@@ -0,0 +1,39 @@
1
+ require File.expand_path('../test_unit_like', __FILE__)
2
+ require File.expand_path('../../test_file/minitest', __FILE__)
3
+ require File.expand_path('../../test_helper/minitest', __FILE__)
4
+
5
+ module Project
6
+ module Minitest
7
+ include TestUnitLike
8
+
9
+ attr_accessor :minitest_version
10
+
11
+ def configure
12
+ super
13
+ if minitest_version
14
+ gem_dependencies << gem_dependency(
15
+ :name => 'minitest',
16
+ :version => minitest_gem_version
17
+ )
18
+ end
19
+ add_to_test_requires 'minitest/autorun'
20
+ end
21
+
22
+ def setup
23
+ super
24
+ test_file_generator.mixin TestFile::Minitest
25
+ test_helper_generator.mixin TestHelper::Minitest
26
+ end
27
+
28
+ private
29
+
30
+ def minitest_gem_version
31
+ case minitest_version
32
+ when 4 then '~> 4.0'
33
+ when 5 then '~> 5.0'
34
+ when nil then raise ArgumentError, "minitest_version isn't set!"
35
+ else raise ArgumentError, "Invalid Minitest version '#{minitest_version}'"
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,199 @@
1
+ require File.expand_path('../../test_helper/generator', __FILE__)
2
+
3
+ module Project
4
+ module Rails
5
+ attr_accessor :rails_version
6
+
7
+ def add_model_and_migration(model_name, table_name, attributes)
8
+ model_class_name = model_name.to_s.capitalize
9
+ symbolized_attribute_names = attributes.keys.map {|v| ":#{v}" }.join(', ')
10
+ migration_timestamp = Time.now.strftime("%Y%m%d%H%M%S")
11
+ camelized_table_name = table_name.to_s.capitalize
12
+ migration_column_definitions = attributes.map do |name, type|
13
+ "t.#{type} :#{name}"
14
+ end.join("\n")
15
+
16
+ model_content = "class #{model_class_name} < ActiveRecord::Base\n"
17
+ if rails_version == 3
18
+ model_content << "attr_accessible #{symbolized_attribute_names}\n"
19
+ end
20
+ model_content << "end\n"
21
+ add_file "app/models/#{model_name}.rb", model_content
22
+
23
+ add_file "db/migrate/#{migration_timestamp}_create_#{table_name}.rb", <<-EOT
24
+ class Create#{camelized_table_name} < ActiveRecord::Migration
25
+ def #{'self.' if rails_version == 2}up
26
+ create_table :#{table_name} do |t|
27
+ #{migration_column_definitions}
28
+ end
29
+ end
30
+
31
+ def #{'self.' if rails_version == 2}down
32
+ drop_table :#{table_name}
33
+ end
34
+ end
35
+ EOT
36
+ end
37
+
38
+ def gem_dependency(dep)
39
+ dep = dep.dup
40
+ dep[:version] ||= '>= 0'
41
+ groups = Array(dep[:group] || [])
42
+ groups << :test unless groups.include?(:test)
43
+ dep[:group] = groups
44
+ dep
45
+ end
46
+
47
+ def sqlite_adapter
48
+ under_jruby? ? 'jdbcsqlite3' : 'sqlite3'
49
+ end
50
+
51
+ def database_file_path
52
+ File.join(directory, 'db/test.sqlite3')
53
+ end
54
+
55
+ def test_helper_generator
56
+ @test_helper_generator ||= TestHelper::Generator.factory
57
+ end
58
+
59
+ private
60
+
61
+ def generate_skeleton
62
+ super
63
+
64
+ create_rails_app
65
+
66
+ within do
67
+ if rails_version == 2
68
+ add_bundler_support
69
+ fix_obsolete_reference_to_rdoctask_in_rakefile
70
+ monkeypatch_gem_source_index
71
+ end
72
+
73
+ if under_jruby? && rails_version == 4
74
+ update_activerecord_jdbc_adapter_to_beta_version
75
+ end
76
+
77
+ declare_and_install_gems
78
+ create_files
79
+ configure_database
80
+ run_migrations
81
+ end
82
+ end
83
+
84
+ def create_rails_app
85
+ # remember that this has to be run with `bundle exec` to catch the correct
86
+ # 'rails' executable (rails 3 or rails 4)!
87
+ run_command! create_rails_app_command, :without_bundler_sandbox => true
88
+ end
89
+
90
+ def create_rails_app_command
91
+ command = 'rails'
92
+ if rails_version == 2
93
+ command << " #{directory}"
94
+ else
95
+ command << " new #{directory} --skip-bundle"
96
+ end
97
+ ruby_command(command)
98
+ end
99
+
100
+ def add_bundler_support
101
+ create_file 'config/patch_bundler_into_rails_23.rb', <<'EOT'
102
+ class Rails::Boot
103
+ def run
104
+ load_initializer
105
+
106
+ Rails::Initializer.class_eval do
107
+ def load_gems
108
+ @bundler_loaded ||= Bundler.require :default, Rails.env
109
+ end
110
+ end
111
+
112
+ Rails::Initializer.run(:set_load_path)
113
+ end
114
+ end
115
+ EOT
116
+
117
+ add_in_file_before 'config/boot.rb', "Rails.boot!\n", <<-EOT
118
+ load File.expand_path('../patch_bundler_into_rails_23.rb', __FILE__)
119
+ EOT
120
+
121
+ create_file 'config/preinitializer.rb', <<'EOT'
122
+ begin
123
+ require 'rubygems'
124
+ require 'bundler'
125
+ rescue LoadError
126
+ raise "Could not load the bundler gem. Install it with `gem install bundler`."
127
+ end
128
+
129
+ if Gem::Version.new(Bundler::VERSION) <= Gem::Version.new("0.9.24")
130
+ raise RuntimeError, "Your bundler version is too old for Rails 2.3.\n" +
131
+ "Run `gem install bundler` to upgrade."
132
+ end
133
+
134
+ begin
135
+ # Set up load paths for all bundled gems
136
+ ENV["BUNDLE_GEMFILE"] = File.expand_path("../../Gemfile", __FILE__)
137
+ Bundler.setup
138
+ rescue Bundler::GemNotFound
139
+ raise RuntimeError, "Bundler couldn't find some gems.\n" +
140
+ "Did you run `bundle install`?"
141
+ end
142
+ EOT
143
+
144
+ create_file 'Gemfile', <<'EOT'
145
+ source 'https://rubygems.org'
146
+
147
+ gem 'rails', '~> 2.3.0'
148
+ gem 'sqlite3-ruby', :require => 'sqlite3'
149
+ gem 'rdoc'
150
+ EOT
151
+ end
152
+
153
+ def monkeypatch_gem_source_index
154
+ create_file 'config/rubygems_patch.rb',
155
+ File.read(File.expand_path('../../../fixtures/rubygems_patch_for_187.rb', __FILE__)),
156
+ :without_debug => true
157
+
158
+ # http://djellemah.com/blog/2013/02/27/rails-23-with-ruby-20/
159
+ add_in_file_before 'config/boot.rb', "Rails.boot!\n", <<-EOT
160
+ Rails::GemBoot.module_eval do
161
+ class << self
162
+ alias :original_load_rubygems :load_rubygems
163
+ def load_rubygems
164
+ original_load_rubygems
165
+ load File.expand_path('../rubygems_patch.rb', __FILE__)
166
+ end
167
+ end
168
+ end
169
+ EOT
170
+ end
171
+
172
+ def fix_obsolete_reference_to_rdoctask_in_rakefile
173
+ replace_in_file 'Rakefile', 'rake/rdoctask', 'rdoc/task'
174
+ end
175
+
176
+ def update_activerecord_jdbc_adapter_to_beta_version
177
+ # The latest version of activerecord-jdbcsqlite3-adapter is not quite
178
+ # compatible with Rails 4 -- see:
179
+ # <https://github.com/jruby/activerecord-jdbc-adapter/issues/253>
180
+ replace_in_file 'Gemfile',
181
+ "gem 'activerecord-jdbcsqlite3-adapter'\n",
182
+ "gem 'activerecord-jdbcsqlite3-adapter', '1.3.0.beta2'\n"
183
+ end
184
+
185
+ def configure_database
186
+ create_file 'config/database.yml', <<EOT
187
+ development: &development
188
+ adapter: #{sqlite_adapter}
189
+ database: #{database_file_path}
190
+ test:
191
+ <<: *development
192
+ EOT
193
+ end
194
+
195
+ def run_migrations
196
+ run_command_within! ruby_command('rake db:migrate --trace')
197
+ end
198
+ end
199
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path('../minitest', __FILE__)
2
+ require File.expand_path('../rails', __FILE__)
3
+ require File.expand_path('../../test_file/rails_minitest', __FILE__)
4
+ require File.expand_path('../../test_helper/rails_minitest', __FILE__)
5
+
6
+ module Project
7
+ module RailsMinitest
8
+ include Minitest
9
+ include Rails
10
+
11
+ def setup
12
+ super
13
+ test_file_generator.mixin TestFile::RailsMinitest
14
+ test_helper_generator.mixin TestHelper::RailsMinitest
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,50 @@
1
+ require File.expand_path('../rspec', __FILE__)
2
+ require File.expand_path('../rails', __FILE__)
3
+ require File.expand_path('../../test_file/rails_rspec', __FILE__)
4
+ require File.expand_path('../../test_helper/rails_rspec', __FILE__)
5
+
6
+ module Project
7
+ module RailsRSpec
8
+ include RSpec
9
+ include Rails
10
+
11
+ def setup
12
+ super
13
+ test_file_generator.mixin TestFile::RailsRSpec
14
+ test_helper_generator.mixin TestHelper::RailsRSpec
15
+ end
16
+
17
+ def configure
18
+ super
19
+ gem_dependencies << gem_dependency(
20
+ :name => 'rspec-rails',
21
+ :version => rspec_gem_version,
22
+ :group => [:development, :test]
23
+ )
24
+ add_to_test_requires(rspec_rails_path)
25
+ end
26
+
27
+ def generate_skeleton
28
+ super
29
+ run_command_within!(generate_rspec_command)
30
+ end
31
+
32
+ private
33
+
34
+ def rspec_rails_path
35
+ if rails_version == 2
36
+ 'spec/rails'
37
+ else
38
+ 'rspec/rails'
39
+ end
40
+ end
41
+
42
+ def generate_rspec_command
43
+ if rails_version == 2
44
+ ruby_command('script/generate rspec --skip')
45
+ else
46
+ ruby_command('rails generate rspec:install --skip')
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path('../test_unit', __FILE__)
2
+ require File.expand_path('../rails', __FILE__)
3
+ require File.expand_path('../../test_file/rails_test_unit', __FILE__)
4
+ require File.expand_path('../../test_helper/rails_test_unit', __FILE__)
5
+
6
+ module Project
7
+ module RailsTestUnit
8
+ include TestUnit
9
+ include Rails
10
+
11
+ def setup
12
+ super
13
+ test_file_generator.mixin TestFile::RailsTestUnit
14
+ test_helper_generator.mixin TestHelper::RailsTestUnit
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path('../test_unit_like', __FILE__)
2
+ require File.expand_path('../rails', __FILE__)
3
+ require File.expand_path('../../test_file/rails_test_unit', __FILE__)
4
+ require File.expand_path('../../test_helper/rails_test_unit', __FILE__)
5
+
6
+ module Project
7
+ module RailsTestUnitLike
8
+ include TestUnitLike
9
+ include Rails
10
+
11
+ def setup
12
+ super
13
+ test_file_generator.mixin TestFile::RailsTestUnit
14
+ test_helper_generator.mixin TestHelper::RailsTestUnit
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,69 @@
1
+ require File.expand_path('../../test_file/rspec', __FILE__)
2
+ require File.expand_path('../../test_helper/rspec', __FILE__)
3
+
4
+ module Project
5
+ module RSpec
6
+ attr_accessor :rspec_version
7
+
8
+ def setup
9
+ super
10
+ test_file_generator.mixin TestFile::RSpec
11
+ test_helper_generator.mixin TestHelper::RSpec
12
+ end
13
+
14
+ def configure
15
+ super
16
+ gem_dependencies << gem_dependency(
17
+ :name => 'rspec',
18
+ :version => rspec_gem_version
19
+ )
20
+ add_to_test_requires(rspec_autorun_path)
21
+ add_file(rspec_options_filename, dot_rspec_content)
22
+ end
23
+
24
+ def test_runner_command
25
+ ruby_command('rake spec')
26
+ end
27
+
28
+ private
29
+
30
+ def rspec_gem_version
31
+ case rspec_version
32
+ when 2 then '~> 2.13'
33
+ when 1 then '~> 1.3'
34
+ when nil then raise ArgumentError, "rspec_version isn't set!"
35
+ else raise ArgumentError, "Invalid RSpec version '#{rspec_version}'"
36
+ end
37
+ end
38
+
39
+ def rspec_autorun_path
40
+ if rspec_version == 1
41
+ 'spec/autorun'
42
+ else
43
+ 'rspec/autorun'
44
+ end
45
+ end
46
+
47
+ def rspec_options_filename
48
+ if rspec_version == 1
49
+ 'spec/spec.opts'
50
+ else
51
+ '.rspec'
52
+ end
53
+ end
54
+
55
+ def dot_rspec_content
56
+ lines = []
57
+ lines << '--color'
58
+ if rspec_version == 1
59
+ lines << '--format nested'
60
+ else
61
+ lines << '--format documentation'
62
+ end
63
+ if RR.debug?
64
+ lines << '--backtrace'
65
+ end
66
+ lines.join("\n")
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,34 @@
1
+ require File.expand_path('../../test_helper/ruby', __FILE__)
2
+
3
+ module Project
4
+ module Ruby
5
+ def setup
6
+ super
7
+ test_helper_generator.mixin TestHelper::Ruby
8
+ end
9
+
10
+ private
11
+
12
+ def generate_skeleton
13
+ super
14
+
15
+ FileUtils.mkdir_p(directory)
16
+
17
+ within do
18
+ create_gemfile
19
+ declare_and_install_gems
20
+ create_files
21
+ end
22
+ end
23
+
24
+ def create_gemfile
25
+ File.open('Gemfile', 'w') do |f|
26
+ contents = <<-EOT
27
+ source 'https://rubygems.org'
28
+ gem 'rake'
29
+ EOT
30
+ f.write(contents)
31
+ end
32
+ end
33
+ end
34
+ end