rubygems-test 0.2.1 → 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.
- data/History.txt +10 -0
- data/Rakefile +1 -1
- data/lib/rubygems/commands/test_command.rb +118 -61
- data/test/helper.rb +4 -0
- data/test/test_execute.rb +5 -1
- metadata +3 -3
data/History.txt
CHANGED
@@ -1 +1,11 @@
|
|
1
|
+
=== 0.2.2 / 1/10/2011
|
2
|
+
|
3
|
+
* Windows + 1.8 support. Requires the 'win32-open3' gem.
|
4
|
+
|
5
|
+
* --force option - run tests even if the gem author hasn't opted in. Do not
|
6
|
+
upload these results ever.
|
7
|
+
|
8
|
+
* --dep-user-install option - install any development dependencies to
|
9
|
+
Gem.user_dir
|
10
|
+
|
1
11
|
=== 0.1.9 / Sometime before hoe
|
data/Rakefile
CHANGED
@@ -26,7 +26,7 @@ class Gem::Commands::TestCommand < Gem::Command
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def usage
|
29
|
-
"#{program_name} GEM -v VERSION"
|
29
|
+
"#{program_name} GEM [-v VERSION] [--force] [--dep-user-install]"
|
30
30
|
end
|
31
31
|
|
32
32
|
def initialize(spec=nil, on_install=false)
|
@@ -41,6 +41,20 @@ class Gem::Commands::TestCommand < Gem::Command
|
|
41
41
|
|
42
42
|
super 'test', description, options
|
43
43
|
add_version_option
|
44
|
+
|
45
|
+
add_option(
|
46
|
+
'--force',
|
47
|
+
'ignore opt-in testing and just run the tests'
|
48
|
+
) do |v,o|
|
49
|
+
o[:force] = true
|
50
|
+
end
|
51
|
+
|
52
|
+
add_option(
|
53
|
+
'--dep-user-install',
|
54
|
+
'force installing the dependencies into the user path'
|
55
|
+
) do |v,o|
|
56
|
+
o[:dep_user_install] = true
|
57
|
+
end
|
44
58
|
end
|
45
59
|
|
46
60
|
#
|
@@ -95,7 +109,13 @@ class Gem::Commands::TestCommand < Gem::Command
|
|
95
109
|
# Install development dependencies for the gem we're about to test.
|
96
110
|
#
|
97
111
|
def install_dependencies(spec)
|
98
|
-
di =
|
112
|
+
di = nil
|
113
|
+
|
114
|
+
if options[:dep_user_install]
|
115
|
+
di = Gem::DependencyInstaller.new(:install_dir => Gem.user_dir)
|
116
|
+
else
|
117
|
+
di = Gem::DependencyInstaller.new
|
118
|
+
end
|
99
119
|
|
100
120
|
spec.development_dependencies.each do |dep|
|
101
121
|
unless Gem.source_index.search(dep).last
|
@@ -132,8 +152,14 @@ class Gem::Commands::TestCommand < Gem::Command
|
|
132
152
|
case response
|
133
153
|
when Net::HTTPSuccess
|
134
154
|
body = YAML::load(response.body)
|
135
|
-
|
136
|
-
|
155
|
+
if body[:success]
|
156
|
+
url = body[:data][0] if body[:data]
|
157
|
+
say "Test results posted successfully! \n\t#{url}"
|
158
|
+
else
|
159
|
+
body[:errors].each do |error|
|
160
|
+
say error
|
161
|
+
end if body[:errors]
|
162
|
+
end
|
137
163
|
when Net::HTTPRedirection
|
138
164
|
location = response.fetch('Location')
|
139
165
|
if !location or URI.parse(location) == url
|
@@ -184,78 +210,95 @@ class Gem::Commands::TestCommand < Gem::Command
|
|
184
210
|
exit_status = nil
|
185
211
|
|
186
212
|
Dir.chdir(spec.full_gem_path) do
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
end
|
203
|
-
end
|
204
|
-
end
|
205
|
-
|
206
|
-
[buf, current_handles]
|
213
|
+
reader_proc = proc do |orig_handles|
|
214
|
+
current_handles = orig_handles.dup
|
215
|
+
|
216
|
+
handles, _, _ = IO.select(current_handles, nil, nil, 0.1)
|
217
|
+
buf = ""
|
218
|
+
|
219
|
+
if handles
|
220
|
+
handles.compact.each do |io|
|
221
|
+
begin
|
222
|
+
buf += io.readline
|
223
|
+
rescue EOFError
|
224
|
+
buf += io.read rescue ""
|
225
|
+
current_handles.reject! { |x| x == io }
|
226
|
+
end
|
227
|
+
end
|
207
228
|
end
|
208
229
|
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
230
|
+
[buf, current_handles]
|
231
|
+
end
|
232
|
+
|
233
|
+
outer_reader_proc = proc do |stdout, stderr|
|
234
|
+
loop do
|
235
|
+
handles = [stderr, stdout]
|
236
|
+
buf, handles = reader_proc.call(handles)
|
237
|
+
output += buf
|
238
|
+
print buf
|
239
|
+
break if handles.empty?
|
217
240
|
end
|
241
|
+
end
|
218
242
|
|
219
|
-
|
243
|
+
rake_args = [rake_path, 'test', '--trace']
|
220
244
|
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
245
|
+
# jruby stuffs it under IO, so we'll use that if it's available
|
246
|
+
klass =
|
247
|
+
if IO.respond_to?(:popen4)
|
248
|
+
IO.popen4(*rake_args) do |pid, stdin, stdout, stderr|
|
249
|
+
outer_reader_proc.call(stdout, stderr)
|
250
|
+
end
|
251
|
+
exit_status = $?
|
252
|
+
elsif RUBY_VERSION > '1.9'
|
253
|
+
require 'open3'
|
254
|
+
exit_status = Open3.popen3(*rake_args) do |stdin, stdout, stderr, thr|
|
255
|
+
outer_reader_proc.call(stdout, stderr)
|
256
|
+
thr.value
|
257
|
+
end
|
258
|
+
elsif RUBY_PLATFORM =~ /mingw/
|
259
|
+
begin
|
260
|
+
require 'win32/open3'
|
261
|
+
Open3.popen3([File.join(RbConfig::CONFIG["bindir"], 'ruby'), *rake_args].join(' ')) do |stdin, stdout, stderr|
|
225
262
|
outer_reader_proc.call(stdout, stderr)
|
226
263
|
end
|
227
264
|
exit_status = $?
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
exit_status = Open4.popen4(*rake_args) do |pid, stdin, stdout, stderr|
|
237
|
-
outer_reader_proc.call(stdout, stderr)
|
238
|
-
end
|
265
|
+
rescue LoadError
|
266
|
+
say "1.8/Windows users must install the 'win32-open3' gem to run tests"
|
267
|
+
terminate_interaction 1
|
268
|
+
end
|
269
|
+
else
|
270
|
+
require 'open4-vendor'
|
271
|
+
exit_status = Open4.popen4(*rake_args) do |pid, stdin, stdout, stderr|
|
272
|
+
outer_reader_proc.call(stdout, stderr)
|
239
273
|
end
|
240
|
-
|
241
|
-
|
242
|
-
if config["upload_results"] or
|
243
|
-
(!config.has_key?("upload_results") and ask_yes_no("Upload these results?", true))
|
244
|
-
|
245
|
-
upload_results(gather_results(spec, output, exit_status.exitstatus == 0))
|
246
274
|
end
|
247
275
|
|
248
|
-
|
249
|
-
|
276
|
+
if upload_results?
|
277
|
+
upload_results(gather_results(spec, output, exit_status.exitstatus == 0))
|
278
|
+
end
|
250
279
|
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
280
|
+
if exit_status.exitstatus != 0
|
281
|
+
alert_error "Tests did not pass. Examine the output and report it to the author!"
|
282
|
+
|
283
|
+
raise Gem::TestError, "tests failed"
|
255
284
|
end
|
256
285
|
end
|
257
286
|
end
|
258
287
|
|
288
|
+
#
|
289
|
+
# Convenience predicate for upload_results option
|
290
|
+
#
|
291
|
+
def upload_results?
|
292
|
+
!options[:force] and (
|
293
|
+
config["upload_results"] or
|
294
|
+
(
|
295
|
+
!config.has_key?("upload_results") and
|
296
|
+
ask_yes_no("Upload these results?", true)
|
297
|
+
)
|
298
|
+
)
|
299
|
+
end
|
300
|
+
|
301
|
+
|
259
302
|
#
|
260
303
|
# Execute routine. This is where the magic happens.
|
261
304
|
#
|
@@ -271,7 +314,7 @@ class Gem::Commands::TestCommand < Gem::Command
|
|
271
314
|
next
|
272
315
|
end
|
273
316
|
|
274
|
-
if spec.files.include?('.gemtest')
|
317
|
+
if spec.files.include?('.gemtest') or options[:force]
|
275
318
|
# we find rake and the rakefile first to eliminate needlessly installing
|
276
319
|
# dependencies.
|
277
320
|
find_rakefile(spec)
|
@@ -280,6 +323,20 @@ class Gem::Commands::TestCommand < Gem::Command
|
|
280
323
|
install_dependencies(spec)
|
281
324
|
|
282
325
|
run_tests(spec, rake_path)
|
326
|
+
else
|
327
|
+
say "Gem '#{name}' (version #{version}) needs to opt-in for testing."
|
328
|
+
say ""
|
329
|
+
say "Locally available testing helps gems maintain high quality by"
|
330
|
+
say "ensuring they work correctly on a wider array of platforms than the"
|
331
|
+
say "original developer can access."
|
332
|
+
say ""
|
333
|
+
say "If you are the author: "
|
334
|
+
say " * Add the file '.gemtest' to your spec.files"
|
335
|
+
say " * Ensure 'rake test' works and doesn't do system damage"
|
336
|
+
say " * Add your tests and Rakefile to your gem."
|
337
|
+
say ""
|
338
|
+
say "For more information, please see the rubygems-test README:"
|
339
|
+
say "https://github.com/rubygems/rubygems-test/blob/master/README.txt"
|
283
340
|
end
|
284
341
|
end
|
285
342
|
rescue Gem::TestError
|
data/test/helper.rb
CHANGED
data/test/test_execute.rb
CHANGED
@@ -18,7 +18,7 @@ class TestExecute < Test::Unit::TestCase
|
|
18
18
|
def test_02_gem_command_attributes
|
19
19
|
assert_equal @test.description, "Run the tests for a specific gem"
|
20
20
|
assert_equal @test.arguments, "GEM: name of gem"
|
21
|
-
assert_equal @test.usage, "#{@test.program_name} GEM -v VERSION"
|
21
|
+
assert_equal @test.usage, "#{@test.program_name} GEM [-v VERSION] [--force] [--dep-user-install]"
|
22
22
|
end
|
23
23
|
|
24
24
|
def test_04_find_gem
|
@@ -76,4 +76,8 @@ class TestExecute < Test::Unit::TestCase
|
|
76
76
|
|
77
77
|
assert_equal YAML.load(@test.gather_results(spec, output, true)), hash
|
78
78
|
end
|
79
|
+
|
80
|
+
def test_08_print_errors_from_server
|
81
|
+
|
82
|
+
end
|
79
83
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
8
|
+
- 2
|
9
|
+
version: 0.2.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Erik Hollensbe
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-01-
|
18
|
+
date: 2011-01-10 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|