test-cmd.rb 0.12.0 → 0.12.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d794fcd3192700e47d0964074f19732cd9ebc6881804d267cdb182fd31c19f4a
4
- data.tar.gz: 139a5dda07f237f60918421a1ceefddb75f31807aaa9bb394c1f5e8680001a86
3
+ metadata.gz: 67a69e56d58ed586edecb9b4792bbc54913f2044a6468ce6d098744142cf78a0
4
+ data.tar.gz: 713bd38cbe6812e61e8847e156e16732cdcfc72026f206bd9df70c03c6d8a946
5
5
  SHA512:
6
- metadata.gz: ad22764743a6f3e5d7a15457c8fe495f3f03598ca145cdb31754e69ce24a8a7c59bc76d74eb6022b2231b1ec311439e70da3bbfdc8c240cdcabb9f7c595d8fbf
7
- data.tar.gz: 9cb6ed663a9c544a8a6d1b83781251a36eddf114d821f26d2f79c705d8945ea7d69215d77e627d8b44e8b82db203029bc4d28fa0eb161f541291259a66ea76fc
6
+ metadata.gz: b8f1e8928b018372d5d6247300509f249bb3f7934a04b4a7356beff15d9c223a396657e1bb5e050bb7777b36185f2cf106618330f73df6939204c430a25eb584
7
+ data.tar.gz: 1f76220a3ab003bf434ab2dd7d604f7abe0577543abd5d86afee3b0a1fb82c3f164f8e6ba62489c1cacb9193c44860cd3fb152e93c3bcf4491400584805dde41
@@ -12,7 +12,7 @@ jobs:
12
12
  fail-fast: false
13
13
  matrix:
14
14
  os: [ubuntu-latest, macos-latest]
15
- ruby: [3.1, 3.2]
15
+ ruby: [3.1, 3.2, 3.3]
16
16
  runs-on: ${{ matrix.os }}
17
17
  steps:
18
18
  - uses: actions/checkout@v2
data/lib/test/cmd.rb CHANGED
@@ -7,6 +7,18 @@ end
7
7
  # test-cmd.rb provides an object oriented interface
8
8
  # for spawning a command.
9
9
  class Test::Cmd
10
+ ##
11
+ # @api private
12
+ class Pipe < Struct.new(:r, :w)
13
+ def self.pair
14
+ new(*IO.pipe)
15
+ end
16
+
17
+ def close
18
+ [r, w].each(&:close)
19
+ end
20
+ end
21
+
10
22
  ##
11
23
  # @param [String] cmd
12
24
  # A command to spawn
@@ -18,6 +30,8 @@ class Test::Cmd
18
30
  @argv = argv.dup
19
31
  @status = nil
20
32
  @spawned = false
33
+ @stdout = ""
34
+ @stderr = ""
21
35
  end
22
36
 
23
37
  ##
@@ -35,15 +49,21 @@ class Test::Cmd
35
49
  return self if @spawned
36
50
 
37
51
  tap do
52
+ out, err = Pipe.pair, Pipe.pair
38
53
  @spawned = true
39
- @out_io, out = IO.pipe
40
- @err_io, err = IO.pipe
41
- Process.spawn(@cmd, *@argv, {out:, err:})
42
- Process.wait
43
- @status = $?
54
+ t = Thread.new do
55
+ Process.spawn(@cmd, *@argv, {out: out.w, err: err.w})
56
+ Process.wait
57
+ @status = $?
58
+ end
59
+ loop do
60
+ break unless t.alive?
61
+ io, _ = IO.select([out.r, err.r], nil, nil, 0.01)
62
+ io&.include?(out.r) ? @stdout << out.r.read(1) : nil
63
+ io&.include?(err.r) ? @stderr << err.r.read(1) : nil
64
+ end
44
65
  ensure
45
66
  [out, err].each(&:close)
46
- [stdout, stderr]
47
67
  end
48
68
  end
49
69
 
@@ -51,24 +71,16 @@ class Test::Cmd
51
71
  # @return [String]
52
72
  # Returns the contents of stdout
53
73
  def stdout
54
- @stdout ||= begin
55
- spawn
56
- out_io.read.tap { out_io.close }
57
- rescue IOError
58
- @stdout
59
- end
74
+ spawn
75
+ @stdout
60
76
  end
61
77
 
62
78
  ##
63
79
  # @return [String]
64
80
  # Returns the contents of stderr
65
81
  def stderr
66
- @stderr ||= begin
67
- spawn
68
- err_io.read.tap { err_io.close }
69
- rescue IOError
70
- @stderr
71
- end
82
+ spawn
83
+ @stderr
72
84
  end
73
85
 
74
86
  ##
@@ -138,10 +150,6 @@ class Test::Cmd
138
150
  def spawned?
139
151
  @spawned
140
152
  end
141
-
142
- private
143
-
144
- attr_reader :out_io, :err_io
145
153
  end
146
154
 
147
155
  module Kernel
data/test/cmd_test.rb CHANGED
@@ -85,22 +85,6 @@ class Test::Cmd
85
85
  end
86
86
  end
87
87
 
88
- ##
89
- # Test::Cmd#spawn
90
- class SpawnTest < Test
91
- def test_io_closed_after_spawn
92
- %i[out_io err_io].each do |io|
93
- assert_equal true, spawned_command.send(io).closed?
94
- end
95
- end
96
-
97
- private
98
-
99
- def spawned_command
100
- ruby("puts 42").spawn
101
- end
102
- end
103
-
104
88
  ##
105
89
  # Test::Cmd#spawned?
106
90
  class SpawnedTest < Test
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.12.0"
8
+ gem.version = "0.12.1"
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.12.0
4
+ version: 0.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - '0x1eef'
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-06 00:00:00.000000000 Z
11
+ date: 2024-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test-unit