expectr 1.0.0 → 1.0.1

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.
@@ -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