summaryrefslogtreecommitdiffhomepage
path: root/test/t/class.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/t/class.rb')
-rw-r--r--test/t/class.rb196
1 files changed, 174 insertions, 22 deletions
diff --git a/test/t/class.rb b/test/t/class.rb
index 9ba490d93..bea20ee24 100644
--- a/test/t/class.rb
+++ b/test/t/class.rb
@@ -2,14 +2,22 @@
# Class ISO Test
assert('Class', '15.2.3') do
- assert_equal(Class.class, Class)
+ assert_equal(Class, Class.class)
end
assert('Class superclass', '15.2.3.2') do
- assert_equal(Class.superclass, Module)
+ assert_equal(Module, Class.superclass)
end
-# Class#initialize '15.2.3.3.1' is tested in Class#new
+assert('Class#initialize', '15.2.3.3.1') do
+ c = Class.new do
+ def test
+ :test
+ end
+ end.new
+
+ assert_equal(c.test, :test)
+end
assert('Class#initialize_copy', '15.2.3.3.2') do
class TestClass
@@ -52,48 +60,48 @@ assert('Class#new', '15.2.3.3.3') do
def result; @result; end
end
- assert_equal(TestClass.new(:arg).result, :only_args)
+ assert_equal(:only_args, TestClass.new(:arg).result)
# with block doesn't work yet
end
assert('Class#superclass', '15.2.3.3.4') do
class SubClass < String; end
- assert_equal(SubClass.superclass, String)
+ assert_equal(String, SubClass.superclass)
end
# Not ISO specified
assert('Class 1') do
class C1; end
- assert_equal(C1.class, Class)
+ assert_equal(Class, C1.class)
end
assert('Class 2') do
class C2; end
- assert_equal(C2.new.class, C2)
+ assert_equal(C2, C2.new.class)
end
assert('Class 3') do
class C3; end
- assert_equal(C3.new.class.class, Class)
+ assert_equal(Class, C3.new.class.class)
end
assert('Class 4') do
class C4_A; end
class C4 < C4_A; end
- assert_equal(C4.class, Class)
+ assert_equal(Class, C4.class)
end
assert('Class 5') do
class C5_A; end
class C5 < C5_A; end
- assert_equal(C5.new.class, C5)
+ assert_equal(C5, C5.new.class)
end
assert('Class 6') do
class C6_A; end
class C6 < C6_A; end
- assert_equal(C6.new.class.class, Class)
+ assert_equal(Class, C6.new.class.class)
end
assert('Class 7') do
@@ -129,13 +137,13 @@ end
assert('Class Module 1') do
module M; end
- assert_equal(M.class, Module)
+ assert_equal(Module, M.class)
end
assert('Class Module 2') do
module M; end
class C; include M; end
- assert_equal(C.new.class, C)
+ assert_equal(C, C.new.class)
end
# nested class
@@ -148,13 +156,13 @@ end
assert('Class Nested 2') do
class A; end
class A::B; end
- assert_equal(A::B.new.class, A::B)
+ assert_equal(A::B, A::B.new.class)
end
assert('Class Nested 3') do
class A; end
class A::B; end
- assert_equal(A::B.new.class.class, Class)
+ assert_equal(Class, A::B.new.class.class)
end
assert('Class Nested 4') do
@@ -168,14 +176,14 @@ assert('Class Nested 5') do
class A; end
class A::B; end
class A::B::C; end
- assert_equal(A::B::C.class, Class)
+ assert_equal(Class, A::B::C.class)
end
assert('Class Nested 6') do
class A; end
class A::B; end
class A::B::C; end
- assert_equal(A::B::C.new.class, A::B::C)
+ assert_equal(A::B::C, A::B::C.new.class)
end
assert('Class Nested 7') do
@@ -189,13 +197,13 @@ assert('Class Nested 8') do
class A; end
class A::B; end
class A::B2 < A::B; end
- assert_equal(A::B2.class, Class)
+ assert_equal(Class, A::B2.class)
end
assert('Class Colon 1') do
class A; end
A::C = 1
- assert_equal(A::C, 1)
+ assert_equal(1, A::C)
end
assert('Class Colon 2') do
@@ -205,15 +213,159 @@ end
assert('Class Colon 3') do
class A; class ::C; end end
- assert_equal(C.class, Class)
+ assert_equal(Class, C.class)
end
assert('Class Dup 1') do
class C; end
- assert_equal(C.dup.class, Class)
+ assert_equal(Class, C.dup.class)
end
assert('Class Dup 2') do
module M; end
- assert_equal(M.dup.class, Module)
+ assert_equal(Module, M.dup.class)
+end
+
+assert('Class new') do
+ assert_equal(Class, Class.new.class)
+end
+
+assert('class to return the last value') do
+ m = class C; :m end
+ assert_equal(m, :m)
+end
+
+assert('raise when superclass is not a class') do
+ module FirstModule; end
+ assert_raise(TypeError, 'should raise TypeError') do
+ class FirstClass < FirstModule; end
+ end
+
+ class SecondClass; end
+ assert_raise(TypeError, 'should raise TypeError') do
+ class SecondClass < false; end
+ end
+
+ class ThirdClass; end
+ assert_raise(TypeError, 'should raise TypeError') do
+ class ThirdClass < ThirdClass; end
+ end
+end
+
+assert('Class#inherited') do
+ class Foo
+ @@subclass_name = nil
+ def self.inherited(subclass)
+ @@subclass_name = subclass
+ end
+ def self.subclass_name
+ @@subclass_name
+ end
+ end
+
+ assert_equal(nil, Foo.subclass_name)
+
+ class Bar < Foo
+ end
+
+ assert_equal(Bar, Foo.subclass_name)
+
+ class Baz < Bar
+ end
+
+ assert_equal(Baz, Foo.subclass_name)
+end
+
+assert('singleton tests') do
+ module FooMod
+ def run_foo_mod
+ 100
+ end
+ end
+
+ bar = String.new
+
+ baz = class << bar
+ extend FooMod
+ def self.run_baz
+ 200
+ end
+ end
+
+ assert_false baz.singleton_methods.include? :run_foo_mod
+ assert_false baz.singleton_methods.include? :run_baz
+
+ assert_raise(NoMethodError, 'should raise NoMethodError') do
+ baz.run_foo_mod
+ end
+ assert_raise(NoMethodError, 'should raise NoMethodError') do
+ baz.run_baz
+ end
+
+ assert_raise(NoMethodError, 'should raise NoMethodError') do
+ bar.run_foo_mod
+ end
+ assert_raise(NoMethodError, 'should raise NoMethodError') do
+ bar.run_baz
+ end
+
+ baz = class << bar
+ extend FooMod
+ def self.run_baz
+ 300
+ end
+ self
+ end
+
+ assert_true baz.singleton_methods.include? :run_baz
+ assert_true baz.singleton_methods.include? :run_foo_mod
+ assert_equal 100, baz.run_foo_mod
+ assert_equal 300, baz.run_baz
+
+ assert_raise(NoMethodError, 'should raise NoMethodError') do
+ bar.run_foo_mod
+ end
+ assert_raise(NoMethodError, 'should raise NoMethodError') do
+ bar.run_baz
+ end
+
+ fv = false
+ class << fv
+ def self.run_false
+ 5
+ end
+ end
+
+ nv = nil
+ class << nv
+ def self.run_nil
+ 6
+ end
+ end
+
+ tv = true
+ class << tv
+ def self.run_nil
+ 7
+ end
+ end
+
+ assert_raise(TypeError, 'should raise TypeError') do
+ num = 1.0
+ class << num
+ def self.run_nil
+ 7
+ end
+ end
+ end
+end
+
+assert('clone Class') do
+ class Foo
+ def func
+ true
+ end
+ end
+
+ Foo.clone.new.func
end