Skip to content

Commit 59fde73

Browse files
committed
Add better test coverage for super() inside module chains
1 parent 1a74c56 commit 59fde73

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

spec/opal/language/super_spec.rb

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff 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
144190
end
145191

146192
describe "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
154212
end

0 commit comments

Comments
 (0)