test-loop 10.0.1 → 11.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -30,7 +30,7 @@ Features
30
30
 
31
31
  * Configurable through a `.test-loop` file in your current working directory.
32
32
 
33
- * Implemented in less than 200 lines (SLOC) of pure Ruby code! :-)
33
+ * Implemented in less than 250 lines (SLOC) of pure Ruby code! :-)
34
34
 
35
35
  ------------------------------------------------------------------------------
36
36
  Installation
@@ -179,12 +179,13 @@ your configuration file:
179
179
  }
180
180
 
181
181
  For example, to see on-screen-display notifications only about test failures,
182
- add the following to your configuration file:
182
+ add the following to your configuration file (**NOTE:** the `test/loop/notify`
183
+ preset does this for you):
183
184
 
184
185
  Test::Loop.after_each_test.push lambda {
185
186
  |test_file, log_file, run_status, started_at, elapsed_time|
186
187
 
187
- unless run_status.success?
188
+ unless run_status.success? or run_status.signaled?
188
189
  title = 'FAIL at %s in %0.1fs' % [started_at.strftime('%r'), elapsed_time]
189
190
 
190
191
  message = test_file
@@ -197,10 +198,6 @@ add the following to your configuration file:
197
198
  end
198
199
  }
199
200
 
200
- Note that the above functionality is available as a configuration preset:
201
-
202
- require 'test/loop/notify'
203
-
204
201
  For example, to see on-screen-display notifications about completed test runs,
205
202
  regardless of whether they passed or failed, add the following to your
206
203
  configuration file:
@@ -230,26 +227,24 @@ The following sub-libraries provide "preset" configurations. To use them,
230
227
  simply add the require() lines shown below to your `.test-loop` file or to
231
228
  your application's `test/test_helper.rb` or `spec/spec_helper.rb` file.
232
229
 
233
- * Support for Ruby on Rails testing:
234
-
235
- require 'test/loop/rails'
236
-
237
- * On-screen-display notifications for test failures:
230
+ ### require 'test/loop/notify'
238
231
 
239
- require 'test/loop/notify'
232
+ Shows on-screen-display notifications for test failures.
240
233
 
241
234
  ------------------------------------------------------------------------------
242
235
  Known issues
243
236
  ------------------------------------------------------------------------------
244
237
 
245
- If using Ruby on Rails:
238
+ ### Ruby on Rails
246
239
 
247
- * Ensure that your `config/environments/test.rb` file disables class caching:
240
+ * Ensure that your `config/environments/test.rb` file disables class caching
241
+ as follows (**NOTE:** this is done automatically for you if you use Rails
242
+ 3):
248
243
 
249
244
  config.cache_classes = false
250
245
 
251
- Otherwise, test-loop will appear to ignore class-level changes in your
252
- models, controllers, helpers, etc. thereby causing you great frustration!
246
+ Otherwise, test-loop will appear to ignore source-code changes in your
247
+ models, controllers, helpers, and other Ruby source files.
253
248
 
