diff options
Diffstat (limited to 'trunk/test/ruby/test_parse.rb')
-rw-r--r-- | trunk/test/ruby/test_parse.rb | 826 |
1 files changed, 0 insertions, 826 deletions
diff --git a/trunk/test/ruby/test_parse.rb b/trunk/test/ruby/test_parse.rb deleted file mode 100644 index e372ff6367..0000000000 --- a/trunk/test/ruby/test_parse.rb +++ /dev/null @@ -1,826 +0,0 @@ -require 'test/unit' -require 'stringio' - -class TestParse < Test::Unit::TestCase - def setup - @verbose = $VERBOSE - $VERBOSE = nil - end - - def teardown - $VERBOSE = @verbose - end - - def test_else_without_rescue - x = eval <<-END - begin - else - 42 - end - END - assert_equal(42, x) - end - - def test_alias_backref - assert_raise(SyntaxError) do - eval <<-END - alias $foo $1 - END - end - end - - def test_command_call - t = Object.new - def t.foo(x); x; end - - a = false - b = c = d = true - assert_nothing_raised do - eval <<-END - a &&= t.foo 42 - b &&= t.foo 42 - c &&= t.foo nil - d &&= t.foo false - END - end - assert_equal([false, 42, nil, false], [a, b, c, d]) - - a = 3 - assert_nothing_raised { eval("a &= t.foo 5") } - assert_equal(1, a) - - a = [nil, nil, true, true] - assert_nothing_raised do - eval <<-END - a[0] ||= t.foo 42 - a[1] &&= t.foo 42 - a[2] ||= t.foo 42 - a[3] &&= t.foo 42 - END - end - assert_equal([42, nil, true, 42], a) - - o = Object.new - class << o - attr_accessor :foo, :bar, :Foo, :Bar, :baz, :qux - end - o.foo = o.Foo = o::baz = nil - o.bar = o.Bar = o::qux = 1 - assert_nothing_raised do - eval <<-END - o.foo ||= t.foo 42 - o.bar &&= t.foo 42 - o.Foo ||= t.foo 42 - o.Bar &&= t.foo 42 - o::baz ||= t.foo 42 - o::qux &&= t.foo 42 - END - end - assert_equal([42, 42], [o.foo, o.bar]) - assert_equal([42, 42], [o.Foo, o.Bar]) - assert_equal([42, 42], [o::baz, o::qux]) - - assert_raise(SyntaxError) do - eval <<-END - $1 ||= t.foo 42 - END - end - - def t.bar(x); x + yield; end - - a = b = nil - assert_nothing_raised do - eval <<-END - a = t.bar "foo" do - "bar" - end.gsub "ob", "OB" - b = t.bar "foo" do - "bar" - end::gsub "ob", "OB" - END - end - assert_equal("foOBar", a) - assert_equal("foOBar", b) - - a = nil - assert_nothing_raised do - t.instance_eval <<-END - a = bar "foo" { "bar" } - END - end - assert_equal("foobar", a) - - a = nil - assert_nothing_raised do - eval <<-END - a = t::bar "foo" { "bar" } - END - end - assert_equal("foobar", a) - - def t.baz(*r) - @baz = r + (block_given? ? [yield] : []) - end - - assert_nothing_raised do - t.instance_eval "baz (1), 2" - end - assert_equal([1, 2], t.instance_eval { @baz }) - end - - def test_mlhs_node - c = Class.new - class << c - attr_accessor :foo, :bar, :Foo, :Bar - FOO = BAR = nil - end - - assert_nothing_raised do - eval <<-END - c::foo, c::bar = 1, 2 - c.Foo, c.Bar = 1, 2 - c::FOO, c::BAR = 1, 2 - END - end - assert_equal([1, 2], [c::foo, c::bar]) - assert_equal([1, 2], [c.Foo, c.Bar]) - assert_equal([1, 2], [c::FOO, c::BAR]) - end - - def test_dynamic_constant_assignment - assert_raise(SyntaxError) do - Object.new.instance_eval <<-END - def foo - self::FOO, self::BAR = 1, 2 - ::FOO, ::BAR = 1, 2 - end - END - end - - assert_raise(SyntaxError) do - eval <<-END - $1, $2 = 1, 2 - END - end - - assert_raise(SyntaxError) do - Object.new.instance_eval <<-END - def foo - ::FOO = 1 - end - END - end - - c = Class.new - assert_raise(SyntaxError) do - eval <<-END - c::FOO &= 1 - ::FOO &= 1 - END - end - - c = Class.new - assert_raise(SyntaxError) do - eval <<-END - $1 &= 1 - END - end - end - - def test_class_module - assert_raise(SyntaxError) do - eval <<-END - class foo; end - END - end - - assert_raise(SyntaxError) do - eval <<-END - def foo - class Foo; end - module Bar; end - end - END - end - - assert_raise(SyntaxError) do - eval <<-END - class Foo Bar; end - END - end - end - - def test_op_name - o = Object.new - def o.>(x); x; end - def o./(x); x; end - - a = nil - assert_nothing_raised do - o.instance_eval <<-END - undef >, / - END - end - end - - def test_arg - o = Object.new - class << o - attr_accessor :foo, :bar, :Foo, :Bar, :baz, :qux - end - o.foo = o.Foo = o::baz = nil - o.bar = o.Bar = o::qux = 1 - assert_nothing_raised do - eval <<-END - o.foo ||= 42 - o.bar &&= 42 - o.Foo ||= 42 - o.Bar &&= 42 - o::baz ||= 42 - o::qux &&= 42 - END - end - assert_equal([42, 42], [o.foo, o.bar]) - assert_equal([42, 42], [o.Foo, o.Bar]) - assert_equal([42, 42], [o::baz, o::qux]) - - a = nil - assert_nothing_raised do - eval <<-END - a = -2.0 ** 2 - END - end - assert_equal(-4.0, a) - end - - def test_block_variable - o = Object.new - def o.foo(*r); yield(*r); end - - a = nil - assert_nothing_raised do - eval <<-END - o.foo 1 {|; a| a = 42 } - END - end - assert_nil(a) - end - - def test_bad_arg - assert_raise(SyntaxError) do - eval <<-END - def foo(FOO); end - END - end - - assert_raise(SyntaxError) do - eval <<-END - def foo(@foo); end - END - end - - assert_raise(SyntaxError) do - eval <<-END - def foo($foo); end - END - end - - assert_raise(SyntaxError) do - eval <<-END - def foo(@@foo); end - END - end - - o = Object.new - def o.foo(*r); yield(*r); end - - assert_raise(SyntaxError) do - eval <<-END - o.foo 1 {|; @a| @a = 42 } - END - end - end - - def test_do_lambda - a = b = nil - assert_nothing_raised do - eval <<-END - a = -> do - b = 42 - end - END - end - a.call - assert_equal(42, b) - end - - def test_block_call_colon2 - o = Object.new - def o.foo(x); x + yield; end - - a = b = nil - assert_nothing_raised do - o.instance_eval <<-END - a = foo 1 do 42 end.to_s - b = foo 1 do 42 end::to_s - END - end - assert_equal("43", a) - assert_equal("43", b) - end - - def test_call_method - a = b = nil - assert_nothing_raised do - eval <<-END - a = proc {|x| x + "bar" }.("foo") - b = proc {|x| x + "bar" }::("foo") - END - end - assert_equal("foobar", a) - assert_equal("foobar", b) - end - - def test_xstring - assert_raise(Errno::ENOENT) do - eval("``") - end - end - - def test_words - assert_equal([], %W( )) - end - - def test_dstr - @@foo = 1 - assert_equal("foo 1 bar", "foo #@@foo bar") - "1" =~ /(.)/ - assert_equal("foo 1 bar", "foo #$1 bar") - end - - def test_dsym - assert_nothing_raised { eval(':""') } - end - - def test_arg2 - o = Object.new - - assert_nothing_raised do - eval <<-END - def o.foo(a=42,*r,z,&b); b.call(r.inject(a*1000+z*100, :+)); end - END - end - assert_equal(-1405, o.foo(1,2,3,4) {|x| -x }) - assert_equal(-1302, o.foo(1,2,3) {|x| -x }) - assert_equal(-1200, o.foo(1,2) {|x| -x }) - assert_equal(-42100, o.foo(1) {|x| -x }) - assert_raise(ArgumentError) { o.foo() } - - assert_nothing_raised do - eval <<-END - def o.foo(a=42,z,&b); b.call(a*1000+z*100); end - END - end - assert_equal(-1200, o.foo(1,2) {|x| -x } ) - assert_equal(-42100, o.foo(1) {|x| -x } ) - assert_raise(ArgumentError) { o.foo() } - - assert_nothing_raised do - eval <<-END - def o.foo(*r,z,&b); b.call(r.inject(z*100, :+)); end - END - end - assert_equal(-303, o.foo(1,2,3) {|x| -x } ) - assert_equal(-201, o.foo(1,2) {|x| -x } ) - assert_equal(-100, o.foo(1) {|x| -x } ) - assert_raise(ArgumentError) { o.foo() } - end - - def test_duplicate_argument - assert_raise(SyntaxError) do - eval <<-END - 1.times {|&b?| } - END - end - - assert_raise(SyntaxError) do - eval <<-END - 1.times {|a, a|} - END - end - - assert_raise(SyntaxError) do - eval <<-END - def foo(a, a); end - END - end - end - - def test_define_singleton_error - assert_raise(SyntaxError) do - eval <<-END - def ("foo").foo; end - END - end - end - - def test_backquote - t = Object.new - - assert_nothing_raised do - eval <<-END - def t.`(x); "foo" + x + "bar"; end - END - end - a = b = nil - assert_nothing_raised do - eval <<-END - a = t.` "zzz" - 1.times {|;z| t.` ("zzz") } - END - t.instance_eval <<-END - b = `zzz` - END - end - assert_equal("foozzzbar", a) - assert_equal("foozzzbar", b) - end - - def test_carrige_return - assert_equal(2, eval("1 +\r\n1")) - end - - def test_string - assert_raise(SyntaxError) do - eval '"\xg1"' - end - - assert_raise(SyntaxError) do - eval '"\u{1234"' - end - - assert_raise(SyntaxError) do - eval '"\M1"' - end - - assert_raise(SyntaxError) do - eval '"\C1"' - end - - assert_equal("\x81", eval('"\C-\M-a"')) - assert_equal("\177", eval('"\c?"')) - end - - def test_question - assert_raise(SyntaxError) { eval('?') } - assert_raise(SyntaxError) { eval('? ') } - assert_raise(SyntaxError) { eval("?\n") } - assert_raise(SyntaxError) { eval("?\t") } - assert_raise(SyntaxError) { eval("?\v") } - assert_raise(SyntaxError) { eval("?\r") } - assert_raise(SyntaxError) { eval("?\f") } - assert_equal("\u{1234}", eval("?\u{1234}")) - assert_equal("\u{1234}", eval('?\u{1234}')) - end - - def test_percent - assert_equal(:foo, eval('%s(foo)')) - assert_raise(SyntaxError) { eval('%s') } - assert_raise(SyntaxError) { eval('%ss') } - assert_raise(SyntaxError) { eval('%z()') } - end - - def test_symbol - assert_raise(SyntaxError) do - eval ":'foo\0bar'" - end - assert_raise(SyntaxError) do - eval ':"foo\u0000bar"' - end - assert_raise(SyntaxError) do - eval ':"foo\u{0}bar"' - end - assert_raise(SyntaxError) do - eval ':"foo\u{}bar"' - end - end - - def test_parse_string - assert_raise(SyntaxError) do - eval <<-END -/ - END - end - end - - def test_here_document - x = nil - - assert_raise(SyntaxError) do - eval %q( -<<FOO - ) - end - - assert_raise(SyntaxError) do - eval %q( -<<FOO -#$ -FOO - ) - end - - assert_raise(SyntaxError) do - eval %q( -<<" - ) - end - - assert_raise(SyntaxError) do - eval %q( -<<`` - ) - end - - assert_raise(SyntaxError) do - eval %q( -<<-- - ) - end - - assert_raise(SyntaxError) do - eval %q( -<<FOO -#$ -foo -FOO - ) - end - - assert_nothing_raised do - eval "x = <<FOO\r\n1\r\nFOO" - end - assert_equal("1\n", x) - end - - def test_magic_comment - x = nil - assert_nothing_raised do - eval <<-END -# coding = utf-8 -x = __ENCODING__ - END - end - assert_equal(Encoding.find("UTF-8"), x) - - assert_raise(ArgumentError) do - eval <<-END -# coding = foobarbazquxquux_dummy_enconding -x = __ENCODING__ - END - end - end - - def test_utf8_bom - x = nil - assert_nothing_raised do - eval "\xef\xbb\xbf x = __ENCODING__" - end - assert_equal(Encoding.find("UTF-8"), x) - assert_raise(NameError) { eval "\xef" } - end - - def test_dot_in_next_line - x = nil - assert_nothing_raised do - eval <<-END - x = 1 - .to_s - END - end - assert_equal("1", x) - end - - def test_pow_asgn - x = 3 - assert_nothing_raised { eval("x **= 2") } - assert_equal(9, x) - end - - def test_embedded_rd - assert_raise(SyntaxError) do - eval <<-END -=begin - END - end - end - - def test_float - assert_equal(1.0/0, eval("1e10000")) - assert_raise(SyntaxError) { eval('1_E') } - assert_raise(SyntaxError) { eval('1E1E1') } - end - - def test_global_variable - assert_equal(nil, eval('$-x')) - assert_equal(nil, eval('alias $preserve_last_match $&')) - assert_equal(nil, eval('alias $& $test_parse_foobarbazqux')) - $test_parse_foobarbazqux = nil - assert_equal(nil, $&) - assert_equal(nil, eval('alias $& $preserve_last_match')) - assert_raise(SyntaxError) { eval('$#') } - end - - def test_invalid_instance_variable - assert_raise(SyntaxError) { eval('@#') } - end - - def test_invalid_class_variable - assert_raise(SyntaxError) { eval('@@1') } - end - - def test_invalid_char - x = 1 - assert_equal(1, eval("\x01x")) - assert_equal(nil, eval("\x04x")) - end - - def test_literal_concat - x = "baz" - assert_equal("foobarbaz", eval('"foo" "bar#{x}"')) - end - - def test_unassignable - assert_raise(SyntaxError) do - eval %q(self = 1) - end - assert_raise(SyntaxError) do - eval %q(nil = 1) - end - assert_raise(SyntaxError) do - eval %q(true = 1) - end - assert_raise(SyntaxError) do - eval %q(false = 1) - end - assert_raise(SyntaxError) do - eval %q(__FILE__ = 1) - end - assert_raise(SyntaxError) do - eval %q(__LINE__ = 1) - end - assert_raise(SyntaxError) do - eval %q(__ENCODING__ = 1) - end - assert_raise(SyntaxError) do - eval <<-END - def foo - FOO = 1 - end - END - end - end - - def test_block_dup - assert_raise(SyntaxError) do - eval <<-END - foo(&proc{}) {} - END - end - end - - def test_set_backref - assert_raise(SyntaxError) do - eval <<-END - $& = 1 - END - end - end - - def test_arg_concat - o = Object.new - class << o; self; end.instance_eval do - define_method(:[]=) {|*r, &b| b.call(r) } - end - r = nil - assert_nothing_raised do - eval <<-END - o[&proc{|x| r = x }] = 1 - END - end - assert_equal([1], r) - end - - def test_void_expr_stmts_value - # This test checks if void contexts are warned correctly. - # Thus, warnings MUST NOT be suppressed. - $VERBOSE = true - stderr = $stderr - $stderr = StringIO.new("") - x = 1 - assert_nil eval("x; nil") - assert_nil eval("1+1; nil") - assert_nil eval("TestParse; nil") - assert_nil eval("::TestParse; nil") - assert_nil eval("x..x; nil") - assert_nil eval("x...x; nil") - assert_nil eval("self; nil") - assert_nil eval("nil; nil") - assert_nil eval("true; nil") - assert_nil eval("false; nil") - assert_nil eval("defined?(1); nil") - - assert_raise(SyntaxError) do - eval %q(1; next; 2) - end - - o = Object.new - assert_nothing_raised do - eval <<-END - x = def o.foo; end - END - end - assert_equal($stderr.string.lines.to_a.size, 14) - $stderr = stderr - end - - def test_assign_in_conditional - assert_raise(SyntaxError) do - eval <<-END - (x, y = 1, 2) ? 1 : 2 - END - end - - assert_nothing_raised do - eval <<-END - if @x = true - 1 - else - 2 - end - END - end - end - - def test_literal_in_conditional - assert_nothing_raised do - eval <<-END - "foo" ? 1 : 2 - END - end - - assert_nothing_raised do - x = "bar" - eval <<-END - /foo#{x}baz/ ? 1 : 2 - END - end - - assert_nothing_raised do - eval <<-END - (true..false) ? 1 : 2 - END - end - - assert_nothing_raised do - eval <<-END - ("foo".."bar") ? 1 : 2 - END - end - - assert_nothing_raised do - x = "bar" - eval <<-END - :"foo#{"x"}baz" ? 1 : 2 - END - end - end - - def test_no_blockarg - assert_raise(SyntaxError) do - eval <<-END - yield(&:+) - END - end - end - - def test_intern - assert_equal(':""', ''.intern.inspect) - assert_equal(':$foo', '$foo'.intern.inspect) - assert_equal(':"!foo"', '!foo'.intern.inspect) - assert_equal(':"foo=="', "foo==".intern.inspect) - end - - def test_all_symbols - x = Symbol.all_symbols - assert_kind_of(Array, x) - assert(x.all? {|s| s.is_a?(Symbol) }) - end - - def test_is_class_id - c = Class.new - assert_raise(NameError) do - c.instance_eval { remove_class_variable(:@var) } - end - end -end |