Updated MSpec source to a54f23d0.
[rbx.git] / spec / frozen / 1.8 / language / symbol_spec.rb
blob7e2d128fd0326aaa672b197d8fd0d162d08532f0
1 require File.dirname(__FILE__) + '/../spec_helper'
3 describe "A Symbol literal" do
4   it "is a ':' followed by any number of valid characters" do
5     a = :foo
6     a.should be_kind_of(Symbol)
7     a.inspect.should == ':foo'
8   end
10   it "is a ':' followed by any valid variable, method, or constant name" do
11     # Add more of these?
12     [ :Foo,
13       :foo,
14       :@foo,
15       :@@foo,
16       :$foo,
17       :_,
18       :~,
19       :- ,
20       :FOO,
21       :_Foo,
22       :&,
23       :_9
24     ].each { |s| s.should be_kind_of(Symbol) }
25   end
27   it "is a ':' followed by a single- or double-quoted string that may contain otherwise invalid characters" do
28     [ [:'foo bar',      ':"foo bar"'],
29       [:'++',           ':"++"'],
30       [:'9',            ':"9"'],
31       [:"foo #{1 + 1}", ':"foo 2"'],
32     ].each { |sym, str| 
33       sym.should be_kind_of(Symbol)
34       sym.inspect.should == str
35     }
36   end
38   it "may contain '::' in the string" do
39     :'Some::Class'.should be_kind_of(Symbol)
40   end
42   it "is converted to a literal, unquoted representation if the symbol contains only valid characters" do
43     a, b, c = :'foo', :'+', :'Foo__9'
44     a.class.should == Symbol
45     a.inspect.should == ':foo'
46     b.class.should == Symbol
47     b.inspect.should == ':+'
48     c.class.should == Symbol
49     c.inspect.should == ':Foo__9'
50   end
52   it "must not be an empty string" do
53     lambda { eval ":''" }.should raise_error(SyntaxError)
54   end
56   it "can be created by the %s-delimited expression" do
57     a, b = :'foo bar', %s{foo bar}
58     b.class.should == Symbol
59     b.inspect.should == ':"foo bar"'
60     b.should == a
61   end
63   it "is the same object when created from identical strings" do
64     var = "@@var"
65     [ [:symbol, :symbol],
66       [:'a string', :'a string'],
67       [:"#{var}", :"#{var}"]
68     ].each { |a, b|
69       a.should equal(b)
70     }
71   end
72 end