From cb10b927836fcc56fc40e677497cc303e79625c5 Mon Sep 17 00:00:00 2001 From: Daniel Bovensiepen Date: Sat, 2 Jun 2012 01:33:04 +0800 Subject: Add Test Case for issue #210 --- test/t/module.rb | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'test/t/module.rb') diff --git a/test/t/module.rb b/test/t/module.rb index 854be75a5..a5331e96d 100644 --- a/test/t/module.rb +++ b/test/t/module.rb @@ -5,6 +5,53 @@ assert('Module', '15.2.2') do Module.class == Class end +assert('Module#const_defined?', '15.2.2.4.20') do + module Test4ConstDefined + Const4Test4ConstDefined = true + end + + Test4ConstDefined.const_defined?(:Const4Test4ConstDefined) and + not Test4ConstDefined.const_defined?(:NotExisting) +end + +assert('Module#const_get', '15.2.2.4.21') do + module Test4ConstGet + Const4Test4ConstGet = 42 + end + + Test4ConstGet.const_get(:Const4Test4ConstGet) == 42 +end + +assert('Module.const_missing', '15.2.2.4.22') do + e1 = nil + + module Test4ConstMissing + def const_missing(sym) + # ATM this redirect doesn't work + puts "PLEASE GO TO TEST CASE Module.const_missing!" + puts "IT IS WORKING NOW!! PLEASE FINALIZE." + puts "Thanks :)" + end + end + + begin + Test4ConstMissing.const_get(:ConstDoesntExist) + rescue => e2 + e1 = e2 + end + + e1.class == NameError +end + +assert('Module#const_get', '15.2.2.4.23') do + module Test4ConstSet + Const4Test4ConstSet = 42 + end + + Test4ConstSet.const_set(:Const4Test4ConstSet, 23) + Test4ConstSet.const_get(:Const4Test4ConstSet) == 23 +end + # TODO not implemented ATM assert('Module.constants', '15.2.2') do # TODO not implemented ATM assert('Module.nesting', '15.2.2') do -- cgit v1.2.3 From 0c2d74020a925fa86235ae7c716aa0ede856e6e6 Mon Sep 17 00:00:00 2001 From: Daniel Bovensiepen Date: Sun, 3 Jun 2012 23:31:53 +0800 Subject: Add more superclass tests --- test/t/array.rb | 4 ++++ test/t/false.rb | 4 ++++ test/t/float.rb | 4 ++++ test/t/hash.rb | 4 ++++ test/t/integer.rb | 4 ++++ test/t/module.rb | 4 ++++ test/t/numeric.rb | 4 ++++ test/t/object.rb | 5 +++++ test/t/proc.rb | 4 ++++ test/t/range.rb | 4 ++++ test/t/string.rb | 4 ++++ test/t/struct.rb | 5 +++++ test/t/symbol.rb | 4 ++++ test/t/time.rb | 4 ++++ test/t/true.rb | 4 ++++ 15 files changed, 62 insertions(+) (limited to 'test/t/module.rb') diff --git a/test/t/array.rb b/test/t/array.rb index dba1b035d..4e53f1120 100644 --- a/test/t/array.rb +++ b/test/t/array.rb @@ -5,6 +5,10 @@ assert('Array', '15.2.12') do Array.class == Class end +assert('Array superclass', '15.2.12.2') do + Array.superclass == Object +end + assert('Array.[]', '15.2.12.4.1') do Array.[](1,2,3) == [1, 2, 3] end diff --git a/test/t/false.rb b/test/t/false.rb index c2db283c8..ae605205d 100644 --- a/test/t/false.rb +++ b/test/t/false.rb @@ -5,6 +5,10 @@ assert('FalseClass', '15.2.6') do FalseClass.class == Class end +assert('FalseClass superclass', '15.2.6.2') do + FalseClass.superclass == Object +end + assert('FalseClass false', '15.2.6.1') do not false end diff --git a/test/t/float.rb b/test/t/float.rb index fc87a5b22..5c5245c73 100644 --- a/test/t/float.rb +++ b/test/t/float.rb @@ -5,6 +5,10 @@ assert('Float', '15.2.9') do Float.class == Class end +assert('Float superclass', '15.2.9.2') do + Float.superclass == Numeric +end + assert('Float#+', '15.2.9.3.1') do a = 3.123456788 + 0.000000001 b = 3.123456789 + 1 diff --git a/test/t/hash.rb b/test/t/hash.rb index df21dd1fa..04a9a1c24 100644 --- a/test/t/hash.rb +++ b/test/t/hash.rb @@ -5,6 +5,10 @@ assert('Hash', '15.2.13') do Hash.class == Class end +assert('Hash superclass', '15.2.13.2') do + Hash.superclass == Object +end + assert('Hash#==', '15.2.13.4.1') do ({ 'abc' => 'abc' } == { 'abc' => 'abc' }) and not ({ 'abc' => 'abc' } == { 'cba' => 'cba' }) diff --git a/test/t/integer.rb b/test/t/integer.rb index 8c112861a..872723445 100644 --- a/test/t/integer.rb +++ b/test/t/integer.rb @@ -5,6 +5,10 @@ assert('Integer', '15.2.8') do Integer.class == Class end +assert('Integer superclass', '15.2.8.2') do + Integer.superclass == Numeric +end + assert('Integer#+', '15.2.8.3.1') do a = 1+1 b = 1+1.0 diff --git a/test/t/module.rb b/test/t/module.rb index a5331e96d..95fbb7a86 100644 --- a/test/t/module.rb +++ b/test/t/module.rb @@ -5,6 +5,10 @@ assert('Module', '15.2.2') do Module.class == Class end +assert('Module superclass', '15.2.2.2') do + Module.superclass == Object +end + assert('Module#const_defined?', '15.2.2.4.20') do module Test4ConstDefined Const4Test4ConstDefined = true diff --git a/test/t/numeric.rb b/test/t/numeric.rb index 924889a0e..3cdb9a8cf 100644 --- a/test/t/numeric.rb +++ b/test/t/numeric.rb @@ -5,6 +5,10 @@ assert('Numeric', '15.2.7') do Numeric.class == Class end +assert('Numeric superclass', '15.2.7.2') do + Numeric.superclass == Object +end + assert('Numeric#+@', '15.2.7.4.1') do +1 == +1 end diff --git a/test/t/object.rb b/test/t/object.rb index 96929031b..7dfaf6589 100644 --- a/test/t/object.rb +++ b/test/t/object.rb @@ -4,3 +4,8 @@ assert('Object', '15.2.1') do Object.class == Class end + +assert('Object superclass', '15.2.1.2') do + Object.superclass == BasicObject +end + diff --git a/test/t/proc.rb b/test/t/proc.rb index 6d98cb40c..c0a1cf90f 100644 --- a/test/t/proc.rb +++ b/test/t/proc.rb @@ -5,6 +5,10 @@ assert('Proc', '15.2.17') do Proc.class == Class end +assert('Proc superclass', '15.2.17.2') do + Proc.superclass == Object +end + assert('Proc.new', '15.2.17.3.1') do a = nil diff --git a/test/t/range.rb b/test/t/range.rb index 05bac8779..691ca7898 100644 --- a/test/t/range.rb +++ b/test/t/range.rb @@ -5,6 +5,10 @@ assert('Range', '15.2.14') do Range.class == Class end +assert('Range superclass', '15.2.14.2') do + Range.superclass == Object +end + assert('Range#==', '15.2.14.4.1') do (1..10) == (1..10) and not (1..10) == (1..100) end diff --git a/test/t/string.rb b/test/t/string.rb index ee969a696..964ec0e63 100644 --- a/test/t/string.rb +++ b/test/t/string.rb @@ -5,6 +5,10 @@ assert('String', '15.2.10') do String.class == Class end +assert('String superclass', '15.2.10.2') do + String.superclass == Object +end + assert('String#*', '15.2.10.5.1') do 'a' * 5 == 'aaaaa' end diff --git a/test/t/struct.rb b/test/t/struct.rb index c41319f8a..798cf6728 100644 --- a/test/t/struct.rb +++ b/test/t/struct.rb @@ -4,3 +4,8 @@ assert('Struct', '15.2.18') do Struct.class == Class end + +assert('Struct superclass', '15.2.18.2') do + Struct.superclass == Object +end + diff --git a/test/t/symbol.rb b/test/t/symbol.rb index e9c310971..b28573e92 100644 --- a/test/t/symbol.rb +++ b/test/t/symbol.rb @@ -5,6 +5,10 @@ assert('Symbol', '15.2.11') do Symbol.class == Class end +assert('Symbol superclass', '15.2.11.2') do + Symbol.superclass == Object +end + assert('Symbol#===', '15.2.11.3.1') do :abc === :abc and not :abc === :cba end diff --git a/test/t/time.rb b/test/t/time.rb index 22fc2e7c3..7d1519f63 100644 --- a/test/t/time.rb +++ b/test/t/time.rb @@ -5,6 +5,10 @@ assert('Time', '15.2.19') do Time.class == Class end +assert('Time superclass', '15.2.19.2') do + Time.superclass == Object +end + assert('Time.at', '15.2.19.6.1') do Time.at(1300000000.0) end diff --git a/test/t/true.rb b/test/t/true.rb index bb648a7cd..2662f7cd8 100644 --- a/test/t/true.rb +++ b/test/t/true.rb @@ -5,6 +5,10 @@ assert('TrueClass', '15.2.5') do TrueClass.class == Class end +assert('TrueClass superclass', '15.2.5.2') do + TrueClass.superclass == Object +end + assert('TrueClass true', '15.2.5.1') do true end -- cgit v1.2.3 From 0c10becf91cdd584a8072501a514695aaa049ec2 Mon Sep 17 00:00:00 2001 From: Daniel Bovensiepen Date: Sun, 8 Jul 2012 04:44:55 +0800 Subject: Add tests for Modules #append_features, #include, #included and #included_modules --- test/t/module.rb | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 2 deletions(-) (limited to 'test/t/module.rb') diff --git a/test/t/module.rb b/test/t/module.rb index 95fbb7a86..63c2e7dc8 100644 --- a/test/t/module.rb +++ b/test/t/module.rb @@ -9,6 +9,23 @@ assert('Module superclass', '15.2.2.2') do Module.superclass == Object end +# TODO not implemented ATM assert('Module.constants', '15.2.2.3.1') do + +# TODO not implemented ATM assert('Module.nesting', '15.2.2.3.2') do + +assert('Module#append_features', '15.2.2.4.10') do + module Test4AppendFeatures + def self.append_features(mod) + Test4AppendFeatures2.const_set(:Const4AppendFeatures2, mod) + end + end + module Test4AppendFeatures2 + include Test4AppendFeatures + end + + Test4AppendFeatures2.const_get(:Const4AppendFeatures2) == Test4AppendFeatures2 +end + assert('Module#const_defined?', '15.2.2.4.20') do module Test4ConstDefined Const4Test4ConstDefined = true @@ -56,6 +73,41 @@ assert('Module#const_get', '15.2.2.4.23') do Test4ConstSet.const_get(:Const4Test4ConstSet) == 23 end -# TODO not implemented ATM assert('Module.constants', '15.2.2') do +assert('Module#include', '15.2.2.4.27') do + module Test4Include + Const4Include = 42 + end + module Test4Include2 + include Test4Include + end + + Test4Include2.const_get(:Const4Include) == 42 +end + +assert('Module#included', '15.2.2.4.29') do + module Test4Included + Const4Included = 42 + def Test4Included.included mod + Test4Included.const_set(:Const4Included2, mod) + end + end + module Test4Included2 + include Test4Included + end + + Test4Included2.const_get(:Const4Included) == 42 and + Test4Included2.const_get(:Const4Included2) == Test4Included2 +end + +assert('Module#included_modules', '15.2.2.4.30') do + r1 = true + module Test4includedModules + Const4Included = 42 + end + module Test4includedModules2 + r1 = included Test4includedModules + end + + Test4includedModules2.included_modules.class == Array +end -# TODO not implemented ATM assert('Module.nesting', '15.2.2') do -- cgit v1.2.3 From 526dd09b7a7bbaaddfe4d73b5d407409d518742d Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Tue, 17 Jul 2012 01:33:40 +0900 Subject: add Module#ancestors 15.2.2.4.9 --- src/class.c | 21 +++++++++++++++++++++ test/t/module.rb | 14 +++++++++----- 2 files changed, 30 insertions(+), 5 deletions(-) (limited to 'test/t/module.rb') diff --git a/src/class.c b/src/class.c index 1409c0b33..976642224 100644 --- a/src/class.c +++ b/src/class.c @@ -720,6 +720,26 @@ mrb_mod_include(mrb_state *mrb, mrb_value klass) return klass; } +static mrb_value +mrb_mod_ancestors(mrb_state *mrb, mrb_value self) +{ + mrb_value result; + struct RClass *c = mrb_class_ptr(self); + + result = mrb_ary_new(mrb); + while (c) { + if (c->tt == MRB_TT_ICLASS) { + mrb_ary_push(mrb, result, mrb_obj_value(c->c)); + } + else { + mrb_ary_push(mrb, result, mrb_obj_value(c)); + } + c = c->super; + } + + return result; +} + static mrb_value mrb_mod_included_modules(mrb_state *mrb, mrb_value self) { @@ -1400,6 +1420,7 @@ mrb_init_class(mrb_state *mrb) mrb_define_method(mrb, mod, "to_s", mrb_mod_to_s, ARGS_NONE()); mrb_define_method(mrb, mod, "alias_method", mrb_mod_alias, ARGS_ANY()); /* 15.2.2.4.8 */ + mrb_define_method(mrb, mod, "ancestors", mrb_mod_ancestors, ARGS_NONE()); /* 15.2.2.4.9 */ mrb_define_method(mrb, mod, "undef_method", mrb_mod_undef, ARGS_ANY()); /* 15.2.2.4.41 */ mrb_define_method(mrb, mod, "const_defined?", mrb_mod_const_defined, ARGS_REQ(1)); /* 15.2.2.4.20 */ mrb_define_method(mrb, mod, "const_get", mrb_mod_const_get, ARGS_REQ(1)); /* 15.2.2.4.21 */ diff --git a/test/t/module.rb b/test/t/module.rb index 63c2e7dc8..0e5abff81 100644 --- a/test/t/module.rb +++ b/test/t/module.rb @@ -13,6 +13,12 @@ end # TODO not implemented ATM assert('Module.nesting', '15.2.2.3.2') do +assert('Module#ancestors', '15.2.2.4.9') do + + r = String.ancestors + r.class == Array and r.include?(String) and r.include?(Object) +end + assert('Module#append_features', '15.2.2.4.10') do module Test4AppendFeatures def self.append_features(mod) @@ -100,14 +106,12 @@ assert('Module#included', '15.2.2.4.29') do end assert('Module#included_modules', '15.2.2.4.30') do - r1 = true module Test4includedModules - Const4Included = 42 end module Test4includedModules2 - r1 = included Test4includedModules + include Test4includedModules end - Test4includedModules2.included_modules.class == Array + r = Test4includedModules2.included_modules + r.class == Array and r.include?(Test4includedModules) end - -- cgit v1.2.3 From 6696876e729a99a0a54e0989ef38361687fb0b5d Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Tue, 17 Jul 2012 02:01:52 +0900 Subject: refactoring on module tests --- test/t/module.rb | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) (limited to 'test/t/module.rb') diff --git a/test/t/module.rb b/test/t/module.rb index 0e5abff81..5b847e8b7 100644 --- a/test/t/module.rb +++ b/test/t/module.rb @@ -14,7 +14,6 @@ end # TODO not implemented ATM assert('Module.nesting', '15.2.2.3.2') do assert('Module#ancestors', '15.2.2.4.9') do - r = String.ancestors r.class == Array and r.include?(String) and r.include?(Object) end @@ -53,21 +52,12 @@ assert('Module.const_missing', '15.2.2.4.22') do e1 = nil module Test4ConstMissing - def const_missing(sym) - # ATM this redirect doesn't work - puts "PLEASE GO TO TEST CASE Module.const_missing!" - puts "IT IS WORKING NOW!! PLEASE FINALIZE." - puts "Thanks :)" + def self.const_missing(sym) + 42 # the answer to everything end end - begin - Test4ConstMissing.const_get(:ConstDoesntExist) - rescue => e2 - e1 = e2 - end - - e1.class == NameError + Test4ConstMissing.const_get(:ConstDoesntExist) == 42 end assert('Module#const_get', '15.2.2.4.23') do @@ -93,7 +83,7 @@ end assert('Module#included', '15.2.2.4.29') do module Test4Included Const4Included = 42 - def Test4Included.included mod + def self.included mod Test4Included.const_set(:Const4Included2, mod) end end -- cgit v1.2.3