rspec-interactive 0.9.4 → 0.9.5

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: 58b63742b50c16f44d1cf19e2957e29ed07ef4a19c3ee91debed0624f519684a
4
- data.tar.gz: 0217f523599d1ee0a104718bd3c2bd79aeaf9366d18a22f5abfdadb2ce1fc229
3
+ metadata.gz: bfaebc90c8fc0856566eb671fb122248778540ce78832af3a4c7b8cc3e8374a2
4
+ data.tar.gz: 476896ae26c3acf5fef26486ba7d3b5ee4caa2de220bb2c42b61f740989d6d92
5
5
  SHA512:
6
- metadata.gz: 7d5dbf2e0ec74668264fee718f5e2edaa60f0bff510433f376ac8264a64afb61b2a3538e8604f3c8cc4e0c1e48b409bb4bccfaedb25e0b587145d7b9f4abbb11
7
- data.tar.gz: 86bba6bf0ad9728ba06d9374a3efb7b74cb4736fb24f5a81799e7ed4d54c499c012153ca2e90096caf0ab3965098c38cccc28b2b9c0d031723e7cc698b0a4fcc
6
+ metadata.gz: 20746051789c2591c9e398e65e645b343c994b1cae438f5c509d107217298af9bbef9d0c12327f446ed47214a7800c3ed594acad929fc48873280f5aed380c36
7
+ data.tar.gz: e844ef291294500ca6702a876662f03f6c20ec261a4864eb43dacca7d8b17fd29b995ea567ccbb3c0d9170c204e24902679b0ca4e24aa4e3925c86026ba5eca3
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rspec-interactive (0.9.3)
4
+ rspec-interactive (0.9.4)
5
5
  listen
6
6
  pry
7
7
  rspec-core
@@ -6,7 +6,15 @@ module RSpec
6
6
  end
7
7
 
8
8
  def print(str = "")
9
- @client.print(str&.to_s || '')
9
+ @client.print(str.to_s)
10
+ end
11
+
12
+ def write(str = "")
13
+ @client.print(str.to_s)
14
+ end
15
+
16
+ def puts(str = "")
17
+ @client.print(str.to_s + "\n")
10
18
  end
11
19
 
12
20
  def string
@@ -1,10 +1,18 @@
1
1
  module RSpec
2
2
  module Interactive
3
3
  class Stdio
4
- def self.capture(output)
4
+ def self.capture2(stdout:, stderr:)
5
+ old_stdout, old_stderr = $stdout, $stderr
6
+ $stdout, $stderr = stdout, stderr
7
+ yield
8
+ ensure
9
+ $stdout, $stderr = old_stdout, old_stderr
10
+ end
11
+
12
+ def self.capture(stdout:, stderr:)
5
13
  raise ArgumentError, 'missing block' unless block_given?
6
14
 
7
- stdout, stderr = STDOUT.dup, STDERR.dup
15
+ old_stdout, old_stderr = STDOUT.dup, STDERR.dup
8
16
 
9
17
  IO.pipe do |stdout_read, stdout_write|
10
18
  IO.pipe do |stderr_read, stderr_write|
@@ -16,13 +24,13 @@ module RSpec
16
24
 
17
25
  stdout_thread = Thread.new do
18
26
  while line = stdout_read.gets do
19
- output.print(line)
27
+ stdout.print(line)
20
28
  end
21
29
  end
22
30
 
23
31
  stderr_thread = Thread.new do
24
32
  while line = stderr_read.gets do
25
- output.print(line)
33
+ stderr.print(line)
26
34
  end
27
35
  end
28
36
 
@@ -30,8 +38,8 @@ module RSpec
30
38
  yield
31
39
  ensure
32
40
  # TODO: should the threads be killed here?
33
- STDOUT.reopen stdout
34
- STDERR.reopen stderr
41
+ STDOUT.reopen old_stdout
42
+ STDERR.reopen old_stderr
35
43
  end
36
44
 
37
45
  stdout_thread.join
@@ -0,0 +1,23 @@
1
+ module RSpec
2
+ module Interactive
3
+ class StringOutput
4
+ attr_reader :string
5
+
6
+ def initialize
7
+ @string = ''
8
+ end
9
+
10
+ def write(name, str = "")
11
+ @string += str.to_s
12
+ end
13
+
14
+ def puts(str = "")
15
+ @string += str.to_s + "\n"
16
+ end
17
+
18
+ def print(str = "")
19
+ @string += str.to_s
20
+ end
21
+ end
22
+ end
23
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module Interactive
5
- VERSION = "0.9.4"
5
+ VERSION = "0.9.5"
6
6
  end
7
7
  end
@@ -18,6 +18,7 @@ require 'rspec-interactive/rspec_core_example'
18
18
  require 'rspec-interactive/rubo_cop_command'
19
19
  require 'rspec-interactive/runner'
20
20
  require 'rspec-interactive/stdio'
21
+ require 'rspec-interactive/string_output'
21
22
 
22
23
  module RSpec
23
24
  module Interactive
