aboutsummaryrefslogtreecommitdiffstats
path: root/spec/ruby/core/binding/local_variable_get_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/core/binding/local_variable_get_spec.rb')
-rw-r--r--spec/ruby/core/binding/local_variable_get_spec.rb56
1 files changed, 56 insertions, 0 deletions
diff --git a/spec/ruby/core/binding/local_variable_get_spec.rb b/spec/ruby/core/binding/local_variable_get_spec.rb
new file mode 100644
index 0000000000..e65d08130e
--- /dev/null
+++ b/spec/ruby/core/binding/local_variable_get_spec.rb
@@ -0,0 +1,56 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+require File.expand_path('../fixtures/classes', __FILE__)
+
+describe "Binding#local_variable_get" do
+ it "reads local variables captured in the binding" do
+ a = 42
+ bind = binding
+ bind.local_variable_get(:a).should == 42
+ end
+
+ it "raises a NameError for missing variables" do
+ bind = BindingSpecs::Demo.new(1).get_empty_binding
+
+ lambda {
+ bind.local_variable_get(:no_such_variable)
+ }.should raise_error(NameError)
+ end
+
+ it "reads variables added later to the binding" do
+ bind = BindingSpecs::Demo.new(1).get_empty_binding
+
+ lambda {
+ bind.local_variable_get(:a)
+ }.should raise_error(NameError)
+
+ bind.local_variable_set(:a, 42)
+
+ bind.local_variable_get(:a).should == 42
+ end
+
+ it 'gets a local variable defined in a parent scope' do
+ number = 10
+
+ lambda {
+ binding.local_variable_get(:number)
+ }.call.should == 10
+ end
+
+ it 'gets a local variable defined using eval()' do
+ bind = binding
+ bind.eval('number = 10')
+
+ bind.local_variable_get(:number).should == 10
+ end
+
+ it "raises a NameError on global access" do
+ bind = binding
+ lambda { bind.local_variable_get(:$0) }.should raise_error(NameError)
+ end
+
+ it "raises a NameError on special variable access" do
+ bind = binding
+ lambda { bind.local_variable_get(:$~) }.should raise_error(NameError)
+ lambda { bind.local_variable_get(:$_) }.should raise_error(NameError)
+ end
+end