Skip to content

Commit

Permalink
Merge 6286f7e into 6950746
Browse files Browse the repository at this point in the history
  • Loading branch information
JonRowe committed Nov 22, 2013
2 parents 6950746 + 6286f7e commit 5571eac
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 17 deletions.
18 changes: 9 additions & 9 deletions lib/rspec/core/configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,7 @@ def initialize
@include_or_extend_modules = []
@mock_framework = nil
@files_to_run = []
@line_numbers = []
@formatters = []
@color = false
@pattern = '**/*_spec.rb'
Expand Down Expand Up @@ -538,12 +539,9 @@ def requires=(paths)
end

# Run examples defined on `line_numbers` in all files to run.
def line_numbers=(line_numbers)
filter_run :line_numbers => line_numbers.map{|l| l.to_i}
end

def line_numbers
filter.fetch(:line_numbers,[])
add_setting :line_numbers
def line_numbers= array
@line_numbers = array.map &:to_i
end

def full_description=(description)
Expand Down Expand Up @@ -1039,13 +1037,15 @@ def get_files_to_run(paths)
def gather_directories(path)
stripped = "{#{pattern.gsub(/\s*,\s*/, ',')}}"
files = pattern =~ /^#{Regexp.escape path}/ ? Dir[stripped] : Dir["#{path}/#{stripped}"]
files.sort
files.sort.map { |path| extract_location path }
end

def extract_location(path)
if path =~ /^(.*?)((?:\:\d+)+)$/
path, lines = $1, $2[1..-1].split(":").map{|n| n.to_i}
filter_manager.add_location path, lines
path, path_lines = $1, $2[1..-1].split(":").map{|n| n.to_i}
filter_manager.add_location path, path_lines
elsif !line_numbers.empty?
filter_manager.add_location path, line_numbers
end
path
end
Expand Down
2 changes: 1 addition & 1 deletion lib/rspec/core/filter_manager.rb
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ module Core
# @see Configuration#filter_run_including
# @see Configuration#filter_run_excluding
class FilterManager
STANDALONE_FILTERS = [:locations, :line_numbers, :full_description]
STANDALONE_FILTERS = [:locations, :full_description]

PROC_HEX_NUMBER = /0x[0-9a-f]+@/
PROJECT_DIR = File.expand_path('.')
Expand Down
36 changes: 30 additions & 6 deletions spec/rspec/core/configuration_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1005,21 +1005,45 @@ def metadata_hash(*args)
end

describe "line_numbers=" do
it "sets the line numbers" do
it "overrides inclusion filters set on config, mapping line numbers to locations" do
config.filter_run :focused => true
config.line_numbers = ['37']
expect(config.filter).to eq({:line_numbers => [37]})
config.files_or_directories_to_run = "path/to/file.rb"
expect(config.inclusion_filter.size).to eq(1)
expect(config.inclusion_filter[:locations].keys.first).to match(/path\/to\/file\.rb$/)
expect(config.inclusion_filter[:locations].values.first).to eq([37])
end

it "overrides filters" do
config.filter_run :focused => true
it "overrides inclusion filters set before config" do
config.force(:inclusion_filter => {:foo => :bar})
config.line_numbers = ['37']
expect(config.filter).to eq({:line_numbers => [37]})
config.files_or_directories_to_run = "path/to/file.rb"
expect(config.inclusion_filter.size).to eq(1)
expect(config.inclusion_filter[:locations].keys.first).to match(/path\/to\/file\.rb$/)
expect(config.inclusion_filter[:locations].values.first).to eq([37])
end

it "prevents subsequent filters" do
config.line_numbers = ['37']
config.files_or_directories_to_run = "path/to/file.rb"
config.filter_run :focused => true
expect(config.filter).to eq({:line_numbers => [37]})
expect(config.filter).to eq({:locations => { File.expand_path("./path/to/file.rb") => [37] }})
end

it "clears exclusion filters set on config" do
config.exclusion_filter = { :foo => :bar }
config.line_numbers = ['37']
config.files_or_directories_to_run = "path/to/file.rb"
expect(config.exclusion_filter).to be_empty,
"expected exclusion filter to be empty:\n#{config.exclusion_filter}"
end

it "clears exclusion filters set before config" do
config.force(:exclusion_filter => { :foo => :bar })
config.line_numbers = ['37']
config.files_or_directories_to_run = "path/to/file.rb"
expect(config.exclusion_filter).to be_empty,
"expected exclusion filter to be empty:\n#{config.exclusion_filter}"
end
end

Expand Down
2 changes: 1 addition & 1 deletion spec/rspec/core/filter_manager_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def opposite(name)
end

if name == "include"
[:locations, :line_numbers, :full_description].each do |filter|
[:locations, :full_description].each do |filter|
context "with :#{filter}" do
it "clears previous inclusions" do
filter_manager = FilterManager.new
Expand Down

0 comments on commit 5571eac

Please sign in to comment.