@@ -46,7 +46,14 @@ class ClassSpecsKeywordWithSemicolon; end
4646 -> {
4747 class ClassSpecsNumber
4848 end
49- } . should raise_error ( TypeError )
49+ } . should raise_error ( TypeError , /\A ClassSpecsNumber is not a class/ )
50+ end
51+
52+ it "raises TypeError if constant given as class name exists and is a Module but not a Class" do
53+ -> {
54+ class ClassSpecs
55+ end
56+ } . should raise_error ( TypeError , /\A ClassSpecs is not a class/ )
5057 end
5158
5259 # test case known to be detecting bugs (JRuby, MRI)
@@ -346,6 +353,39 @@ def self.m
346353 ClassSpecs ::M . m . should == 1
347354 ClassSpecs ::L . singleton_class . send ( :remove_method , :m )
348355 end
356+
357+ it "does not reopen a class included in Object" do
358+ ruby_exe ( <<~RUBY ) . should == "false"
359+ module IncludedInObject
360+ class IncludedClass
361+ end
362+ end
363+ class Object
364+ include IncludedInObject
365+ end
366+ class IncludedClass
367+ end
368+ print IncludedInObject::IncludedClass == Object::IncludedClass
369+ RUBY
370+ end
371+
372+ it "does not reopen a class included in non-Object modules" do
373+ ruby_exe ( <<~RUBY ) . should == "false/false"
374+ module Included
375+ module IncludedClass; end
376+ end
377+ module M
378+ include Included
379+ module IncludedClass; end
380+ end
381+ class C
382+ include Included
383+ module IncludedClass; end
384+ end
385+ print Included::IncludedClass == M::IncludedClass, "/",
386+ Included::IncludedClass == C::IncludedClass
387+ RUBY
388+ end
349389end
350390
351391describe "class provides hooks" do
0 commit comments