diff options
author | Jeff McCune <jeff@puppetlabs.com> | 2011-06-03 11:41:20 -0700 |
---|---|---|
committer | Jeff McCune <jeff@puppetlabs.com> | 2011-06-03 11:41:20 -0700 |
commit | 20b6c24186b6dd9d3d81524499b80f26b1c6c8eb (patch) | |
tree | ace4fe1e49dc7460c2f9623f38ec2ac791cdf576 /spec/unit/puppet | |
parent | b9f1bb6a63c5c06ce5b4e147dbca4ef505f02a25 (diff) | |
download | puppet-stdlib-20b6c24186b6dd9d3d81524499b80f26b1c6c8eb.tar.gz puppet-stdlib-20b6c24186b6dd9d3d81524499b80f26b1c6c8eb.tar.bz2 |
Add spec test for validate_bool function
This is an interesting spec test for module developers.
It illustrates how to cause Puppet to test the function
from the Puppet DSL rather than the Ruby DSL, fully
exercising the system from the perspective of the end
user.
(Note how Puppet[:code] is set, then the scope reset, then
the compile method called.)
Paired-with: Dan Bode <dan@puppetlabs.com>
Diffstat (limited to 'spec/unit/puppet')
-rw-r--r-- | spec/unit/puppet/parser/functions/validate_bool_spec.rb | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/spec/unit/puppet/parser/functions/validate_bool_spec.rb b/spec/unit/puppet/parser/functions/validate_bool_spec.rb new file mode 100644 index 0000000..19ecf23 --- /dev/null +++ b/spec/unit/puppet/parser/functions/validate_bool_spec.rb @@ -0,0 +1,68 @@ +require 'puppet' + +# We don't need this for the basic tests we're doing +# require 'spec_helper' + +# Dan mentioned that Nick recommended the function method call +# to return the string value for the test description. +# this will not even try the test if the function cannot be +# loaded. +describe Puppet::Parser::Functions.function(:validate_bool) do + + # Pulled from Dan's create_resources function + def get_scope + @topscope = Puppet::Parser::Scope.new + # This is necessary so we don't try to use the compiler to discover our parent. + @topscope.parent = nil + @scope = Puppet::Parser::Scope.new + @scope.compiler = Puppet::Parser::Compiler.new(Puppet::Node.new("floppy", :environment => 'production')) + @scope.parent = @topscope + @compiler = @scope.compiler + end + + describe 'when calling validate_bool from puppet' do + it "should validate true and false as bare words" do + Puppet[:code] = 'validate_bool(true)' + get_scope + @scope.compiler.compile + end + it "should not compile when false is a string" do + Puppet[:code] = 'validate_bool("false")' + get_scope + expect { @scope.compiler.compile }.should raise_error(Puppet::ParseError, /is not a boolean/) + end + it "should not compile when an arbitrary string is passed" do + Puppet[:code] = 'validate_bool("jeff and dan are awesome")' + get_scope + expect { @scope.compiler.compile }.should raise_error(Puppet::ParseError, /is not a boolean/) + end + it "should not compile when no arguments are passed" do + Puppet[:code] = 'validate_bool()' + get_scope + expect { @scope.compiler.compile }.should raise_error(Puppet::ParseError, /wrong number of arguments/) + end + + it "should compile when multiple boolean arguments are passed" do + Puppet[:code] = <<-'ENDofPUPPETcode' + $foo = true + $bar = false + validate_bool($foo, $bar, true, false) + ENDofPUPPETcode + get_scope + @scope.compiler.compile + end + + it "should compile when multiple boolean arguments are passed" do + Puppet[:code] = <<-'ENDofPUPPETcode' + $foo = true + $bar = false + validate_bool($foo, $bar, true, false, 'jeff') + ENDofPUPPETcode + get_scope + expect { @scope.compiler.compile }.should raise_error(Puppet::ParseError, /is not a boolean/) + end + + end + +end + |