blue-shell 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -50,8 +50,7 @@ module BlueShell
50
50
 
51
51
  STDOUT.putc c if @debug
52
52
 
53
- # evaluate true when \e is read and continue to
54
- # until m is read
53
+ # wear your flip flops
55
54
  unless (c == "\e") .. (c == "m")
56
55
  if c == "\b"
57
56
  if position > 0 && buffer[position - 1] && buffer[position - 1].chr != "\n"
@@ -78,12 +77,7 @@ module BlueShell
78
77
  end
79
78
 
80
79
  def output_ended?(timeout)
81
- [timeout.to_i, 1].max.times do
82
- if(@out.is_a?(IO) && IO.select([@out], nil, nil, 1))
83
- return @out.eof?
84
- end
85
- end
86
- true
80
+ (@out.is_a?(IO) && !IO.select([@out], nil, nil, timeout)) || @out.eof?
87
81
  end
88
82
  end
89
83
  end
@@ -4,10 +4,13 @@ module BlueShell
4
4
  OutputMatcher.new(expected_output, timeout)
5
5
  end
6
6
 
7
+ alias :have_output :say
8
+
7
9
  def have_exited_with(expected_code)
8
10
  ExitCodeMatcher.new(expected_code)
9
11
  end
10
12
 
13
+ alias :have_exit_code :have_exited_with
11
14
  alias :exit_with :have_exited_with
12
15
  end
13
16
  end
@@ -32,6 +32,10 @@ module BlueShell
32
32
  end
33
33
  end
34
34
 
35
+ def send_up_arrow
36
+ @stdin.print("\e[A")
37
+ end
38
+
35
39
  def send_keys(text_to_send)
36
40
  @stdin.puts(text_to_send)
37
41
  end
@@ -1,3 +1,3 @@
1
1
  module BlueShell
