opal/opal-rspec

View on GitHub
bin/generate_requires

Summary

Maintainability
Test Coverage
#!/usr/bin/env ruby

ROOT = "#{__dir__}/.."
$LOAD_PATH.unshift "#{ROOT}/rspec/upstream/lib"
$LOAD_PATH.unshift "#{ROOT}/rspec-core/upstream/lib"
$LOAD_PATH.unshift "#{ROOT}/rspec-expectations/upstream/lib"
$LOAD_PATH.unshift "#{ROOT}/rspec-mocks/upstream/lib"
$LOAD_PATH.unshift "#{ROOT}/rspec-support/upstream/lib"

require 'json'
require 'pathname'

# Opal will not have the built-in RNG, which affects the required outcome
Object.send(:remove_const, :Random)

# These scripts allow a leaner top level spec (like noted here)
BASE_FILES = %w{rspec rspec/mocks rspec/expectations rspec/core rspec/core/mocking_adapters/rspec}
FORMATTERS = %w{base_formatter base_text_formatter progress_formatter documentation_formatter html_printer json_formatter}.map {|f| "rspec/core/formatters/#{f}"}
MATCHERS = Dir.glob('rspec-expectations/upstream/lib/rspec/matchers/built_in/**/*.rb').map do |each_file|
  path = Pathname.new(each_file).relative_path_from(Pathname.new('rspec-expectations/upstream/lib')).to_s
  path.sub File.extname(path), ''
end
MOCK_STUFF = %w{matchers/expectation_customization any_instance}.map { |f| "rspec/mocks/#{f}" }
REQUIRES = BASE_FILES + FORMATTERS + MATCHERS + MOCK_STUFF

# Should not need to edit below this

ROOTS = Dir[__dir__+'/../rspec{,-{core,expectations,mocks,support}}/upstream/lib'].map {|root| File.expand_path(root)}
ROOTS_REGEXP = /\A(#{ROOTS.map {|r| Regexp.escape r}.join('|')})\//

module Kernel
  alias :require_before_opal_rspec :require
  def require path
    result = require_before_opal_rspec(path)
    puts "requiring: #{path} (#{result})"
    RSPEC_PATHS << path
    result
  end

  alias :require_relative_before_opal_rspec :require_relative
  def require_relative path
    base = File.dirname(caller(1,1).first)
    path_for_require = File.expand_path(path, base).sub(ROOTS_REGEXP, '')
    require path_for_require
  end
end

RSPEC_PATHS = []
REQUIRES.each {|r| require r }

# Put top level items first
requires = RSPEC_PATHS.uniq.sort

File.open "#{ROOT}/lib-opal/opal/rspec/requires.rb", 'w' do |file|
  file.puts "# Generated automatically by #{$0}"
  requires.each do |path|
    file.puts "require '#{path}'"
  end
end