blue-shell 0.0.2 → 0.0.3
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.
@@ -10,8 +10,6 @@ module BlueShell
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def expect(pattern, timeout = 5)
|
13
|
-
buffer = ''
|
14
|
-
|
15
13
|
case pattern
|
16
14
|
when String
|
17
15
|
pattern = Regexp.new(Regexp.quote(pattern))
|
@@ -20,6 +18,22 @@ module BlueShell
|
|
20
18
|
raise TypeError, "unsupported pattern class: #{pattern.class}"
|
21
19
|
end
|
22
20
|
|
21
|
+
result, buffer = read_pipe(timeout, pattern)
|
22
|
+
|
23
|
+
@output << buffer
|
24
|
+
|
25
|
+
result
|
26
|
+
end
|
27
|
+
|
28
|
+
def read_to_end
|
29
|
+
_, buffer = read_pipe(0.01)
|
30
|
+
@output << buffer
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def read_pipe(timeout, pattern = nil)
|
36
|
+
buffer = ""
|
23
37
|
result = nil
|
24
38
|
position = 0
|
25
39
|
@unused ||= ""
|
@@ -53,19 +67,15 @@ module BlueShell
|
|
53
67
|
end
|
54
68
|
end
|
55
69
|
|
56
|
-
if matches = pattern.match(buffer)
|
70
|
+
if pattern && matches = pattern.match(buffer)
|
57
71
|
result = [buffer, *matches.to_a[1..-1]]
|
58
72
|
break
|
59
73
|
end
|
60
74
|
end
|
61
75
|
|
62
|
-
|
63
|
-
|
64
|
-
result
|
76
|
+
return result, buffer
|
65
77
|
end
|
66
78
|
|
67
|
-
private
|
68
|
-
|
69
79
|
def output_ended?(timeout)
|
70
80
|
(@out.is_a?(IO) && !IO.select([@out], nil, nil, timeout)) || @out.eof?
|
71
81
|
end
|
data/lib/blue-shell/runner.rb
CHANGED
@@ -41,12 +41,16 @@ module BlueShell
|
|
41
41
|
@stdin.puts
|
42
42
|
end
|
43
43
|
|
44
|
-
def exit_code
|
44
|
+
def exit_code(timeout = 5)
|
45
45
|
return @code if @code
|
46
46
|
|
47
47
|
code = nil
|
48
|
-
|
49
|
-
|
48
|
+
begin
|
49
|
+
Timeout.timeout(timeout) do
|
50
|
+
_, code = Process.waitpid2(@pid)
|
51
|
+
end
|
52
|
+
rescue Timeout::Error
|
53
|
+
raise ::Timeout::Error.new("execution expired, output was:\n#{@expector.read_to_end}")
|
50
54
|
end
|
51
55
|
|
52
56
|
@code = numeric_exit_code(code)
|
data/lib/blue-shell/version.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe BlueShell::BufferedReaderExpector do
|
4
|
+
let(:pipe) { IO::pipe }
|
5
|
+
let(:read) { pipe[0] }
|
6
|
+
let(:write) { pipe[1] }
|
7
|
+
|
8
|
+
subject { BlueShell::BufferedReaderExpector.new(read) }
|
9
|
+
|
10
|
+
describe "#read_to_end" do
|
11
|
+
it "captures the output" do
|
12
|
+
hash = %w|the never ending story|
|
13
|
+
hash.each do |thing|
|
14
|
+
write.puts thing
|
15
|
+
end
|
16
|
+
|
17
|
+
subject.read_to_end.should include(hash.last)
|
18
|
+
|
19
|
+
hash.each do |thing|
|
20
|
+
subject.output.should include(thing)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/spec/runner_spec.rb
CHANGED
@@ -191,6 +191,26 @@ module BlueShell
|
|
191
191
|
end
|
192
192
|
end
|
193
193
|
end
|
194
|
+
|
195
|
+
context "when the command doesn't finish within the timeout" do
|
196
|
+
it "raises a timeout error" do
|
197
|
+
BlueShell::Runner.run("sleep 10") do |runner|
|
198
|
+
expect { runner.exit_code }.to raise_error(Timeout::Error)
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
it "prints the output so far" do
|
203
|
+
BlueShell::Runner.run("echo 'everything is coming up wankershim' && sleep 10") do |runner|
|
204
|
+
expect { runner.exit_code }.to raise_error(Timeout::Error, /everything is coming up wankershim/)
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
it "uses the given timeout" do
|
210
|
+
BlueShell::Runner.run("sleep 2") do |runner|
|
211
|
+
expect { runner.exit_code(1) }.to raise_error(Timeout::Error)
|
212
|
+
end
|
213
|
+
end
|
194
214
|
end
|
195
215
|
|
196
216
|
context "#exited?" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blue-shell
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-04-
|
13
|
+
date: 2013-04-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
@@ -79,6 +79,7 @@ files:
|
|
79
79
|
- lib/blue-shell.rb
|
80
80
|
- spec/assets/input.rb
|
81
81
|
- spec/assets/pause.rb
|
82
|
+
- spec/buffered_reader_expector_spec.rb
|
82
83
|
- spec/matchers/exit_code_matcher_spec.rb
|
83
84
|
- spec/matchers/output_matcher_spec.rb
|
84
85
|
- spec/matchers_spec.rb
|
@@ -114,6 +115,7 @@ summary: Friendly command-line test runner and matchers for shell scripting in r
|
|
114
115
|
test_files:
|
115
116
|
- spec/assets/input.rb
|
116
117
|
- spec/assets/pause.rb
|
118
|
+
- spec/buffered_reader_expector_spec.rb
|
117
119
|
- spec/matchers/exit_code_matcher_spec.rb
|
118
120
|
- spec/matchers/output_matcher_spec.rb
|
119
121
|
- spec/matchers_spec.rb
|