~ubuntu-branches/ubuntu/oneiric/puppet/oneiric-security

« back to all changes in this revision

Viewing changes to spec/unit/parser/ast/node.rb

  • Committer: Bazaar Package Importer
  • Author(s): Micah Anderson
  • Date: 2008-07-26 15:43:45 UTC
  • mto: (3.1.1 lenny) (1.3.1 upstream)
  • mto: This revision was merged to the branch mainline in revision 16.
  • Revision ID: james.westby@ubuntu.com-20080726154345-1fmgo76b4l72ulvc
ImportĀ upstreamĀ versionĀ 0.24.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env ruby
 
2
 
 
3
require File.dirname(__FILE__) + '/../../../spec_helper'
 
4
 
 
5
describe Puppet::Parser::AST::Node do
 
6
    before :each do
 
7
        @node = Puppet::Node.new "testnode"
 
8
        @parser = Puppet::Parser::Parser.new :environment => "development"
 
9
        @scope_resource = stub 'scope_resource', :builtin? => true
 
10
        @compiler = Puppet::Parser::Compiler.new(@node, @parser)
 
11
 
 
12
        @scope = @compiler.topscope
 
13
    end
 
14
 
 
15
    describe Puppet::Parser::AST::Node, "when evaluating" do
 
16
 
 
17
        before do
 
18
            @top = @parser.newnode("top").shift
 
19
            @middle = @parser.newnode("middle", :parent => "top").shift
 
20
        end
 
21
 
 
22
        it "should create a resource that references itself" do
 
23
            @top.evaluate(@scope)
 
24
 
 
25
            @compiler.catalog.resource(:node, "top").should be_an_instance_of(Puppet::Parser::Resource)
 
26
        end
 
27
 
 
28
        it "should evaluate the parent class if one exists" do
 
29
            @middle.evaluate(@scope)
 
30
 
 
31
            @compiler.catalog.resource(:node, "top").should be_an_instance_of(Puppet::Parser::Resource)
 
32
        end
 
33
 
 
34
        it "should fail to evaluate if a parent class is defined but cannot be found" do
 
35
            othertop = @parser.newnode("something", :parent => "yay").shift
 
36
            lambda { othertop.evaluate(@scope) }.should raise_error(Puppet::ParseError)
 
37
        end
 
38
 
 
39
        it "should not create a new resource if one already exists" do
 
40
            @compiler.catalog.expects(:resource).with(:node, "top").returns("something")
 
41
            @compiler.catalog.expects(:add_resource).never
 
42
            @top.evaluate(@scope)
 
43
        end
 
44
 
 
45
        it "should not create a new parent resource if one already exists and it has a parent class" do
 
46
            @top.evaluate(@scope)
 
47
 
 
48
            top_resource = @compiler.catalog.resource(:node, "top")
 
49
 
 
50
            @middle.evaluate(@scope)
 
51
 
 
52
            @compiler.catalog.resource(:node, "top").should equal(top_resource)
 
53
        end
 
54
 
 
55
        # #795 - tag before evaluation.
 
56
        it "should tag the catalog with the resource tags when it is evaluated" do
 
57
            @middle.evaluate(@scope)
 
58
 
 
59
            @compiler.catalog.should be_tagged("middle")
 
60
        end
 
61
 
 
62
        it "should tag the catalog with the parent class tags when it is evaluated" do
 
63
            @middle.evaluate(@scope)
 
64
 
 
65
            @compiler.catalog.should be_tagged("top")
 
66
        end
 
67
    end
 
68
 
 
69
    describe Puppet::Parser::AST::Node, "when evaluating code" do
 
70
 
 
71
        before do
 
72
            @top_resource = stub "top_resource"
 
73
            @top = @parser.newnode("top", :code => @top_resource).shift
 
74
 
 
75
            @middle_resource = stub "middle_resource"
 
76
            @middle = @parser.newnode("middle", :parent => "top", :code => @middle_resource).shift
 
77
        end
 
78
 
 
79
        it "should evaluate the code referred to by the class" do
 
80
            @top_resource.expects(:safeevaluate)
 
81
 
 
82
            resource = @top.evaluate(@scope)
 
83
 
 
84
            @top.evaluate_code(resource)
 
85
        end
 
86
 
 
87
        it "should evaluate the parent class's code if it has a parent" do
 
88
            @top_resource.expects(:safeevaluate)
 
89
            @middle_resource.expects(:safeevaluate)
 
90
 
 
91
            resource = @middle.evaluate(@scope)
 
92
 
 
93
            @middle.evaluate_code(resource)
 
94
        end
 
95
 
 
96
        it "should not evaluate the parent class's code if the parent has already been evaluated" do
 
97
            @top_resource.stubs(:safeevaluate)
 
98
            resource = @top.evaluate(@scope)
 
99
            @top.evaluate_code(resource)
 
100
 
 
101
            @top_resource.expects(:safeevaluate).never
 
102
            @middle_resource.stubs(:safeevaluate)
 
103
            resource = @middle.evaluate(@scope)
 
104
            @middle.evaluate_code(resource)
 
105
        end
 
106
 
 
107
        it "should use the parent class's scope as its parent scope" do
 
108
            @top_resource.stubs(:safeevaluate)
 
109
            @middle_resource.stubs(:safeevaluate)
 
110
            resource = @middle.evaluate(@scope)
 
111
            @middle.evaluate_code(resource)
 
112
 
 
113
            @compiler.class_scope(@middle).parent.should equal(@compiler.class_scope(@top))
 
114
        end
 
115
 
 
116
        it "should add the parent class's namespace to its namespace search path" do
 
117
            @top_resource.stubs(:safeevaluate)
 
118
            @middle_resource.stubs(:safeevaluate)
 
119
            resource = @middle.evaluate(@scope)
 
120
            @middle.evaluate_code(resource)
 
121
 
 
122
            @compiler.class_scope(@middle).namespaces.should be_include(@top.namespace)
 
123
        end
 
124
    end
 
125
end