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 +4 -4
- data/bin/rspec-bisect +34 -5
- data/features/accepts_seeds.feature +0 -1
- data/lib/rspec/bisect/version.rb +1 -1
- data/rspec-bisect.gemspec +1 -0
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 38940973e6003e17ff03d56726279191d9af09cc
|
4
|
+
data.tar.gz: 0b8e43a67e09a6d25f070ef62a85222cea27909b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
-
|
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
|
data/lib/rspec/bisect/version.rb
CHANGED
data/rspec-bisect.gemspec
CHANGED
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.
|
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:
|