infinity_test 1.0.3 → 2.0.0.rc1

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 (148) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ci.yml +31 -0
  3. data/.gitignore +3 -0
  4. data/.rspec +2 -2
  5. data/AI_INTEGRATION_IDEAS.md +203 -0
  6. data/Gemfile +3 -15
  7. data/History.markdown +82 -0
  8. data/{.infinity_test → INFINITY_TEST} +18 -15
  9. data/LICENSE.txt +2 -2
  10. data/README.md +627 -0
  11. data/Rakefile +1 -65
  12. data/TODO.markdown +24 -19
  13. data/bin/infinity_test +1 -4
  14. data/images/fuuu/pending.png +0 -0
  15. data/images/fuuu/success.png +0 -0
  16. data/infinity_test.gemspec +41 -189
  17. data/lib/infinity_test/core/auto_discover.rb +67 -0
  18. data/lib/infinity_test/core/base.rb +369 -0
  19. data/lib/infinity_test/core/callback.rb +59 -0
  20. data/lib/infinity_test/core/changed_file.rb +13 -0
  21. data/lib/infinity_test/core/command_builder.rb +48 -0
  22. data/lib/infinity_test/core/command_runner.rb +62 -0
  23. data/lib/infinity_test/core/configuration_merge.rb +37 -0
  24. data/lib/infinity_test/core/continuous_test_server.rb +106 -0
  25. data/lib/infinity_test/core/load_configuration.rb +48 -0
  26. data/lib/infinity_test/core/notifier.rb +59 -0
  27. data/lib/infinity_test/core/options.rb +134 -0
  28. data/lib/infinity_test/core/runner.rb +18 -0
  29. data/lib/infinity_test/core/version.rb +5 -0
  30. data/lib/infinity_test/framework/base.rb +57 -0
  31. data/lib/infinity_test/framework/padrino.rb +33 -0
  32. data/lib/infinity_test/framework/rails.rb +35 -0
  33. data/lib/infinity_test/framework/rubygems.rb +29 -0
  34. data/lib/infinity_test/framework/shared_example.rb +47 -0
  35. data/lib/infinity_test/observer/base.rb +40 -0
  36. data/lib/infinity_test/observer/filewatcher.rb +72 -0
  37. data/lib/infinity_test/observer/listen.rb +74 -0
  38. data/lib/infinity_test/observer/shared_example.rb +35 -0
  39. data/lib/infinity_test/old_dsl/configuration.rb +26 -0
  40. data/lib/infinity_test/strategy/base.rb +34 -0
  41. data/lib/infinity_test/strategy/rbenv.rb +32 -0
  42. data/lib/infinity_test/strategy/ruby_default.rb +20 -0
  43. data/lib/infinity_test/strategy/rvm.rb +50 -0
  44. data/lib/infinity_test/strategy/shared_example.rb +32 -0
  45. data/lib/infinity_test/test_framework/base.rb +64 -0
  46. data/lib/infinity_test/test_framework/rspec.rb +48 -0
  47. data/lib/infinity_test/test_framework/shared_example.rb +56 -0
  48. data/lib/infinity_test/test_framework/test_unit.rb +57 -0
  49. data/lib/infinity_test.rb +53 -35
  50. data/spec/infinity_test/core/auto_discover_spec.rb +149 -0
  51. data/spec/infinity_test/core/base_spec.rb +240 -0
  52. data/spec/infinity_test/core/callback_spec.rb +89 -0
  53. data/spec/infinity_test/core/changed_file_spec.rb +26 -0
  54. data/spec/infinity_test/core/command_builder_spec.rb +38 -0
  55. data/spec/infinity_test/core/configuration_merge_spec.rb +124 -0
  56. data/spec/infinity_test/core/continuous_test_server_spec.rb +116 -0
  57. data/spec/infinity_test/core/load_configuration_spec.rb +43 -0
  58. data/spec/infinity_test/core/notifier_spec.rb +151 -0
  59. data/spec/infinity_test/core/options_spec.rb +168 -0
  60. data/spec/infinity_test/core/runner_spec.rb +17 -0
  61. data/spec/infinity_test/framework/base_spec.rb +55 -0
  62. data/spec/infinity_test/framework/padrino_spec.rb +36 -0
  63. data/spec/infinity_test/framework/rails_spec.rb +36 -0
  64. data/spec/infinity_test/framework/rubygems_spec.rb +34 -0
  65. data/spec/infinity_test/observer/base_spec.rb +78 -0
  66. data/spec/infinity_test/observer/filewatcher_spec.rb +51 -0
  67. data/spec/infinity_test/observer/listen_spec.rb +50 -0
  68. data/spec/infinity_test/{builder_spec.rb → strategy/base_spec.rb} +1 -2
  69. data/spec/infinity_test/strategy/rbenv_spec.rb +53 -0
  70. data/spec/infinity_test/strategy/ruby_default_spec.rb +32 -0
  71. data/spec/infinity_test/strategy/rvm_spec.rb +69 -0
  72. data/spec/infinity_test/test_framework/rspec_spec.rb +119 -0
  73. data/spec/infinity_test/test_framework/test_unit_spec.rb +193 -0
  74. data/spec/spec_helper.rb +34 -119
  75. metadata +272 -176
  76. data/.rvmrc +0 -1
  77. data/Gemfile.lock +0 -62
  78. data/Readme.markdown +0 -147
  79. data/Tasks +0 -4
  80. data/VERSION.yml +0 -5
  81. data/buzz_images/buzz_lightyear.jpg +0 -0
  82. data/buzz_images/buzz_lightyear_continencia.gif +0 -0
  83. data/buzz_images/to_infinity_and_beyond.png +0 -0
  84. data/features/heuristics.feature +0 -23
  85. data/features/support/env.rb +0 -2
  86. data/images/fuuu/sucess.png +0 -0
  87. data/lib/infinity_test/application.rb +0 -362
  88. data/lib/infinity_test/application_library/rails.rb +0 -94
  89. data/lib/infinity_test/application_library/rubygems.rb +0 -43
  90. data/lib/infinity_test/binary_path.rb +0 -43
  91. data/lib/infinity_test/builder.rb +0 -66
  92. data/lib/infinity_test/command.rb +0 -58
  93. data/lib/infinity_test/configuration.rb +0 -277
  94. data/lib/infinity_test/continuous_testing.rb +0 -40
  95. data/lib/infinity_test/dependencies.rb +0 -80
  96. data/lib/infinity_test/environment.rb +0 -15
  97. data/lib/infinity_test/heuristics.rb +0 -36
  98. data/lib/infinity_test/heuristics_helper.rb +0 -9
  99. data/lib/infinity_test/options.rb +0 -96
  100. data/lib/infinity_test/runner.rb +0 -38
  101. data/lib/infinity_test/test_framework.rb +0 -110
  102. data/lib/infinity_test/test_library/bacon.rb +0 -55
  103. data/lib/infinity_test/test_library/cucumber.rb +0 -22
  104. data/lib/infinity_test/test_library/rspec.rb +0 -60
  105. data/lib/infinity_test/test_library/test_unit.rb +0 -52
  106. data/lib/infinity_test/test_unit_loader.rb +0 -5
  107. data/spec/factories/buzz/lib/buzz.rb +0 -0
  108. data/spec/factories/buzz/spec/buzz_spec.rb +0 -0
  109. data/spec/factories/company/Gemfile +0 -0
  110. data/spec/factories/company/lib/company.rb +0 -0
  111. data/spec/factories/company/test/company_test.rb +0 -0
  112. data/spec/factories/images/failure.png +0 -0
  113. data/spec/factories/images/pending.png +0 -0
  114. data/spec/factories/images/sucess.png +0 -0
  115. data/spec/factories/infinity_test +0 -5
  116. data/spec/factories/infinity_test_example +0 -7
  117. data/spec/factories/slinky/spec/slinky/slinky_spec.rb +0 -0
  118. data/spec/factories/travel/lib/travel.rb +0 -0
  119. data/spec/factories/travel/test/partner_test.rb +0 -0
  120. data/spec/factories/travel/test/travel_test.rb +0 -0
  121. data/spec/factories/wood/lib/wood.rb +0 -0
  122. data/spec/factories/wood/spec/wood_spec.rb +0 -0
  123. data/spec/infinity_test/application_library/rails_spec.rb +0 -140
  124. data/spec/infinity_test/application_library/rubygems_spec.rb +0 -52
  125. data/spec/infinity_test/application_spec.rb +0 -434
  126. data/spec/infinity_test/binary_path_spec.rb +0 -72
  127. data/spec/infinity_test/command_spec.rb +0 -53
  128. data/spec/infinity_test/configuration_spec.rb +0 -382
  129. data/spec/infinity_test/continuous_testing_spec.rb +0 -25
  130. data/spec/infinity_test/environment_spec.rb +0 -23
  131. data/spec/infinity_test/heuristics_helper_spec.rb +0 -15
  132. data/spec/infinity_test/heuristics_spec.rb +0 -127
  133. data/spec/infinity_test/options_spec.rb +0 -111
  134. data/spec/infinity_test/runner_spec.rb +0 -42
  135. data/spec/infinity_test/test_framework_spec.rb +0 -127
  136. data/spec/infinity_test/test_library/bacon_spec.rb +0 -150
  137. data/spec/infinity_test/test_library/cucumber_spec.rb +0 -8
  138. data/spec/infinity_test/test_library/rspec_spec.rb +0 -189
  139. data/spec/infinity_test/test_library/test_unit_spec.rb +0 -184
  140. data/spec/infinity_test_spec.rb +0 -40
  141. /data/images/faces/{sucess.png → success.png} +0 -0
  142. /data/images/hands/{sucess.png → success.png} +0 -0
  143. /data/images/mario_bros/{sucess.jpg → success.jpg} +0 -0
  144. /data/images/rails/{sucess.png → success.png} +0 -0
  145. /data/images/rubies/{sucess.png → success.png} +0 -0
  146. /data/images/simpson/{sucess.jpg → success.jpg} +0 -0
  147. /data/images/street_fighter/{sucess.jpg → success.jpg} +0 -0
  148. /data/images/toy_story/{sucess.png → success.png} +0 -0
