spec/ruby_ext/module_spec.rb in ruby-ext-0.4.1 vs spec/ruby_ext/module_spec.rb in ruby-ext-0.4.2
- old
+ new
@@ -1,41 +1,60 @@
-require "#{File.dirname __FILE__}/../ruby_ext_spec_helper"
+require "#{File.dirname __FILE__}/helper"
require "ruby_ext/module"
+require 'ruby_ext/multiple_inheritance'
-
describe "Module" do
- class A
- class B
- class C
-
- end
- end
+ after :each do
+ remove_constants %w(
+ A X Y Z
+ InheritableAccessorForModule
+ InheritableAccessorForClass
+ InheritableAccessor
+ InheritableAccessorBase
+ InheritableAccessorA
+ InheritableAccessorB
+ )
end
it "Namespace" do
+ class A
+ class B
+ class C
+
+ end
+ end
+ end
+
File.namespace.should == nil
A::B::C.namespace.should == A::B
end
- class AnonymousClass
- class << self
- def anonymous_name
- self.name
- end
- end
- end
+ # class AnonymousClass
+ # class << self
+ # def anonymous_name
+ # self.name
+ # end
+ # end
+ # end
it "name" do
+ class A
+ class B
+ class C
+
+ end
+ end
+ end
+
A::B::C.name.should == "A::B::C"
end
- class X; end
- class Y < X; end
- class Z < Y; end
-
-
it "each_ancestor" do
+ class X; end
+ class Y < X; end
+ class Z < Y; end
+
list = []
Z.each_ancestor{|a| list << a}
list.should include Y
list.should include X
list.should_not include Z
@@ -50,10 +69,18 @@
list.should include Object
list.should include Kernel
end
it "each_namespace" do
+ class A
+ class B
+ class C
+
+ end
+ end
+ end
+
list = []
A::B::C.each_namespace{|n| list << n}
list.should == [A::B, A]
end
@@ -70,59 +97,64 @@
it "wrap_method" do
WrapMethod.wrap_method :method_name do |old, value|
send(old, value)*value
end
WrapMethod.new.method_name(10).should == 1000
- end
+ end
- module M
- def m_m; end
- module ClassMethods
- def cm_m; end
- end
- end
-
- class C
- inherit M
+ it "escape_method" do
+ Object.escape_method("><=?")
end
- it "inherit" do
- C.respond_to?(:cm_m).should be_true
- C.new.respond_to?(:m_m).should be_true
- end
-
- module M2
- include M
+ it "inheritable_accessor" do
+ module InheritableAccessorForModule
+ module ClassMethods
+ inheritable_accessor :callbacks, [:set_user]
+ inheritable_accessor :layout, "for_module"
+ end
+ end
- module ClassMethods
- def cm2_m; end
+ class InheritableAccessorForClass
+ class << self
+ inheritable_accessor :callbacks2, []
+ inheritable_accessor :layout2, "for_class"
+ end
+ callbacks2 << :set_user
end
+
+ class InheritableAccessor < InheritableAccessorForClass
+ inherit InheritableAccessorForModule
+ callbacks << :set_model
+ callbacks2 << :set_model
+ self.layout2 = "anoter_layout"
+ end
+
+ InheritableAccessorForClass.callbacks2.should == [:set_user]
+ InheritableAccessor.callbacks.should == [:set_user, :set_model]
+ InheritableAccessor.callbacks2.should == [:set_user, :set_model]
+
+ InheritableAccessorForClass.layout2.should == "for_class"
+ InheritableAccessor.layout2.should == "anoter_layout"
+ InheritableAccessor.layout.should == "for_module"
end
- class D
- inherit M2
- end
-
- it "should inherit all ancestors class methods" do
- D.respond_to?(:cm_m).should be_true
- D.respond_to?(:cm2_m).should be_true
- D.new.respond_to?(:m_m).should be_true
- end
-
- class C2
- inherit M
- end
-
- it "Shouldn't redefine ancestors class methods" do
- C2.respond_to?(:cm2_m).should be_false
- end
-
- it "inherited_instance_methods" do
- im = Set.instance_methods - Set.inherited_instance_methods
- im.should include("union")
- im.should_not include("object_id")
- end
-
- it "escape_method" do
- Object.escape_method("><=?")
+ it "inheritable_accessor (from error)" do
+ module InheritableAccessorBase
+ module ClassMethods
+ inheritable_accessor :callbacks, []
+ end
+ end
+
+ class InheritableAccessorA
+ inherit InheritableAccessorBase
+ callbacks << :a
+ end
+
+ class InheritableAccessorB
+ inherit InheritableAccessorBase
+ callbacks << :b
+ end
+
+ InheritableAccessorA.callbacks.should == [:a]
+ InheritableAccessorB.callbacks.should == [:b]
end
end
\ No newline at end of file