test-loop 9.0.0 → 9.0.1

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 (3) hide show
  1. data/README.md +32 -12
  2. data/bin/test-loop +11 -15
  3. metadata +3 -3
data/README.md CHANGED
@@ -155,13 +155,41 @@ you can query and modify the `Test::Loop` OpenStruct configuration as follows:
155
155
  execution began, and (5) how many seconds it took for the overall test
156
156
  execution to complete.
157
157
 
158
- For example, to display a summary of the test execution results as an
159
- on-screen-display notification while also displaying the log file if the
160
- test failed, add the following to your configuration file:
158
+ For example, to see on-screen-display notifications about test failures only
159
+ (not successes) and also see their corresponding failure logs in your
160
+ terminal, add the following to your configuration file:
161
+
162
+ Test::Loop.after_each_test = lambda do |test_file, log_file, run_status, started_at, elapsed_time|
163
+ unless run_status.success?
164
+ # display the failure log
165
+ divider = '#' * 80
166
+ STDERR.print [divider, File.read(log_file), divider, nil].join("\n")
167
+
168
+ # notify user about failure
169
+ title = 'FAIL at %s in %0.1fs' % [started_at.strftime('%r'), elapsed_time]
170
+ message = test_file
171
+ Thread.new do # run in background
172
+ system 'notify-send', '-i', 'dialog-error', title, message or
173
+ system 'growlnotify', '-a', 'Xcode', '-m', message, title or
174
+ system 'xmessage', '-timeout', '5', '-title', title, message
175
+ end
176
+ end
177
+ end
178
+
179
+ For example, to see on-screen-display notifications about completed test
180
+ runs (both successes and failures) and also see failure logs for failed test
181
+ runs in your terminal, add the following to your configuration file:
161
182
 
162
183
  Test::Loop.after_each_test = lambda do |test_file, log_file, run_status, started_at, elapsed_time|
163
184
  success = run_status.success?
164
185
 
186
+ # display the failure log
187
+ unless success
188
+ divider = '#' * 80
189
+ STDERR.print [divider, File.read(log_file), divider, nil].join("\n")
190
+ end
191
+
192
+ # notify the user about test completion
165
193
  title = '%s at %s in %0.1fs' %
166
194
  [success ? 'PASS' : 'FAIL', started_at.strftime('%X'), elapsed_time]
167
195
 
@@ -170,15 +198,7 @@ you can query and modify the `Test::Loop` OpenStruct configuration as follows:
170
198
  Thread.new do # run in background
171
199
  system 'notify-send', '-i', "dialog-#{success ? 'information' : 'error'}", title, message or
172
200
  system 'growlnotify', '-a', 'Xcode', '-m', message, title or
173
- system 'xmessage', '-timeout', '5', '-title', title, message or
174
- puts title, message
175
-
176
- unless success # show failure log
177
- system 'open', log_file or
178
- system 'xdg-open', log_file or
179
- system 'xmessage', '-title', log_file, '-file', log_file or
180
- puts log_file, File.read(log_file)
181
- end
201
+ system 'xmessage', '-timeout', '5', '-title', title, message
182
202
  end
183
203
  end
184
204
 
data/bin/test-loop CHANGED
@@ -28,12 +28,10 @@ require 'diff/lcs'
28
28
  module Test
29
29
  Loop = OpenStruct.new
30
30
 
31
- Loop.config_file_path = File.join(Dir.pwd, '.test-loop')
32
-
33
31
  Loop.overhead_file_globs = ['{test,spec}/{test,spec}_helper.rb']
34
32
 
35
33
  Loop.reabsorb_file_globs = Loop.overhead_file_globs +
36
- ['config/*.{rb,yml}', 'Gemfile.lock', File.basename(Loop.config_file_path)]
34
+ ['config/**/*.{rb,yml}', 'Gemfile.lock']
37
35
 
38
36
  Loop.test_file_matchers = {
39
37
  # source files that correspond to test files
@@ -88,18 +86,19 @@ module Test
88
86
 
89
87
  private
90
88
 
91
- SCRIPT_NAME = File.basename($0).freeze
92
89
  EXEC_VECTOR = [$0, *ARGV].map {|s| s.dup.freeze }.freeze
93
90
 
94
91
  def notify message
95
92
  # using print() because puts() is not an atomic operation
96
- print "#{SCRIPT_NAME}: #{message}\n"
93
+ print "test-loop: #{message}\n"
97
94
  end
98
95
 
99
96
  def register_signals
100
- trap(:INT) { kill_master_and_workers }
101
- trap(:QUIT) { reload_master_process }
102
- trap(:TSTP) { forcibly_run_all_tests }
97
+ # puts newline to shield normal output from control-key interference:
98
+ # some shells like BASH emit text when control-key combos are pressed
99
+ trap(:INT) { puts; kill_master_and_workers }
100
+ trap(:QUIT) { puts; reload_master_process }
101
+ trap(:TSTP) { puts; forcibly_run_all_tests }
103
102
  end
104
103
 
105
104
  def kill_master_and_workers
@@ -116,9 +115,9 @@ module Test
116
115
  end
117
116
 
118
117
  def load_user_config
119
- if File.exist? config_file_path
118
+ if File.exist? config_file = File.join(Dir.pwd, '.test-loop')
120
119
  notify 'Loading configuration...'
121
- load config_file_path
120
+ load config_file
122
121
  end
123
122
  end
124
123
 
@@ -206,10 +205,7 @@ module Test
206
205
 
207
206
  # monitor and report on the worker's progress
208
207
  Thread.new do
209
- report = lambda do |state|
210
- notify [state, worker_pid, test_file].join("\t")
211
- end
212
- report.call :RUN
208
+ notify "TEST #{test_file}"
213
209
 
214
210
  # wait for worker to finish
215
211
  begin
@@ -219,7 +215,7 @@ module Test
219
215
  end
220
216
  elapsed_time = Time.now - @last_ran_at
221
217
 
222
- report.call $?.success? && :PASS || :FAIL
218
+ notify "#{$?.success? && :PASS || :FAIL} #{test_file}"
223
219
  after_each_test.call test_file, log_file, $?, @last_ran_at, elapsed_time
224
220
  @running_files_lock.synchronize { @running_files.delete test_file }
225
221
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 9
7
7
  - 0
8
- - 0
9
- version: 9.0.0
8
+ - 1
9
+ version: 9.0.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Suraj N. Kurapati
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-02-15 00:00:00 -08:00
17
+ date: 2011-02-18 00:00:00 -08:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency