test-cmd.rb 0.5.2 → 0.7.0

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: c2396593840d674fad470e2e4fcb0f0fc74e55987fe5caec27128457b0608453
4
- data.tar.gz: 3b6c43870258be5d3c0a1039e5e8436bff314ea05c03dab2866593dafbf43591
3
+ metadata.gz: 4a40537381e81f677332c21cfbc95b997fe0f89a4cbf4c714e2eb857da496554
4
+ data.tar.gz: 88ceffc1c05ed2b90f79c39c73c6a95adc5ccd9bce97ff435dea3dbea07feb89
5
5
  SHA512:
6
- metadata.gz: edb9931271bfc62a1c22be0717659fa83a670652b97ef7ebe74fe98e2605b21fc4c87647c75aa20c4913a8a76e6bd1d3de7a3d28fe74f75d800293844c2b442e
7
- data.tar.gz: 3f95d41e84bb4ddf323798dee95e33872e72ff32869f3c1d82f629c00e1b15e840fd93b504f5fd15c7cfa4aa4dd280da172f7edeffd017ec3b486ce7dd2d8ea3
6
+ metadata.gz: 362b5b2155218c63f01321c279ebb5a7cd204fbdb01af2e76ce3d767d30c4b3a13c2a2eec52de77f7bb80419d37f7fdadb44ce1c3fb97e42d708d916a0eedfa1
7
+ data.tar.gz: 055f87c0d765be7ec2612ba9ae3e0f49cdaf2458eac747c8399b8b57dda732dca20d4848d9cc6809393fb3dfbd295cf2d55aec50eee9fbec7f8a63d37ef8a466
data/README.md CHANGED
@@ -1,11 +1,7 @@
1
1
  ## About
2
2
 
3
- test-cmd.rb is a library for accessing the output streams
4
- (both stdout and stderr) of a spawned process. The library was
5
- first realized in a test environment, where it provided a path
6
- for verifying that when code examples are run they produce the
7
- expected output. The library can be generally useful outside a
8
- test environment, too.
3
+ test-cmd.rb provides an object-oriented interface for spawning
4
+ a process.
9
5
 
10
6
  ## Examples
11
7
 
@@ -14,7 +10,7 @@ test environment, too.
14
10
  The following example demonstrates how tests might be written with
15
11
  test-unit from the standard library. The
