parallel_tests 1.0.9 → 1.1.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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/Readme.md +7 -3
  3. data/bin/parallel_cucumber +5 -1
  4. data/bin/parallel_rspec +5 -1
  5. data/bin/parallel_spinach +5 -1
  6. data/bin/parallel_test +5 -2
  7. data/lib/parallel_tests.rb +0 -1
  8. metadata +3 -51
  9. data/.gitignore +0 -4
  10. data/.rspec +0 -2
  11. data/.travis.yml +0 -10
  12. data/Gemfile +0 -9
  13. data/Gemfile.lock +0 -53
  14. data/Rakefile +0 -10
  15. data/ReadmeRails2.md +0 -48
  16. data/lib/parallel_tests/cli.rb +0 -206
  17. data/lib/parallel_tests/cucumber/failures_logger.rb +0 -25
  18. data/lib/parallel_tests/cucumber/runner.rb +0 -37
  19. data/lib/parallel_tests/cucumber/scenario_line_logger.rb +0 -51
  20. data/lib/parallel_tests/cucumber/scenarios.rb +0 -34
  21. data/lib/parallel_tests/gherkin/io.rb +0 -41
  22. data/lib/parallel_tests/gherkin/listener.rb +0 -87
  23. data/lib/parallel_tests/gherkin/runner.rb +0 -116
  24. data/lib/parallel_tests/gherkin/runtime_logger.rb +0 -28
  25. data/lib/parallel_tests/grouper.rb +0 -73
  26. data/lib/parallel_tests/railtie.rb +0 -8
  27. data/lib/parallel_tests/rspec/failures_logger.rb +0 -54
  28. data/lib/parallel_tests/rspec/logger_base.rb +0 -55
  29. data/lib/parallel_tests/rspec/runner.rb +0 -73
  30. data/lib/parallel_tests/rspec/runtime_logger.rb +0 -59
  31. data/lib/parallel_tests/rspec/summary_logger.rb +0 -19
  32. data/lib/parallel_tests/spinach/runner.rb +0 -19
  33. data/lib/parallel_tests/tasks.rb +0 -157
  34. data/lib/parallel_tests/test/runner.rb +0 -186
  35. data/lib/parallel_tests/test/runtime_logger.rb +0 -98
  36. data/lib/parallel_tests/version.rb +0 -3
  37. data/parallel_tests.gemspec +0 -14
  38. data/spec/integration_spec.rb +0 -437
  39. data/spec/parallel_tests/cli_spec.rb +0 -149
  40. data/spec/parallel_tests/cucumber/failure_logger_spec.rb +0 -43
  41. data/spec/parallel_tests/cucumber/runner_spec.rb +0 -25
  42. data/spec/parallel_tests/cucumber/scenarios_spec.rb +0 -69
  43. data/spec/parallel_tests/gherkin/listener_spec.rb +0 -96
  44. data/spec/parallel_tests/gherkin/runner_behaviour.rb +0 -216
  45. data/spec/parallel_tests/grouper_spec.rb +0 -61
  46. data/spec/parallel_tests/rspec/failures_logger_spec.rb +0 -82
  47. data/spec/parallel_tests/rspec/logger_base_spec.rb +0 -35
  48. data/spec/parallel_tests/rspec/runner_spec.rb +0 -201
  49. data/spec/parallel_tests/rspec/runtime_logger_spec.rb +0 -131
  50. data/spec/parallel_tests/rspec/summary_logger_spec.rb +0 -37
  51. data/spec/parallel_tests/spinach/runner_spec.rb +0 -12
  52. data/spec/parallel_tests/tasks_spec.rb +0 -178
  53. data/spec/parallel_tests/test/runner_spec.rb +0 -407
  54. data/spec/parallel_tests/test/runtime_logger_spec.rb +0 -112
  55. data/spec/parallel_tests_spec.rb +0 -137
  56. data/spec/spec_helper.rb +0 -182
