expectr 1.1.1 → 2.0.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.
- checksums.yaml +7 -0
- data/bin/expectr +22 -0
- data/lib/expectr/adopt.rb +50 -0
- data/lib/expectr/child.rb +165 -0
- data/lib/expectr/error.rb +13 -2
- data/lib/expectr/errstr.rb +33 -0
- data/lib/expectr/interface.rb +53 -0
- data/lib/expectr/interpreter.rb +119 -0
- data/lib/expectr/lambda.rb +131 -0
- data/lib/expectr/version.rb +1 -1
- data/lib/expectr.rb +209 -175
- metadata +17 -25
- data/Gemfile +0 -2
- data/LICENSE +0 -20
- data/README.rdoc +0 -51
- data/Rakefile +0 -18
- data/expectr.gemspec +0 -18
- data/test/helper.rb +0 -4
- data/test/test_core.rb +0 -50
- data/test/test_initialization.rb +0 -17
- data/test/test_interaction.rb +0 -112
- data/test/test_signals.rb +0 -36
data/Rakefile
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'rake/testtask'
|
2
|
-
require 'rdoc/task'
|
3
|
-
|
4
|
-
task default: :test
|
5
|
-
|
6
|
-
Rake::TestTask.new(:test) do |t|
|
7
|
-
t.libs.unshift File.expand_path('../test', __FILE__)
|
8
|
-
t.test_files = Dir.glob('test/**/test_*.rb')
|
9
|
-
t.ruby_opts = ['-rubygems'] if defined? Gem
|
10
|
-
t.ruby_opts << '-I./lib'
|
11
|
-
end
|
12
|
-
|
13
|
-
RDoc::Task.new(:doc) do |rdoc|
|
14
|
-
rdoc.rdoc_dir = 'doc'
|
15
|
-
rdoc.main = 'README.rdoc'
|
16
|
-
rdoc.rdoc_files.include('README.rdoc', 'lib/*.rb')
|
17
|
-
rdoc.options = %w[--inline-source --line-numbers --title Expectr --encoding=UTF-8 --main README.rdoc]
|
18
|
-
end
|
data/expectr.gemspec
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
|
2
|
-
require 'expectr/version'
|
3
|
-
|
4
|
-
Gem::Specification.new do |s|
|
5
|
-
s.name = "expectr"
|
6
|
-
s.version = Expectr::VERSION
|
7
|
-
|
8
|
-
s.description = "Expectr is an interface to the functionality of Expect in Ruby"
|
9
|
-
s.summary = "Expect for Ruby"
|
10
|
-
s.authors = ["Chris Wuest"]
|
11
|
-
s.email = "chris@chriswuest.com"
|
12
|
-
s.homepage = "http://github.com/cwuest/expectr"
|
13
|
-
|
14
|
-
s.files = `git ls-files`.split("\n")
|
15
|
-
s.test_files = s.files.select { |f| f =~ /^test\/test_/ }
|
16
|
-
|
17
|
-
s.license = 'MIT'
|
18
|
-
end
|
data/test/helper.rb
DELETED
data/test/test_core.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
class CoreTests < Test::Unit::TestCase
|
4
|
-
# For the purpose of testing, we will assume we are working within a POSIX
|
5
|
-
# environment.
|
6
|
-
def setup
|
7
|
-
@exp = Expectr.new("ls /dev && sleep 5", flush_buffer: false, timeout: 1,
|
8
|
-
buffer_size: 4096)
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_object_consistency
|
12
|
-
assert_equal(false, @exp.flush_buffer)
|
13
|
-
assert_equal(1, @exp.timeout)
|
14
|
-
assert_equal(4096, @exp.buffer_size)
|
15
|
-
assert_equal(false, @exp.force_match)
|
16
|
-
end
|
17
|
-
|
18
|
-
# POSIX specifies /dev/console, /dev/null and /dev/tty must exist.
|
19
|
-
def test_match_sets_discard
|
20
|
-
assert_not_equal(nil, @exp.expect(/null/))
|
21
|
-
assert_not_equal('', @exp.discard)
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_match_failure
|
25
|
-
@exp.force_match = true
|
26
|
-
assert_nothing_raised { @exp.expect(/ThisFileShouldNotExist/, true) }
|
27
|
-
assert_nothing_raised { @exp.expect(/null/) }
|
28
|
-
|
29
|
-
@exp.force_match = false
|
30
|
-
assert_raises(Timeout::Error) { @exp.expect(/ThisFileShouldNotExist/) }
|
31
|
-
assert_raises(Timeout::Error) { @exp.expect(/tty/) }
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_clear_buffer
|
35
|
-
sleep 1
|
36
|
-
assert_not_equal('', @exp.buffer)
|
37
|
-
@exp.clear_buffer!
|
38
|
-
assert_equal('', @exp.buffer)
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_garbage_output
|
42
|
-
@exp = Expectr.new("dd if=/dev/urandom bs=1024 count=1",
|
43
|
-
flush_buffer:false, timeout: 1, buffer_size: 1024)
|
44
|
-
assert_nothing_raised { @exp.expect(/probablyNotThere/, true) }
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_pid_set
|
48
|
-
assert_not_equal(0, @exp.pid)
|
49
|
-
end
|
50
|
-
end
|
data/test/test_initialization.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
class InitializationTests < Test::Unit::TestCase
|
4
|
-
def test_spawn_with_file
|
5
|
-
assert_nothing_raised { exp = Expectr.new(File.new("/bin/ls"), flush_buffer: false) }
|
6
|
-
end
|
7
|
-
|
8
|
-
def test_spawn_with_string
|
9
|
-
assert_nothing_raised { exp = Expectr.new(File.new("/bin/ls"), flush_buffer: false) }
|
10
|
-
end
|
11
|
-
|
12
|
-
# lib/expectr.rb's permissions should be set to 0644
|
13
|
-
def test_spawn_failures
|
14
|
-
assert_raises(Errno::ENOENT) { exp = Expectr.new("lib/ThisFileShouldNotExist", flush_buffer: false) }
|
15
|
-
assert_raises(Errno::EACCES) { exp = Expectr.new("lib/expectr.rb", flush_buffer: false) }
|
16
|
-
end
|
17
|
-
end
|
data/test/test_interaction.rb
DELETED
@@ -1,112 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
class InteractionTest < Test::Unit::TestCase
|
4
|
-
# Assume that bc(1) exists on the system for these tests
|
5
|
-
def setup
|
6
|
-
@exp = Expectr.new("bc", flush_buffer: false, timeout: 1)
|
7
|
-
end
|
8
|
-
|
9
|
-
def test_send_and_expect
|
10
|
-
assert_nothing_raised do
|
11
|
-
@exp.send("300+21\n")
|
12
|
-
@exp.expect("321")
|
13
|
-
@exp.puts("quit")
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_expect_with_block
|
18
|
-
assert_nothing_raised do
|
19
|
-
@exp.send("300+21\n")
|
20
|
-
@exp.expect("321") { |m| m.nil? ? raise(ArgumentError) : true }
|
21
|
-
end
|
22
|
-
|
23
|
-
assert_raises(TimeoutError) do
|
24
|
-
@exp.send("300+21\n")
|
25
|
-
@exp.expect("xxx") { |m| m.nil? ? raise(ArgumentError) : true }
|
26
|
-
end
|
27
|
-
|
28
|
-
assert_raises(ArgumentError) do
|
29
|
-
@exp.send("300+21\n")
|
30
|
-
@exp.expect("xxx", true) { |m| m.nil? ? raise(ArgumentError) : true }
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_send_to_terminated_fails
|
35
|
-
@exp.send("quit\n")
|
36
|
-
sleep 2
|
37
|
-
assert_raises(Expectr::ProcessError) { @exp.send("test\n") }
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_winsize_set
|
41
|
-
assert_not_equal([0, 0], @exp.winsize)
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_interact_sets_appropriate_flags
|
45
|
-
[
|
46
|
-
Thread.new {
|
47
|
-
assert_equal(false, @exp.interact?)
|
48
|
-
|
49
|
-
sleep 0.5
|
50
|
-
@exp.interact!.join
|
51
|
-
},
|
52
|
-
Thread.new {
|
53
|
-
sleep 1
|
54
|
-
assert_equal(true, @exp.flush_buffer)
|
55
|
-
assert_equal(true, @exp.interact?)
|
56
|
-
|
57
|
-
@exp.flush_buffer = false
|
58
|
-
@exp.send("quit\n")
|
59
|
-
}
|
60
|
-
].each { |x| x.join }
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_interact_mode
|
64
|
-
[
|
65
|
-
Thread.new {
|
66
|
-
sleep 0.5
|
67
|
-
@exp.interact!.join
|
68
|
-
},
|
69
|
-
Thread.new {
|
70
|
-
sleep 1
|
71
|
-
@exp.flush_buffer = false
|
72
|
-
@exp.send("300+21\n")
|
73
|
-
@exp.send("quit\n")
|
74
|
-
}
|
75
|
-
].each { |x| x.join }
|
76
|
-
|
77
|
-
assert_not_nil(@exp.expect(/321/))
|
78
|
-
end
|
79
|
-
|
80
|
-
def test_leaving_interact_mode
|
81
|
-
[
|
82
|
-
Thread.new {
|
83
|
-
sleep 0.5
|
84
|
-
@exp.interact!.join
|
85
|
-
},
|
86
|
-
Thread.new {
|
87
|
-
sleep 1
|
88
|
-
@exp.flush_buffer = false
|
89
|
-
assert_nothing_raised { @exp.leave! }
|
90
|
-
assert_equal(false, @exp.interact?)
|
91
|
-
@exp.send("quit\n")
|
92
|
-
}
|
93
|
-
].each { |x| x.join }
|
94
|
-
end
|
95
|
-
|
96
|
-
def test_blocking_interact_mode
|
97
|
-
[
|
98
|
-
Thread.new {
|
99
|
-
sleep 0.5
|
100
|
-
@exp.interact!(blocking: true)
|
101
|
-
},
|
102
|
-
Thread.new {
|
103
|
-
sleep 1
|
104
|
-
@exp.flush_buffer = false
|
105
|
-
@exp.send("300+21\n")
|
106
|
-
@exp.send("quit\n")
|
107
|
-
}
|
108
|
-
].each { |x| x.join }
|
109
|
-
|
110
|
-
assert_not_nil(@exp.expect(/321/))
|
111
|
-
end
|
112
|
-
end
|
data/test/test_signals.rb
DELETED
@@ -1,36 +0,0 @@
|
|
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
|
-
sleep 0.5
|
33
|
-
assert_equal(0, @exp.pid)
|
34
|
-
assert_raises(Expectr::ProcessError) { @exp.send("test\n") }
|
35
|
-
end
|
36
|
-
end
|