parallel_rspec 2.1.2 → 2.2.0

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: 73b85e313868cc3fb29697f15b99911c17a6ba818c80723c05ca6cf2cb450b00
4
- data.tar.gz: a86b018f8fe152d0bf4203f3f076eb5e08583b65bbe4dd390220869a3292fb12
3
+ metadata.gz: 6d2e2199456f48d4b9726672b0c5e223b536350826d46b1bc14ff28e5d83ef45
4
+ data.tar.gz: ae4b625e1041147f8e6c4087196fe34bb97977fb0034549e9436b4056363f184
5
5
  SHA512:
6
- metadata.gz: 8fa15fcdb155ba22163b604b8d2abaa7ba003e2b1c1169dd5565399b29757c714d7362626959024c26e32068fbf6974590533d0b37d7f55f7fd329d8d06755a9
7
- data.tar.gz: 895f4135c2603f10a6e721c36d15cd0c0b9b7ba212e4f8b577fdc923030479332bcb55799bf12e78332649e6e6cecbca1946a7181416a567fffde27cfad50be4
6
+ metadata.gz: a27c85ac8cc1ef08b04ac61054848eeed0dfbe08465fd4814d0a6909dd18891df71d7bbe9011f2fe0281a028bdd62550988d2716f707d3ea1a11d12139d67772
7
+ data.tar.gz: 584531e1f3027132097cebb1a36e600ae7e470ce62b91bc23522352dc39f14a7c1c80b34b92a1c5298bbdb079fb51c1204962945577c6cdf549e14dd944f8a22
data/CHANGES.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.2.0
4
+
5
+ * Fix incompatibility with `rspec --profile`.
6
+
3
7
  ## 2.1.2
4
8
 
5
9
  * Fix error when used in projects without ActiveSupport. Thanks @erikpaasonen.
data/README.md CHANGED
@@ -24,7 +24,7 @@ And then execute:
24
24
 
25
25
  $ bundle
26
26
 
27
- This version of ParallelRSpec has been tested with RSpec 3.10.
27
+ This version of ParallelRSpec has been tested with RSpec 3.12.
28
28
 
29
29
  ## Usage
30
30
 
@@ -82,6 +82,10 @@ You might also want to detect whether your spec suite is running under ParallelR
82
82
  do_something unless ParallelRSpec.running?
