Class: Megatest::Selector::ExactLineFilter

Inherits:
Object
  • Object
show all
Defined in:
lib/megatest/selector.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(line, index) ⇒ ExactLineFilter

Returns a new instance of ExactLineFilter.



177
178
179
180
# File 'lib/megatest/selector.rb', line 177

def initialize(line, index)
  @line = line
  @index = index
end

Class Method Details

.parse(arg) ⇒ Object



170
171
172
173
174
# File 'lib/megatest/selector.rb', line 170

def parse(arg)
  if match = arg.match(/\A(\d+)(?:~(\d+))?\z/)
    new(Integer(match[1]), match[2]&.to_i)
  end
end

Instance Method Details

#select(test_cases) ⇒ Object



182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
# File 'lib/megatest/selector.rb', line 182

def select(test_cases)
  test_cases = test_cases.sort { |a, b| b.source_line <=> a.source_line }
  test_cases = test_cases.drop_while { |t| t.source_line > @line }

  # Line not found, fallback to run the whole file?
  return [] if test_cases.empty?

  real_line = test_cases.first&.source_line
  test_cases = test_cases.take_while { |t| t.source_line == real_line }

  if @index
    test_cases.select! { |t| t.index == @index }
  end
  test_cases
end