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


--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to