aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test/core_ext
diff options
context:
space:
mode:
Diffstat (limited to 'activesupport/test/core_ext')
-rw-r--r--activesupport/test/core_ext/class/attribute_accessor_test.rb31
-rw-r--r--activesupport/test/core_ext/class/class_inheritable_attributes_test.rb208
-rw-r--r--activesupport/test/core_ext/module/attr_accessor_with_default.rb30
-rw-r--r--activesupport/test/core_ext/module/attribute_accessor_test.rb33
4 files changed, 302 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
diff --git a/activesupport/test/core_ext/module/attr_accessor_with_default.rb b/activesupport/test/core_ext/module/attr_accessor_with_default.rb
new file mode 100644
index 0000000000..8ae52ad17a
--- /dev/null
+++ b/activesupport/test/core_ext/module/attr_accessor_with_default.rb
@@ -0,0 +1,30 @@
+require File.dirname(__FILE__) + '/../../abstract_unit'
+
+class AttrWithDefaultTest < Test::Unit::TestCase
+ def setup
+ @target = Class.new do
+ def helper
+ 'helper'
+ end
+ end
+ @instance = @target.new
+ end
+
+ def test_default_arg
+ @target.attr_accessor_with_default :foo, :bar
+ assert_equal(:bar, @instance.foo)
+ @instance.foo = nil
+ assert_nil(@instance.foo)
+ end
+
+ def test_default_proc
+ @target.attr_accessor_with_default(:foo) {helper.upcase}
+ assert_equal('HELPER', @instance.foo)
+ @instance.foo = nil
+ assert_nil(@instance.foo)
+ end
+
+ def test_invalid_args
+ assert_raise(RuntimeError) {@target.attr_accessor_with_default :foo}
+ end
+end \ No newline at end of file
diff --git a/activesupport/test/core_ext/module/attribute_accessor_test.rb b/activesupport/test/core_ext/module/attribute_accessor_test.rb
new file mode 100644
index 0000000000..c3f6575f84
--- /dev/null
+++ b/activesupport/test/core_ext/module/attribute_accessor_test.rb
@@ -0,0 +1,33 @@
+require File.dirname(__FILE__) + '/../../abstract_unit'
+
+class ModuleAttributeAccessorTest < Test::Unit::TestCase
+ def setup
+ @module = Module.new do
+ mattr_accessor :foo
+ mattr_accessor :bar, :instance_writer => false
+ end
+ @class = Class.new
+ @class.send :include, @module
+ @object = @class.new
+ end
+
+ def test_should_use_mattr_default
+ assert_nil @module.foo
+ assert_nil @object.foo
+ end
+
+ def test_should_set_mattr_value
+ @module.foo = :test
+ assert_equal :test, @object.foo
+
+ @object.foo = :test2
+ assert_equal :test2, @module.foo
+ end
+
+ def test_should_not_create_instance_writer
+ assert @module.respond_to?(:foo)
+ assert @module.respond_to?(:foo=)
+ assert @object.respond_to?(:bar)
+ assert !@object.respond_to?(:bar=)
+ end
+end \ No newline at end of file