1require_relative '../../spec_helper'
2require_relative 'fixtures/classes'
3
4describe "Module#included" do
5  it "is invoked when self is included in another module or class" do
6    begin
7      m = Module.new do
8        def self.included(o)
9          $included_by = o
10        end
11      end
12
13      c = Class.new { include m }
14
15      $included_by.should == c
16    ensure
17      $included_by = nil
18    end
19  end
20
21  it "allows extending self with the object into which it is being included" do
22    m = Module.new do
23      def self.included(o)
24        o.extend(self)
25      end
26
27      def test
28        :passed
29      end
30    end
31
32    c = Class.new{ include(m) }
33    c.test.should == :passed
34  end
35
36  it "is private in its default implementation" do
37    Module.should have_private_instance_method(:included)
38  end
39
40  it "works with super using a singleton class" do
41    ModuleSpecs::SingletonOnModuleCase::Bar.include ModuleSpecs::SingletonOnModuleCase::Foo
42    ModuleSpecs::SingletonOnModuleCase::Bar.included_called?.should == true
43  end
44end
45