data/TODO.markdown CHANGED
@@ -1,24 +1,29 @@
1
- Future
2
- ======
1
+ ## Todo
3
2
 
4
- - Create a Rails Generator on the fly that receives some arguments and create a ./.infinity_test file
5
- - Support Cucumber
6
- - Run with failed tests (Focus mode!!)
7
- - Put some methods in the configuration file like: #all_tests_pass?, #all_tests_pass_in_ruby? like:
3
+ Infinity test is a gem that watch files changes and run tests.
8
4
 
9
- Example:
5
+ That also can run with different ruby versions all test suite or only that file change (using rvm or
6
+ rbenv), ruby default just run the test on the current ruby version.
10
7
 
11
- after(:all) do
12
- if all_tests_pass?
13
- # do something
14
- end
15
-
16
- if all_tests_pass_in_ruby?('1.8.7')
17
- # do something
18
- end
19
- end
8
+ ## What Needs to Be Done
20
9
 
21
- Bugs
22
- ====
10
+ * ~~Make notifications work with Notifiers gem (remove growl and use the autodiscover from notifiers gem).~~ DONE
11
+ * ~~Change .infinity_test to INFINITY_TEST~~ DONE
12
+ * ~~Make Test::Unit to work (the infinity test to check test folder).~~ DONE
13
+ * ~~Make RSpec work~~ DONE
14
+ * ~~Finish RubyDefault strategy~~ DONE
15
+ * ~~Finish RVM (running different versions - the user need to specify)~~ DONE
16
+ * ~~Finish RbEnv (running different versions - the user need to specify)~~ DONE
17
+ * Make callbacks work in the new structure (loading the infinity test file).
18
+ * ~~Finish Gem autodiscover and its changes heuristics.~~ DONE
19
+ * ~~Finish Rails autodiscover and its changes heuristics.~~ DONE
20
+ * ~~Padrino autodiscover and its changes heuristics.~~ DONE
21
+ * ~~Improve auto discover feature priorization subclasses for #run? method.~~ DONE
22
+ * ~~Focus feature(fails, pass one file, run entire suite) with --focus (experimented feature)!~~ DONE
23
+ * ~~Add post-run hooks to be added to the INFINITY_TEST file that run other things (coverage, code
24
+ analysis, etc - see ideas)~~ DONE (via callbacks system)
23
25
 
