summaryrefslogtreecommitdiffstats
path: root/spec/unit/parser
diff options
context:
space:
mode:
authorBrice Figureau <brice-puppet@daysofwonder.com>2008-10-04 00:16:17 +0200
committerJames Turnbull <james@lovedthanlost.net>2008-10-05 14:53:13 +1100
commit79bb1f201c1479a15fa2f0f8ad5467bd357ed707 (patch)
tree6887338bab7a90d4ca1f4e56282e4baeddc63673 /spec/unit/parser
parent750e9abc64af58e547e7b1ad5698c71feb071bf6 (diff)
downloadpuppet-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-xspec/unit/parser/ast/resource_override.rb51
-rwxr-xr-xspec/unit/parser/ast/resource_reference.rb63
-rwxr-xr-xspec/unit/parser/parser.rb41
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