+1
On Oct 4, 2008, at 7:23 AM, Brice Figureau wrote:
>
>
> Signed-off-by: Brice Figureau <[EMAIL PROTECTED]>
> ---
> spec/unit/parser/ast/resource_override.rb | 51 +++++++++++++++++++
> +++
> spec/unit/parser/ast/resource_reference.rb | 63 +++++++++++++++++++
> +++++++++
> spec/unit/parser/parser.rb | 41 +++++++++++++++++-
> test/language/ast/resource_reference.rb | 28 ------------
> 4 files changed, 154 insertions(+), 29 deletions(-)
> create mode 100755 spec/unit/parser/ast/resource_override.rb
> create mode 100755 spec/unit/parser/ast/resource_reference.rb
>
> diff --git a/spec/unit/parser/ast/resource_override.rb b/spec/unit/
> parser/ast/resource_override.rb
> new file mode 100755
> index 0000000..3fbeb32
> --- /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 0000000..e4b7c76
> --- /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 17e80bb..0092a99 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
> diff --git a/test/language/ast/resource_reference.rb b/test/language/
> ast/resource_reference.rb
> index 1f554d9..75cb53c 100755
> --- a/test/language/ast/resource_reference.rb
> +++ b/test/language/ast/resource_reference.rb
> @@ -23,34 +23,6 @@ class TestASTResourceReference <
> Test::Unit::TestCase
> @parser = @scope.compiler.parser
> end
>
> - def test_evaluate
> - @parser.newdefine "one::two"
> - @parser.newdefine "one-two"
> - [%w{File /tmp/yay}, %w{One::Two three}, %w{One-two
> three}].each do |type, title|
> - ref = newref(type, title)
> -
> - evaled = nil
> - assert_nothing_raised("Could not evaluate resource
> ref") do
> - evaled = ref.evaluate(@scope)
> - end
> -
> - assert_equal(type, evaled.type, "Type did not translate
> correctly")
> - assert_equal(title, evaled.title, "Title did not
> translate correctly")
> - end
> - end
> -
> - def test_finding_classes_for_reference
> - @parser.newclass "one"
> - ref = newref("Class", "one")
> - evaled = nil
> - assert_nothing_raised("Could not evaluate resource ref") do
> - evaled = ref.evaluate(@scope)
> - end
> -
> - assert_equal("Class", evaled.type, "Did not set type to
> 'class'")
> - assert_equal("one", evaled.title, "Did not look up class
> corectly")
> - end
> -
> # Related to #706, make sure resource references correctly
> translate to qualified types.
> def test_scoped_references
> @parser.newdefine "one"
> --
> 1.6.0.2
>
>
> >
--
One of the keys to happiness is a bad memory. -- Rita Mae Brown
---------------------------------------------------------------------
Luke Kanies | http://reductivelabs.com | http://madstop.com
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Puppet Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/puppet-dev?hl=en
-~----------~----~----~----~------~----~------~--~---