254
249
  * SQLite3 [raises `SQLite3::BusyException: database is locked` errors](
255
250
  https://github.com/sunaku/test-loop/issues/2 ) because test-loop runs your
@@ -2,7 +2,7 @@ require 'test/loop'
2
2
 
3
3
  Test::Loop.after_each_test.push lambda {
4
4
  |test_file, log_file, run_status, started_at, elapsed_time|
5
- unless run_status.success?
5
+ unless run_status.success? or run_status.signaled?
6
6
  title = 'FAIL at %s in %0.1fs' % [started_at.strftime('%r'), elapsed_time]
7
7
  message = test_file
8
8
  Thread.new do # run in background
@@ -0,0 +1,5 @@
1
+ if defined? MiniTest::Unit
2
+ Test::Loop.before_each_test.push proc {
3
+ MiniTest::Unit.output = $stdout
4
+ }
5
+ end
@@ -0,0 +1,21 @@
1
+ if defined? Rails::VERSION
2
+ Test::Loop.reabsorb_file_globs.push(
3
+ 'config/**/*.{rb,yml}',
4
+ 'test/factories/*.rb',
5
+ 'Gemfile.lock'
6
+ )
7
+
8
+ Test::Loop.test_file_matchers['app/**/*.rb'] =
9
+ Test::Loop.test_file_matchers['lib/**/*.rb']
10
+
11
+ class << Test::Loop
12
+ class Railtie < Rails::Railtie
13
+ config.before_initialize do |app|
14
+ if app.config.cache_classes
15
+ warn "test-loop: Setting #{app.class}.config.cache_classes = false"
16
+ app.config.cache_classes = false
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,7 @@
1
+ if defined? Test::Unit::AutoRunner
2
+ Test::Loop.before_each_test.push proc {
3
+ Test::Unit::AutoRunner.prepare do |config|
4
+ config.runner_options[:output] = $stdout
5
+ end
6
+ }
7
+ end
data/lib/test/loop.rb CHANGED
@@ -57,6 +57,7 @@ module Test
57
57
  register_signals
58
58
  load_user_config
59
59
  absorb_overhead
60
+ load_lib_support
60
61
  run_test_loop
61
62
 
62
63
  rescue Interrupt
@@ -138,6 +139,10 @@ module Test
138
139
  end
139
140
  end
140
141
 
142
+ def load_lib_support
143
+ Dir[File.expand_path '../loop/support/*.rb', __FILE__].each {|f| load f }
144
+ end
145
+
141
146
  def pause_momentarily
142
147
  sleep 1
143
148
  end
@@ -200,11 +205,12 @@ module Test
200
205
  # workers can be killed by sending it to the entire process group
201
206
  trap :TERM, :DEFAULT
202
207
 
208
+ # this signal is honored by master and ignored in workers
209
+ trap :INT, :IGNORE
210
+
203
211
  # capture test output in log file because tests are run in parallel
204
212
  # which makes it difficult to understand interleaved output thereof
205
- $stdout.reopen log_file, 'w'
206
- $stdout.sync = true
207
- $stderr.reopen $stdout
213
+ $stderr.reopen($stdout.reopen(log_file, 'w')).sync = true
208
214
 
209
215
  # determine which test blocks have changed inside the test file
210
216
  test_names = Diff::LCS.diff(old_lines, new_lines).flatten.map do |change|
@@ -243,7 +249,7 @@ module Test
243
249
  # report test results along with any failure logs
244
250
  if run_status.success?
245
251
  notify ANSI_GREEN % "PASS #{test_file}"
246
- else
252
+ elsif run_status.exited?
247
253
  notify ANSI_RED % "FAIL #{test_file}"
248
254
  STDERR.print File.read(log_file)
249
255
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: test-loop
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 10.0.1
5
+ version: 11.0.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Suraj N. Kurapati
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2011-04-08 00:00:00 -07:00
14
+ date: 2011-04-14 00:00:00 -07:00
15
15
  default_executable:
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
@@ -37,8 +37,10 @@ files:
37
37
  - README.md
38
38
  - bin/test-loop
39
39
  - lib/test/loop.rb
40
- - lib/test/loop/rails.rb
41
40
  - lib/test/loop/notify.rb
41
+ - lib/test/loop/support/rails.rb
42
+ - lib/test/loop/support/minitest.rb
43
+ - lib/test/loop/support/testunit.rb
42
44
  has_rdoc: true
43
45
  homepage: http://github.com/sunaku/test-loop
44
46
  licenses: []
@@ -1,10 +0,0 @@
1
- require 'test/loop'
2
-
3
- Test::Loop.reabsorb_file_globs.push(
4
- 'config/**/*.{rb,yml}',
5
- 'test/factories/*.rb',
6
- 'Gemfile.lock'
7
- )
8
-
9
- Test::Loop.test_file_matchers['app/**/*.rb'] =
10
- Test::Loop.test_file_matchers['lib/**/*.rb']