aboutsummaryrefslogblamecommitdiffstats
path: root/activesupport/test/testing/constant_lookup_test.rb
blob: 02ef708a6302338e734881cd848eb4f30138c76f (plain) (tree)
1
2
3
4
5
6
7
8
9
                             

                                   

              
               


                     

                  
                                                  
                                                
                                 













































                                                                        







                                                                           



                                                                      
                                                                       


         
   
# frozen_string_literal: true
require "abstract_unit"
require "dependencies_test_helpers"

class Foo; end
class Bar < Foo
  def index; end
  def self.index; end
end
module FooBar; end

class ConstantLookupTest < ActiveSupport::TestCase
  include ActiveSupport::Testing::ConstantLookup
  include DependenciesTestHelpers

  def find_foo(name)
    self.class.determine_constant_from_test_name(name) do |constant|
      Class === constant && constant < Foo
    end
  end

  def find_module(name)
    self.class.determine_constant_from_test_name(name) do |constant|
      Module === constant
    end
  end

  def test_find_bar_from_foo
    assert_equal Bar, find_foo("Bar")
    assert_equal Bar, find_foo("Bar::index")
    assert_equal Bar, find_foo("Bar::index::authenticated")
    assert_equal Bar, find_foo("BarTest")
    assert_equal Bar, find_foo("BarTest::index")
    assert_equal Bar, find_foo("BarTest::index::authenticated")
  end

  def test_find_module
    assert_equal FooBar, find_module("FooBar")
    assert_equal FooBar, find_module("FooBar::index")
    assert_equal FooBar, find_module("FooBar::index::authenticated")
    assert_equal FooBar, find_module("FooBarTest")
    assert_equal FooBar, find_module("FooBarTest::index")
    assert_equal FooBar, find_module("FooBarTest::index::authenticated")
  end

  def test_returns_nil_when_cant_find_foo
    assert_nil find_foo("DoesntExist")
    assert_nil find_foo("DoesntExistTest")
    assert_nil find_foo("DoesntExist::Nadda")
    assert_nil find_foo("DoesntExist::Nadda::Nope")
    assert_nil find_foo("DoesntExist::Nadda::Nope::NotHere")
  end

  def test_returns_nil_when_cant_find_module
    assert_nil find_module("DoesntExist")
    assert_nil find_module("DoesntExistTest")
    assert_nil find_module("DoesntExist::Nadda")
    assert_nil find_module("DoesntExist::Nadda::Nope")
    assert_nil find_module("DoesntExist::Nadda::Nope::NotHere")
  end

  def test_does_not_swallow_exception_on_no_method_error
    assert_raises(NoMethodError) {
      with_autoloading_fixtures {
        self.class.determine_constant_from_test_name("RaisesNoMethodError")
      }
    }
  end

  def test_does_not_swallow_exception_on_no_name_error_within_constant
    assert_raises(NameError) do
      with_autoloading_fixtures do
        self.class.determine_constant_from_test_name("RaisesNameError")
      end
    end
  end
end