test-cmd.rb 0.9.0 → 0.9.3
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 +4 -4
- data/README.md +20 -22
- data/lib/test/cmd.rb +47 -1
- data/test/test_cmd_test.rb +21 -2
- data/test-cmd.rb.gemspec +2 -2
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e5bf49f40fdbefaea05fb598e7e9fa5a12faeb72e90e8794b0a6b9366dfa8a0
|
4
|
+
data.tar.gz: 1b19f3a1df91a354717cc6c7862762f5ddadf72392b3bd71018ee41673accd0d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28a8899a6f9f9bf941a171ced9ae694b57762eb4c24608f9243ec61dc2a17b367566baeaae9de60280af70f75ef9b0a75e08359895f6b69b37f3eda844ad30e1
|
7
|
+
data.tar.gz: 5d87dcebab3b423c19b4d00b90bf447aad83033b71e74e47aff5fd2c904a7289eb5890c42175df0ee35a4c29f6eb2746e9db8d7220b397b13591dc8f67d6e70b
|
data/README.md
CHANGED
@@ -1,10 +1,24 @@
|
|
1
1
|
## About
|
2
2
|
|
3
|
-
test-cmd.rb provides an object-oriented interface for spawning
|
3
|
+
test-cmd.rb provides an object-oriented interface for spawning
|
4
4
|
a process.
|
5
5
|
|
6
6
|
## Examples
|
7
7
|
|
8
|
+
### Callbacks
|
9
|
+
|
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
|
13
|
+
[Test::Cmd](https://0x1eef.github.io/x/test-cmd.rb/Test/Cmd.html):
|
14
|
+
|
15
|
+
``` ruby
|
16
|
+
require "test/cmd"
|
17
|
+
cmd("ruby", "-e", "exit 0")
|
18
|
+
.success { print "The command [#{_1.pid}] was successful", "\n" }
|
19
|
+
.failure { print "The command [#{_1.pid}] was unsuccessful", "\n" }
|
20
|
+
```
|
21
|
+
|
8
22
|
### Test::Unit
|
9
23
|
|
10
24
|
The following example demonstrates how tests might be written with
|
@@ -35,22 +49,6 @@ class CmdTest < Test::Unit::TestCase
|
|
35
49
|
end
|
36
50
|
```
|
37
51
|
|
38
|
-
### Builder
|
39
|
-
|
40
|
-
test-cmd.rb provides an API that is similar to Rust's
|
41
|
-
[Command API](https://doc.rust-lang.org/std/process/struct.Command.html).
|
42
|
-
<br>
|
43
|
-
The
|
44
|
-
[API reference](https://0x1eef.github.io/x/test-cmd.rb)
|
45
|
-
covers it in more-depth:
|
46
|
-
|
47
|
-
``` ruby
|
48
|
-
require "test/cmd"
|
49
|
-
puts cmd("du")
|
50
|
-
.argv("-s", "-h")
|
51
|
-
.stdout
|
52
|
-
```
|
53
|
-
|
54
52
|
### IO#sync
|
55
53
|
|
56
54
|
Sometimes it can be neccessary to bypass Ruby's internal buffer and flush
|
@@ -61,12 +59,12 @@ results. Consider the following example, where the output will be
|
|
61
59
|
``` ruby
|
62
60
|
##
|
63
61
|
# test.rb
|
64
|
-
|
62
|
+
fork do
|
65
63
|
sleep(1)
|
66
64
|
puts "bar"
|
67
65
|
end
|
68
66
|
puts "foo"
|
69
|
-
Process.wait
|
67
|
+
Process.wait
|
70
68
|
|
71
69
|
##
|
72
70
|
# cmd.rb
|
@@ -79,12 +77,12 @@ And with output flushed to the operating system immediately:
|
|
79
77
|
##
|
80
78
|
# test.rb
|
81
79
|
$stdout.sync = true
|
82
|
-
|
80
|
+
fork do
|
83
81
|
sleep(1)
|
84
82
|
puts "bar"
|
85
83
|
end
|
86
84
|
puts "foo"
|
87
|
-
Process.wait
|
85
|
+
Process.wait
|
88
86
|
|
89
87
|
##
|
90
88
|
# cmd.rb
|
@@ -93,7 +91,7 @@ p cmd("ruby", "test.rb").stdout # => "foo\nbar\n"
|
|
93
91
|
|
94
92
|
## Documentation
|
95
93
|
|
96
|
-
A complete API reference is available at
|
94
|
+
A complete API reference is available at
|
97
95
|
[0x1eef.github.io/x/test-cmd.rb](https://0x1eef.github.io/x/test-cmd.rb).
|
98
96
|
|
99
97
|
## Install
|
data/lib/test/cmd.rb
CHANGED
@@ -31,7 +31,7 @@ class Test::Cmd
|
|
31
31
|
# Spawns a command
|
32
32
|
# @return [Test::Cmd]
|
33
33
|
def spawn
|
34
|
-
return if @spawned
|
34
|
+
return self if @spawned
|
35
35
|
|
36
36
|
tap do
|
37
37
|
@spawned = true
|
@@ -70,6 +70,13 @@ class Test::Cmd
|
|
70
70
|
@status
|
71
71
|
end
|
72
72
|
|
73
|
+
##
|
74
|
+
# @return [Integer]
|
75
|
+
# Returns the process ID of a spawned command
|
76
|
+
def pid
|
77
|
+
status.pid
|
78
|
+
end
|
79
|
+
|
73
80
|
##
|
74
81
|
# @return [Integer]
|
75
82
|
# Returns the exit status of a process
|
@@ -77,6 +84,45 @@ class Test::Cmd
|
|
77
84
|
status.exitstatus
|
78
85
|
end
|
79
86
|
|
87
|
+
##
|
88
|
+
# @return [Boolean]
|
89
|
+
# Returns true when a command exited successfully
|
90
|
+
def success?
|
91
|
+
status.success?
|
92
|
+
end
|
93
|
+
|
94
|
+
##
|
95
|
+
# Yields an instance of {Test::Cmd Test::Cmd}.
|
96
|
+
#
|
97
|
+
# @example
|
98
|
+
# cmd("ruby", "-e", "exit 0")
|
99
|
+
# .success { print "Command [#{_1.pid}] exited successfully", "\n" }
|
100
|
+
# .failure { }
|
101
|
+
#
|
102
|
+
# @return [Test::Cmd]
|
103
|
+
def success
|
104
|
+
tap do
|
105
|
+
spawn
|
106
|
+
status.success? ? yield(self) : nil
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
##
|
111
|
+
# Yields an instance of {Test::Cmd Test::Cmd}.
|
112
|
+
#
|
113
|
+
# @example
|
114
|
+
# cmd("ruby", "-e", "exit 1")
|
115
|
+
# .success { }
|
116
|
+
# .failure { print "Command [#{_1.pid}] exited unsuccessfully", "\n" }
|
117
|
+
#
|
118
|
+
# @return [Test::Cmd]
|
119
|
+
def failure
|
120
|
+
tap do
|
121
|
+
spawn
|
122
|
+
status.success? ? nil : yield(self)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
80
126
|
private
|
81
127
|
|
82
128
|
attr_reader :out_io, :err_io
|
data/test/test_cmd_test.rb
CHANGED
@@ -19,17 +19,36 @@ class CmdTest < Test::Unit::TestCase
|
|
19
19
|
|
20
20
|
def test_ruby_success_status
|
21
21
|
assert_equal true, cmd("ruby", "-e", "exit 0").status.success?
|
22
|
+
assert_equal true, cmd("ruby", "-e", "exit 0").success?
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_ruby_success_callback
|
26
|
+
call_ok, call_fail = [false, false]
|
27
|
+
cmd("ruby", "-e", "exit 0")
|
28
|
+
.success { call_ok = true }
|
29
|
+
.failure { call_fail = true }
|
30
|
+
assert_equal true, call_ok
|
31
|
+
assert_equal false, call_fail
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_ruby_failure_callback
|
35
|
+
call_ok, call_fail = [false, false]
|
36
|
+
cmd("ruby", "-e", "exit 1")
|
37
|
+
.success { call_ok = true }
|
38
|
+
.failure { call_fail = true }
|
39
|
+
assert_equal true, call_fail
|
40
|
+
assert_equal false, call_ok
|
22
41
|
end
|
23
42
|
|
24
43
|
def test_stdout_with_fork
|
25
44
|
code = <<-CODE.each_line.map { _1.chomp.strip }.join(";")
|
26
45
|
$stdout.sync = true
|
27
|
-
|
46
|
+
fork do
|
28
47
|
sleep(1)
|
29
48
|
puts "bar"
|
30
49
|
end
|
31
50
|
puts "foo"
|
32
|
-
Process.wait
|
51
|
+
Process.wait
|
33
52
|
CODE
|
34
53
|
assert_equal "foo\nbar\n", cmd("ruby", "-e", code).stdout
|
35
54
|
end
|
data/test-cmd.rb.gemspec
CHANGED
@@ -5,12 +5,12 @@ 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.9.
|
8
|
+
gem.version = "0.9.3"
|
9
9
|
gem.required_ruby_version = ">= 3.0"
|
10
10
|
gem.licenses = ["0BSD"]
|
11
11
|
gem.files = `git ls-files`.split($/)
|
12
12
|
gem.require_paths = ["lib"]
|
13
|
-
gem.summary = "An object-oriented interface for spawning a process
|
13
|
+
gem.summary = "An object-oriented interface for spawning a process"
|
14
14
|
gem.metadata = { "documentation_uri" => "https://0x1eef.github.io/x/test-cmd.rb/" }
|
15
15
|
gem.description = gem.summary
|
16
16
|
gem.add_development_dependency "test-unit", "~> 3.5.7"
|
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.9.
|
4
|
+
version: 0.9.3
|
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-
|
11
|
+
date: 2024-05-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: test-unit
|
@@ -80,7 +80,7 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '13.1'
|
83
|
-
description: An object-oriented interface for spawning a process
|
83
|
+
description: An object-oriented interface for spawning a process
|
84
84
|
email:
|
85
85
|
- 0x1eef@protonmail.com
|
86
86
|
executables: []
|
@@ -124,5 +124,5 @@ requirements: []
|
|
124
124
|
rubygems_version: 3.5.9
|
125
125
|
signing_key:
|
126
126
|
specification_version: 4
|
127
|
-
summary: An object-oriented interface for spawning a process
|
127
|
+
summary: An object-oriented interface for spawning a process
|
128
128
|
test_files: []
|