diff options
author | Rick Olson <technoweenie@gmail.com> | 2007-01-28 01:18:51 +0000 |
---|---|---|
committer | Rick Olson <technoweenie@gmail.com> | 2007-01-28 01:18:51 +0000 |
commit | 5e85a1c7f835249d276d6868a9520f803be46159 (patch) | |
tree | a928f33feb1e2be4ba7f21cfb5994f839cb75349 /activesupport/test/core_ext/class | |
parent | eca93d0970925a305c6ccc620df62aeb385938dc (diff) | |
download | rails-5e85a1c7f835249d276d6868a9520f803be46159.tar.gz rails-5e85a1c7f835249d276d6868a9520f803be46159.tar.bz2 rails-5e85a1c7f835249d276d6868a9520f803be46159.zip |
Added :instance_writer option to #mattr_writer/accessor, #cattr_writer/accessor, and #class_inheritable_writer to skip the creation of the instance writer. [Rick]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6050 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activesupport/test/core_ext/class')
-rw-r--r-- | activesupport/test/core_ext/class/attribute_accessor_test.rb | 31 | ||||
-rw-r--r-- | activesupport/test/core_ext/class/class_inheritable_attributes_test.rb | 208 |
2 files changed, 239 insertions, 0 deletions
diff --git a/activesupport/test/core_ext/class/attribute_accessor_test.rb b/activesupport/test/core_ext/class/attribute_accessor_test.rb new file mode 100644 index 0000000000..8104c9ce88 --- /dev/null +++ b/activesupport/test/core_ext/class/attribute_accessor_test.rb @@ -0,0 +1,31 @@ +require File.dirname(__FILE__) + '/../../abstract_unit' + +class ClassAttributeAccessorTest < Test::Unit::TestCase + def setup + @class = Class.new do + cattr_accessor :foo + cattr_accessor :bar, :instance_writer => false + end + @object = @class.new + end + + def test_should_use_mattr_default + assert_nil @class.foo + assert_nil @object.foo + end + + def test_should_set_mattr_value + @class.foo = :test + assert_equal :test, @object.foo + + @object.foo = :test2 + assert_equal :test2, @class.foo + end + + def test_should_not_create_instance_writer + assert @class.respond_to?(:foo) + assert @class.respond_to?(:foo=) + assert @object.respond_to?(:bar) + assert !@object.respond_to?(:bar=) + end +end
\ No newline at end of file diff --git a/activesupport/test/core_ext/class/class_inheritable_attributes_test.rb b/activesupport/test/core_ext/class/class_inheritable_attributes_test.rb new file mode 100644 index 0000000000..8b11e680af --- /dev/null +++ b/activesupport/test/core_ext/class/class_inheritable_attributes_test.rb @@ -0,0 +1,208 @@ +require File.dirname(__FILE__) + '/../../abstract_unit' + +class ClassInheritableAttributesTest < Test::Unit::TestCase + def setup + @klass = Class.new + end + + def test_reader_declaration + assert_nothing_raised do + @klass.class_inheritable_reader :a + assert_respond_to @klass, :a + assert_respond_to @klass.new, :a + end + end + + def test_writer_declaration + assert_nothing_raised do + @klass.class_inheritable_writer :a + assert_respond_to @klass, :a= + assert_respond_to @klass.new, :a= + end + end + + def test_writer_declaration_without_instance_writer + assert_nothing_raised do + @klass.class_inheritable_writer :a, :instance_writer => false + assert_respond_to @klass, :a= + assert !@klass.new.respond_to?(:a=) + end + end + + def test_accessor_declaration + assert_nothing_raised do + @klass.class_inheritable_accessor :a + assert_respond_to @klass, :a + assert_respond_to @klass.new, :a + assert_respond_to @klass, :a= + assert_respond_to @klass.new, :a= + end + end + + def test_accessor_declaration_without_instance_writer + assert_nothing_raised do + @klass.class_inheritable_accessor :a, :instance_writer => false + assert_respond_to @klass, :a + assert_respond_to @klass.new, :a + assert_respond_to @klass, :a= + assert !@klass.new.respond_to?(:a=) + end + end + + def test_array_declaration + assert_nothing_raised do + @klass.class_inheritable_array :a + assert_respond_to @klass, :a + assert_respond_to @klass.new, :a + assert_respond_to @klass, :a= + assert_respond_to @klass.new, :a= + end + end + + def test_array_declaration_without_instance_writer + assert_nothing_raised do + @klass.class_inheritable_array :a, :instance_writer => false + assert_respond_to @klass, :a + assert_respond_to @klass.new, :a + assert_respond_to @klass, :a= + assert !@klass.new.respond_to?(:a=) + end + end + + def test_hash_declaration + assert_nothing_raised do + @klass.class_inheritable_hash :a + assert_respond_to @klass, :a + assert_respond_to @klass.new, :a + assert_respond_to @klass, :a= + assert_respond_to @klass.new, :a= + end + end + + def test_hash_declaration_without_instance_writer + assert_nothing_raised do + @klass.class_inheritable_hash :a, :instance_writer => false + assert_respond_to @klass, :a + assert_respond_to @klass.new, :a + assert_respond_to @klass, :a= + assert !@klass.new.respond_to?(:a=) + end + end + + def test_reader + @klass.class_inheritable_reader :a + assert_nil @klass.a + assert_nil @klass.new.a + + @klass.send(:write_inheritable_attribute, :a, 'a') + + assert_equal 'a', @klass.a + assert_equal 'a', @klass.new.a + assert_equal @klass.a, @klass.new.a + assert_equal @klass.a.object_id, @klass.new.a.object_id + end + + def test_writer + @klass.class_inheritable_reader :a + @klass.class_inheritable_writer :a + + assert_nil @klass.a + assert_nil @klass.new.a + + @klass.a = 'a' + assert_equal 'a', @klass.a + @klass.new.a = 'A' + assert_equal 'A', @klass.a + end + + def test_array + @klass.class_inheritable_array :a + + assert_nil @klass.a + assert_nil @klass.new.a + + @klass.a = %w(a b c) + assert_equal %w(a b c), @klass.a + assert_equal %w(a b c), @klass.new.a + + @klass.new.a = %w(A B C) + assert_equal %w(a b c A B C), @klass.a + assert_equal %w(a b c A B C), @klass.new.a + end + + def test_hash + @klass.class_inheritable_hash :a + + assert_nil @klass.a + assert_nil @klass.new.a + + @klass.a = { :a => 'a' } + assert_equal({ :a => 'a' }, @klass.a) + assert_equal({ :a => 'a' }, @klass.new.a) + + @klass.new.a = { :b => 'b' } + assert_equal({ :a => 'a', :b => 'b' }, @klass.a) + assert_equal({ :a => 'a', :b => 'b' }, @klass.new.a) + end + + def test_inheritance + @klass.class_inheritable_accessor :a + @klass.a = 'a' + + @sub = eval("class FlogMe < @klass; end; FlogMe") + + @klass.class_inheritable_accessor :b + + assert_respond_to @sub, :a + assert_respond_to @sub, :b + assert_equal @klass.a, @sub.a + assert_equal @klass.b, @sub.b + assert_equal 'a', @sub.a + assert_nil @sub.b + + @klass.b = 'b' + assert_not_equal @klass.b, @sub.b + assert_equal 'b', @klass.b + assert_nil @sub.b + + @sub.a = 'A' + assert_not_equal @klass.a, @sub.a + assert_equal 'a', @klass.a + assert_equal 'A', @sub.a + + @sub.b = 'B' + assert_not_equal @klass.b, @sub.b + assert_equal 'b', @klass.b + assert_equal 'B', @sub.b + end + + def test_array_inheritance + @klass.class_inheritable_accessor :a + @klass.a = [] + + @sub = eval("class SubbyArray < @klass; end; SubbyArray") + + assert_equal [], @klass.a + assert_equal [], @sub.a + + @sub.a << :first + + assert_equal [:first], @sub.a + assert_equal [], @klass.a + end + + def test_array_inheritance_ + @klass.class_inheritable_accessor :a + @klass.a = {} + + @sub = eval("class SubbyHash < @klass; end; SubbyHash") + + assert_equal Hash.new, @klass.a + assert_equal Hash.new, @sub.a + + @sub.a[:first] = :first + + assert_equal 1, @sub.a.keys.size + assert_equal 0, @klass.a.keys.size + end +end |