test-cmd.rb 0.11.0 → 0.12.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 633be9bbfd994b7e810172560fb9f63dd2671ac77b90132d37dba6bdf55a9a2c
4
- data.tar.gz: cffe23b0fab98c782c910fae748179206869740df586bd4c8e321643cb8e12ff
3
+ metadata.gz: d794fcd3192700e47d0964074f19732cd9ebc6881804d267cdb182fd31c19f4a
4
+ data.tar.gz: 139a5dda07f237f60918421a1ceefddb75f31807aaa9bb394c1f5e8680001a86
5
5
  SHA512:
6
- metadata.gz: 38c743bb91c272ff67064b3b2c6f0e54bc62bc02876e25faf0d6876418b2001e8b77b7563ec6b4e5c14b8a7b40da43ea7399fe5bea54e158ec8773ea51d4b602
7
- data.tar.gz: 632d756c4e8616cdcb619cbfa9d4cf3a1eaca19d3898dd6d54aeaa13b88975d5fc1a0ee5955eddc0fde70bf82ceffa2cf293193a309cb8a287dfe6f8dd0f6fec
6
+ metadata.gz: ad22764743a6f3e5d7a15457c8fe495f3f03598ca145cdb31754e69ce24a8a7c59bc76d74eb6022b2231b1ec311439e70da3bbfdc8c240cdcabb9f7c595d8fbf
7
+ data.tar.gz: 9cb6ed663a9c544a8a6d1b83781251a36eddf114d821f26d2f79c705d8945ea7d69215d77e627d8b44e8b82db203029bc4d28fa0eb161f541291259a66ea76fc
data/README.md CHANGED
@@ -8,8 +8,8 @@ a command.
8
8
  ### Callbacks
9
9
 
10
10
  The success and failure callbacks provide hooks for when
