rspec-bisect 0.1.1 → 0.1.2

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