summaryrefslogtreecommitdiffstats
path: root/spec/unit/parser/ast
diff options
context:
space:
mode:
authorLuke Kanies <luke@puppetlabs.com>2011-06-08 07:03:54 -0700
committerLuke Kanies <luke@puppetlabs.com>2011-07-15 11:51:49 -0700
commit0d2e0672eb516a1b1f2ced6b8c74bd2064dd205e (patch)
tree28d38def94814fcce50b4d82984265dcca7e0545 /spec/unit/parser/ast
parent4ad404ee7e7244d94ff4d87effc1a041d65b3f73 (diff)
downloadpuppet-0d2e0672eb516a1b1f2ced6b8c74bd2064dd205e.tar.gz
puppet-0d2e0672eb516a1b1f2ced6b8c74bd2064dd205e.tar.xz
puppet-0d2e0672eb516a1b1f2ced6b8c74bd2064dd205e.zip
Adding []/[]= support to Scope
The interface to scope is much clearer this way anyway, but this is needed to integrate Puppet with Hiera[1]. It just provides hash-like behavior to Scope, which Hiera and others can now easily rely on. I also went through all of the code that used Scope#lookupvar and Scope#setvar and changed it if possible, and at the same time cleaned up a lot of tests that were unnecessarily stubbing (and thus making it difficult to tell if I had actually broken anything). 1 - https://github.com/ripienaar/hiera Signed-off-by: Luke Kanies <luke@puppetlabs.com> Reviewed-by: Nick Lewis <nick@puppetlabs.com>
Diffstat (limited to 'spec/unit/parser/ast')
-rwxr-xr-xspec/unit/parser/ast/casestatement_spec.rb2
-rwxr-xr-xspec/unit/parser/ast/leaf_spec.rb53
-rwxr-xr-xspec/unit/parser/ast/resource_reference_spec.rb2
3 files changed, 27 insertions, 30 deletions
diff --git a/spec/unit/parser/ast/casestatement_spec.rb b/spec/unit/parser/ast/casestatement_spec.rb
index e21190706..a76a9ae1f 100755
--- a/spec/unit/parser/ast/casestatement_spec.rb
+++ b/spec/unit/parser/ast/casestatement_spec.rb
@@ -154,7 +154,7 @@ describe Puppet::Parser::AST::CaseStatement do
tests.each do |should, values|
values.each do |value|
@scope = Puppet::Parser::Scope.new
- @scope.setvar("testparam", value)
+ @scope['testparam'] = value
result = ast.evaluate(@scope)
result.should == should
diff --git a/spec/unit/parser/ast/leaf_spec.rb b/spec/unit/parser/ast/leaf_spec.rb
index ff3fed5e9..36c790a41 100755
--- a/spec/unit/parser/ast/leaf_spec.rb
+++ b/spec/unit/parser/ast/leaf_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
describe Puppet::Parser::AST::Leaf do
before :each do
- @scope = stub 'scope'
+ @scope = Puppet::Parser::Scope.new
@value = stub 'value'
@leaf = Puppet::Parser::AST::Leaf.new(:value => @value)
end
@@ -56,7 +56,7 @@ end
describe Puppet::Parser::AST::Concat do
describe "when evaluating" do
before :each do
- @scope = stub_everything 'scope'
+ @scope = Puppet::Parser::Scope.new
end
it "should interpolate variables and concatenate their values" do
one = Puppet::Parser::AST::String.new(:value => "one")
@@ -86,7 +86,7 @@ end
describe Puppet::Parser::AST::Undef do
before :each do
- @scope = stub 'scope'
+ @scope = Puppet::Parser::Scope.new
@undef = Puppet::Parser::AST::Undef.new(:value => :undef)
end
@@ -101,12 +101,12 @@ end
describe Puppet::Parser::AST::HashOrArrayAccess do
before :each do
- @scope = stub 'scope'
+ @scope = Puppet::Parser::Scope.new
end
describe "when evaluating" do
it "should evaluate the variable part if necessary" do
- @scope.stubs(:lookupvar).with { |name,options| name == 'a'}.returns(["b"])
+ @scope["a"] = ["b"]
variable = stub 'variable', :evaluate => "a"
access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => variable, :key => 0 )
@@ -117,7 +117,7 @@ describe Puppet::Parser::AST::HashOrArrayAccess do
end
it "should evaluate the access key part if necessary" do
- @scope.stubs(:lookupvar).with { |name,options| name == 'a'}.returns(["b"])
+ @scope["a"] = ["b"]
index = stub 'index', :evaluate => 0
access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => index )
@@ -128,7 +128,7 @@ describe Puppet::Parser::AST::HashOrArrayAccess do
end
it "should be able to return an array member" do
- @scope.stubs(:lookupvar).with { |name,options| name == 'a'}.returns(["val1", "val2", "val3"])
+ @scope["a"] = %w{val1 val2 val3}
access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => 1 )
@@ -136,7 +136,7 @@ describe Puppet::Parser::AST::HashOrArrayAccess do
end
it "should be able to return an array member when index is a stringified number" do
- @scope.stubs(:lookupvar).with { |name,options| name == "a" }.returns(["val1", "val2", "val3"])
+ @scope["a"] = %w{val1 val2 val3}
access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "1" )
@@ -144,7 +144,7 @@ describe Puppet::Parser::AST::HashOrArrayAccess do
end
it "should raise an error when accessing an array with a key" do
- @scope.stubs(:lookupvar).with { |name,options| name == "a"}.returns(["val1", "val2", "val3"])
+ @scope["a"] = ["val1", "val2", "val3"]
access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "get_me_the_second_element_please" )
@@ -152,7 +152,7 @@ describe Puppet::Parser::AST::HashOrArrayAccess do
end
it "should be able to return an hash value" do
- @scope.stubs(:lookupvar).with { |name,options| name == 'a'}.returns({ "key1" => "val1", "key2" => "val2", "key3" => "val3" })
+ @scope["a"] = { "key1" => "val1", "key2" => "val2", "key3" => "val3" }
access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "key2" )
@@ -160,7 +160,7 @@ describe Puppet::Parser::AST::HashOrArrayAccess do
end
it "should be able to return an hash value with a numerical key" do
- @scope.stubs(:lookupvar).with { |name,options| name == "a"}.returns({ "key1" => "val1", "key2" => "val2", "45" => "45", "key3" => "val3" })
+ @scope["a"] = { "key1" => "val1", "key2" => "val2", "45" => "45", "key3" => "val3" }
access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "45" )
@@ -168,7 +168,7 @@ describe Puppet::Parser::AST::HashOrArrayAccess do
end
it "should raise an error if the variable lookup didn't return an hash or an array" do
- @scope.stubs(:lookupvar).with { |name,options| name == "a"}.returns("I'm a string")
+ @scope["a"] = "I'm a string"
access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "key2" )
@@ -176,8 +176,6 @@ describe Puppet::Parser::AST::HashOrArrayAccess do
end
it "should raise an error if the variable wasn't in the scope" do
- @scope.stubs(:lookupvar).with { |name,options| name == 'a'}.returns(nil)
-
access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "key2" )
lambda { access.evaluate(@scope) }.should raise_error
@@ -189,7 +187,7 @@ describe Puppet::Parser::AST::HashOrArrayAccess do
end
it "should work with recursive hash access" do
- @scope.stubs(:lookupvar).with { |name,options| name == 'a'}.returns({ "key" => { "subkey" => "b" }})
+ @scope["a"] = { "key" => { "subkey" => "b" }}
access1 = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "key")
access2 = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => access1, :key => "subkey")
@@ -198,7 +196,7 @@ describe Puppet::Parser::AST::HashOrArrayAccess do
end
it "should work with interleaved array and hash access" do
- @scope.stubs(:lookupvar).with { |name,options| name == 'a'}.returns({ "key" => [ "a" , "b" ]})
+ @scope['a'] = { "key" => [ "a" , "b" ]}
access1 = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "key")
access2 = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => access1, :key => 1)
@@ -210,16 +208,16 @@ describe Puppet::Parser::AST::HashOrArrayAccess do
describe "when assigning" do
it "should add a new key and value" do
scope = Puppet::Parser::Scope.new
- scope.setvar("a", { 'a' => 'b' })
+ scope['a'] = { 'a' => 'b' }
access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "b")
access.assign(scope, "c" )
- scope.lookupvar("a").should be_include("b")
+ scope['a'].should be_include("b")
end
it "should raise an error when assigning an array element with a key" do
- @scope.stubs(:lookupvar).with { |name,options| name == "a"}.returns([])
+ @scope['a'] = []
access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "get_me_the_second_element_please" )
@@ -228,16 +226,16 @@ describe Puppet::Parser::AST::HashOrArrayAccess do
it "should be able to return an array member when index is a stringified number" do
scope = Puppet::Parser::Scope.new
- scope.setvar("a", [])
+ scope['a'] = []
access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "0" )
access.assign(scope, "val2")
- scope.lookupvar("a").should == ["val2"]
+ scope['a'].should == ["val2"]
end
it "should raise an error when trying to overwrite an hash value" do
- @scope.stubs(:lookupvar).with { |name,options| name == "a" }.returns({ "key" => [ "a" , "b" ]})
+ @scope['a'] = { "key" => [ "a" , "b" ]}
access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "key")
lambda { access.assign(@scope, "test") }.should raise_error
@@ -247,7 +245,7 @@ end
describe Puppet::Parser::AST::Regex do
before :each do
- @scope = stub 'scope'
+ @scope = Puppet::Parser::Scope.new
end
describe "when initializing" do
@@ -330,22 +328,21 @@ end
describe Puppet::Parser::AST::Variable do
before :each do
- @scope = stub 'scope'
+ @scope = Puppet::Parser::Scope.new
@var = Puppet::Parser::AST::Variable.new(:value => "myvar", :file => 'my.pp', :line => 222)
end
it "should lookup the variable in scope" do
- @scope.expects(:lookupvar).with { |name,options| name == "myvar" }.returns(:myvalue)
+ @scope["myvar"] = :myvalue
@var.safeevaluate(@scope).should == :myvalue
end
it "should pass the source location to lookupvar" do
- @scope.expects(:lookupvar).with { |name,options| name == "myvar" and options[:file] == 'my.pp' and options[:line] == 222 }.returns(:myvalue)
+ @scope.setvar("myvar", :myvalue, :file => 'my.pp', :line => 222 )
@var.safeevaluate(@scope).should == :myvalue
end
it "should return undef if the variable wasn't set" do
- @scope.expects(:lookupvar).with { |name,options| name == "myvar" }.returns(:undefined)
@var.safeevaluate(@scope).should == :undef
end
@@ -359,7 +356,7 @@ end
describe Puppet::Parser::AST::HostName do
before :each do
- @scope = stub 'scope'
+ @scope = Puppet::Parser::Scope.new
@value = stub 'value', :=~ => false
@value.stubs(:to_s).returns(@value)
@value.stubs(:downcase).returns(@value)
diff --git a/spec/unit/parser/ast/resource_reference_spec.rb b/spec/unit/parser/ast/resource_reference_spec.rb
index 4d1c191cf..4e069cca0 100755
--- a/spec/unit/parser/ast/resource_reference_spec.rb
+++ b/spec/unit/parser/ast/resource_reference_spec.rb
@@ -36,7 +36,7 @@ describe Puppet::Parser::AST::ResourceReference do
end
it "should return an array of resources if given a variable containing an array of titles" do
- @scope.setvar("my_files", ["foo", "bar"])
+ @scope["my_files"] = ["foo", "bar"]
titles = Puppet::Parser::AST::Variable.new(:value => "my_files")
ref = newref('File', titles)
ref.evaluate(@scope).should == [