mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Fix Module#dup to frozen module
Before this patch: $ bin/mruby -e 'p Module.new.freeze.dup.frozen?' #=> true After this patch (same as Ruby): $ bin/mruby -e 'p Module.new.freeze.dup.frozen?' #=> false
This commit is contained in:
@@ -400,6 +400,29 @@ end
|
||||
|
||||
# Not ISO specified
|
||||
|
||||
assert('Module#dup') do
|
||||
module TestModuleDup
|
||||
@@cvar = :cvar
|
||||
class << self
|
||||
attr_accessor :cattr
|
||||
def cmeth; :cmeth end
|
||||
end
|
||||
def cvar; @@cvar end
|
||||
def imeth; :imeth end
|
||||
self.cattr = :cattr
|
||||
end
|
||||
|
||||
m = TestModuleDup.dup
|
||||
o = Object.include(m).new
|
||||
assert_equal(:cattr, m.cattr)
|
||||
assert_equal(:cmeth, m.cmeth)
|
||||
assert_equal(:cvar, o.cvar)
|
||||
assert_equal(:imeth, o.imeth)
|
||||
assert_match("#<Module:0x*>", m.to_s)
|
||||
assert_not_predicate(m, :frozen?)
|
||||
assert_not_predicate(TestModuleDup.freeze.dup, :frozen?)
|
||||
end
|
||||
|
||||
assert('Module#define_method') do
|
||||
c = Class.new {
|
||||
define_method(:m1) { :ok }
|
||||
|
||||
Reference in New Issue
Block a user