PageRenderTime 45ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/vendor/rails/activesupport/test/core_ext/object_and_class_ext_test.rb

https://github.com/bricooke/my-biz-expenses
Ruby | 151 lines | 122 code | 28 blank | 1 comment | 0 complexity | 1c4415cae826a311c4237eacb08927e4 MD5 | raw file
Possible License(s): CC-BY-SA-3.0, BSD-3-Clause
  1. require File.dirname(__FILE__) + '/../abstract_unit'
  2. class ClassA; end
  3. class ClassB < ClassA; end
  4. class ClassC < ClassB; end
  5. class ClassD < ClassA; end
  6. class ClassI; end
  7. class ClassJ < ClassI; end
  8. class ClassK
  9. end
  10. module Nested
  11. class ClassL < ClassK
  12. end
  13. end
  14. module Bar
  15. def bar; end
  16. end
  17. module Baz
  18. def baz; end
  19. end
  20. class Foo
  21. include Bar
  22. end
  23. class ClassExtTest < Test::Unit::TestCase
  24. def test_methods
  25. assert defined?(ClassB)
  26. assert defined?(ClassC)
  27. assert defined?(ClassD)
  28. ClassA.remove_subclasses
  29. assert !defined?(ClassB)
  30. assert !defined?(ClassC)
  31. assert !defined?(ClassD)
  32. end
  33. def test_subclasses_of
  34. assert_equal [ClassJ], Object.subclasses_of(ClassI)
  35. ClassI.remove_subclasses
  36. assert_equal [], Object.subclasses_of(ClassI)
  37. end
  38. def test_subclasses_of_should_find_nested_classes
  39. assert Object.subclasses_of(ClassK).include?(Nested::ClassL)
  40. end
  41. def test_subclasses_of_should_not_return_removed_classes
  42. # First create the removed class
  43. old_class = Nested.send :remove_const, :ClassL
  44. new_class = Class.new(ClassK)
  45. Nested.const_set :ClassL, new_class
  46. assert_equal "Nested::ClassL", new_class.name # Sanity check
  47. subclasses = Object.subclasses_of(ClassK)
  48. assert subclasses.include?(new_class)
  49. assert ! subclasses.include?(old_class)
  50. end
  51. end
  52. class ObjectTests < Test::Unit::TestCase
  53. def test_suppress_re_raises
  54. assert_raises(LoadError) { suppress(ArgumentError) {raise LoadError} }
  55. end
  56. def test_suppress_supresses
  57. suppress(ArgumentError) { raise ArgumentError }
  58. suppress(LoadError) { raise LoadError }
  59. suppress(LoadError, ArgumentError) { raise LoadError }
  60. suppress(LoadError, ArgumentError) { raise ArgumentError }
  61. end
  62. def test_extended_by
  63. foo = Foo.new
  64. assert foo.extended_by.include?(Bar)
  65. foo.extend(Baz)
  66. assert(([Bar, Baz] - foo.extended_by).empty?, "Expected Bar, Baz in #{foo.extended_by.inspect}")
  67. end
  68. def test_extend_with_included_modules_from
  69. foo, object = Foo.new, Object.new
  70. assert !object.respond_to?(:bar)
  71. assert !object.respond_to?(:baz)
  72. object.extend_with_included_modules_from(foo)
  73. assert object.respond_to?(:bar)
  74. assert !object.respond_to?(:baz)
  75. foo.extend(Baz)
  76. object.extend_with_included_modules_from(foo)
  77. assert object.respond_to?(:bar)
  78. assert object.respond_to?(:baz)
  79. end
  80. end
  81. class ObjectInstanceVariableTest < Test::Unit::TestCase
  82. def setup
  83. @source, @dest = Object.new, Object.new
  84. @source.instance_variable_set(:@bar, 'bar')
  85. @source.instance_variable_set(:@baz, 'baz')
  86. end
  87. def test_copy_instance_variables_from_without_explicit_excludes
  88. assert_equal [], @dest.instance_variables
  89. @dest.copy_instance_variables_from(@source)
  90. assert_equal %w(@bar @baz), @dest.instance_variables.sort
  91. %w(@bar @baz).each do |name|
  92. assert_equal @source.instance_variable_get(name).object_id,
  93. @dest.instance_variable_get(name).object_id
  94. end
  95. end
  96. def test_copy_instance_variables_from_with_explicit_excludes
  97. @dest.copy_instance_variables_from(@source, ['@baz'])
  98. assert !@dest.instance_variables.include?('@baz')
  99. assert_equal 'bar', @dest.instance_variable_get('@bar')
  100. end
  101. def test_copy_instance_variables_automatically_excludes_protected_instance_variables
  102. @source.instance_variable_set(:@quux, 'quux')
  103. class << @source
  104. def protected_instance_variables
  105. ['@bar', :@quux]
  106. end
  107. end
  108. @dest.copy_instance_variables_from(@source)
  109. assert !@dest.instance_variables.include?('@bar')
  110. assert !@dest.instance_variables.include?('@quux')
  111. assert_equal 'baz', @dest.instance_variable_get('@baz')
  112. end
  113. def test_instance_values
  114. object = Object.new
  115. object.instance_variable_set :@a, 1
  116. object.instance_variable_set :@b, 2
  117. assert_equal({'a' => 1, 'b' => 2}, object.instance_values)
  118. end
  119. def test_instance_exec_passes_arguments_to_block
  120. block = Proc.new { |value| [self, value] }
  121. assert_equal %w(hello goodbye), 'hello'.instance_exec('goodbye', &block)
  122. end
  123. end