scmd 2.1.1 → 2.1.2

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.
@@ -0,0 +1 @@
1
+ 01234556789
@@ -1,21 +1,20 @@
1
1
  require "assert"
2
2
  require 'scmd/command'
3
3
 
4
- module Scmd
4
+ class Scmd::Command
5
5
 
6
- class CommandTests < Assert::Context
7
- desc "a command"
6
+ class UnitTests < Assert::Context
7
+ desc "Scmd::Command"
8
8
  setup do
9
- @success_cmd = Command.new("echo hi")
10
- @failure_cmd = Command.new("cd /path/that/does/not/exist")
9
+ @success_cmd = Scmd::Command.new("echo hi")
10
+ @failure_cmd = Scmd::Command.new("cd /path/that/does/not/exist")
11
11
  end
12
12
  subject { @success_cmd }
13
13
 
14
14
  should have_readers :cmd_str, :pid, :exitstatus, :stdout, :stderr
15
- should have_instance_methods :run, :run!
16
- should have_instance_methods :start, :wait, :stop, :kill
17
- should have_instance_methods :running?, :success?
18
-
15
+ should have_imeths :run, :run!
16
+ should have_imeths :start, :wait, :stop, :kill
17
+ should have_imeths :running?, :success?
19
18
 
20
19
  should "know and return its cmd string" do
21
20
  assert_equal "echo hi", subject.cmd_str
@@ -35,7 +34,7 @@ module Scmd
35
34
  assert_not_nil @success_cmd.pid
36
35
  assert_equal 0, @success_cmd.exitstatus
37
36
  assert @success_cmd.success?
38
- assert_equal 'hi', @success_cmd.stdout
37
+ assert_equal "hi\n", @success_cmd.stdout
39
38
  assert_equal '', @success_cmd.stderr
40
39
 
41
40
  @failure_cmd.run
@@ -66,7 +65,7 @@ module Scmd
66
65
  end
67
66
 
68
67
  should "start and be running until `wait` is called and the cmd exits" do
69
- cmd = Command.new("sleep .1")
68
+ cmd = Scmd::Command.new("sleep .1")
70
69
  assert_not cmd.running?
71
70
 
72
71
  cmd.start
@@ -103,10 +102,10 @@ module Scmd
103
102
 
104
103
  end
105
104
 
106
- class InputTests < CommandTests
105
+ class InputTests < UnitTests
107
106
  desc "that takes input on stdin"
108
107
  setup do
109
- @cmd = Command.new("sh")
108
+ @cmd = Scmd::Command.new("sh")
110
109
  end
111
110
  subject { @cmd }
112
111
 
@@ -114,23 +113,23 @@ module Scmd
114
113
  subject.run "echo hi"
115
114
 
116
115
  assert @cmd.success?
117
- assert_equal 'hi', @cmd.stdout
116
+ assert_equal "hi\n", @cmd.stdout
118
117
  end
119
118
 
120
119
  should "run the command given multiple lines of input" do
121
120
  subject.run ["echo hi", "echo err 1>&2"]
122
121
 
123
122
  assert @cmd.success?
124
- assert_equal 'hi', @cmd.stdout
125
- assert_equal 'err', @cmd.stderr
123
+ assert_equal "hi\n", @cmd.stdout
124
+ assert_equal "err\n", @cmd.stderr
126
125
  end
127
126
 
128
127
  end
129
128
 
130
- class LongRunningTests < CommandTests
129
+ class LongRunningTests < UnitTests
131
130
  desc "that is long running"
132
131
  setup do
133
- @long_cmd = Command.new("sleep .3 && echo hi")
132
+ @long_cmd = Scmd::Command.new("sleep .3 && echo hi")
134
133
  end
135
134
 
136
135
  should "not timeout if wait timeout is longer than cmd time" do
@@ -139,11 +138,11 @@ module Scmd
139
138
  @long_cmd.wait(1)
140
139
  end
141
140
  assert @long_cmd.success?
142
- assert_equal 'hi', @long_cmd.stdout
141
+ assert_equal "hi\n", @long_cmd.stdout
143
142
  end
144
143
 
145
144
  should "timeout if wait timeout is shorter than cmd time" do
146
- assert_raises(TimeoutError) do
145
+ assert_raises(Scmd::TimeoutError) do
147
146
  @long_cmd.start
148
147
  @long_cmd.wait(0.1)
149
148
  end
@@ -167,4 +166,28 @@ module Scmd
167
166
 
168
167
  end
169
168
 
169
+ class BufferDeadlockTests < UnitTests
170
+ desc "when capturing data from an output buffer"
171
+ setup do
172
+ @small_path = File.join(ROOT_PATH, 'test/support/smaller-than-64k.txt')
173
+ @small_data = File.read(@small_path)
174
+ @small_cmd = Scmd::Command.new("cat #{@small_path}")
175
+
176
+ @big_path = File.join(ROOT_PATH, 'test/support/bigger-than-64k.txt')
177
+ @big_data = File.read(@big_path)
178
+ @big_cmd = Scmd::Command.new("cat #{@big_path}")
179
+ end
180
+
181
+ should "not deadlock, just stream the data from the buffer" do
182
+ @small_cmd.start
183
+ assert_nothing_raised{ @small_cmd.wait(1) }
184
+ assert_equal @small_data, @small_cmd.stdout
185
+
186
+ @big_cmd.start
187
+ assert_nothing_raised{ @big_cmd.wait(1) }
188
+ assert_equal @big_data, @big_cmd.stdout
189
+ end
190
+
191
+ end
192
+
170
193
  end