24
- - Coloring the output with Test::Unit (maybe using RedGreen)
26
+ * ~~Give some ideas (write to a md file the ideas) about how to integrate the infinity test with AI tools/AI agents or
27
+ even Claude code ... so ruby developers can see~~ DONE (see AI_INTEGRATION_IDEAS.md)
28
+
29
+ * ~~Update HISTORY with all changes since last version.~~ DONE
data/bin/infinity_test CHANGED
@@ -1,7 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- infinity_test_directory = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
4
- $LOAD_PATH.unshift(infinity_test_directory) unless $LOAD_PATH.include?(infinity_test_directory)
5
-
6
3
  require 'infinity_test'
7
- InfinityTest.start!
4
+ InfinityTest::Runner.new(ARGV).start
Binary file
Binary file
@@ -1,200 +1,52 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = %q{infinity_test}
8
- s.version = "1.0.3"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Tomas D'Stefano"]
12
- s.date = %q{2011-05-30}
13
- s.description = %q{Infinity Test is a continuous testing library and a flexible alternative to Autotest, using Watchr library with RSpec, Test::Unit or Bacon with RVM funcionality, giving the possibility to test with all Rubies that you have in your RVM configuration.}
14
- s.email = %q{tomasdestefi@gmail.com}
15
- s.executables = ["infinity_test"]
16
- s.extra_rdoc_files = [
17
- "LICENSE.txt"
18
- ]
19
- s.files = [
20
- ".gitignore",
21
- ".infinity_test",
22
- ".rspec",
23
- ".rvmrc",
24
- "Gemfile",
25
- "Gemfile.lock",
26
- "History.markdown",
27
- "LICENSE.txt",
28
- "Rakefile",
29
- "Readme.markdown",
30
- "TODO.markdown",
31
- "Tasks",
32
- "VERSION.yml",
33
- "bin/infinity_test",
34
- "buzz_images/buzz_lightyear.jpg",
35
- "buzz_images/buzz_lightyear_continencia.gif",
36
- "buzz_images/to_infinity_and_beyond.png",
37
- "features/heuristics.feature",
38
- "features/support/env.rb",
39
- "images/faces/failure.png",
40
- "images/faces/pending.png",
41
- "images/faces/sucess.png",
42
- "images/fuuu/failure.png",
43
- "images/fuuu/pending.png",
44
- "images/fuuu/sucess.png",
45
- "images/hands/failure.png",
46
- "images/hands/pending.png",
47
- "images/hands/sucess.png",
48
- "images/mario_bros/failure.jpg",
49
- "images/mario_bros/pending.jpg",
50
- "images/mario_bros/sucess.jpg",
51
- "images/rails/failure.png",
52
- "images/rails/pending.png",
53
- "images/rails/sucess.png",
54
- "images/rubies/failure.png",
55
- "images/rubies/pending.png",
56
- "images/rubies/sucess.png",
57
- "images/simpson/failure.gif",
58
- "images/simpson/pending.jpg",
59
- "images/simpson/sucess.jpg",
60
- "images/street_fighter/failure.gif",
61
- "images/street_fighter/pending.gif",
62
- "images/street_fighter/sucess.jpg",
63
- "images/toy_story/failure.gif",
64
- "images/toy_story/pending.png",
65
- "images/toy_story/sucess.png",
66
- "infinity_test.gemspec",
67
- "lib/infinity_test.rb",
68
- "lib/infinity_test/application.rb",
69
- "lib/infinity_test/application_library/rails.rb",
70
- "lib/infinity_test/application_library/rubygems.rb",
71
- "lib/infinity_test/binary_path.rb",
72
- "lib/infinity_test/builder.rb",
73
- "lib/infinity_test/command.rb",
74
- "lib/infinity_test/configuration.rb",
75
- "lib/infinity_test/continuous_testing.rb",
76
- "lib/infinity_test/dependencies.rb",
77
- "lib/infinity_test/environment.rb",
78
- "lib/infinity_test/heuristics.rb",
79
- "lib/infinity_test/heuristics_helper.rb",
80
- "lib/infinity_test/options.rb",
81
- "lib/infinity_test/runner.rb",
82
- "lib/infinity_test/test_framework.rb",
83
- "lib/infinity_test/test_library/bacon.rb",
84
- "lib/infinity_test/test_library/cucumber.rb",
85
- "lib/infinity_test/test_library/rspec.rb",
86
- "lib/infinity_test/test_library/test_unit.rb",
87
- "lib/infinity_test/test_unit_loader.rb",
88
- "spec/factories/buzz/lib/buzz.rb",
89
- "spec/factories/buzz/spec/buzz_spec.rb",
90
- "spec/factories/company/Gemfile",
91
- "spec/factories/company/lib/company.rb",
92
- "spec/factories/company/test/company_test.rb",
93
- "spec/factories/images/failure.png",
94
- "spec/factories/images/pending.png",
95
- "spec/factories/images/sucess.png",
96
- "spec/factories/infinity_test",
97
- "spec/factories/infinity_test_example",
98
- "spec/factories/slinky/spec/slinky/slinky_spec.rb",
99
- "spec/factories/travel/lib/travel.rb",
100
- "spec/factories/travel/test/partner_test.rb",
101
- "spec/factories/travel/test/travel_test.rb",
102
- "spec/factories/wood/lib/wood.rb",
103
- "spec/factories/wood/spec/wood_spec.rb",
104
- "spec/infinity_test/application_library/rails_spec.rb",
105
- "spec/infinity_test/application_library/rubygems_spec.rb",
106
- "spec/infinity_test/application_spec.rb",
107
- "spec/infinity_test/binary_path_spec.rb",
108
- "spec/infinity_test/builder_spec.rb",
109
- "spec/infinity_test/command_spec.rb",
110
- "spec/infinity_test/configuration_spec.rb",
111
- "spec/infinity_test/continuous_testing_spec.rb",
112
- "spec/infinity_test/environment_spec.rb",
113
- "spec/infinity_test/heuristics_helper_spec.rb",
114
- "spec/infinity_test/heuristics_spec.rb",
115
- "spec/infinity_test/options_spec.rb",
116
- "spec/infinity_test/runner_spec.rb",
117
- "spec/infinity_test/test_framework_spec.rb",
118
- "spec/infinity_test/test_library/bacon_spec.rb",
119
- "spec/infinity_test/test_library/cucumber_spec.rb",
120
- "spec/infinity_test/test_library/rspec_spec.rb",
121
- "spec/infinity_test/test_library/test_unit_spec.rb",
122
- "spec/infinity_test_spec.rb",
123
- "spec/spec_helper.rb"
124
- ]
125
- s.homepage = %q{http://github.com/tomas-stefano/infinity_test}
126
- s.post_install_message = %q{
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'infinity_test/core/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'infinity_test'
8
+ spec.version = InfinityTest::Core::VERSION
9
+ spec.authors = ["Tomas D'Stefano"]
10
+ spec.email = ['tomas_stefano@successoft.com']
11
+ spec.description = 'Infinity Test is a continuous testing library and a flexible alternative to Autotest and Guard.'
12
+ spec.summary = 'Infinity Test is a continuous testing library and a flexible alternative to Autotest and Guard.'
13
+ spec.homepage = 'https://github.com/tomas-stefano/infinity_test'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_dependency 'activesupport'
22
+ spec.add_dependency 'listen'
23
+ spec.add_dependency 'filewatcher'
24
+ spec.add_dependency 'hike'
25
+ spec.add_dependency 'notifiers'
26
+
27
+ spec.add_development_dependency 'bundler'
28
+ spec.add_development_dependency 'rake'
29
+ spec.add_development_dependency 'rspec'
30
+ spec.add_development_dependency 'simplecov'
31
+ spec.add_development_dependency 'pry'
32
+
33
+ spec.post_install_message = %q{
127
34
  --------------------------------------------------------------------------------
128
35
  T O I N F I N I T Y A N D B E Y O N D !!!
129
36
 
130
- Infinity Test uses the awesome RVM to run.
131
- If you don't have RVM installed, stop what you're doing =p.
37
+ Infinity Test can be used with RVM, RbEnv or just Ruby without package manager.
38
+ If you don't have RVM or Rbenv installed.
39
+
132
40
  RVM Installation Instructions:
133
- http://rvm.beginrescueend.com/rvm/install/
41
+ https://rvm.io/rvm/install/
42
+
43
+ Rbenv Installation Instructions:
44
+ https://github.com/sstephenson/rbenv#installation
45
+
134
46
  And don't forget to see how you can customize Infinity Test here:
135
47
  http://github.com/tomas-stefano/infinity_test/wiki/Customize-Infinity-Test
136
48
 
137
49
  Happy Coding! :)
138
-
139
50
  --------------------------------------------------------------------------------
140
-
141
51
  }
142
- s.rdoc_options = ["--charset=UTF-8"]
143
- s.require_paths = ["lib"]
144
- s.rubygems_version = %q{1.7.2}
145
- s.summary = %q{Continuous testing and a flexible alternative to Autotest using Watchr and RVM}
146
- s.test_files = [
147
- "spec/factories/buzz/lib/buzz.rb",
148
- "spec/factories/buzz/spec/buzz_spec.rb",
149
- "spec/factories/company/lib/company.rb",
150
- "spec/factories/company/test/company_test.rb",
151
- "spec/factories/slinky/spec/slinky/slinky_spec.rb",
152
- "spec/factories/travel/lib/travel.rb",
153
- "spec/factories/travel/test/partner_test.rb",
154
- "spec/factories/travel/test/travel_test.rb",
155
- "spec/factories/wood/lib/wood.rb",
156
- "spec/factories/wood/spec/wood_spec.rb",
157
- "spec/infinity_test/application_library/rails_spec.rb",
158
- "spec/infinity_test/application_library/rubygems_spec.rb",
159
- "spec/infinity_test/application_spec.rb",
160
- "spec/infinity_test/binary_path_spec.rb",
161
- "spec/infinity_test/builder_spec.rb",
162
- "spec/infinity_test/command_spec.rb",
163
- "spec/infinity_test/configuration_spec.rb",
164
- "spec/infinity_test/continuous_testing_spec.rb",
165
- "spec/infinity_test/environment_spec.rb",
166
- "spec/infinity_test/heuristics_helper_spec.rb",
167
- "spec/infinity_test/heuristics_spec.rb",
168
- "spec/infinity_test/options_spec.rb",
169
- "spec/infinity_test/runner_spec.rb",
170
- "spec/infinity_test/test_framework_spec.rb",
171
- "spec/infinity_test/test_library/bacon_spec.rb",
172
- "spec/infinity_test/test_library/cucumber_spec.rb",
173
- "spec/infinity_test/test_library/rspec_spec.rb",
174
- "spec/infinity_test/test_library/test_unit_spec.rb",
175
- "spec/infinity_test_spec.rb",
176
- "spec/spec_helper.rb"
177
- ]
178
-
179
- if s.respond_to? :specification_version then
180
- s.specification_version = 3
181
-
182
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
183
- s.add_runtime_dependency(%q<watchr>, [">= 0.7"])
184
- s.add_runtime_dependency(%q<notifiers>, [">= 1.1.0"])
185
- s.add_development_dependency(%q<rspec>, [">= 2.0.1"])
186
- s.add_development_dependency(%q<jeweler>, [">= 1.4.0"])
187
- else
188
- s.add_dependency(%q<watchr>, [">= 0.7"])
189
- s.add_dependency(%q<notifiers>, [">= 1.1.0"])
190
- s.add_dependency(%q<rspec>, [">= 2.0.1"])
191
- s.add_dependency(%q<jeweler>, [">= 1.4.0"])
192
- end
193
- else
194
- s.add_dependency(%q<watchr>, [">= 0.7"])
195
- s.add_dependency(%q<notifiers>, [">= 1.1.0"])
196
- s.add_dependency(%q<rspec>, [">= 2.0.1"])
197
- s.add_dependency(%q<jeweler>, [">= 1.4.0"])
198
- end
199
52
  end
200
-
@@ -0,0 +1,67 @@
1
+ module InfinityTest
2
+ module Core
3
+ class AutoDiscover
4
+ attr_reader :base
5
+
6
+ # Priority order for auto discovery (higher priority first)
7
+ # More specific libraries should be checked before generic ones
8
+ PRIORITY = {
9
+ strategy: [:rvm, :rbenv, :ruby_default],
10
+ framework: [:rails, :padrino, :rubygems],
11
+ test_framework: [:rspec, :test_unit]
12
+ }.freeze
13
+
14
+ def initialize(base)
15
+ @base = base
16
+ end
17
+
18
+ def discover_libraries
19
+ discover_strategy
20
+ discover_framework
21
+ discover_test_framework
22
+ end
23
+
24
+ def discover_strategy
25
+ base.strategy = auto_discover(:strategy) if base.strategy.equal?(:auto_discover)
26
+ end
27
+
28
+ def discover_framework
29
+ base.framework = auto_discover(:framework) if base.framework.equal?(:auto_discover)
30
+ end
31
+
32
+ def discover_test_framework
33
+ base.test_framework = auto_discover(:test_framework) if base.test_framework.equal?(:auto_discover)
34
+ end
35
+
36
+ private
37
+
38
+ def auto_discover(library_type)
39
+ library_base_class = "InfinityTest::#{library_type.to_s.camelize}::Base".constantize
40
+ subclasses = library_base_class.subclasses
41
+ priority_order = PRIORITY[library_type] || []
42
+
43
+ # Sort subclasses by priority (known priorities first, unknown last)
44
+ sorted_subclasses = subclasses.sort_by do |subclass|
45
+ name = subclass.name.demodulize.underscore.to_sym
46
+ priority_order.index(name) || priority_order.length
47
+ end
48
+
49
+ library = sorted_subclasses.find { |subclass| subclass.run? }
50
+
51
+ if library.present?
52
+ library.name.demodulize.underscore.to_sym
53
+ else
54
+ message = %{
55
+
56
+ The InfinityTest::Core::AutoDiscover doesn't discover nothing to run.
57
+ Are you using a #{library_type} that Infinity test knows?
58
+
59
+ Infinity Test #{library_type.to_s.pluralize}: #{library_base_class.subclasses.map(&:name).join(', ')}
60
+
61
+ }
62
+ raise Exception, message
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end