# frozen_string_literal: true require 'cucumber/file_specs' module Cucumber describe FileSpecs do let(:file_specs) { FileSpecs.new(['features/foo.feature:1:2:3', 'features/bar.feature:4:5:6']) } let(:locations) { file_specs.locations } let(:files) { file_specs.files } it 'parses locations from multiple files' do expect(locations.length).to eq 6 expect(locations).to eq [ Cucumber::Core::Ast::Location.new('features/foo.feature', 1), Cucumber::Core::Ast::Location.new('features/foo.feature', 2), Cucumber::Core::Ast::Location.new('features/foo.feature', 3), Cucumber::Core::Ast::Location.new('features/bar.feature', 4), Cucumber::Core::Ast::Location.new('features/bar.feature', 5), Cucumber::Core::Ast::Location.new('features/bar.feature', 6) ] end it 'parses file names from multiple file specs' do expect(files.length).to eq 2 expect(files).to eq [ 'features/foo.feature', 'features/bar.feature' ] end context 'when files are not unique' do let(:file_specs) { FileSpecs.new(['features/foo.feature:4', 'features/foo.feature:34']) } it 'parses unique file names' do expect(files.length).to eq 1 expect(files).to eq ['features/foo.feature'] end end context 'when no line number is specified' do let(:file_specs) { FileSpecs.new(['features/foo.feature', 'features/bar.feature:34']) } it 'returns a wildcard location for that file' do expect(locations).to eq [ Cucumber::Core::Ast::Location.new('features/foo.feature'), Cucumber::Core::Ast::Location.new('features/bar.feature', 34) ] end end context 'when the same file is referenced more than once' do let(:file_specs) { FileSpecs.new(['features/foo.feature:10', 'features/foo.feature:1']) } it 'returns locations in the order specified' do expect(locations).to eq [ Cucumber::Core::Ast::Location.new('features/foo.feature', 10), Cucumber::Core::Ast::Location.new('features/foo.feature', 1) ] end end end end