@@ -58,27 +59,31 @@ module RSpec
58
59
  check_rails
59
60
  trap_interrupt
60
61
  configure_pry
61
- load_rspec_configuration
62
62
 
63
- start_file_watcher
63
+ @startup_thread = Thread.start do
64
+ @startup_output = StringOutput.new
65
+ Stdio.capture2(stdout: @startup_output, stderr: @startup_output) do
66
+ @config_cache.record_configuration { @configuration.configure_rspec.call }
67
+ start_file_watcher
68
+ end
64
69
 
65
- if server
66
- @output_stream.puts "listening on port #{port}"
67
- server_thread = Thread.start do
68
- server = TCPServer.new port
70
+ if server
71
+ @server_thread = Thread.start do
72
+ server = TCPServer.new port
69
73
 
70
- while client = server.accept
71
- request = client.gets
72
- args = Shellwords.split(request)
73
- rspec_for_server(client, args)
74
- client.close
74
+ while client = server.accept
75
+ request = client.gets
76
+ args = Shellwords.split(request)
77
+ rspec_for_server(client, args)
78
+ client.close
79
+ end
75
80
  end
76
81
  end
77
82
  end
78
83
 
79
84
  Pry.start
80
85
  @listener.stop if @listener
81
- server_thread.exit if server_thread
86
+ @server_thread.exit if @server_thread
82
87
  0
83
88
  end
84
89
 
@@ -113,20 +118,6 @@ module RSpec
113
118
  @listener.start
114
119
  end
115
120
 
116
- def self.load_rspec_configuration
117
- start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
118
- config_thread = Thread.start do
119
- @config_cache.record_configuration { @configuration.configure_rspec.call }
120
- end
121
- unless config_thread.join(3)
122
- @output_stream.puts "executing configure_rspec hook..."
123
- end
124
- config_thread.join
125
-
126
- end_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
127
- @output_stream.puts "configure_rspec hook took #{(end_time - start_time).round} seconds" if end_time - start_time > 5
128
- end
129
-
130
121
  def self.configure_pry
131
122
  # Prevent Pry from trapping too. It will break ctrl-c handling.
132
123
  Pry.config.should_trap_interrupts = false
@@ -161,14 +152,24 @@ module RSpec
161
152
  end
162
153
 
163
154
  def self.parse_args(args)
164
- args.flat_map do |arg|
165
- if arg.match(/[\*\?\[]/)
166
- glob = Dir.glob(arg)
167
- glob.empty? ? [arg] : glob
155
+ i = 0
156
+ parsed_args = []
157
+ until i == args.length
158
+ case args[i]
159
+ when /[\*\?\[]/
160
+ glob = Dir.glob(args[i])
161
+ parsed_args.concat(glob.empty? ? args[i] : glob)
162
+ when '--pattern'
163
+ # RubyMine passes --pattern when running all specs in a dir.
164
+ # We don't want to expand this since it is used as a glob by RSpec.
165
+ parsed_args.concat(args[i..(i + 1)])
166
+ i += 1
168
167
  else
169
- [arg]
168
+ parsed_args << args[i]
170
169
  end
170
+ i += 1
171
171
  end
172
+ parsed_args
172
173
  end
173
174
 
174
175
  def self.rspec(args)
@@ -208,7 +209,7 @@ module RSpec
208
209
  ENV['DISABLE_PRY'] = 'true'
209
210
 
210
211
  output = ClientOutput.new(client)
211
- Stdio.capture(ClientOutput.new(client)) do
212
+ Stdio.capture(stdout: output, stderr: output) do
212
213
  @runner = RSpec::Interactive::Runner.new(parse_args(args))
213
214
 
214
215
  refresh
@@ -258,6 +259,17 @@ module RSpec
258
259
  else
259
260
  @command_mutex.synchronize do
260
261
  Thread.current.thread_variable_set('holding_lock', true)
262
+ if @startup_thread
263
+ if @startup_thread.alive?
264
+ @output_stream.puts 'waiting for configure_rspec...'
265
+ end
266
+ @startup_thread.join
267
+ @startup_thread = nil
268
+ unless @startup_output.string.empty?
269
+ @output_stream.puts(@startup_output.string)
270
+ end
271
+ @startup_output = nil
272
+ end
261
273
  yield
262
274
  ensure
263
275
  Thread.current.thread_variable_set('holding_lock', false)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-interactive
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.4
4
+ version: 0.9.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Dower
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-25 00:00:00.000000000 Z
11
+ date: 2022-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec-core
@@ -102,6 +102,7 @@ files:
102
102
  - lib/rspec-interactive/rubo_cop_command.rb
103
103
  - lib/rspec-interactive/runner.rb
104
104
  - lib/rspec-interactive/stdio.rb
105
+ - lib/rspec-interactive/string_output.rb
105
106
  - lib/rspec-interactive/version.rb
106
107
  - lib/teamcity/spec/runner/formatter/teamcity/formatter.rb
107
108
  - rspec-interactive.gemspec