require 'test/unit' class TestSymbol < Test::Unit::TestCase # [ruby-core:3573] def assert_eval_inspected(sym) n = sym.inspect assert_nothing_raised(SyntaxError) {assert_equal(sym, eval(n))} end def test_inspect_invalid # 2) Symbol#inspect sometimes returns invalid symbol representations: assert_eval_inspected(:"!") assert_eval_inspected(:"=") assert_eval_inspected(:"0") assert_eval_inspected(:"$1") assert_eval_inspected(:"@1") assert_eval_inspected(:"@@1") assert_eval_inspected(:"@") assert_eval_inspected(:"@@") end def assert_inspect_evaled(n) assert_nothing_raised(SyntaxError) {assert_equal(n, eval(n).inspect)} end def test_inspect_suboptimal # 3) Symbol#inspect sometimes returns suboptimal symbol representations: assert_inspect_evaled(':foo') assert_inspect_evaled(':foo!') assert_inspect_evaled(':bar?') assert_inspect_evaled(':<<') assert_inspect_evaled(':>>') assert_inspect_evaled(':<=') assert_inspect_evaled(':>=') assert_inspect_evaled(':=~') assert_inspect_evaled(':==') assert_inspect_evaled(':===') assert_raise(SyntaxError) {eval ':='} assert_inspect_evaled(':*') assert_inspect_evaled(':**') assert_raise(SyntaxError) {eval ':***'} assert_inspect_evaled(':+') assert_inspect_evaled(':-') assert_inspect_evaled(':+@') assert_inspect_evaled(':-@') assert_inspect_evaled(':|') assert_inspect_evaled(':^') assert_inspect_evaled(':&') assert_inspect_evaled(':/') assert_inspect_evaled(':%') assert_inspect_evaled(':~') assert_inspect_evaled(':`') assert_inspect_evaled(':[]') assert_inspect_evaled(':[]=') assert_raise(SyntaxError) {eval ':||'} assert_raise(SyntaxError) {eval ':&&'} assert_raise(SyntaxError) {eval ':['} end def test_inspect_dollar # 4) :$- always treats next character literally: sym = "$-".intern assert_nothing_raised(SyntaxError) {assert_equal(sym, eval(':$-'))} assert_nothing_raised(SyntaxError) {assert_equal(sym, eval(":$-\n"))} assert_nothing_raised(SyntaxError) {assert_equal(sym, eval(":$- "))} assert_nothing_raised(SyntaxError) {assert_equal(sym, eval(":$-#"))} assert_raise(SyntaxError) {eval ':$-('} end def test_inspect_number # 5) Inconsistency between :$0 and :$1? The first one is valid, but the # latter isn't. assert_inspect_evaled(':$0') assert_inspect_evaled(':$1') end end