1require_relative '../../spec_helper'
2require_relative 'fixtures/classes'
3
4describe "Module#>=" do
5  it "returns true if self is a superclass of, the same as or included by given module" do
6    (ModuleSpecs::Parent >= ModuleSpecs::Child).should == true
7    (ModuleSpecs::Basic  >= ModuleSpecs::Child).should == true
8    (ModuleSpecs::Super  >= ModuleSpecs::Child).should == true
9    (ModuleSpecs::Basic  >= ModuleSpecs::Super).should == true
10    (ModuleSpecs::Child  >= ModuleSpecs::Child).should == true
11    (ModuleSpecs::Parent >= ModuleSpecs::Parent).should == true
12    (ModuleSpecs::Basic  >= ModuleSpecs::Basic).should == true
13    (ModuleSpecs::Super  >= ModuleSpecs::Super).should == true
14  end
15
16  it "returns nil if self is not related to the given module" do
17    (ModuleSpecs::Parent >= ModuleSpecs::Basic).should == nil
18    (ModuleSpecs::Parent >= ModuleSpecs::Super).should == nil
19    (ModuleSpecs::Basic  >= ModuleSpecs::Parent).should == nil
20    (ModuleSpecs::Super  >= ModuleSpecs::Parent).should == nil
21  end
22
23  it "returns false if self is a subclass of or includes the given module" do
24    (ModuleSpecs::Child >= ModuleSpecs::Parent).should == false
25    (ModuleSpecs::Child >= ModuleSpecs::Basic).should == false
26    (ModuleSpecs::Child >= ModuleSpecs::Super).should == false
27    (ModuleSpecs::Super >= ModuleSpecs::Basic).should == false
28  end
29
30  it "raises a TypeError if the argument is not a class/module" do
31    lambda { ModuleSpecs::Parent >= mock('x') }.should raise_error(TypeError)
32  end
33end
34