expectr 1.0.3 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/expectr/version.rb +1 -1
- data/lib/expectr.rb +15 -0
- data/test/test_initialization.rb +1 -1
- data/test/test_interaction.rb +4 -6
- data/test/test_signals.rb +35 -0
- metadata +5 -3
data/lib/expectr/version.rb
CHANGED
data/lib/expectr.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'pty'
|
2
2
|
require 'timeout'
|
3
3
|
require 'thread'
|
4
|
+
require 'io/console'
|
4
5
|
|
5
6
|
require 'expectr/error'
|
6
7
|
require 'expectr/version'
|
@@ -88,6 +89,7 @@ class Expectr
|
|
88
89
|
@interact = false
|
89
90
|
|
90
91
|
@stdout,@stdin,@pid = PTY.spawn(cmd)
|
92
|
+
@stdout.winsize = STDOUT.winsize
|
91
93
|
|
92
94
|
Thread.new do
|
93
95
|
while @pid > 0
|
@@ -152,6 +154,11 @@ class Expectr
|
|
152
154
|
old_tstp_trap = trap 'TSTP' do
|
153
155
|
send "\C-z"
|
154
156
|
end
|
157
|
+
|
158
|
+
# SIGWINCH should trigger an update to the child process
|
159
|
+
old_winch_trap = trap 'WINCH' do
|
160
|
+
@stdout.winsize = STDOUT.winsize
|
161
|
+
end
|
155
162
|
|
156
163
|
interact = Thread.new do
|
157
164
|
input = ''.encode("UTF-8")
|
@@ -164,6 +171,7 @@ class Expectr
|
|
164
171
|
|
165
172
|
trap 'INT', old_int_trap
|
166
173
|
trap 'TSTP', old_tstp_trap
|
174
|
+
trap 'WINCH', old_winch_trap
|
167
175
|
`stty #{old_tty}`
|
168
176
|
@interact = false
|
169
177
|
end
|
@@ -293,6 +301,13 @@ class Expectr
|
|
293
301
|
end
|
294
302
|
end
|
295
303
|
|
304
|
+
# Public: Return the child's window size.
|
305
|
+
#
|
306
|
+
# Returns a two-element array (same as IO#winsize).
|
307
|
+
def winsize
|
308
|
+
@stdout.winsize
|
309
|
+
end
|
310
|
+
|
296
311
|
# Internal: Print buffer to STDOUT if @flush_buffer is true
|
297
312
|
#
|
298
313
|
# buf - String to be printed to STDOUT
|
data/test/test_initialization.rb
CHANGED
@@ -9,7 +9,7 @@ class InitializationTests < Test::Unit::TestCase
|
|
9
9
|
assert_nothing_raised { exp = Expectr.new(File.new("/bin/ls"), flush_buffer: false) }
|
10
10
|
end
|
11
11
|
|
12
|
-
# lib/expectr.rb's permissions should
|
12
|
+
# lib/expectr.rb's permissions should be set to 0644
|
13
13
|
def test_spawn_failures
|
14
14
|
assert_raises(Errno::ENOENT) { exp = Expectr.new("lib/ThisFileShouldNotExist", flush_buffer: false) }
|
15
15
|
assert_raises(Errno::EACCES) { exp = Expectr.new("lib/expectr.rb", flush_buffer: false) }
|
data/test/test_interaction.rb
CHANGED
@@ -37,6 +37,10 @@ class InteractionTest < Test::Unit::TestCase
|
|
37
37
|
assert_raises(Expectr::ProcessError) { @exp.send("test\n") }
|
38
38
|
end
|
39
39
|
|
40
|
+
def test_winsize_set
|
41
|
+
assert_not_equal [0, 0], @exp.winsize
|
42
|
+
end
|
43
|
+
|
40
44
|
def test_interact_sets_appropriate_flags
|
41
45
|
[
|
42
46
|
Thread.new {
|
@@ -105,10 +109,4 @@ class InteractionTest < Test::Unit::TestCase
|
|
105
109
|
|
106
110
|
assert_not_nil @exp.expect(/321/)
|
107
111
|
end
|
108
|
-
|
109
|
-
def test_kill_process
|
110
|
-
assert_equal true, @exp.kill!
|
111
|
-
assert_equal 0, @exp.pid
|
112
|
-
assert_raises(Expectr::ProcessError) { @exp.send("test\n") }
|
113
|
-
end
|
114
112
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class SignalHandlerTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@exp = Expectr.new("bc", flush_buffer: false, timeout: 1)
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_winsz_change
|
9
|
+
winsize = $stdout.winsize
|
10
|
+
[
|
11
|
+
Thread.new {
|
12
|
+
sleep 0.5
|
13
|
+
@exp.interact!.join
|
14
|
+
},
|
15
|
+
Thread.new {
|
16
|
+
sleep 1
|
17
|
+
@exp.flush_buffer=false
|
18
|
+
assert_nothing_raised do
|
19
|
+
$stdout.winsize = [10,10]
|
20
|
+
end
|
21
|
+
sleep 0.1
|
22
|
+
assert_equal [10,10], @exp.winsize
|
23
|
+
@exp.puts("quit")
|
24
|
+
}
|
25
|
+
].each {|x| x.join}
|
26
|
+
|
27
|
+
$stdout.winsize = winsize
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_kill_process
|
31
|
+
assert_equal true, @exp.kill!
|
32
|
+
assert_equal 0, @exp.pid
|
33
|
+
assert_raises(Expectr::ProcessError) { @exp.send("test\n") }
|
34
|
+
end
|
35
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: expectr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-02-18 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Expectr is an interface to the functionality of Expect in Ruby
|
15
15
|
email: chris@chriswuest.com
|
@@ -29,6 +29,7 @@ files:
|
|
29
29
|
- test/test_core.rb
|
30
30
|
- test/test_initialization.rb
|
31
31
|
- test/test_interaction.rb
|
32
|
+
- test/test_signals.rb
|
32
33
|
homepage: http://github.com/cwuest/expectr
|
33
34
|
licenses:
|
34
35
|
- MIT
|
@@ -50,7 +51,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
50
51
|
version: '0'
|
51
52
|
requirements: []
|
52
53
|
rubyforge_project:
|
53
|
-
rubygems_version: 1.8.
|
54
|
+
rubygems_version: 1.8.25
|
54
55
|
signing_key:
|
55
56
|
specification_version: 3
|
56
57
|
summary: Expect for Ruby
|
@@ -58,3 +59,4 @@ test_files:
|
|
58
59
|
- test/test_core.rb
|
59
60
|
- test/test_initialization.rb
|
60
61
|
- test/test_interaction.rb
|
62
|
+
- test/test_signals.rb
|