3 describe Puppet::Parser::Functions.function(:merge) do
5 # Pulled from Dan's create_resources function
6 # TODO - these let statements should be moved somewhere
7 # where they can be resued
9 topscope = Puppet::Parser::Scope.new
10 # This is necessary so we don't try to use the compiler to discover our parent.
12 my_scope = Puppet::Parser::Scope.new
13 my_scope.compiler = Puppet::Parser::Compiler.new(Puppet::Node.new("floppy", :environment => 'production'))
14 my_scope.parent = topscope
15 compiler = my_scope.compiler
18 scope = Puppet::Parser::Scope.new
19 scope.stubs(:environment).returns(Puppet::Node::Environment.new('production'))
23 describe 'when calling merge from puppet' do
24 it "should not compile when no arguments are passed" do
25 Puppet[:code] = 'merge()'
26 expect { compiler.compile }.should raise_error(Puppet::ParseError, /wrong number of arguments/)
28 it "should not compile when 1 argument is passed" do
29 Puppet[:code] = "$my_hash={'one' => 1}\nmerge($my_hash)"
30 expect { compiler.compile }.should raise_error(Puppet::ParseError, /wrong number of arguments/)
33 describe 'when calling merge on the scope instance' do
34 it 'should require all parameters are hashes' do
35 expect { new_hash = scope.function_merge([{}, '2'])}.should raise_error(Puppet::ParseError, /unexpected argument type String/)
38 it 'should be able to merge two hashes' do
39 new_hash = scope.function_merge([{'one' => '1', 'two' => '1'}, {'two' => '2', 'three' => '2'}])
40 new_hash['one'].should == '1'
41 new_hash['two'].should == '2'
42 new_hash['three'].should == '2'
44 it 'should merge multiple hashes' do
45 hash = scope.function_merge([{'one' => 1}, {'one' => '2'}, {'one' => '3'}])
46 hash['one'].should == '3'
48 it 'should accept empty hashes' do
49 scope.function_merge([{},{},{}]).should == {}