/projects/jruby-1.7.3/spec/bin/ruby/optional/capi/module_spec.rb
https://gitlab.com/essere.lab.public/qualitas.class-corpus · Ruby · 279 lines · 238 code · 39 blank · 2 comment · 25 complexity · f92c04f56a4cbf74e798c6b67438e443 MD5 · raw file
- require File.expand_path('../spec_helper', __FILE__)
- require File.expand_path('../fixtures/module', __FILE__)
- load_extension('module')
- describe "CApiModule" do
- before :each do
- @m = CApiModuleSpecs.new
- end
- describe "rb_define_global_const" do
- it "defines a constant on Object" do
- @m.rb_define_global_const("CApiModuleSpecsGlobalConst", 7)
- ::CApiModuleSpecsGlobalConst.should == 7
- Object.send :remove_const, :CApiModuleSpecsGlobalConst
- end
- end
- describe "rb_const_set given a symbol name and a value" do
- it "sets a new constant on a module" do
- @m.rb_const_set(CApiModuleSpecs::C, :W, 7)
- CApiModuleSpecs::C::W.should == 7
- end
- it "sets an existing constant's value" do
- @m.rb_const_set(CApiModuleSpecs::C, :Z, 8)
- CApiModuleSpecs::C::Z.should == 8
- end
- end
- describe "rb_define_module_under" do
- it "creates a new module inside the inner class" do
- mod = @m.rb_define_module_under(CApiModuleSpecs, "ModuleSpecsModuleUnder1")
- mod.should be_kind_of(Module)
- end
- it "sets the module name" do
- mod = @m.rb_define_module_under(CApiModuleSpecs, "ModuleSpecsModuleUnder2")
- mod.name.should == "CApiModuleSpecs::ModuleSpecsModuleUnder2"
- end
- it "defines a module for an existing Autoload with an extension" do
- compile_extension("module_under_autoload")
- CApiModuleSpecs::ModuleUnderAutoload.name.should == "CApiModuleSpecs::ModuleUnderAutoload"
- end
- it "defines a module for an existing Autoload with a ruby object" do
- compile_extension("module_under_autoload")
- CApiModuleSpecs::RubyUnderAutoload.name.should == "CApiModuleSpecs::RubyUnderAutoload"
- end
- end
- describe "rb_define_const given a String name and a value" do
- it "defines a new constant on a module" do
- @m.rb_define_const(CApiModuleSpecs::C, "V", 7)
- CApiModuleSpecs::C::V.should == 7
- end
- it "sets an existing constant's value" do
- @m.rb_define_const(CApiModuleSpecs::C, "Z", 9)
- CApiModuleSpecs::C::Z.should == 9
- end
- end
- describe "rb_const_defined" do
- # The fixture converts C boolean test to Ruby 'true' / 'false'
- it "returns C non-zero if a constant is defined" do
- @m.rb_const_defined(CApiModuleSpecs::A, :X).should be_true
- end
- it "returns C non-zero if a constant is defined in Object" do
- @m.rb_const_defined(CApiModuleSpecs::A, :Module).should be_true
- end
- end
- describe "rb_const_defined_at" do
- # The fixture converts C boolean test to Ruby 'true' / 'false'
- it "returns C non-zero if a constant is defined" do
- @m.rb_const_defined_at(CApiModuleSpecs::A, :X).should be_true
- end
- it "does not search in ancestors for the constant" do
- @m.rb_const_defined_at(CApiModuleSpecs::B, :X).should be_false
- end
- it "does not search in Object" do
- @m.rb_const_defined_at(CApiModuleSpecs::A, :Module).should be_false
- end
- end
- describe "rb_const_get" do
- it "returns a constant defined in the module" do
- @m.rb_const_get(CApiModuleSpecs::A, :X).should == 1
- end
- it "returns a constant defined at toplevel" do
- @m.rb_const_get(CApiModuleSpecs::A, :Fixnum).should == Fixnum
- end
- it "returns a constant defined in a superclass" do
- @m.rb_const_get_from(CApiModuleSpecs::B, :X).should == 1
- end
- it "calls #const_missing if the constant is not defined in the class or ancestors" do
- CApiModuleSpecs::A.should_receive(:const_missing).with(:CApiModuleSpecsUndefined)
- @m.rb_const_get_from(CApiModuleSpecs::A, :CApiModuleSpecsUndefined)
- end
- end
- describe "rb_const_get_from" do
- it "returns a constant defined in the module" do
- @m.rb_const_get_from(CApiModuleSpecs::B, :Y).should == 2
- end
- it "returns a constant defined in a superclass" do
- @m.rb_const_get_from(CApiModuleSpecs::B, :X).should == 1
- end
- it "calls #const_missing if the constant is not defined in the class or ancestors" do
- CApiModuleSpecs::M.should_receive(:const_missing).with(:Fixnum)
- @m.rb_const_get_from(CApiModuleSpecs::M, :Fixnum)
- end
- end
- describe "rb_const_get_at" do
- it "returns a constant defined in the module" do
- @m.rb_const_get_at(CApiModuleSpecs::B, :Y).should == 2
- end
- it "calls #const_missing if the constant is not defined in the module" do
- CApiModuleSpecs::B.should_receive(:const_missing).with(:X)
- @m.rb_const_get_at(CApiModuleSpecs::B, :X)
- end
- end
- describe "rb_define_alias" do
- it "defines an alias for an existing method" do
- cls = Class.new do
- def method_to_be_aliased
- :method_to_be_aliased
- end
- end
- @m.rb_define_alias cls, "method_alias", "method_to_be_aliased"
- cls.new.method_alias.should == :method_to_be_aliased
- end
- end
- describe "rb_alias" do
- it "defines an alias for an existing method" do
- cls = Class.new do
- def method_to_be_aliased
- :method_to_be_aliased
- end
- end
- @m.rb_alias cls, :method_alias, :method_to_be_aliased
- cls.new.method_alias.should == :method_to_be_aliased
- end
- end
- describe "rb_define_global_function" do
- it "defines a method on Object" do
- @m.rb_define_global_function("module_specs_global_function")
- Kernel.should have_method(:module_specs_global_function)
- module_specs_global_function.should == :test_method
- end
- end
- describe "rb_define_method" do
- it "defines a method on a class" do
- cls = Class.new
- @m.rb_define_method(cls, "test_method")
- cls.should have_instance_method(:test_method)
- cls.new.test_method.should == :test_method
- end
- it "defines a method on a module" do
- mod = Module.new
- @m.rb_define_method(mod, "test_method")
- mod.should have_instance_method(:test_method)
- end
- end
- describe "rb_define_module_function" do
- before :each do
- @mod = Module.new
- @m.rb_define_module_function @mod, "test_module_function"
- end
- it "defines a module function" do
- @mod.test_module_function.should == :test_method
- end
- it "defines a private instance method" do
- cls = Class.new
- cls.send :include, @mod
- cls.should have_private_instance_method(:test_module_function)
- end
- end
- describe "rb_define_private_method" do
- it "defines a private method on a class" do
- cls = Class.new
- @m.rb_define_private_method(cls, "test_method")
- cls.should have_private_instance_method(:test_method)
- cls.new.send(:test_method).should == :test_method
- end
- it "defines a private method on a module" do
- mod = Module.new
- @m.rb_define_private_method(mod, "test_method")
- mod.should have_private_instance_method(:test_method)
- end
- end
- describe "rb_define_protected_method" do
- it "defines a protected method on a class" do
- cls = Class.new
- @m.rb_define_protected_method(cls, "test_method")
- cls.should have_protected_instance_method(:test_method)
- cls.new.send(:test_method).should == :test_method
- end
- it "defines a protected method on a module" do
- mod = Module.new
- @m.rb_define_protected_method(mod, "test_method")
- mod.should have_protected_instance_method(:test_method)
- end
- end
- describe "rb_define_singleton_method" do
- it "defines a method on the singleton class" do
- cls = Class.new
- a = cls.new
- @m.rb_define_singleton_method a, "module_specs_singleton_method"
- a.module_specs_singleton_method.should == :test_method
- lambda { cls.new.module_specs_singleton_method }.should raise_error(NoMethodError)
- end
- end
- describe "rb_undef_method" do
- it "undef'ines a method on a class" do
- cls = Class.new do
- def ruby_test_method
- :ruby_test_method
- end
- end
- cls.new.ruby_test_method.should == :ruby_test_method
- @m.rb_undef_method cls, "ruby_test_method"
- cls.should_not have_instance_method(:ruby_test_method)
- end
- end
- describe "rb_undef" do
- it "undef'ines a method on a class" do
- cls = Class.new do
- def ruby_test_method
- :ruby_test_method
- end
- end
- cls.new.ruby_test_method.should == :ruby_test_method
- @m.rb_undef cls, :ruby_test_method
- cls.should_not have_instance_method(:ruby_test_method)
- end
- end
- describe "rb_class2name" do
- it "returns the module name" do
- @m.rb_class2name(CApiModuleSpecs::M).should == "CApiModuleSpecs::M"
- end
- end
- end