diff options
| author | Brice Figureau <brice-puppet@daysofwonder.com> | 2008-10-04 00:16:17 +0200 |
|---|---|---|
| committer | James Turnbull <james@lovedthanlost.net> | 2008-10-05 14:53:13 +1100 |
| commit | 79bb1f201c1479a15fa2f0f8ad5467bd357ed707 (patch) | |
| tree | 6887338bab7a90d4ca1f4e56282e4baeddc63673 /spec/unit/parser | |
| parent | 750e9abc64af58e547e7b1ad5698c71feb071bf6 (diff) | |
| download | puppet-79bb1f201c1479a15fa2f0f8ad5467bd357ed707.tar.gz puppet-79bb1f201c1479a15fa2f0f8ad5467bd357ed707.tar.xz puppet-79bb1f201c1479a15fa2f0f8ad5467bd357ed707.zip | |
Rspec Tests for #381.
Moved part of the old resource reference tests to rspec.
Diffstat (limited to 'spec/unit/parser')
| -rwxr-xr-x | spec/unit/parser/ast/resource_override.rb | 51 | ||||
| -rwxr-xr-x | spec/unit/parser/ast/resource_reference.rb | 63 | ||||
| -rwxr-xr-x | spec/unit/parser/parser.rb | 41 |
3 files changed, 154 insertions, 1 deletions
diff --git a/spec/unit/parser/ast/resource_override.rb b/spec/unit/parser/ast/resource_override.rb new file mode 100755 index 000000000..3fbeb323c --- /dev/null +++ b/spec/unit/parser/ast/resource_override.rb @@ -0,0 +1,51 @@ +#!/usr/bin/env ruby + +require File.dirname(__FILE__) + '/../../../spec_helper' + +describe Puppet::Parser::AST::ResourceOverride do + + AST = Puppet::Parser::AST + + before :each do + @compiler = stub 'compiler' + @scope = Puppet::Parser::Scope.new(:compiler => @compiler) + @params = AST::ASTArray.new({}) + @compiler.stubs(:add_override) + end + + it "should evaluate the overriden object" do + klass = stub 'klass', :title => "title", :type => "type" + object = mock 'object' + object.expects(:safeevaluate).with(@scope).returns(klass) + AST::ResourceOverride.new(:object => object, :params => @params ).evaluate(@scope) + end + + it "should tell the compiler to override the resource with our own" do + @compiler.expects(:add_override) + + klass = stub 'klass', :title => "title", :type => "one" + object = mock 'object', :safeevaluate => klass + AST::ResourceOverride.new(:object => object , :params => @params).evaluate(@scope) + end + + it "should return the overriden resource directly when called with one item" do + klass = stub 'klass', :title => "title", :type => "one" + object = mock 'object', :safeevaluate => klass + override = AST::ResourceOverride.new(:object => object , :params => @params).evaluate(@scope) + override.should be_an_instance_of(Puppet::Parser::Resource) + override.title.should == "title" + override.type.should == "One" + end + + it "should return an array of overriden resources when called with an array of titles" do + klass1 = stub 'klass1', :title => "title1", :type => "one" + klass2 = stub 'klass2', :title => "title2", :type => "one" + + object = mock 'object', :safeevaluate => [klass1,klass2] + + override = AST::ResourceOverride.new(:object => object , :params => @params).evaluate(@scope) + override.should have(2).elements + override.each {|o| o.should be_an_instance_of(Puppet::Parser::Resource) } + end + +end
\ No newline at end of file diff --git a/spec/unit/parser/ast/resource_reference.rb b/spec/unit/parser/ast/resource_reference.rb new file mode 100755 index 000000000..e4b7c763b --- /dev/null +++ b/spec/unit/parser/ast/resource_reference.rb @@ -0,0 +1,63 @@ +#!/usr/bin/env ruby + +require File.dirname(__FILE__) + '/../../../spec_helper' + +describe Puppet::Parser::AST::ResourceReference do + + AST = Puppet::Parser::AST + + before :each do + @scope = Puppet::Parser::Scope.new() + end + + def newref(title, type) + title = stub 'title', :safeevaluate => title + ref = AST::ResourceReference.new(:type => type, :title => title) + end + + it "should evaluate correctly reference to builtin types" do + newref("/tmp/yay", "File").evaluate(@scope).to_s.should == "File[/tmp/yay]" + end + + %{ "one::two" "one-two"}.each do |type| + it "should evaluate correctly reference to define" do + klass = stub 'klass', :title => "three", :classname => type + @scope.stubs(:finddefine).returns(klass) + + newref("three", type).evaluate(@scope).to_ref.should == Puppet::Parser::Resource::Reference.new( :type => type, :title => "three" ).to_ref + end + end + + it "should be able to call qualified_class" do + klass = stub 'klass', :title => "three", :classname => "one" + @scope.expects(:findclass).with("one").returns(klass) + newref("three","class").qualified_class(@scope,"one").should == "one" + end + + it "should be able to find qualified classes when evaluating" do + klass = stub 'klass', :title => "one", :classname => "one" + @scope.stubs(:findclass).returns(klass) + + evaled = newref("one", "class").evaluate(@scope) + evaled.type.should == "Class" + evaled.title.should == "one" + end + + it "should return an array of reference if given an array of titles" do + titles = mock 'titles', :safeevaluate => ["title1","title2"] + ref = AST::ResourceReference.new( :title => titles, :type => "Resource" ) + ref.stubs(:qualified_type).with(@scope).returns("Resource") + + ref.evaluate(@scope).should have(2).elements + end + + it "should qualify class of all titles for Class resource references" do + titles = mock 'titles', :safeevaluate => ["title1","title2"] + ref = AST::ResourceReference.new( :title => titles, :type => "Class" ) + ref.expects(:qualified_class).with(@scope,"title1").returns("class") + ref.expects(:qualified_class).with(@scope,"title2").returns("class") + + ref.evaluate(@scope) + end + +end
\ No newline at end of file diff --git a/spec/unit/parser/parser.rb b/spec/unit/parser/parser.rb index 17e80bb6a..0092a9970 100755 --- a/spec/unit/parser/parser.rb +++ b/spec/unit/parser/parser.rb @@ -76,5 +76,44 @@ describe Puppet::Parser do lambda { @parser.parse("if (1 > 2 > ) or (1 == 2) { $var = 1 }") }.should raise_error end - end + end + + describe Puppet::Parser, "when parsing resource references" do + + it "should not raise syntax errors" do + lambda { @parser.parse('exec { test: param => File["a"] }') }.should_not raise_error + end + + it "should not raise syntax errors with multiple references" do + lambda { @parser.parse('exec { test: param => File["a","b"] }') }.should_not raise_error + end + + it "should create an AST::ResourceReference" do + AST::Resource.stubs(:new) + AST::ResourceReference.expects(:new).with { |arg| + arg[:line]==1 and arg[:type]=="File" and arg[:title].is_a?(AST::ASTArray) + } + @parser.parse('exec { test: command => File["a","b"] }') + end + end + + describe Puppet::Parser, "when parsing resource overrides" do + + it "should not raise syntax errors" do + lambda { @parser.parse('Resource["title"] { param => value }') }.should_not raise_error + end + + it "should not raise syntax errors with multiple overrides" do + lambda { @parser.parse('Resource["title1","title2"] { param => value }') }.should_not raise_error + end + + it "should create an AST::ResourceOverride" do + AST::ResourceOverride.expects(:new).with { |arg| + arg[:line]==1 and arg[:object].is_a?(AST::ResourceReference) and arg[:params].is_a?(AST::ResourceParam) + } + @parser.parse('Resource["title1","title2"] { param => value }') + end + + end + end |