2
- VERSION = "0.2.0".freeze
2
+ VERSION = "0.2.1".freeze
3
3
  end
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'io/wait'
4
+ require_relative '../../spec/support/escaped_keys'
5
+
6
+ class UnbufferedInput
7
+ $stdout.sync = true
8
+
9
+ def initialize(exit_on_character)
10
+ @exit_on_character = exit_on_character
11
+ puts "started"
12
+ result = read_input
13
+ puts %Q{received: #{result.inspect}} if result
14
+ end
15
+
16
+ class << self
17
+ alias_method :run, :new
18
+ end
19
+
20
+
21
+ def read_input
22
+ begin
23
+ system("stty raw -echo -icanon isig <&2")
24
+
25
+ line = ""
26
+ input_character = ""
27
+
28
+ escaped = false
29
+ exit_on = ""
30
+ while exit_on != @exit_on_character
31
+ input_character = $stdin.getc
32
+
33
+ exit_on << input_character if escaped
34
+
35
+ if input_character == "\e"
36
+ escaped = true
37
+ end
38
+
39
+ line << input_character
40
+ end
41
+ line
42
+ ensure
43
+ system "stty -raw echo" # turn raw input off
44
+ end
45
+ end
46
+ end
47
+
48
+ exit_on_character = ARGF.argv[0]
49
+ UnbufferedInput.run(exit_on_character)
@@ -21,47 +21,4 @@ describe BlueShell::BufferedReaderExpector do
21
21
  end
22
22
  end
23
23
  end
24
-
25
- describe "output_ended?" do
26
- it "does not wait the full timeout if the command has already exited" do
27
- begin_time = Time.now
28
- Thread.new() do
29
- sleep(2)
30
- write.close
31
- end
32
- subject.send(:output_ended?, 10).should be_true
33
- duration = Time.now - begin_time
34
-
35
- duration.should <= 5
36
- end
37
-
38
- it "handles non-integer timeouts" do
39
- expect { subject.send(:output_ended?, 0.1) }.to_not raise_error
40
- end
41
-
42
- it "waits the full timeout when no output is arriving" do
43
- begin_time = Time.now
44
- Thread.new() do
45
- sleep(3)
46
- write.puts("not done")
47
- end
48
- subject.send(:output_ended?, 2).should be_true
49
- duration = Time.now - begin_time
50
-
51
- duration.should < 3
52
- duration.should >= 1.9
53
- end
54
-
55
- it "returns false if the output is readable" do
56
- begin_time = Time.now
57
- Thread.new() do
58
- sleep(1)
59
- write.puts("not done")
60
- end
61
- subject.send(:output_ended?, 4).should be_false
62
- duration = Time.now - begin_time
63
-
64
- duration.should <= 2
65
- end
66
- end
67
24
  end
@@ -9,6 +9,10 @@ module BlueShell
9
9
  say("").should be_a(Matchers::OutputMatcher)
10
10
  end
11
11
 
12
+ it "has synonyms" do
13
+ have_output("").should be_a(Matchers::OutputMatcher)
14
+ end
15
+
12
16
  context "with an explicit timeout" do
13
17
  it "returns an ExpectOutputMatcher" do
14
18
  matcher = say("", 30)
@@ -25,6 +29,7 @@ module BlueShell
25
29
 
26
30
  it "has synonyms" do
27
31
  exit_with(1).should be_a(Matchers::ExitCodeMatcher)
32
+ have_exit_code(1).should be_a(Matchers::ExitCodeMatcher)
28
33
  end
29
34
  end
30
35
  end
@@ -119,7 +119,7 @@ module BlueShell
119
119
  end
120
120
 
121
121
  it "calls the matched callback" do
122
- callback = mock!
122
+ callback = double(:callback)
123
123
  BlueShell::Runner.run("echo 1 3") do |runner|
124
124
  branches = {
125
125
  "1" => proc { callback }
@@ -161,7 +161,7 @@ module BlueShell
161
161
  end
162
162
 
163
163
  describe "#send_return" do
164
- it "sends a return and expects more output afterwards" do
164
+ it "sends a return and expects more output af`terwards" do
165
165
  BlueShell::Runner.run("ruby #{asset("input.rb")}") do |runner|
166
166
  expect(runner.expect("started")).to be_true
167
167
  runner.send_return
@@ -170,6 +170,16 @@ module BlueShell
170
170
  end
171
171
  end
172
172
 
173
+ describe "#send_up_arrow" do
174
+ it "sends an up arrow key press and expects more output afterwards" do
175
+ BlueShell::Runner.run("ruby #{asset("unbuffered_input.rb")} #{EscapedKeys::KEY_UP}") do |runner|
176
+ expect(runner.expect("started")).to be_true
177
+ runner.send_up_arrow
178
+ expect(runner.expect('received: "\e[A"')).to be_true
179
+ end
180
+ end
181
+ end
182
+
173
183
  context "#exit_code" do
174
184
  it "returns the exit code" do
175
185
  BlueShell::Runner.run("ruby -e 'exit 42'") do |runner|
@@ -1,13 +1,11 @@
1
1
  require 'blue-shell'
2
- require 'rr'
3
2
 
4
3
  Dir[File.expand_path('../support/**/*.rb', __FILE__)].each do |file|
5
4
  require file
6
5
  end
7
6
 
8
7
  RSpec.configure do |config|
9
- config.mock_with :rr
10
-
11
8
  config.include BlueShell::Helpers
9
+ config.include EscapedKeys
12
10
  end
13
11
 
@@ -0,0 +1,3 @@
1
+ module EscapedKeys
2
+ KEY_UP = "[A"
3
+ end
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.2.0
4
+ version: 0.2.1
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-18 00:00:00.000000000 Z
13
+ date: 2013-06-18 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
@@ -44,22 +44,6 @@ dependencies:
44
44
  - - ! '>='
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0'
47
- - !ruby/object:Gem::Dependency
48
- name: rr
49
- requirement: !ruby/object:Gem::Requirement
50
- none: false
51
- requirements:
52
- - - ! '>='
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- type: :development
56
- prerelease: false
57
- version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
- requirements:
60
- - - ! '>='
61
- - !ruby/object:Gem::Version
62
- version: '0'
63
47
  description:
64
48
  email:
65
49
  - cfpi-frontend@googlegroups.com
@@ -79,12 +63,14 @@ files:
79
63
  - lib/blue-shell.rb
80
64
  - spec/assets/input.rb
81
65
  - spec/assets/pause.rb
66
+ - spec/assets/unbuffered_input.rb
82
67
  - spec/buffered_reader_expector_spec.rb
83
68
  - spec/matchers/exit_code_matcher_spec.rb
84
69
  - spec/matchers/output_matcher_spec.rb
85
70
  - spec/matchers_spec.rb
86
71
  - spec/runner_spec.rb
87
72
  - spec/spec_helper.rb
73
+ - spec/support/escaped_keys.rb
88
74
  - spec/support/helpers.rb
89
75
  homepage: http://github.com/pivotal/blue-shell
90
76
  licenses:
@@ -107,7 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
93
  version: '0'
108
94
  requirements: []
109
95
  rubyforge_project:
110
- rubygems_version: 1.8.24
96
+ rubygems_version: 1.8.25
111
97
  signing_key:
112
98
  specification_version: 3
113
99
  summary: Friendly command-line test runner and matchers for shell scripting in ruby
@@ -115,10 +101,12 @@ summary: Friendly command-line test runner and matchers for shell scripting in r
115
101
  test_files:
116
102
  - spec/assets/input.rb
117
103
  - spec/assets/pause.rb
104
+ - spec/assets/unbuffered_input.rb
118
105
  - spec/buffered_reader_expector_spec.rb
119
106
  - spec/matchers/exit_code_matcher_spec.rb
120
107
  - spec/matchers/output_matcher_spec.rb
121
108
  - spec/matchers_spec.rb
122
109
  - spec/runner_spec.rb
123
110
  - spec/spec_helper.rb
111
+ - spec/support/escaped_keys.rb
124
112
  - spec/support/helpers.rb