Skip to content

Remove warning caused by changes in minitest 5 #772

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
163 changes: 9 additions & 154 deletions lib/rspec/rails/adapters.rb
Original file line number Diff line number Diff line change
@@ -1,156 +1,11 @@
require 'delegate'
require 'active_support/concern'
require 'test/unit/assertions'

module RSpec
module Rails
class AssertionDelegator < Module
# @api private
def initialize(*assertion_modules)
assertion_class = Class.new(SimpleDelegator) do
include Test::Unit::Assertions
include ::RSpec::Rails::MinitestCounters
assertion_modules.each { |mod| include mod }
end

super() do
# @api private
define_method :build_assertion_instance do
assertion_class.new(self)
end

# @api private
def assertion_instance
@assertion_instance ||= build_assertion_instance
end

assertion_modules.each do |mod|
mod.public_instance_methods.each do |method|
next if method == :method_missing || method == "method_missing"
class_eval <<-EOM, __FILE__, __LINE__ + 1
def #{method}(*args, &block)
assertion_instance.send(:#{method}, *args, &block)
end
EOM
end
end
end
end
end

# MiniTest::Unit::LifecycleHooks
module MiniTestLifecycleAdapter
extend ActiveSupport::Concern

included do |group|
group.before { after_setup }
group.after { before_teardown }

group.around do |example|
before_setup
example.run
after_teardown
end
end

def before_setup
end

def after_setup
end

def before_teardown
end

def after_teardown
end
end

# @api private
module MinitestCounters
# @api private
def assertions
@assertions ||= 0
end

# @api private
def assertions=(assertions)
@assertions = assertions
end
end

module SetupAndTeardownAdapter
extend ActiveSupport::Concern

module ClassMethods
# @api private
#
# Wraps `setup` calls from within Rails' testing framework in `before`
# hooks.
def setup(*methods)
methods.each do |method|
if method.to_s =~ /^setup_(fixtures|controller_request_and_response)$/
prepend_before { send method }
else
before { send method }
end
end
end

# @api private
#
# Wraps `teardown` calls from within Rails' testing framework in
# `after` hooks.
def teardown(*methods)
methods.each { |method| after { send method } }
end
end

# @api private
def method_name
@example
end
end

module TestUnitAssertionAdapter
extend ActiveSupport::Concern

module ClassMethods
# @api private
#
# Returns the names of assertion methods that we want to expose to
# examples without exposing non-assertion methods in Test::Unit or
# Minitest.
def assertion_method_names
Test::Unit::Assertions.public_instance_methods.select{|m| m.to_s =~ /^(assert|flunk)/} +
[:build_message]
end

# @api private
def define_assertion_delegators
assertion_method_names.each do |m|
class_eval <<-CODE, __FILE__, __LINE__ + 1
def #{m}(*args, &block)
assertion_delegator.send :#{m}, *args, &block
end
CODE
end
end
end

class AssertionDelegator
include Test::Unit::Assertions
include ::RSpec::Rails::MinitestCounters
end

# @api private
def assertion_delegator
@assertion_delegator ||= AssertionDelegator.new
end

included do
define_assertion_delegators
end
end
module RSpec::Rails
module Adapters
end
end

require 'rspec/rails/adapters/assertion_delegator'
require 'rspec/rails/adapters/assertions'
require 'rspec/rails/adapters/minitest_counters'
require 'rspec/rails/adapters/minitest_lifecycle_adapter'
require 'rspec/rails/adapters/setup_and_teardown_adapter'
require 'rspec/rails/adapters/test_unit_assertion_adapter'
37 changes: 37 additions & 0 deletions lib/rspec/rails/adapters/assertion_delegator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
require 'delegate'

module RSpec::Rails::Adapters
class AssertionDelegator < Module
# @api private
def initialize(*assertion_modules)
assertion_class = Class.new(SimpleDelegator) do
include ::RSpec::Rails::Adapters::Assertions
include ::RSpec::Rails::Adapters::MinitestCounters
assertion_modules.each { |mod| include mod }
end

super() do
# @api private
define_method :build_assertion_instance do
assertion_class.new(self)
end

# @api private
def assertion_instance
@assertion_instance ||= build_assertion_instance
end

assertion_modules.each do |mod|
mod.public_instance_methods.each do |method|
next if method == :method_missing || method == "method_missing"
class_eval <<-EOM, __FILE__, __LINE__ + 1
def #{method}(*args, &block)
assertion_instance.send(:#{method}, *args, &block)
end
EOM
end
end
end
end
end
end
17 changes: 17 additions & 0 deletions lib/rspec/rails/adapters/assertions.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
if ::Rails::VERSION::STRING >= '4.1.0'
gem 'minitest'
require 'minitest/assertions'
else
require 'test/unit/assertions'
end


module RSpec::Rails::Adapters
module Assertions
if ::Rails::VERSION::STRING >= '4.1.0'
include Minitest::Assertions
else
include Test::Unit::Assertions
end
end
end
14 changes: 14 additions & 0 deletions lib/rspec/rails/adapters/minitest_counters.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
module RSpec::Rails::Adapters
# @api private
module MinitestCounters
# @api private
def assertions
@assertions ||= 0
end

# @api private
def assertions=(assertions)
@assertions = assertions
end
end
end
31 changes: 31 additions & 0 deletions lib/rspec/rails/adapters/minitest_lifecycle_adapter.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
require 'active_support/concern'

module RSpec::Rails::Adapters
# Minitest::Test::LifecycleHooks
module MinitestLifecycleAdapter
extend ActiveSupport::Concern

included do |group|
group.before { after_setup }
group.after { before_teardown }

group.around do |example|
before_setup
example.run
after_teardown
end
end

def before_setup
end

def after_setup
end

def before_teardown
end

def after_teardown
end
end
end
36 changes: 36 additions & 0 deletions lib/rspec/rails/adapters/setup_and_teardown_adapter.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
require 'active_support/concern'

module RSpec::Rails::Adapters
module SetupAndTeardownAdapter
extend ActiveSupport::Concern

module ClassMethods
# @api private
#
# Wraps `setup` calls from within Rails' testing framework in `before`
# hooks.
def setup(*methods)
methods.each do |method|
if method.to_s =~ /^setup_(fixtures|controller_request_and_response)$/
prepend_before { send method }
else
before { send method }
end
end
end

# @api private
#
# Wraps `teardown` calls from within Rails' testing framework in
# `after` hooks.
def teardown(*methods)
methods.each { |method| after { send method } }
end
end

# @api private
def method_name
@example
end
end
end
45 changes: 45 additions & 0 deletions lib/rspec/rails/adapters/test_unit_assertion_adapter.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
require 'active_support/concern'
require 'rspec/rails/adapters/assertions'

module RSpec::Rails::Adapters
module TestUnitAssertionAdapter
extend ActiveSupport::Concern

module ClassMethods
# @api private
#
# Returns the names of assertion methods that we want to expose to
# examples without exposing non-assertion methods in Test::Unit or
# Minitest.
def assertion_method_names
::RSpec::Rails::Adapters::Assertions.public_instance_methods.select{|m| m.to_s =~ /^(assert|flunk)/} +
[:build_message]
end

# @api private
def define_assertion_delegators
assertion_method_names.each do |m|
class_eval <<-CODE, __FILE__, __LINE__ + 1
def #{m}(*args, &block)
assertion_delegator.send :#{m}, *args, &block
end
CODE
end
end
end

class AssertionDelegator
include ::RSpec::Rails::Adapters::Assertions
include ::RSpec::Rails::Adapters::MinitestCounters
end

# @api private
def assertion_delegator
@assertion_delegator ||= AssertionDelegator.new
end

included do
define_assertion_delegators
end
end
end
2 changes: 1 addition & 1 deletion lib/rspec/rails/example/controller_example_group.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ module ControllerExampleGroup
include RSpec::Rails::Matchers::RedirectTo
include RSpec::Rails::Matchers::RenderTemplate
include RSpec::Rails::Matchers::RoutingMatchers
include RSpec::Rails::AssertionDelegator.new(ActionDispatch::Assertions::RoutingAssertions)
include RSpec::Rails::Adapters::AssertionDelegator.new(ActionDispatch::Assertions::RoutingAssertions)

module ClassMethods
# @private
Expand Down
6 changes: 3 additions & 3 deletions lib/rspec/rails/example/rails_example_group.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ module RSpec
module Rails
module RailsExampleGroup
extend ActiveSupport::Concern
include RSpec::Rails::SetupAndTeardownAdapter
include RSpec::Rails::MiniTestLifecycleAdapter if ::Rails::VERSION::STRING >= '4'
include RSpec::Rails::TestUnitAssertionAdapter
include RSpec::Rails::Adapters::SetupAndTeardownAdapter
include RSpec::Rails::Adapters::MinitestLifecycleAdapter if ::Rails::VERSION::STRING >= '4'
include RSpec::Rails::Adapters::TestUnitAssertionAdapter
include RSpec::Rails::Matchers
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/rspec/rails/example/routing_example_group.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ module RoutingExampleGroup
include RSpec::Rails::RailsExampleGroup
include RSpec::Rails::Matchers::RoutingMatchers
include RSpec::Rails::Matchers::RoutingMatchers::RouteHelpers
include RSpec::Rails::AssertionDelegator.new(ActionDispatch::Assertions::RoutingAssertions)
include RSpec::Rails::Adapters::AssertionDelegator.new(ActionDispatch::Assertions::RoutingAssertions)

module ClassMethods
# Specifies the routeset that will be used for the example group. This
Expand Down
6 changes: 3 additions & 3 deletions lib/rspec/rails/fixture_support.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ module Rails
if defined?(ActiveRecord::TestFixtures)
module FixtureSupport
extend ActiveSupport::Concern
include RSpec::Rails::SetupAndTeardownAdapter
include RSpec::Rails::MiniTestLifecycleAdapter if ::Rails::VERSION::STRING > '4'
include RSpec::Rails::TestUnitAssertionAdapter
include RSpec::Rails::Adapters::SetupAndTeardownAdapter
include RSpec::Rails::Adapters::MinitestLifecycleAdapter if ::Rails::VERSION::STRING > '4'
include RSpec::Rails::Adapters::TestUnitAssertionAdapter
include ActiveRecord::TestFixtures

included do
Expand Down
Loading