summaryrefslogtreecommitdiffstats
path: root/spec/unit/parser
diff options
context:
space:
mode:
authorMarkus Roberts <Markus@reality.com>2010-06-10 22:51:12 -0700
committertest branch <puppet-dev@googlegroups.com>2010-02-17 06:50:53 -0800
commitccc869ea48397235d7ba2a5695424eee4923cb9d (patch)
treeffd534b345923f62733e4e48cc3e36377fa059fe /spec/unit/parser
parent7c6b8836453b2b1e8679923f98854be3b0022edd (diff)
downloadpuppet-ccc869ea48397235d7ba2a5695424eee4923cb9d.tar.gz
puppet-ccc869ea48397235d7ba2a5695424eee4923cb9d.tar.xz
puppet-ccc869ea48397235d7ba2a5695424eee4923cb9d.zip
Part 2 of fix for #1175 (functions in environments)
Jesse and I are shooting for the minimal viable fix here, with the idea that a great deal of refactoring is needed but isn't appropriate at this time. The changes in this commit are: * Index the function-holding modules by environment * We need to know the "current environment" when we're defining a function so we can attach it to the proper module, and this information isn't dynamically available when user-defined functions are being created (we're being called by user written code that doesn't "know" about environments) so we cheat and stash the value in Puppet::Node::Environment * since we must do this anyway, it turns out to be cleaner & safer to do the same when we are evaluating a functon. This is the main change from the prior version of this patch. * Add a special *root* environment for the built in functions, and extend all scopes with it. * Index the function characteristics (name, type, docstring, etc.) by environment * Make the autoloader environment aware, so that it uses the modulepath for the specified environment rather than the default * Turn off caching of the modulepath since it potentially changes for each node * Tweak tests that weren't environment aware
Diffstat (limited to 'spec/unit/parser')
-rwxr-xr-xspec/unit/parser/functions/defined.rb4
-rwxr-xr-xspec/unit/parser/scope.rb8
2 files changed, 7 insertions, 5 deletions
diff --git a/spec/unit/parser/functions/defined.rb b/spec/unit/parser/functions/defined.rb
index 0da8c4a31..03b0ef9dd 100755
--- a/spec/unit/parser/functions/defined.rb
+++ b/spec/unit/parser/functions/defined.rb
@@ -5,9 +5,9 @@ require File.dirname(__FILE__) + '/../../../spec_helper'
describe "the 'defined' function" do
before :each do
- @scope = Puppet::Parser::Scope.new()
+ Puppet::Node::Environment.stubs(:current).returns(nil)
@compiler = Puppet::Parser::Compiler.new(Puppet::Node.new("foo"))
- @scope.compiler = @compiler
+ @scope = Puppet::Parser::Scope.new(:compiler => @compiler)
end
it "should exist" do
diff --git a/spec/unit/parser/scope.rb b/spec/unit/parser/scope.rb
index 7093279b6..b14b2d3b6 100755
--- a/spec/unit/parser/scope.rb
+++ b/spec/unit/parser/scope.rb
@@ -59,10 +59,12 @@ describe Puppet::Parser::Scope do
end
describe "when initializing" do
- it "should extend itself with its environment's Functions module" do
+ it "should extend itself with its environment's Functions module as well as the default" do
env = Puppet::Node::Environment.new("myenv")
compiler = stub 'compiler', :environment => env
- mod = Module.new
+ mod = Module.new
+ root_mod = Module.new
+ Puppet::Parser::Functions.expects(:environment_module).with(Puppet::Node::Environment.root).returns root_mod
Puppet::Parser::Functions.expects(:environment_module).with(env).returns mod
Puppet::Parser::Scope.new(:compiler => compiler).metaclass.ancestors.should be_include(mod)
@@ -70,7 +72,7 @@ describe Puppet::Parser::Scope do
it "should extend itself with the default Functions module if it has no environment" do
mod = Module.new
- Puppet::Parser::Functions.expects(:environment_module).with(nil).returns mod
+ Puppet::Parser::Functions.expects(:environment_module).with(Puppet::Node::Environment.root).returns(mod)
Puppet::Parser::Scope.new().metaclass.ancestors.should be_include(mod)
end