11
- a command exits successfully or unsuccessfully. The callback
12
- is passed an instance of
11
+ a command exits successfully or unsuccessfully. The callbacks
12
+ are passed an instance of
13
13
  [Test::Cmd](https://0x1eef.github.io/x/test-cmd.rb/Test/Cmd.html):
14
14
 
15
15
  ``` ruby
@@ -55,55 +55,13 @@ class CmdTest < Test::Unit::TestCase
55
55
  end
56
56
  ```
57
57
 
58
- ### IO#sync
59
-
60
- Sometimes it can be neccessary to bypass Ruby's internal buffer and flush
61
- output to the operating system immediately, otherwise there can be unexpected
62
- results. Consider the following example, where the output will be
63
- `bar\nfoo\n` rather than `foo\nbar\n`:
64
-
65
- ``` ruby
66
- ##
67
- # test.rb
68
- fork do
69
- sleep(1)
70
- puts "bar"
71
- end
72
- puts "foo"
73
- Process.wait
74
-
75
- ##
76
- # cmd.rb
77
- p cmd("ruby", "test.rb").stdout # => "bar\nfoo\n"
78
- ```
79
-
80
- And with output flushed to the operating system immediately:
81
-
82
- ``` ruby
83
- ##
84
- # test.rb
85
- $stdout.sync = true
86
- fork do
87
- sleep(1)
88
- puts "bar"
89
- end
90
- puts "foo"
91
- Process.wait
92
-
93
- ##
94
- # cmd.rb
95
- p cmd("ruby", "test.rb").stdout # => "foo\nbar\n"
96
- ```
97
-
98
58
  ## Documentation
99
59
 
100
60
  A complete API reference is available at
101
- [0x1eef.github.io/x/test-cmd.rb](https://0x1eef.github.io/x/test-cmd.rb).
61
+ [0x1eef.github.io/x/test-cmd.rb](https://0x1eef.github.io/x/test-cmd.rb)
102
62
 
103
63
  ## Install
104
64
 
105
- **Rubygems.org**
106
-
107
65
  test-cmd.rb can be installed via rubygems.org:
108
66
 
109
67
  gem install test-cmd.rb
@@ -115,6 +73,6 @@ test-cmd.rb can be installed via rubygems.org:
115
73
 
116
74
  ## License
117
75
 
118
- [BSD Zero Clause](https://choosealicense.com/licenses/0bsd/).
76
+ [BSD Zero Clause](https://choosealicense.com/licenses/0bsd/)
119
77
  <br>
120
- See [LICENSE](./LICENSE).
78
+ See [LICENSE](./LICENSE)
data/lib/test/cmd.rb CHANGED
@@ -1,13 +1,12 @@
1
- module Test
2
- end unless defined?(Test)
1
+ unless defined?(Test)
2
+ module Test
3
+ end
4
+ end
3
5
 
4
6
  ##
5
7
  # test-cmd.rb provides an object oriented interface
6
8
  # for spawning a command.
7
9
  class Test::Cmd
8
- require "tempfile"
9
- require "securerandom"
10
-
11
10
  ##
12
11
  # @param [String] cmd
13
12
  # A command to spawn
@@ -37,11 +36,13 @@ class Test::Cmd
37
36
 
38
37
  tap do
39
38
  @spawned = true
40
- @out_io, @err_io = spawn_io
41
- Process.spawn(@cmd, *@argv, {out: @out_io, err: @err_io})
39
+ @out_io, out = IO.pipe
40
+ @err_io, err = IO.pipe
41
+ Process.spawn(@cmd, *@argv, {out:, err:})
42
42
  Process.wait
43
43
  @status = $?
44
44
  ensure
45
+ [out, err].each(&:close)
45
46
  [stdout, stderr]
46
47
  end
47
48
  end
@@ -52,7 +53,7 @@ class Test::Cmd
52
53
  def stdout
53
54
  @stdout ||= begin
54
55
  spawn
55
- out_io.tap(&:rewind).read.tap { out_io.close }
56
+ out_io.read.tap { out_io.close }
56
57
  rescue IOError
57
58
  @stdout
58
59
  end
@@ -64,7 +65,7 @@ class Test::Cmd
64
65
  def stderr
65
66
  @stderr ||= begin
66
67
  spawn
67
- err_io.tap(&:rewind).read.tap { err_io.close }
68
+ err_io.read.tap { err_io.close }
68
69
  rescue IOError
69
70
  @stderr
70
71
  end
@@ -141,21 +142,6 @@ class Test::Cmd
141
142
  private
142
143
 
143
144
  attr_reader :out_io, :err_io
144
-
145
- def spawn_io
146
- [
147
- [".testcmd.stdout.#{ns}.", SecureRandom.alphanumeric(3)],
148
- [".testcmd.stderr.#{ns}.", SecureRandom.alphanumeric(3)]
149
- ].map {
150
- file = Tempfile.new(_1)
151
- File.chmod(0, file.path)
152
- file.tap(&:unlink)
153
- }
154
- end
155
-
156
- def ns
157
- [Process.pid, object_id].join(".")
158
- end
159
145
  end
160
146
 
161
147
  module Kernel
@@ -3,6 +3,7 @@ require_relative "setup"
3
3
  class Test::Cmd
4
4
  class Test < Test::Unit::TestCase
5
5
  private
6
+
6
7
  def ruby(str)
7
8
  cmd "ruby", "-e", str
8
9
  end
@@ -57,7 +58,7 @@ class Test::Cmd
57
58
  end
58
59
  puts "foo"
59
60
  Process.wait
60
- CODE
61
+ CODE
61
62
  assert_equal "foo\nbar\n", ruby(code).stdout
62
63
  end
63
64
  end
@@ -93,13 +94,6 @@ class Test::Cmd
93
94
  end
94
95
  end
95
96
 
96
- def test_io_unlink_after_spawn
97
- %i[out_io err_io].each do |io|
98
- path = spawned_command.send(io).__getobj__.path
99
- assert_equal false, File.exist?(path)
100
- end
101
- end
102
-
103
97
  private
104
98
 
105
99
  def spawned_command
data/test-cmd.rb.gemspec CHANGED
@@ -5,7 +5,7 @@ Gem::Specification.new do |gem|
5
5
  gem.authors = ["0x1eef"]
6
6
  gem.email = ["0x1eef@protonmail.com"]
7
7
  gem.homepage = "https://github.com/0x1eef/test-cmd.rb#readme"
8
- gem.version = "0.11.0"
8
+ gem.version = "0.12.0"
9
9
  gem.required_ruby_version = ">= 3.0"
10
10
  gem.licenses = ["0BSD"]
11
11
  gem.files = `git ls-files`.split($/)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test-cmd.rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - '0x1eef'
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-05-16 00:00:00.000000000 Z
11
+ date: 2024-06-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test-unit
@@ -99,8 +99,8 @@ files:
99
99
  - lib/test-cmd.rb
100
100
  - lib/test/cmd.rb
101
101
  - test-cmd.rb.gemspec
102
+ - test/cmd_test.rb
102
103
  - test/setup.rb
103
- - test/test_cmd_test.rb
104
104
  homepage: https://github.com/0x1eef/test-cmd.rb#readme
105
105
  licenses:
106
106
  - 0BSD