public void DummySingletons2() {
Engine.Execute(SingletonHelpers);
TestOutput(@"
class MetaModule < Module
end
MM = MetaModule.new
[Object, Module, Class, MetaModule].each do |c|
s = class << c; self; end
c.send(:define_method, :f) { c.name }
s.send(:define_method, :f) { 'S(' + c.name + ')' }
end
[
MM,
module M; self; end,
Module,
MetaModule
].each do |c|
get_singletons(c, 2).each do |s| # the results differ from MRI for other values than 2, it seems like a bug in MRI
printf '%-30s %s', s, s.f
puts
end
puts
end
", @"
MM MetaModule
#<Class:MM> S(MetaModule)
#<Class:#<Class:MM>> S(MetaModule)
M Module
#<Class:M> S(Module)
#<Class:#<Class:M>> S(Module)
Module S(Module)
#<Class:Module> S(Class)
#<Class:#<Class:Module>> S(Class)
MetaModule S(MetaModule)
#<Class:MetaModule> S(Class)
#<Class:#<Class:MetaModule>> S(Class)
");
}