expectr 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  class Expectr
2
- VERSION = '1.0.0'
2
+ VERSION = '1.0.1'
3
3
  end
data/lib/expectr.rb CHANGED
@@ -60,7 +60,7 @@ class Expectr
60
60
  # sub-process to :buffer_size (default: false)
61
61
  def initialize(cmd, args={})
62
62
  unless cmd.kind_of? String or cmd.kind_of? File
63
- raise ArgumentError, "String or File expected"
63
+ raise ArgumentError, "String or File expected"
64
64
  end
65
65
 
66
66
  cmd = cmd.path if cmd.kind_of? File
@@ -91,6 +91,7 @@ class Expectr
91
91
  break
92
92
  end
93
93
 
94
+ force_utf8(buf) unless buf.valid_encoding?
94
95
  print_buffer(buf)
95
96
 
96
97
  @out_mutex.synchronize do
@@ -284,4 +285,14 @@ class Expectr
284
285
  print buf if @flush_buffer
285
286
  STDOUT.flush unless STDOUT.sync
286
287
  end
288
+
289
+ # Internal: Encode a String twice to force UTF-8 encoding, dropping
290
+ # problematic characters in the process.
291
+ #
292
+ # buf - String to be encoded.
293
+ #
294
+ # Returns the encoded String.
295
+ def force_utf8(buf)
296
+ buf.force_encoding('ISO-8859-1').encode('UTF-8', 'UTF-8', replace: nil)
297
+ end
287
298
  end
data/test/test_core.rb CHANGED
@@ -4,20 +4,20 @@ class CoreTests < Test::Unit::TestCase
4
4
  # For the purpose of testing, we will assume we are working within a POSIX
5
5
  # environment.
6
6
  def setup
7
- @exp = Expectr.new("ls /dev", :flush_buffer => false, :timeout => 1,
8
- :buffer_size => 4096)
7
+ @exp = Expectr.new("ls /dev", flush_buffer: false, timeout: 1,
8
+ buffer_size: 4096)
9
9
  end
10
10
 
11
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
12
+ assert_equal(false, @exp.flush_buffer)
13
+ assert_equal(1, @exp.timeout)
14
+ assert_equal(4096, @exp.buffer_size)
15
15
  end
16
16
 
17
17
  # POSIX specifies /dev/console, /dev/null and /dev/tty must exist.
18
18
  def test_match_sets_discard
19
- assert_not_equal nil, @exp.expect(/null/)
20
- assert_not_equal '', @exp.discard
19
+ assert_not_equal(nil, @exp.expect(/null/))
20
+ assert_not_equal('', @exp.discard)
21
21
  end
22
22
 
23
23
  def test_match_failure
@@ -27,9 +27,15 @@ class CoreTests < Test::Unit::TestCase
27
27
 
28
28
  def test_clear_buffer
29
29
  sleep 1
30
- assert_not_equal @exp.buffer, ''
30
+ assert_not_equal(@exp.buffer, '')
31
31
  @exp.clear_buffer!
32
- assert_equal '', @exp.buffer
32
+ assert_equal('', @exp.buffer)
33
+ end
34
+
35
+ def test_garbage_output
36
+ @exp = Expectr.new("dd if=/dev/urandom bs=1024 count=1",
37
+ flush_buffer:false, timeout: 1, buffer_size: 1024)
38
+ assert_nothing_raised { @exp.expect(/probablyNotThere/, true) }
33
39
  end
34
40
 
35
41
  def test_pid_set
@@ -2,16 +2,16 @@ require 'helper'
2
2
 
3
3
  class InitializationTests < Test::Unit::TestCase
4
4
  def test_spawn_with_file
5
- assert_nothing_raised { exp = Expectr.new(File.new("/bin/ls"), :flush_buffer => false) }
5
+ assert_nothing_raised { exp = Expectr.new(File.new("/bin/ls"), flush_buffer: false) }
6
6
  end
7
7
 
8
8
  def test_spawn_with_string
9
- assert_nothing_raised { exp = Expectr.new(File.new("/bin/ls"), :flush_buffer => false) }
9
+ assert_nothing_raised { exp = Expectr.new(File.new("/bin/ls"), flush_buffer: false) }
10
10
  end
11
11
 
12
12
  # lib/expectr.rb's permissions should hopefully be set to 0644
13
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) }
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
16
  end
17
17
  end
@@ -3,7 +3,7 @@ require 'helper'
3
3
  class InteractionTest < Test::Unit::TestCase
4
4
  # Assume that bc(1) exists on the system for these tests
5
5
  def setup
6
- @exp = Expectr.new("bc", :flush_buffer => false, :timeout => 1)
6
+ @exp = Expectr.new("bc", flush_buffer: false, timeout: 1)
7
7
  end
8
8
 
9
9
  def test_send_and_expect
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.0
4
+ version: 1.0.1
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: 2012-10-30 00:00:00.000000000 Z
12
+ date: 2012-11-14 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