From 7edfb14779a207a84a8fb6b5cb8e93ec3a93b4b1 Mon Sep 17 00:00:00 2001 From: Laurent Sansonetti Date: Sat, 12 Apr 2014 01:02:02 +0200 Subject: [PATCH] add language/symbol spec --- test/test-android/app/language/symbol_1.9.rb | 15 +++++ test/test-android/app/language/symbol_spec.rb | 67 +++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 test/test-android/app/language/symbol_1.9.rb create mode 100644 test/test-android/app/language/symbol_spec.rb diff --git a/test/test-android/app/language/symbol_1.9.rb b/test/test-android/app/language/symbol_1.9.rb new file mode 100644 index 00000000..9835ae07 --- /dev/null +++ b/test/test-android/app/language/symbol_1.9.rb @@ -0,0 +1,15 @@ +describe "A Symbol literal" do + it "can be an empty string" do + c = :'' + c.should be_kind_of(Symbol) + c.inspect.should == ':""' + end + + # These weren't allowed on 1.8 + it "can be :!, :!=, or :!~" do + %w{'!', '!=', '!~'}.each do |sym| +# lambda { sym.to_sym }.should_not raise_error(SyntaxError) + sym.to_sym.to_s.should == sym + end + end +end diff --git a/test/test-android/app/language/symbol_spec.rb b/test/test-android/app/language/symbol_spec.rb new file mode 100644 index 00000000..4b344e6b --- /dev/null +++ b/test/test-android/app/language/symbol_spec.rb @@ -0,0 +1,67 @@ +describe "A Symbol literal" do + it "is a ':' followed by any number of valid characters" do + a = :foo + a.should be_kind_of(Symbol) + a.inspect.should == ':foo' + end + + it "is a ':' followed by any valid variable, method, or constant name" do + # Add more of these? + [ :Foo, + :foo, + :@foo, + :@@foo, + :$foo, + :_, + :~, + :- , + :FOO, + :_Foo, + :&, + :_9 + ].each { |s| s.should be_kind_of(Symbol) } + end + + it "is a ':' followed by a single- or double-quoted string that may contain otherwise invalid characters" do + [ [:'foo bar', ':"foo bar"'], + [:'++', ':"++"'], + [:'9', ':"9"'], + [:"foo #{1 + 1}", ':"foo 2"'], + ].each { |sym, str| +p str + sym.should be_kind_of(Symbol) + sym.inspect.should == str + } + end + + it "may contain '::' in the string" do + :'Some::Class'.should be_kind_of(Symbol) + end + + it "is converted to a literal, unquoted representation if the symbol contains only valid characters" do + a, b, c = :'foo', :'+', :'Foo__9' + a.should be_kind_of(Symbol) + a.inspect.should == ':foo' + b.should be_kind_of(Symbol) + b.inspect.should == ':+' + c.should be_kind_of(Symbol) + c.inspect.should == ':Foo__9' + end + + it "can be created by the %s-delimited expression" do + a, b = :'foo bar', %s{foo bar} + b.should be_kind_of(Symbol) + b.inspect.should == ':"foo bar"' + b.should == a + end + + it "is the same object when created from identical strings" do + var = "@@var" + [ [:symbol, :symbol], + [:'a string', :'a string'], + [:"#{var}", :"#{var}"] + ].each { |a, b| + a.should equal(b) + } + end +end