@@ -1,37 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ParallelTests::RSpec::SummaryLogger do
4
- let(:output){ OutputLogger.new([]) }
5
- let(:logger){ ParallelTests::RSpec::SummaryLogger.new(output) }
6
-
7
- def decolorize(string)
8
- string.gsub(/\e\[\d+m/,'')
9
- end
10
-
11
- # TODO somehow generate a real example with an exception to test this
12
- xit "prints failing examples" do
13
- logger.example_failed XXX
14
- logger.example_failed XXX
15
- logger.dump_failures
16
- output.output.should == [
17
- "bundle exec rspec ./spec/path/to/example.rb:123 # should do stuff",
18
- "bundle exec rspec ./spec/path/to/example.rb:125 # should not do stuff"
19
- ]
20
- end
21
-
22
- it "does not print anything for passing examples" do
23
- logger.example_passed mock(:location => "/my/spec/foo.rb:123")
24
- logger.dump_failures
25
- output.output.should == []
26
- logger.dump_summary(1,2,3,4)
27
- output.output.map{|o| decolorize(o) }.should == ["\nFinished in 1 second\n", "2 examples, 3 failures, 4 pending"]
28
- end
29
-
30
- it "does not print anything for pending examples" do
31
- logger.example_pending mock(:location => "/my/spec/foo.rb:123")
32
- logger.dump_failures
33
- output.output.should == []
34
- logger.dump_summary(1,2,3,4)
35
- output.output.map{|o| decolorize(o) }.should == ["\nFinished in 1 second\n", "2 examples, 3 failures, 4 pending"]
36
- end
37
- end
@@ -1,12 +0,0 @@
1
- require "spec_helper"
2
- require "parallel_tests/gherkin/runner_behaviour"
3
- require "parallel_tests/spinach/runner"
4
-
5
- describe ParallelTests::Spinach::Runner do
6
- test_tests_in_groups(ParallelTests::Spinach::Runner, 'features', ".feature")
7
-
8
- it_should_behave_like 'gherkin runners' do
9
- let(:runner_name) {'spinach'}
10
- let(:runner_class){ParallelTests::Spinach::Runner}
11
- end
12
- end
@@ -1,178 +0,0 @@
1
- require 'spec_helper'
2
- require 'parallel_tests/tasks'
3
-
4
- describe ParallelTests::Tasks do
5
- describe ".parse_args" do
6
- it "should return the count" do
7
- args = {:count => 2}
8
- ParallelTests::Tasks.parse_args(args).should == [2, "", ""]
9
- end
10
-
11
- it "should default to the prefix" do
12
- args = {:count => "models"}
13
- ParallelTests::Tasks.parse_args(args).should == [nil, "models", ""]
14
- end
15
-
16
- it "should return the count and pattern" do
17
- args = {:count => 2, :pattern => "models"}
18
- ParallelTests::Tasks.parse_args(args).should == [2, "models", ""]
19
- end
20
-
21
- it "should return the count, pattern, and options" do
22
- args = {:count => 2, :pattern => "plain", :options => "-p default"}
23
- ParallelTests::Tasks.parse_args(args).should == [2, "plain", "-p default"]
24
- end
25
-
26
- it "should return the count, pattern, and options" do
27
- args = {
28
- :count => 2,
29
- :pattern => "plain",
30
- :options => "-p default --group-by steps",
31
- }
32
- ParallelTests::Tasks.parse_args(args).should == [2, "plain", "-p default --group-by steps"]
33
- end
34
- end
35
-
36
- describe ".rails_env" do
37
- around do |example|
38
- begin
39
- old = ENV["RAILS_ENV"]
40
- ENV.delete "RAILS_ENV"
41
- example.call
42
- ensure
43
- ENV["RAILS_ENV"] = old
44
- end
45
- end
46
-
47
- it "should be test when nothing was set" do
48
- ParallelTests::Tasks.rails_env.should == "test"
49
- end
50
-
51
- it "should be whatever was set" do
52
- ENV["RAILS_ENV"] = "foo"
53
- ParallelTests::Tasks.rails_env.should == "foo"
54
- end
55
- end
56
-
57
- describe ".run_in_parallel" do
58
- let(:full_path){ File.expand_path("../../../bin/parallel_test", __FILE__) }
59
-
60
- it "has the executable" do
61
- File.file?(full_path).should == true
62
- File.executable?(full_path).should == true
63
- end
64
-
65
- it "runs command in parallel" do
66
- ParallelTests::Tasks.should_receive(:system).with("#{full_path} --exec 'echo'").and_return true
67
- ParallelTests::Tasks.run_in_parallel("echo")
68
- end
69
-
70
- it "runs command with :count option" do
71
- ParallelTests::Tasks.should_receive(:system).with("#{full_path} --exec 'echo' -n 123").and_return true
72
- ParallelTests::Tasks.run_in_parallel("echo", :count => 123)
73
- end
74
-
75
- it "runs without -n with blank :count option" do
76
- ParallelTests::Tasks.should_receive(:system).with("#{full_path} --exec 'echo'").and_return true
77
- ParallelTests::Tasks.run_in_parallel("echo", :count => "")
78
- end
79
-
80
- it "runs command with :non_parallel option" do
81
- ParallelTests::Tasks.should_receive(:system).with("#{full_path} --exec 'echo' --non-parallel").and_return true
82
- ParallelTests::Tasks.run_in_parallel("echo", :non_parallel => true)
83
- end
84
-
85
- it "runs aborts if the command fails" do
86
- ParallelTests::Tasks.should_receive(:system).and_return false
87
- ParallelTests::Tasks.should_receive(:abort).and_return false
88
- ParallelTests::Tasks.run_in_parallel("echo")
89
- end
90
- end
91
-
92
- describe ".suppress_output" do
93
- def call(command, grep)
94
- # Explictly run as a parameter to /bin/sh to simulate how
95
- # the command will be run by parallel_test --exec
96
- # This also tests shell escaping of single quotes
97
- result = `/bin/sh -c '#{ParallelTests::Tasks.suppress_output(command, grep)}'`
98
- [result, $?.success?]
99
- end
100
-
101
- context "with pipefail supported" do
102
- before :all do
103
- if not system("/bin/bash", "-c", "set -o pipefail 2>/dev/null && test 1")
104
- pending "pipefail is not supported on your system"
105
- end
106
- end
107
-
108
- it "should hide offending lines" do
109
- call("echo 123", "123").should == ["", true]
110
- end
111
-
112
- it "should not hide other lines" do
113
- call("echo 124", "123").should == ["124\n", true]
114
- end
115
-
116
- it "should fail if command fails and the pattern matches" do
117
- call("echo 123 && test", "123").should == ["", false]
118
- end
119
-
120
- it "should fail if command fails and the pattern fails" do
121
- call("echo 124 && test", "123").should == ["124\n", false]
122
- end
123
- end
124
-
125
- context "without pipefail supported" do
126
- before do
127
- ParallelTests::Tasks.should_receive(:system).with('/bin/bash', '-c', 'set -o pipefail 2>/dev/null && test 1').and_return false
128
- end
129
-
130
- it "should not filter and succeed" do
131
- call("echo 123", "123").should == ["123\n", true]
132
- end
133
-
134
- it "should not filter and fail" do
135
- call("echo 123 && test", "123").should == ["123\n", false]
136
- end
137
- end
138
- end
139
-
140
- describe ".check_for_pending_migrations" do
141
- after do
142
- Rake.application.instance_variable_get('@tasks').delete("db:abort_if_pending_migrations")
143
- Rake.application.instance_variable_get('@tasks').delete("app:db:abort_if_pending_migrations")
144
- end
145
-
146
- it "should do nothing if pending migrations is no defined" do
147
- ParallelTests::Tasks.check_for_pending_migrations
148
- end
149
-
150
- it "should run pending migrations is task is defined" do
151
- foo = 1
152
- Rake::Task.define_task("db:abort_if_pending_migrations") do
153
- foo = 2
154
- end
155
- ParallelTests::Tasks.check_for_pending_migrations
156
- foo.should == 2
157
- end
158
-
159
- it "should run pending migrations is app task is defined" do
160
- foo = 1
161
- Rake::Task.define_task("app:db:abort_if_pending_migrations") do
162
- foo = 2
163
- end
164
- ParallelTests::Tasks.check_for_pending_migrations
165
- foo.should == 2
166
- end
167
-
168
- it "should not execute the task twice" do
169
- foo = 1
170
- Rake::Task.define_task("db:abort_if_pending_migrations") do
171
- foo += 1
172
- end
173
- ParallelTests::Tasks.check_for_pending_migrations
174
- ParallelTests::Tasks.check_for_pending_migrations
175
- foo.should == 2
176
- end
177
- end
178
- end
@@ -1,407 +0,0 @@
1
- require "spec_helper"
2
- require "parallel_tests/test/runner"
3
-
4
- describe ParallelTests::Test::Runner do
5
- test_tests_in_groups(ParallelTests::Test::Runner, 'test', '_test.rb')
6
- test_tests_in_groups(ParallelTests::Test::Runner, 'test', '_spec.rb')
7
-
8
- describe ".run_tests" do
9
- def call(*args)
10
- ParallelTests::Test::Runner.run_tests(*args)
11
- end
12
-
13
- it "allows to override runner executable via PARALLEL_TESTS_EXECUTABLE" do
14
- begin
15
- ENV['PARALLEL_TESTS_EXECUTABLE'] = 'script/custom_rspec'
16
- ParallelTests::Test::Runner.should_receive(:execute_command).with{|a,b,c,d| a.include?("script/custom_rspec") }
17
- call(['xxx'], 1, 22, {})
18
- ensure
19
- ENV.delete('PARALLEL_TESTS_EXECUTABLE')
20
- end
21
- end
22
-
23
- it "uses options" do
24
- ParallelTests::Test::Runner.should_receive(:execute_command).with{|a,b,c,d| a =~ %r{ruby -Itest .* -- -v}}
25
- call(['xxx'], 1, 22, :test_options => '-v')
26
- end
27
-
28
- it "returns the output" do
29
- ParallelTests::Test::Runner.should_receive(:execute_command).and_return({:x => 1})
30
- call(['xxx'], 1, 22, {}).should == {:x => 1}
31
- end
32
- end
33
-
34
- describe ".test_in_groups" do
35
- def call(*args)
36
- ParallelTests::Test::Runner.tests_in_groups(*args)
37
- end
38
-
39
- it "does not sort when passed false do_sort option" do
40
- ParallelTests::Test::Runner.should_not_receive(:smallest_first)
41
- call([], 1, :group_by => :found)
42
- end
43
-
44
- it "does sort when not passed do_sort option" do
45
- ParallelTests::Test::Runner.stub!(:tests_with_runtime).and_return([])
46
- ParallelTests::Grouper.should_receive(:group_features_by_size).and_return([])
47
- call([], 1)
48
- end
49
-
50
- it "groups by single_process pattern and then via size" do
51
- ParallelTests::Test::Runner.should_receive(:with_runtime_info).
52
- and_return([
53
- ['aaa', 5],
54
- ['aaa2', 5],
55
- ['bbb', 2],
56
- ['ccc', 1],
57
- ['ddd', 1]
58
- ])
59
- result = call([], 3, :single_process => [/^a.a/])
60
- result.should == [["aaa", "aaa2"], ["bbb"], ["ccc", "ddd"]]
61
- end
62
-
63
- it "groups by size and adds isolated separately" do
64
- pending if RUBY_PLATFORM == "java"
65
- ParallelTests::Test::Runner.should_receive(:with_runtime_info).
66
- and_return([
67
- ['aaa', 0],
68
- ['bbb', 3],
69
- ['ccc', 1],
70
- ['ddd', 2],
71
- ['eee', 1]
72
- ])
73
-
74
- result = call([], 3, :isolate => true, :single_process => [/^aaa/])
75
- result.should == [["aaa"], ["bbb", "eee"], ["ccc", "ddd"]]
76
- end
77
- end
78
-
79
- describe ".find_results" do
80
- def call(*args)
81
- ParallelTests::Test::Runner.find_results(*args)
82
- end
83
-
84
- it "finds multiple results in test output" do
85
- output = <<EOF
86
- Loaded suite /opt/ruby-enterprise/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake/rake_test_loader
87
- Started
88
- ..............
89
- Finished in 0.145069 seconds.
90
-
91
- 10 tests, 20 assertions, 0 failures, 0 errors
92
- Loaded suite /opt/ruby-enterprise/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake/rake_test_loader
93
- Started
94
- ..............
95
- Finished in 0.145069 seconds.
96
-
97
- 14 tests, 20 assertions, 0 failures, 0 errors
98
-
99
- EOF
100
-
101
- call(output).should == ['10 tests, 20 assertions, 0 failures, 0 errors','14 tests, 20 assertions, 0 failures, 0 errors']
102
- end
103
-
104
- it "is robust against scrambled output" do
105
- output = <<EOF
106
- Loaded suite /opt/ruby-enterprise/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake/rake_test_loader
107
- Started
108
- ..............
109
- Finished in 0.145069 seconds.
110
-
111
- 10 tests, 20 assertions, 0 failures, 0 errors
112
- Loaded suite /opt/ruby-enterprise/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake/rake_test_loader
113
- Started
114
- ..............
115
- Finished in 0.145069 seconds.
116
-
117
- 14 te.dsts, 20 assertions, 0 failures, 0 errors
118
- EOF
119
-
120
- call(output).should == ['10 tests, 20 assertions, 0 failures, 0 errors','14 tedsts, 20 assertions, 0 failures, 0 errors']
121
- end
122
-
123
- it "ignores color-codes" do
124
- output = <<EOF
125
- 10 tests, 20 assertions, 0 \e[31mfailures, 0 errors
126
- EOF
127
- call(output).should == ['10 tests, 20 assertions, 0 failures, 0 errors']
128
- end
129
- end
130
-
131
- describe ".find_tests" do
132
- def call(*args)
133
- ParallelTests::Test::Runner.send(:find_tests, *args)
134
- end
135
-
136
- it "finds test in folders with appended /" do
137
- with_files(['b/a_test.rb']) do |root|
138
- call(["#{root}/"]).sort.should == [
139
- "#{root}/b/a_test.rb",
140
- ]
141
- end
142
- end
143
-
144
- it "finds test files nested in symlinked folders" do
145
- with_files(['a/a_test.rb','b/b_test.rb']) do |root|
146
- `ln -s #{root}/a #{root}/b/link`
147
- call(["#{root}/b"]).sort.should == [
148
- "#{root}/b/b_test.rb",
149
- "#{root}/b/link/a_test.rb",
150
- ]
151
- end
152
- end
153
-
154
- it "finds test files but ignores those in symlinked folders" do
155
- pending if RUBY_PLATFORM == "java"
156
- with_files(['a/a_test.rb','b/b_test.rb']) do |root|
157
- `ln -s #{root}/a #{root}/b/link`
158
- call(["#{root}/b"], :symlinks => false).sort.should == [
159
- "#{root}/b/b_test.rb",
160
- ]
161
- end
162
- end
163
-
164
- it "finds test files nested in different folders" do
165
- with_files(['a/a_test.rb','b/b_test.rb', 'c/c_test.rb']) do |root|
166
- call(["#{root}/a", "#{root}/b"]).sort.should == [
167
- "#{root}/a/a_test.rb",
168
- "#{root}/b/b_test.rb",
169
- ]
170
- end
171
- end
172
-
173
- it "only finds tests in folders" do
174
- with_files(['a/a_test.rb', 'a/test.rb', 'a/test_helper.rb']) do |root|
175
- call(["#{root}/a"]).sort.should == [
176
- "#{root}/a/a_test.rb"
177
- ]
178
- end
179
- end
180
-
181
- it "finds tests in nested folders" do
182
- with_files(['a/b/c/d/a_test.rb']) do |root|
183
- call(["#{root}/a"]).sort.should == [
184
- "#{root}/a/b/c/d/a_test.rb"
185
- ]
186
- end
187
- end
188
-
189
- it "does not expand paths" do
190
- with_files(['a/x_test.rb']) do |root|
191
- Dir.chdir root do
192
- call(['a']).sort.should == [
193
- "a/x_test.rb"
194
- ]
195
- end
196
- end
197
- end
198
-
199
- it "finds test files in folders by pattern" do
200
- with_files(['a/x_test.rb','a/y_test.rb','a/z_test.rb']) do |root|
201
- Dir.chdir root do
202
- call(["a"], :pattern => /^a\/(y|z)_test/).sort.should == [
203
- "a/y_test.rb",
204
- "a/z_test.rb",
205
- ]
206
- end
207
- end
208
- end
209
-
210
- it "doesn't find bakup files with the same name as test files" do
211
- with_files(['a/x_test.rb','a/x_test.rb.bak']) do |root|
212
- call(["#{root}/"]).should == [
213
- "#{root}/a/x_test.rb",
214
- ]
215
- end
216
- end
217
-
218
- it "finds minispec files" do
219
- with_files(['a/x_spec.rb']) do |root|
220
- call(["#{root}/"]).should == [
221
- "#{root}/a/x_spec.rb",
222
- ]
223
- end
224
- end
225
-
226
- it "finds nothing if I pass nothing" do
227
- call(nil).should == []
228
- end
229
-
230
- it "finds nothing if I pass nothing (empty array)" do
231
- call([]).should == []
232
- end
233
-
234
- it "keeps invalid files" do
235
- call(['baz']).should == ['baz']
236
- end
237
-
238
- it "discards duplicates" do
239
- call(['baz','baz']).should == ['baz']
240
- end
241
- end
242
-
243
- describe ".summarize_results" do
244
- def call(*args)
245
- ParallelTests::Test::Runner.summarize_results(*args)
246
- end
247
-
248
- it "adds results" do
249
- call(['1 foo 3 bar','2 foo 5 bar']).should == '8 bars, 3 foos'
250
- end
251
-
252
- it "adds results with braces" do
253
- call(['1 foo(s) 3 bar(s)','2 foo 5 bar']).should == '8 bars, 3 foos'
254
- end
255
-
256
- it "adds same results with plurals" do
257
- call(['1 foo 3 bar','2 foos 5 bar']).should == '8 bars, 3 foos'
258
- end
259
-
260
- it "adds non-similar results" do
261
- call(['1 xxx 2 yyy','1 xxx 2 zzz']).should == '2 xxxs, 2 yyys, 2 zzzs'
262
- end
263
-
264
- it "does not pluralize 1" do
265
- call(['1 xxx 2 yyy']).should == '1 xxx, 2 yyys'
266
- end
267
- end
268
-
269
- describe ".execute_command" do
270
- def call(*args)
271
- ParallelTests::Test::Runner.execute_command(*args)
272
- end
273
-
274
- def capture_output
275
- $stdout, $stderr = StringIO.new, StringIO.new
276
- yield
277
- [$stdout.string, $stderr.string]
278
- ensure
279
- $stdout, $stderr = STDOUT, STDERR
280
- end
281
-
282
- def run_with_file(content)
283
- capture_output do
284
- Tempfile.open("xxx") do |f|
285
- f.write(content)
286
- f.flush
287
- yield f.path
288
- end
289
- end
290
- end
291
-
292
- it "sets process number to 2 for 1" do
293
- run_with_file("puts ENV['TEST_ENV_NUMBER']") do |path|
294
- result = call("ruby #{path}", 1, 4, {})
295
- result.should == {
296
- :stdout => "2\n",
297
- :exit_status => 0
298
- }
299
- end
300
- end
301
-
302
- it "sets process number to '' for 0" do
303
- run_with_file("puts ENV['TEST_ENV_NUMBER'].inspect") do |path|
304
- result = call("ruby #{path}", 0, 4, {})
305
- result.should == {
306
- :stdout => "\"\"\n",
307
- :exit_status => 0
308
- }
309
- end
310
- end
311
-
312
- it 'sets PARALLEL_TEST_GROUPS so child processes know that they are being run under parallel_tests' do
313
- run_with_file("puts ENV['PARALLEL_TEST_GROUPS']") do |path|
314
- result = call("ruby #{path}", 1, 4, {})
315
- result.should == {
316
- :stdout => "4\n",
317
- :exit_status => 0
318
- }
319
- end
320
- end
321
-
322
- it "skips reads from stdin" do
323
- pending "hangs on normal ruby, works on jruby" unless RUBY_PLATFORM == "java"
324
- run_with_file("$stdin.read; puts 123") do |path|
325
- result = call("ruby #{path}", 1, 2, {})
326
- result.should == {
327
- :stdout => "123\n",
328
- :exit_status => 0
329
- }
330
- end
331
- end
332
-
333
- it "waits for process to finish" do
334
- run_with_file("sleep 0.5; puts 123; sleep 0.5; puts 345") do |path|
335
- result = call("ruby #{path}", 1, 4, {})
336
- result.should == {
337
- :stdout => "123\n345\n",
338
- :exit_status => 0
339
- }
340
- end
341
- end
342
-
343
- it "prints output while running" do
344
- pending "too slow" if RUBY_PLATFORM == " java"
345
- run_with_file("$stdout.sync = true; puts 123; sleep 0.1; print 345; sleep 0.1; puts 567") do |path|
346
- received = ""
347
- $stdout.stub(:print).with{|x| received << x.strip }
348
- result = call("ruby #{path}", 1, 4, {})
349
- received.should == "123345567"
350
- result.should == {
351
- :stdout => "123\n345567\n",
352
- :exit_status => 0
353
- }
354
- end
355
- end
356
-
357
- it "works with synced stdout" do
358
- run_with_file("$stdout.sync = true; puts 123; sleep 0.1; puts 345") do |path|
359
- result = call("ruby #{path}", 1, 4, {})
360
- result.should == {
361
- :stdout => "123\n345\n",
362
- :exit_status => 0
363
- }
364
- end
365
- end
366
-
367
- it "does not print to stdout with :serialize_stdout" do
368
- run_with_file("puts 123") do |path|
369
- $stdout.should_not_receive(:print)
370
- result = call("ruby #{path}", 1, 4, :serialize_stdout => true)
371
- result.should == {
372
- :stdout => "123\n",
373
- :exit_status => 0
374
- }
375
- end
376
- end
377
-
378
- it "returns correct exit status" do
379
- run_with_file("puts 123; exit 5") do |path|
380
- result = call("ruby #{path}", 1, 4, {})
381
- result.should == {
382
- :stdout => "123\n",
383
- :exit_status => 5
384
- }
385
- end
386
- end
387
-
388
- it "prints each stream to the correct stream" do
389
- pending "open3"
390
- out, err = run_with_file("puts 123 ; $stderr.puts 345 ; exit 5") do |path|
391
- result = call("ruby #{path}", 1, 4, {})
392
- result.should == {
393
- :stdout => "123\n",
394
- :exit_status => 5
395
- }
396
- end
397
- err.should == "345\n"
398
- end
399
-
400
- it "uses a lower priority process when the nice option is used" do
401
- priority_cmd = "puts Process.getpriority(Process::PRIO_PROCESS, 0)"
402
- priority_without_nice = run_with_file(priority_cmd){ |cmd| call("ruby #{cmd}", 1, 4, {}) }.first.to_i
403
- priority_with_nice = run_with_file(priority_cmd){ |cmd| call("ruby #{cmd}", 1, 4, :nice => true) }.first.to_i
404
- priority_without_nice.should < priority_with_nice
405
- end
406
- end
407
- end