83
83
  ```
84
84
 
85
+ ## Limitations
86
+
87
+ ParallelRSpec can't parallelize the specs in groups that use `before(:context)` or `after(:context)` (AKA `before(:all)` or `after(:all)`) hooks, since these may mean that there is state shared between examples.
88
+
85
89
  ## Contributing
86
90
 
87
91
  Bug reports and pull requests are welcome on GitHub at https://github.com/willbryant/parallel_rspec.
@@ -15,52 +15,38 @@ module ParallelRSpec
15
15
  end
16
16
 
17
17
  def example_started(example)
18
- channel_to_server.write([:example_started, serialize_example(example)])
18
+ channel_to_server.write([:example_started, example.id, updates_from(example)])
19
19
  end
20
20
 
21
21
  def example_passed(example)
22
- channel_to_server.write([:example_passed, serialize_example(example)])
22
+ channel_to_server.write([:example_passed, example.id, updates_from(example)])
23
23
  end
24
24
 
25
25
  def example_failed(example)
26
- channel_to_server.write([:example_failed, serialize_example(example)])
26
+ channel_to_server.write([:example_failed, example.id, updates_from(example)])
27
27
  end
28
28
 
29
29
  def example_finished(example)
30
- channel_to_server.write([:example_finished, serialize_example(example)])
30
+ channel_to_server.write([:example_finished, example.id, updates_from(example)])
31
31
  end
32
32
 
33
33
  def example_pending(example)
34
- channel_to_server.write([:example_pending, serialize_example(example)])
34
+ channel_to_server.write([:example_pending, example.id, updates_from(example)])
35
35
  end
36
36
 
37
37
  def deprecation(hash)
38
38
  channel_to_server.write([:deprecation, hash])
39
39
  end
40
40
 
41
- def serialize_example(example)
42
- Example.new(
43
- example.id,
44
- example.description,
45
- example.exception,
46
- example.location_rerun_argument,
47
- ExampleGroup.new([]),
48
- example.metadata.slice(
49
- :absolute_file_path,
50
- :described_class,
51
- :description,
52
- :description_args,
41
+ def updates_from(example)
42
+ {
43
+ exception: example.exception,
44
+ metadata: example.metadata.slice(
53
45
  :execution_result,
54
- :full_description,
55
- :file_path,
56
- :last_run_status,
57
- :line_number,
58
- :location,
59
46
  :pending,
60
- :rerun_file_path,
61
- :scoped_id,
62
- :shared_group_inclusion_backtrace,
63
- :type))
47
+ :skip,
48
+ )
49
+ }
64
50
  end
65
51
 
66
52
  def next_example_to_run
@@ -58,7 +58,6 @@ module ParallelRSpec
58
58
  # or the configured failure exit code (1 by default) if specs
59
59
  # failed.
60
60
  def run_specs(example_groups)
61
- puts "running #{@world.example_count(example_groups)}"
62
61
  @configuration.reporter.report(@world.example_count(example_groups)) do |reporter|
63
62
  @configuration.with_suite_hooks do
64
63
  with_context_hooks, without_context_hooks = example_groups.partition(&:any_context_hooks?)
@@ -1,34 +1,34 @@
1
1
  module ParallelRSpec
2
2
  class Server
3
- attr_reader :remaining_example_group_indexes, :reporter
3
+ attr_reader :reporter, :remaining_examples_by_group, :running_examples
4
4
 
5
5
  def initialize(reporter)
6
- @remaining_example_group_indexes = RSpec.world.filtered_examples.each_with_object({}) do |(example_group, examples), results|
7
- results[example_group] = examples.size unless example_group.any_context_hooks? || examples.size.zero?
6
+ @remaining_examples_by_group = RSpec.world.filtered_examples.each_with_object({}) do |(example_group, examples), results|
7
+ results[example_group] = examples unless example_group.any_context_hooks? || examples.size.zero?
8
8
  end
9
9
  @reporter = reporter
10
10
  @success = true
11
+ @running_examples = {}
11
12
  end
12
13
 
13
- def example_started(example, channel_to_client)
14
- reporter.example_started(example)
14
+ def example_started(example_id, example_updates, channel_to_client)
15
+ reporter.example_started(update_example(running_examples[example_id], example_updates))
15
16
  end
16
17
 
17
- def example_passed(example, channel_to_client)
18
- reporter.example_passed(example)
18
+ def example_finished(example_id, example_updates, channel_to_client)
19
+ reporter.example_finished(update_example(running_examples[example_id], example_updates))
19
20
  end
20
21
 
21
- def example_failed(example, channel_to_client)
22
- reporter.example_failed(example)
22
+ def example_passed(example_id, example_updates, channel_to_client)
23
+ reporter.example_passed(update_example(running_examples.delete(example_id), example_updates))
23
24
  end
24
25
 
25
- def example_finished(example, channel_to_client)
26
- pp example
27
- reporter.example_finished(example)
26
+ def example_failed(example_id, example_updates, channel_to_client)
27
+ reporter.example_failed(update_example(running_examples.delete(example_id), example_updates))
28
28
  end
29
29
 
30
- def example_pending(example, channel_to_client)
31
- reporter.example_pending(example)
30
+ def example_pending(example_id, example_updates, channel_to_client)
31
+ reporter.example_pending(update_example(running_examples.delete(example_id), example_updates))
32
32
  end
33
33
 
34
34
  def deprecation(hash, channel_to_client)
@@ -36,13 +36,14 @@ module ParallelRSpec
36
36
  end
37
37
 
38
38
  def next_example_to_run(channel_to_client)
39
- if remaining_example_group_indexes.empty?
39
+ if remaining_examples_by_group.empty?
40
40
  channel_to_client.write(nil)
41
41
  else
42
- klass = remaining_example_group_indexes.keys.first
43
- remaining_example_group_indexes[klass] -= 1
44
- channel_to_client.write([klass, remaining_example_group_indexes[klass]])
45
- remaining_example_group_indexes.delete(klass) if remaining_example_group_indexes[klass].zero?
42
+ example_group = remaining_examples_by_group.keys.first
43
+ example = remaining_examples_by_group[example_group].pop
44
+ running_examples[example.id] = example # cache so we don't need to look through all the examples for each message
45
+ channel_to_client.write([example_group, remaining_examples_by_group[example_group].size])
46
+ remaining_examples_by_group.delete(example_group) if remaining_examples_by_group[example_group].empty?
46
47
  end
47
48
  end
48
49
 
@@ -53,5 +54,11 @@ module ParallelRSpec
53
54
  def success?
54
55
  @success
55
56
  end
57
+
58
+ def update_example(example, data)
59
+ example.set_exception(data[:exception])
60
+ example.metadata.merge!(data[:metadata])
61
+ example
62
+ end
56
63
  end
57
64
  end
@@ -1,3 +1,3 @@
1
1
  module ParallelRSpec
2
- VERSION = "2.1.2"
2
+ VERSION = "2.2.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parallel_rspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.2
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Will Bryant, Powershop New Zealand Ltd