16
12
  [`cmd`](https://0x1eef.github.io/x/test-cmd.rb/Test/CmdMixin.html#cmd-instance_method)
17
- method is given the name of a command, along with any arguments:
13
+ method takes the name or path of a command, alongside any arguments:
18
14
 
19
15
  ```ruby
20
16
  require "test/unit"
@@ -22,19 +18,19 @@ require "test/cmd"
22
18
 
23
19
  class CmdTest < Test::Unit::TestCase
24
20
  def test_ruby_stdout
25
- assert_equal "foo\n", cmd(%q(ruby -e '$stdout.puts "foo"')).stdout
21
+ assert_equal "42\n", cmd("ruby", "-e", "puts 42").stdout
26
22
  end
27
23
 
28
24
  def test_ruby_stderr
29
- assert_equal "bar\n", cmd(%q(ruby -e '$stderr.puts "bar"')).stderr
25
+ assert_equal "42\n", cmd("ruby", "-e", "warn 42").stderr
30
26
  end
31
27
 
32
28
  def test_ruby_success_exit_status
33
- assert_equal 0, cmd(%q(ruby -e 'exit 0')).exit_status
29
+ assert_equal 0, cmd("ruby", "-e", "exit 0").exit_status
34
30
  end
35
31
 
36
32
  def test_ruby_failure_exit_status
37
- assert_equal 1, cmd(%q(ruby -e 'exit 1')).exit_status
33
+ assert_equal 1, cmd("ruby", "-e", "exit 1").exit_status
38
34
  end
39
35
  end
40
36
  ```
@@ -50,10 +46,9 @@ covers it in more-depth:
50
46
 
51
47
  ``` ruby
52
48
  require "test/cmd"
53
- str = cmd("du")
54
- .arg("-s").arg("-h")
55
- .spawn.stdout
56
- puts str
49
+ puts cmd("du")
50
+ .args("-s", "-h")
51
+ .stdout
57
52
  ```
58
53
 
59
54
  ### IO#sync
@@ -75,7 +70,7 @@ Process.wait(pid)
75
70
 
76
71
  ##
77
72
  # cmd.rb
78
- p cmd("ruby test.rb").stdout # => "bar\nfoo\n"
73
+ p cmd("ruby", "test.rb").stdout # => "bar\nfoo\n"
79
74
  ```
80
75
 
81
76
  And with output flushed to the operating system immediately:
@@ -93,36 +88,29 @@ Process.wait(pid)
93
88
 
94
89
  ##
95
90
  # cmd.rb
96
- p cmd("ruby test.rb").stdout # => "foo\nbar\n"
91
+ p cmd("ruby", "test.rb").stdout # => "foo\nbar\n"
97
92
  ```
98
93
 
99
- ## Sources
94
+ ## Documentation
100
95
 
101
- * [Source code (GitHub)](https://github.com/0x1eef/test-cmd.rb#readme)
102
- * [Source code (GitLab)](https://gitlab.com/0x1eef/test-cmd.rb#about)
96
+ A complete API reference is available at
97
+ [0x1eef.github.io/x/test-cmd.rb](https://0x1eef.github.io/x/test-cmd.rb).
103
98
 
104
99
  ## Install
105
100
 
106
- test-cmd.rb is distributed as a RubyGem through its git repositories. <br>
107
- [GitHub](https://github.com/0x1eef/test-cmd.rb),
108
- and
109
- [GitLab](https://gitlab.com/0x1eef/test-cmd.rb)
110
- are available as sources.
111
-
112
- ``` ruby
113
- # Gemfile
114
- gem "test-cmd.rb", github: "0x1eef/test-cmd.rb", tag: "v0.5.2"
115
- ```
116
-
117
101
  **Rubygems.org**
118
102
 
119
- test-cmd.rb can also be installed via rubygems.org.
103
+ test-cmd.rb can be installed via rubygems.org.
120
104
 
121
105
  gem install test-cmd.rb
122
106
 
107
+ ## Sources
108
+
109
+ * [GitHub](https://github.com/0x1eef/test-cmd.rb#readme)
110
+ * [GitLab](https://gitlab.com/0x1eef/test-cmd.rb#about)
111
+
123
112
  ## License
124
113
 
125
114
  [BSD Zero Clause](https://choosealicense.com/licenses/0bsd/).
126
115
  <br>
127
116
  See [LICENSE](./LICENSE).
128
-
data/lib/test-cmd.rb CHANGED
@@ -3,23 +3,19 @@ end unless defined?(Test)
3
3
 
4
4
  ##
5
5
  # test-cmd.rb is a library for accessing the output streams
6
- # (both stdout and stderr) of a spawned process. The library was
7
- # first realized in a test environment, where it provided a path
8
- # for verifying that when code examples are run they produce the
9
- # expected output. The library can be generally useful outside a
10
- # test environment, too.
6
+ # (both stdout and stderr) of a spawned process.
11
7
  class Test::Cmd
12
8
  require "tempfile"
13
9
 
14
10
  ##
15
11
  # @param [String] cmd
16
12
  # A command to spawn.
17
- # @param [Array<String>] args
18
- # An array of command-line arguments.
13
+ # @param [Array<String>] argv
14
+ # A variable number of command-line arguments.
19
15
  # @return [Test::Cmd]
20
- def initialize(cmd, args = [])
16
+ def initialize(cmd, *argv)
21
17
  @cmd = cmd
22
- @args = args.dup
18
+ @argv = argv.dup
23
19
  @out = unlink!(Tempfile.new("cmd-stdout"))
24
20
  @err = unlink!(Tempfile.new("cmd-stderr"))
25
21
  @status = nil
@@ -32,17 +28,17 @@ class Test::Cmd
32
28
  # @return [Test::Cmd]
33
29
  def arg(arg)
34
30
  tap do
35
- @args.push(arg)
31
+ @argv.push(arg)
36
32
  end
37
33
  end
38
34
 
39
35
  ##
40
- # @param [Array<String, #to_s>] args
36
+ # @param [Array<String, #to_s>] argv
41
37
  # One or more command-line arguments.
42
38
  # @return [Test::Cmd]
43
- def args(*args)
39
+ def args(*argv)
44
40
  tap do
45
- @args.concat(args)
41
+ @argv.concat(argv)
46
42
  end
47
43
  end
48
44
 
@@ -52,7 +48,7 @@ class Test::Cmd
52
48
  def spawn
53
49
  tap do
54
50
  @spawned = true
55
- Process.wait Process.spawn(@cmd, *@args, {out: @out, err: @err})
51
+ Process.wait Process.spawn(@cmd, *@argv, {out: @out, err: @err})
56
52
  @status = $?
57
53
  end
58
54
  ensure
@@ -79,7 +75,8 @@ class Test::Cmd
79
75
  @err.close unless @err.closed?
80
76
  end
81
77
 
82
- ## @return [Process::Status]
78
+ ##
79
+ # @return [Process::Status]
83
80
  # Returns the status of a process
84
81
  def status
85
82
  spawn unless @spawned
@@ -94,16 +91,14 @@ class Test::Cmd
94
91
  end
95
92
 
96
93
  ##
97
- # Yields each line of stdout when the command
98
- # was successful, or each line of stderr when
99
- # the command was not successful.
94
+ # @param [Symbol] io
95
+ # The output stream as a Symbol (:stdout, :stderr).
100
96
  # @return [Enumerator]
101
97
  # Returns an Enumerator when a block is not given.
102
- def each_line
103
- return enum_for(:each_line) unless block_given?
98
+ def each_line(io = :stdout)
99
+ return enum_for(:each_line, io) unless block_given?
104
100
  spawn unless @spawned
105
- io = @status.success? ? @stdout : @stderr
106
- io.each_line.each { yield(_1.chomp) }
101
+ public_send(io).each_line { yield(_1) }
107
102
  end
108
103
 
109
104
  private
@@ -112,25 +107,21 @@ class Test::Cmd
112
107
  # @api private
113
108
  def unlink!(file)
114
109
  file.tap do
115
- File.chmod(0000, file.path)
110
+ File.chmod(0, file.path)
116
111
  file.unlink
117
112
  end
118
113
  end
119
114
  end
120
115
 
121
- module Test::CmdMixin
116
+ module Test::Cmd::Mixin
122
117
  ##
123
- # @param [String] cmd
124
- # A command to execute
125
- # @param [Array<String>] args
126
- # An array of command-line arguments.
127
- # @return [Test::Cmd]
128
- # Returns an instance of {Test::Cmd Test::Cmd}
129
- def cmd(cmd, args = [])
130
- Test::Cmd.new(cmd, args)
118
+ # @param (see Test::Cmd#initialize)
119
+ # @return (see Test::Cmd#initialize)
120
+ def cmd(cmd, *argv)
121
+ Test::Cmd.new(cmd, *argv)
131
122
  end
132
123
  end
133
124
 
134
125
  module Kernel
135
- include Test::CmdMixin
126
+ include Test::Cmd::Mixin
136
127
  end
@@ -2,19 +2,19 @@ require_relative "setup"
2
2
 
3
3
  class CmdTest < Test::Unit::TestCase
4
4
  def test_ruby_stdout
5
- assert_equal "foo\n", cmd(%q(ruby -e '$stdout.puts "foo"')).stdout
5
+ assert_equal "42\n", cmd("ruby", "-e", "puts 42").stdout
6
6
  end
7
7
 
8
8
  def test_ruby_stderr
9
- assert_equal "bar\n", cmd(%q(ruby -e '$stderr.puts "bar"')).stderr
9
+ assert_equal "42\n", cmd("ruby", "-e", "warn 42").stderr
10
10
  end
11
11
 
12
12
  def test_ruby_success_exit_status
13
- assert_equal 0, cmd(%q(ruby -e 'exit 0')).exit_status
13
+ assert_equal 0, cmd("ruby", "-e", "exit 0").exit_status
14
14
  end
15
15
 
16
16
  def test_ruby_failure_exit_status
17
- assert_equal 1, cmd(%q(ruby -e 'exit 1')).exit_status
17
+ assert_equal 1, cmd("ruby", "-e", "exit 1").exit_status
18
18
  end
19
19
 
20
20
  def test_stdout_with_fork
@@ -27,21 +27,31 @@ class CmdTest < Test::Unit::TestCase
27
27
  puts "foo"
28
28
  Process.wait(pid)
29
29
  CODE
30
- assert_equal "foo\nbar\n", cmd(%Q(ruby -e '#{code}')).stdout
30
+ assert_equal "foo\nbar\n", cmd("ruby", "-e", code).stdout
31
31
  end
32
32
 
33
33
  def test_each_line_stdout
34
34
  run = false
35
- cmd(%q(ruby -e '$stdout.puts "FooBar"'))
35
+ cmd("ruby", "-e", "puts 'FooBar'")
36
36
  .each_line do
37
37
  run = true
38
- assert_equal _1, "FooBar"
38
+ assert_equal "FooBar\n", _1
39
39
  end
40
- assert_equal true, run
40
+ assert run
41
+ end
42
+
43
+ def test_each_line_stderr
44
+ run = false
45
+ cmd("ruby", "-e", "warn 'BarFoo'")
46
+ .each_line(:stderr) do
47
+ run = true
48
+ assert_equal "BarFoo\n", _1
49
+ end
50
+ assert run
41
51
  end
42
52
 
43
53
  def test_each_line_returns_enum
44
54
  assert_instance_of Enumerator,
45
- cmd(%q(ruby -e '$stdout.puts "FooBar"')).each_line
55
+ cmd("ruby", "-e", "puts 'FooBar'").each_line
46
56
  end
47
57
  end
data/test-cmd.rb.gemspec CHANGED
@@ -5,13 +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.5.2"
8
+ gem.version = "0.7.0"
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 = "test-cmd.rb provides access to the output streams " \
14
- "(both stdout and stderr) of a spawned process."
13
+ gem.summary = "An object-oriented interface for spawning a process."
15
14
  gem.metadata = { "documentation_uri" => "https://0x1eef.github.io/x/test-cmd.rb/" }
16
15
  gem.description = gem.summary
17
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.5.2
4
+ version: 0.7.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-02-01 00:00:00.000000000 Z
11
+ date: 2024-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test-unit
@@ -80,8 +80,7 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '13.1'
83
- description: test-cmd.rb provides access to the output streams (both stdout and stderr)
84
- of a spawned process.
83
+ description: An object-oriented interface for spawning a process.
85
84
  email:
86
85
  - 0x1eef@protonmail.com
87
86
  executables: []
@@ -125,6 +124,5 @@ requirements: []
125
124
  rubygems_version: 3.5.3
126
125
  signing_key:
127
126
  specification_version: 4
128
- summary: test-cmd.rb provides access to the output streams (both stdout and stderr)
129
- of a spawned process.
127
+ summary: An object-oriented interface for spawning a process.
130
128
  test_files: []