lib/opal/rspec/locator.rb
require 'opal/rspec/util'
require 'pathname'
require 'rake'
# require the bundled RSpec's file and don't rely on the load path in case opal-rspec is included in a project's
# Gemfile without rspec also being in the Gemfile
::Opal::RSpec.load_namespaced __dir__+'/../../../rspec-core/upstream/lib/rspec/core/ruby_project.rb', ::Opal
module Opal
module RSpec
class Locator
include ::Opal::RSpec::Core::RubyProject
DEFAULT_GLOB = '**{,/*/**}/*_spec{.js,}.{rb,opal}'
DEFAULT_DEFAULT_PATH = 'spec-opal'
attr_accessor :spec_pattern, :spec_exclude_pattern, :spec_files, :default_path
def initialize(pattern: nil, exclude_pattern: nil, files: nil, default_path: nil)
@spec_exclude_pattern = Array(exclude_pattern)
@spec_files = files
@default_path = default_path || DEFAULT_DEFAULT_PATH
@spec_pattern = Array(pattern || DEFAULT_GLOB)
@spec_pattern = @spec_pattern.map do |pattern|
pattern.sub(/\A#{Regexp.escape(@default_path)}/, '')
end
@spec_exclude_pattern = @spec_exclude_pattern.map do |pattern|
pattern.sub(/\A#{Regexp.escape(@default_path)}/, '')
end
end
def determine_root
find_first_parent_containing(@default_path) || '.'
end
def get_spec_load_paths
[File.join(root, @default_path)]
end
def get_matching_files_under(path: )
FileList[*@spec_pattern.map { |i| "#{path}/#{i}" }]
.exclude(*@spec_exclude_pattern.map { |i| "#{path}/#{i}" })
end
def get_opal_spec_requires
if !@spec_files || @spec_files.empty?
files = get_matching_files_under(path: @default_path)
else
files = @spec_files.map do |file|
file = file.split(/[\[:]/).first
if File.directory?(file)
get_matching_files_under(path: file).to_a
else
file
end
end.flatten
files = FileList[*files]
end
files.uniq.map { |file| File.expand_path file }
end
end
end
end