File: test_access_control.rb

package info (click to toggle)
jruby 1.7.26-1%2Bdeb9u1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 84,572 kB
  • sloc: ruby: 669,910; java: 253,056; xml: 35,152; ansic: 9,187; yacc: 7,267; cpp: 5,244; sh: 1,036; makefile: 345; jsp: 48; tcl: 40
file content (121 lines) | stat: -rw-r--r-- 2,193 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
require 'test/unit'


class TestAccessControl < Test::Unit::TestCase

  module M1
    def m1private
      1
    end
    def m1protected
      2
    end
    def m1public
      3
    end
    private :m1private
    protected :m1protected
  end

  module M2
    def m2private
      1
    end
    def m2protected
      2
    end
    def m2public
      3
    end
    private :m2private
    protected :m2protected
    module_function :m2private, :m2protected, :m2public
  end

  class C1
    def c1private
      1
    end
    def c1protected
      2
    end
    def c1public
      3
    end
    private :c1private
    protected :c1protected
  end
   
  class C2 < C1
    def c2private
      c1private
    end
    def c2protected
      c1protected
    end
    def c2public
      c1public
    end
  end

  class C3 < C1
    def c3private
      self.c1private
    end
    def c3protected
      self.c1protected
    end
    def c3public
      self.c1public
    end
  end

  class C4
    include M1
  end

  class C5
    include M2
  end

  # --------------------------------------------------------

  def test_class_access

    # access via subclass
    c2 = C2.new
    assert_raise(NoMethodError) { c2.c1private }
    assert_raise(NoMethodError) { c2.c1protected }
    assert_equal(3, c2.c1public)
    assert_equal(1, c2.c2private)
    assert_equal(2, c2.c2protected)
    assert_equal(3, c2.c2public)

    # access via subclass with explicit 'self'
    c3 = C3.new
    assert_raise(NoMethodError) { c3.c3private }
    assert_equal(2, c3.c3protected)
    assert_equal(3, c3.c3public)
  end

  # --------------------------------------------------------

  def test_included_module
    c4 = C4.new
    assert_raise(NoMethodError) { c4.m1private }
    assert_raise(NoMethodError) { c4.m1protected }
    assert_equal(3, c4.m1public)
  end

  # --------------------------------------------------------

  def test_module_functions
    assert_equal(1, M2.m2private)
    assert_equal(2, M2.m2protected)
    assert_equal(3, M2.m2public)
    c5 = C5.new
    assert_raise(NoMethodError) { c5.m2private }
    assert_raise(NoMethodError) { c5.m2protected }
    assert_raise(NoMethodError) { c5.m2public }
  end
end