rspec-bisect 0.1.1 → 0.1.2

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
  SHA1:
3
- metadata.gz: fa219fdf62e2b1443b569705aa35d614fff5f054
4
- data.tar.gz: de6a63d2fee72bbd3ac882b52c1d66878b5ca4d3
3
+ metadata.gz: 38940973e6003e17ff03d56726279191d9af09cc
4
+ data.tar.gz: 0b8e43a67e09a6d25f070ef62a85222cea27909b
5
5
  SHA512:
6
- metadata.gz: c9ea2dcdf6e665205f547c10f5cea43c50f376e2c031f673a0d27061599db2a7a197d6527fb89ed2dc7e72d17fd1c109216ec5b7ea87d2952ba31a5d2f9db575
7
- data.tar.gz: 44261365ac61fae0389adcebd4a93ffc73b143cd5ac42c763b1ac0b4723dfd2a666f5afdf7ac47b0746ec0ea7195b873080b6b73b363090ffd49ee66c6bb4513
6
+ metadata.gz: 941276fbcd9fb96e271095d6ee8d07fffdc46c3a1e4cb4368c1e2c23bb5539883b65ab88d9fdec52af46a72672506f60f3a1e80e578f3f3b5ac507442b9e3306
7
+ data.tar.gz: d5af173c24f9320302cab01327db0b44061f5c654dd80aeec31b7485d2ebd3f465ac5894af6988ec3909e53313aa24aea538e61b95215f166f68bd37267d399b
data/bin/rspec-bisect CHANGED
@@ -3,8 +3,13 @@
3
3
  require 'json'
4
4
  require 'colorize'
5
5
  require 'optparse'
6
+ require 'ruby-progressbar'
7
+
8
+ @options = {}
9
+ def options
10
+ @options
11
+ end
6
12
 
7
- options = {}
8
13
  OptionParser.new do |opts|
9
14
  opts.banner = 'Usage: rspec-bisect [options]'
10
15
 
@@ -24,7 +29,11 @@ else
24
29
  puts "Running tests with seed #{options[:seed]}"
25
30
  end
26
31
 
27
- result = `rspec --format json #{options[:seed].nil? ? '' : "--seed #{options[:seed]}"}`
32
+ def rspec_seed_argument
33
+ options[:seed].nil? ? '' : "--seed #{options[:seed]}"
34
+ end
35
+
36
+ result = `rspec --format json #{rspec_seed_argument}`
28
37
  parsed = JSON.parse result
29
38
 
30
39
  examples = parsed['examples']
@@ -42,7 +51,7 @@ def examples_as_rspec_params(examples)
42
51
  end
43
52
 
44
53
  def run_examples_command(examples)
45
- "rspec #{examples_as_rspec_params(examples)}"
54
+ "rspec #{examples_as_rspec_params(examples)} #{rspec_seed_argument}"
46
55
  end
47
56
 
48
57
  def run_examples(examples)
@@ -57,9 +66,18 @@ def last_command_failed?
57
66
  not last_command_passed?
58
67
  end
59
68
 
69
+ def progress_bar(additional_options)
70
+ ProgressBar.create({format: '%t |%w>%i| %c/%C |%e'}.merge(additional_options))
71
+ end
72
+
73
+ dependent_examples_progress = progress_bar title: 'Detecting Dependent Examples',
74
+ total: failing_examples.size
75
+
60
76
  order_dependent_examples = failing_examples.select do |example|
61
77
  run_examples([example])
62
- last_command_passed?
78
+ passed = last_command_passed?
79
+ dependent_examples_progress.increment
80
+ passed
63
81
  end
64
82
 
65
83
  if order_dependent_examples.size > 0
@@ -75,18 +93,27 @@ order_dependent_examples.each do |example|
75
93
  puts
76
94
  puts "Culprits for #{example['full_description']}:"
77
95
 
96
+ culprit_progress = progress_bar title: 'Determining culprits',
97
+ total: nil,
98
+ format: '%t |%i| %c potential culprits'
99
+
78
100
  culprits = examples.take_while do |e|
79
101
  example['file_path'] != e['file_path'] ||
80
102
  example['line_number'] != e['line_number']
81
103
  end
82
104
 
105
+ culprit_progress.progress = culprits.size
106
+
83
107
  culprit_count_theory = 1
84
108
  while culprits.size > culprit_count_theory
85
109
  found_useless_group = false
86
110
  culprits.each_slice(culprits.size / (culprit_count_theory + 1)) do |excluded_culprits|
87
- culprit_group = culprits - excluded_culprits
111
+ culprit_progress.progress = culprits.size
88
112
 
113
+ culprit_group = culprits - excluded_culprits
89
114
  run_examples culprit_group + [example]
115
+
116
+ culprit_progress.progress = culprits.size
90
117
  if last_command_failed?
91
118
  culprits = culprit_group
92
119
 
@@ -98,6 +125,8 @@ order_dependent_examples.each do |example|
98
125
  culprit_count_theory += 1 unless found_useless_group
99
126
  end
100
127
 
128
+ culprit_progress.stop
129
+
101
130
  culprits.each { |candidate| puts candidate['full_description'].green }
102
131
 
103
132
  puts example['full_description'].red
@@ -1,6 +1,5 @@
1
1
  Feature: accepts seeds for first rspec run
2
2
 
3
- @wip
4
3
  Scenario: suite requires seeds
5
4
  Given a file named "spec/failing_spec.rb" with:
6
5
  """ruby
@@ -1,5 +1,5 @@
1
1
  module Rspec
2
2
  module Bisect
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.2"
4
4
  end
5
5
  end
data/rspec-bisect.gemspec CHANGED
@@ -24,4 +24,5 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "aruba", "0.6.1"
25
25
  spec.add_dependency "rspec", "~> 3"
26
26
  spec.add_dependency "colorize", "0.7.3"
27
+ spec.add_dependency "ruby-progressbar", "1.6.1"
27
28
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-bisect
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shelby Doolittle
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - '='
95
95
  - !ruby/object:Gem::Version
96
96
  version: 0.7.3
97
+ - !ruby/object:Gem::Dependency
98
+ name: ruby-progressbar
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 1.6.1
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 1.6.1
97
111
  description: Detect order dependencies in rspec test suites. Also print the minimal
98
112
  set of tests to reproduce the failure(s).
99
113
  email: