Updated MSpec source to a54f23d0.
[rbx.git] / spec / frozen / 1.8 / language / private_spec.rb
blobd9651d05dc9a1f80d68949ffcda0b9a08bafe38b
1 require File.dirname(__FILE__) + '/../spec_helper'
2 require File.dirname(__FILE__) + '/fixtures/private'
4 describe "The private keyword" do
5   it "marks following methods as being private" do
6     a = Private::A.new
7     a.methods.should_not include("bar")
8     lambda { a.bar }.should raise_error(NoMethodError)
10     b = Private::B.new
11     b.methods.should_not include("bar")
12     lambda { b.bar }.should raise_error(NoMethodError)
13   end
15   it "is overridden when a new class is opened" do
16     c = Private::B::C.new
17     c.methods.should include("baz")
18     c.baz
19     Private::B::public_class_method1.should == 1
20     Private::B::public_class_method2.should == 2
21     lambda { Private::B::private_class_method1 }.should raise_error(NoMethodError)
22   end
24   it "is no longer in effect when the class is closed" do
25     b = Private::B.new
26     b.methods.should include("foo")
27     b.foo
28   end
30   it "changes visibility of previously called method" do
31     f = Private::F.new
32     f.foo
33     module Private
34       class F
35         private :foo
36       end
37     end
38     lambda { f.foo }.should raise_error(NoMethodError)
39   end
41   it "changes visiblity of previously called methods with same send/call site" do
42     g = Private::G.new
43     lambda {
44       2.times do
45         g.foo
46         module Private
47           class G
48             private :foo
49           end
50         end
51       end
52     }.should raise_error(NoMethodError)
53   end
54 end