rspec-search-and-destroy 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - "1.9.3"
4
- script: cucumber
4
+ script: rake test
data/README.md CHANGED
@@ -28,6 +28,9 @@ rspec-sad
28
28
 
29
29
  # If you have a particular ordering that creates issues
30
30
  SPEC_OPTIONS="--seed 12345" rspec-sad
31
+
32
+ # If you have a complicated script
33
+ rspec-sad --rspec-command "/path/to/script"
31
34
  ```
32
35
 
33
36
  # Search and destroy mode
data/Rakefile CHANGED
@@ -1 +1,11 @@
1
1
  require "bundler/gem_tasks"
2
+
3
+ require "cucumber"
4
+ require "cucumber/rake/task"
5
+ Cucumber::Rake::Task.new(:features)
6
+
7
+ require "rspec/core/rake_task"
8
+ RSpec::Core::RakeTask.new(:spec)
9
+
10
+ desc "Run all tests"
11
+ task test: [:features, :spec]
data/bin/rspec-sad CHANGED
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $LOAD_PATH << "$PWD/../lib/"
4
3
  require 'rspec-sad'
5
4
 
6
5
  require 'rspec-search-and-destroy/binary_chop_example_selector'
@@ -17,9 +16,29 @@ class TTYOutput
17
16
  end
18
17
  end
19
18
 
19
+ require 'optparse'
20
+
21
+ driver_options = {}
22
+
23
+ option_parser = OptionParser.new do |opts|
24
+ opts.banner = <<BANNER
25
+ Find RSpec test order bugs
26
+
27
+ Usage: #{opts.program_name} [options]
28
+
29
+ BANNER
30
+
31
+ opts.on("--rspec-command COMMAND",
32
+ "Command to run instead of `rspec`") do |cmd|
33
+ driver_options[:command] = cmd
34
+ end
35
+ end
36
+ option_parser.parse!
37
+
38
+
20
39
  output = TTYOutput.new
21
40
  selector = BinaryChopExampleSelector.new
22
- driver = RSpecDriver.new
41
+ driver = RSpecDriver.new(driver_options)
23
42
 
24
43
  driver.initial_run
25
44
  results = driver.load_run_results
@@ -0,0 +1,31 @@
1
+ Feature: A command other than `rspec` can be run
2
+
3
+ Scenario: Run it
4
+ Given a configured spec/spec_helper.rb
5
+ And a file named "intermediate_runner.sh" with:
6
+ """
7
+ echo 'Running the intermediate script'
8
+ rspec
9
+ """
10
+ And a file named "spec/example_spec.rb" with:
11
+ """ruby
12
+ require 'spec_helper'
13
+
14
+ describe "Tests that fail when run in a specific order" do
15
+ it "leaves bad global state" do
16
+ $global_state = true
17
+ expect($global_state).to be true
18
+ end
19
+
20
+ it "just takes up space" do
21
+ expect(true).to be true
22
+ end
23
+
24
+ it "fails when run last" do
25
+ expect($global_state).to be false
26
+ end
27
+ end
28
+ """
29
+ When I run `rspec-sad --rspec-command='bash ./intermediate_runner.sh'`
30
+ Then the output should contain "Running the intermediate script"
31
+ And the output should contain "Culprit found"
@@ -1,14 +1,7 @@
1
1
  Feature: `before(:all)` blocks are disabled when all of the examples are also disabled
2
2
 
3
3
  Scenario: Run it
4
- Given a file named "spec/spec_helper.rb" with:
5
- """ruby
6
- require 'rspec-sad'
7
-
8
- RSpec.configure do |config|
9
- RSpecSearchAndDestroy.configure(config)
10
- end
11
- """
4
+ Given a configured spec/spec_helper.rb
12
5
  And a file named "spec/before_all_spec.rb" with:
13
6
  """ruby
14
7
  require 'spec_helper'
@@ -1,14 +1,7 @@
1
1
  Feature: Bisecting a single file
2
2
 
3
3
  Scenario: Run it
4
- Given a file named "spec/spec_helper.rb" with:
5
- """ruby
6
- require 'rspec-sad'
7
-
8
- RSpec.configure do |config|
9
- RSpecSearchAndDestroy.configure(config)
10
- end
11
- """
4
+ Given a configured spec/spec_helper.rb
12
5
  And a file named "spec/single_file_spec.rb" with:
13
6
  """ruby
14
7
  require 'spec_helper'
@@ -1,14 +1,7 @@
1
1
  Feature: Bisecting multiple files
2
2
 
3
3
  Scenario: Run it
4
- Given a file named "spec/spec_helper.rb" with:
5
- """ruby
6
- require 'rspec-sad'
7
-
8
- RSpec.configure do |config|
9
- RSpecSearchAndDestroy.configure(config)
10
- end
11
- """
4
+ Given a configured spec/spec_helper.rb
12
5
  And a file named "spec/file_1_spec.rb" with:
13
6
  """ruby
14
7
  require 'spec_helper'
@@ -0,0 +1,10 @@
1
+ Feature: Running RSpec when SAD is configured
2
+
3
+ Scenario: Run it
4
+ Given a configured spec/spec_helper.rb
5
+ And a file named "spec/empty_spec.rb" with:
6
+ """ruby
7
+ require 'spec_helper'
8
+ """
9
+ When I run `rspec`
10
+ Then the exit status should be 0
@@ -1,3 +1,15 @@
1
+ Given(/^a configured spec\/spec_helper\.rb$/) do
2
+ config = <<CONFIG
3
+ require 'rspec-sad'
4
+
5
+ RSpec.configure do |config|
6
+ RSpecSearchAndDestroy.configure(config)
7
+ end
8
+ CONFIG
9
+
10
+ write_file("spec/spec_helper.rb", config )
11
+ end
12
+
1
13
  Then(/^the output should contain "(.*?)" (\d+) times?$/) do |expected_output, expected_count|
2
14
  actual_count = all_output.scan(expected_output).length
3
15
  expect(actual_count).to eql expected_count.to_i
@@ -3,8 +3,10 @@ require 'rspec/core/formatters/base_formatter'
3
3
  module RSpecSearchAndDestroy
4
4
  class OrderFormatter < RSpec::Core::Formatters::BaseFormatter
5
5
  def stop
6
- File.open(filename, 'wb') do |f|
7
- Marshal.dump(results, f)
6
+ if enabled?
7
+ File.open(filename, 'wb') do |f|
8
+ Marshal.dump(results, f)
9
+ end
8
10
  end
9
11
 
10
12
  super
@@ -12,8 +14,12 @@ module RSpecSearchAndDestroy
12
14
 
13
15
  private
14
16
 
17
+ def enabled?
18
+ filename
19
+ end
20
+
15
21
  def filename
16
- ENV['RSPEC_SAD_RESULTS'] or raise "No result filename provided"
22
+ ENV['RSPEC_SAD_RESULTS']
17
23
  end
18
24
 
19
25
  def results
@@ -1,10 +1,17 @@
1
1
  require_relative 'rspec_results'
2
+ require 'childprocess'
2
3
 
3
4
  module RSpecSearchAndDestroy
4
5
  class RSpecDriver
5
6
  RESULT_FILE = '/tmp/example-results'
6
7
  EXAMPLE_FILE = '/tmp/examples-to-run'
7
8
 
9
+ attr_reader :rspec_command
10
+
11
+ def initialize(options = {})
12
+ @rspec_command = options.fetch(:command, 'rspec').split(/\s/)
13
+ end
14
+
8
15
  def load_run_results
9
16
  unless File.exist? RESULT_FILE
10
17
  raise <<ERR
@@ -42,15 +49,13 @@ ERR
42
49
  private
43
50
 
44
51
  def run_rspec
45
- env = {
46
- "RSPEC_SAD_EXAMPLES" => EXAMPLE_FILE,
47
- "RSPEC_SAD_RESULTS" => RESULT_FILE
48
- }
49
- cmd = "rspec"
50
-
51
- success = system(env, cmd)
52
+ process = ChildProcess.build(*rspec_command)
53
+ process.io.inherit!
54
+ process.environment["RSPEC_SAD_EXAMPLES"] = EXAMPLE_FILE
55
+ process.environment["RSPEC_SAD_RESULTS"] = RESULT_FILE
52
56
 
53
- raise "unable to run command: #{cmd}" if success.nil?
57
+ process.start
58
+ process.wait
54
59
  end
55
60
  end
56
61
  end
@@ -1,3 +1,3 @@
1
1
  module RSpecSearchAndDestroy
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -18,6 +18,7 @@ Gem::Specification.new do |gem|
18
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
19
  gem.require_paths = ["lib"]
20
20
 
21
+ gem.add_dependency('childprocess', '~> 0.3')
21
22
  gem.add_dependency('rspec', '~> 2.12')
22
23
 
23
24
  gem.add_development_dependency('rspec', '~> 2.14')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-search-and-destroy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,24 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-01 00:00:00.000000000 Z
12
+ date: 2013-09-08 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: childprocess
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '0.3'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '0.3'
14
30
  - !ruby/object:Gem::Dependency
15
31
  name: rspec
16
32
  requirement: !ruby/object:Gem::Requirement
@@ -75,9 +91,11 @@ files:
75
91
  - README.md
76
92
  - Rakefile
77
93
  - bin/rspec-sad
94
+ - features/alternate_command.feature
78
95
  - features/before_all_blocks_are_disabled.feature
79
96
  - features/bisecting_a_single_file.feature
80
97
  - features/bisecting_multiple_files.feature
98
+ - features/running_rspec_without_sad.feature
81
99
  - features/support/env.rb
82
100
  - features/support/steps.rb
83
101
  - lib/rspec-sad.rb
@@ -120,9 +138,11 @@ signing_key:
120
138
  specification_version: 3
121
139
  summary: Finds RSpec test ordering bugs
122
140
  test_files:
141
+ - features/alternate_command.feature
123
142
  - features/before_all_blocks_are_disabled.feature
124
143
  - features/bisecting_a_single_file.feature
125
144
  - features/bisecting_multiple_files.feature
145
+ - features/running_rspec_without_sad.feature
126
146
  - features/support/env.rb
127
147
  - features/support/steps.rb
128
148
  - spec/binary_chop_example_selector_spec.rb