From 8ad27328850c5acf67548c7ad6c93d0c4a43e1ec Mon Sep 17 00:00:00 2001 From: Luke Kanies Date: Mon, 19 Nov 2007 15:36:42 -0600 Subject: Fixing #446. I ended up largely not using porridge's patch, but only because the code (and my coding style, to some extent) has changed so much in the last few months. Also, added specs. --- spec/unit/parser/resource.rb | 50 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'spec/unit') diff --git a/spec/unit/parser/resource.rb b/spec/unit/parser/resource.rb index 354690711..3d048f7e6 100755 --- a/spec/unit/parser/resource.rb +++ b/spec/unit/parser/resource.rb @@ -37,3 +37,53 @@ describe Puppet::Parser::Resource, " when evaluating" do res.evaluate end end + +describe Puppet::Parser::Resource, " when finishing" do + before do + @parser = Puppet::Parser::Parser.new :Code => "" + @source = @parser.newclass "" + @definition = @parser.newdefine "mydefine" + @class = @parser.newclass "myclass" + @nodedef = @parser.newnode("mynode")[0] + @node = Puppet::Node.new("yaynode") + @compile = Puppet::Parser::Compile.new(@node, @parser) + @scope = @compile.topscope + + @resource = Puppet::Parser::Resource.new(:type => "mydefine", :title => "whatever", :scope => @scope, :source => @source) + end + + it "should copy metaparams from its scope" do + @scope.setvar("noop", "true") + + @resource.class.publicize_methods(:add_metaparams) { @resource.add_metaparams } + + @resource["noop"].should == "true" + end + + it "should not copy metaparams that it already has" do + @resource.class.publicize_methods(:set_parameter) { @resource.set_parameter("noop", "false") } + @scope.setvar("noop", "true") + + @resource.class.publicize_methods(:add_metaparams) { @resource.add_metaparams } + + @resource["noop"].should == "false" + end + + it "should stack relationship metaparams from its container if it already has them" do + @resource.class.publicize_methods(:set_parameter) { @resource.set_parameter("require", "resource") } + @scope.setvar("require", "container") + + @resource.class.publicize_methods(:add_metaparams) { @resource.add_metaparams } + + @resource["require"].sort.should == %w{container resource} + end + + it "should flatten the array resulting from stacking relationship metaparams" do + @resource.class.publicize_methods(:set_parameter) { @resource.set_parameter("require", ["resource1", "resource2"]) } + @scope.setvar("require", %w{container1 container2}) + + @resource.class.publicize_methods(:add_metaparams) { @resource.add_metaparams } + + @resource["require"].sort.should == %w{container1 container2 resource1 resource2} + end +end -- cgit