rspec-interactive 0.9.4 → 0.9.5

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: 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