@@ -1,14 +1,57 @@
1
1
  require "assert"
2
2
  require 'scmd'
3
3
 
4
- class ScmdTest < Assert::Context
5
- desc "Scmd"
6
- subject { Scmd }
4
+ require 'scmd/command'
7
5
 
8
- should have_instance_method :new
6
+ module Scmd
7
+
8
+ class UnitTests < Assert::Context
9
+ desc "Scmd"
10
+ subject{ Scmd }
11
+
12
+ should have_instance_method :new
13
+
14
+ should "build a `Command` with the `new` method" do
15
+ assert_kind_of Scmd::Command, subject.new('echo hi')
16
+ end
17
+
18
+ end
19
+
20
+ class TimeoutErrorTests < UnitTests
21
+ desc "TimeoutError"
22
+ setup do
23
+ @error = Scmd::TimeoutError.new('test')
24
+ end
25
+ subject{ @error }
26
+
27
+ should "be a RuntimeError" do
28
+ assert_kind_of ::RuntimeError, subject
29
+ end
30
+
31
+ end
32
+
33
+ class RunErrorTests < UnitTests
34
+ desc "RunError"
35
+ setup do
36
+ @error = Scmd::RunError.new('test')
37
+ end
38
+ subject{ @error }
39
+
40
+ should "be a RuntimeError" do
41
+ assert_kind_of ::RuntimeError, subject
42
+ end
43
+
44
+ should "set its backtrace to the caller by default" do
45
+ assert_match /scmd_tests.rb:.*$/, subject.backtrace.first
46
+ end
47
+
48
+ should "allow passing a custom backtrace" do
49
+ called_from = caller
50
+ error = Scmd::RunError.new('test', called_from)
51
+
52
+ assert_equal called_from, error.backtrace
53
+ end
9
54
 
10
- should "build a `Command` with the `new` method" do
11
- assert_kind_of Scmd::Command, subject.new('echo hi')
12
55
  end
13
56
 
14
57
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scmd
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
7
  - 2
8
8
  - 1
9
- - 1
10
- version: 2.1.1
9
+ - 2
10
+ version: 2.1.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kelly Redding
@@ -16,26 +16,26 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2013-03-12 00:00:00 Z
19
+ date: 2013-11-11 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: assert
23
23
  prerelease: false
24
- type: :development
25
24
  requirement: &id001 !ruby/object:Gem::Requirement
26
25
  none: false
27
26
  requirements:
28
- - - ">="
27
+ - - ~>
29
28
  - !ruby/object:Gem::Version
30
- hash: 3
29
+ hash: 5
31
30
  segments:
32
- - 0
33
- version: "0"
31
+ - 2
32
+ - 3
33
+ version: "2.3"
34
+ type: :development
34
35
  version_requirements: *id001
35
36
  - !ruby/object:Gem::Dependency
36
37
  name: posix-spawn
37
38
  prerelease: false
38
- type: :runtime
39
39
  requirement: &id002 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
@@ -45,6 +45,7 @@ dependencies:
45
45
  segments:
46
46
  - 0
47
47
  version: "0"
48
+ type: :runtime
48
49
  version_requirements: *id002
49
50
  description: Build and run system commands.
50
51
  email:
@@ -62,16 +63,23 @@ files:
62
63
  - LICENSE.txt
63
64
  - README.md
64
65
  - Rakefile
66
+ - bench/results.txt
67
+ - bench/runner.rb
65
68
  - lib/scmd.rb
66
69
  - lib/scmd/command.rb
67
70
  - lib/scmd/version.rb
71
+ - log/.gitkeep
68
72
  - scmd.gemspec
73
+ - script/bench.rb
69
74
  - test/helper.rb
75
+ - test/support/bigger-than-64k.txt
76
+ - test/support/smaller-than-64k.txt
70
77
  - test/unit/command_tests.rb
71
78
  - test/unit/scmd_tests.rb
79
+ - tmp/.gitkeep
72
80
  homepage: http://github.com/redding/scmd
73
- licenses: []
74
-
81
+ licenses:
82
+ - MIT
75
83
  post_install_message:
76
84
  rdoc_options: []
77
85
 
@@ -98,11 +106,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
106
  requirements: []
99
107
 
100
108
  rubyforge_project:
101
- rubygems_version: 1.8.25
109
+ rubygems_version: 1.8.24
102
110
  signing_key:
103
111
  specification_version: 3
104
112
  summary: Build and run system commands.
105
113
  test_files:
106
114
  - test/helper.rb
115
+ - test/support/bigger-than-64k.txt
116
+ - test/support/smaller-than-64k.txt
107
117
  - test/unit/command_tests.rb
108
118
  - test/unit/scmd_tests.rb