File tree Expand file tree Collapse file tree 1 file changed +58
-0
lines changed Expand file tree Collapse file tree 1 file changed +58
-0
lines changed Original file line number Diff line number Diff line change @@ -141,6 +141,52 @@ def self.bar
141141 super + 'z'
142142 end
143143 end
144+
145+ module M1
146+ def chain ( out )
147+ out << 'M1'
148+ end
149+ end
150+
151+ module M2
152+ def chain ( out )
153+ out << 'M2'
154+ super out
155+ end
156+ end
157+
158+ module M3
159+ def chain ( out )
160+ out << 'M3'
161+ super out
162+ end
163+ end
164+
165+ class C1
166+ include M1
167+ include M2
168+ include M3
169+ end
170+
171+ class C2
172+ include M1
173+ include M2
174+
175+ def chain ( out )
176+ out << 'C2'
177+ super out
178+ end
179+ end
180+
181+ class C3
182+ def chain ( out )
183+ out << 'C3'
184+ end
185+ end
186+
187+ class C4 < C3
188+ include M2
189+ end
144190end
145191
146192describe "Super chains" do
@@ -151,4 +197,16 @@ def self.bar
151197 it "searches entire class hierarchys for class methods" do
152198 OpalSuperSpecs ::C . bar . should == 'xyz'
153199 end
200+
201+ it "calls methods for every module included in a class" do
202+ OpalSuperSpecs ::C1 . new . chain ( [ ] ) . should == [ 'M3' , 'M2' , 'M1' ]
203+ end
204+
205+ it "calls method defined in class before modules" do
206+ OpalSuperSpecs ::C2 . new . chain ( [ ] ) . should == [ 'C2' , 'M2' , 'M1' ]
207+ end
208+
209+ it "calls method defined on superclass after modules included by child" do
210+ OpalSuperSpecs ::C4 . new . chain ( [ ] ) . should == [ 'M2' , 'C3' ]
211+ end
154212end
You can’t perform that action at this time.
0 commit comments