1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
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
def test_to_proc
assert_equal %w(1 2 3), (1..3).map(&:to_s)
[
[],
[1],
[1, 2],
[1, [2, 3]],
].each do |ary|
ary_id = ary.object_id
assert_equal ary_id, :object_id.to_proc.call(ary)
ary_ids = ary.collect{|x| x.object_id }
assert_equal ary_ids, ary.collect(&:object_id)
end
end
def test_call
o = Object.new
def o.foo(x, y); x + y; end
assert_equal(3, :foo.to_proc.call(o, 1, 2))
assert_raise(ArgumentError) { :foo.to_proc.call }
end
def test_succ
assert_equal(:fop, :foo.succ)
end
def test_cmp
assert_equal(0, :FoO <=> :FoO)
assert_equal(-1, :FoO <=> :fOO)
assert_equal(1, :fOO <=> :FoO)
assert_nil(:foo <=> "foo")
end
def test_casecmp
assert_equal(0, :FoO.casecmp(:fOO))
assert_equal(1, :FoO.casecmp(:BaR))
assert_equal(-1, :baR.casecmp(:FoO))
assert_nil(:foo.casecmp("foo"))
end
def test_length
assert_equal(3, :FoO.length)
assert_equal(3, :FoO.size)
end
def test_empty
assert_equal(false, :FoO.empty?)
assert_equal(true, :"".empty?)
end
def test_case
assert_equal(:FOO, :FoO.upcase)
assert_equal(:foo, :FoO.downcase)
assert_equal(:Foo, :foo.capitalize)
assert_equal(:fOo, :FoO.swapcase)
end
end
|