]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/stdlib/spec/functions/deep_merge_spec.rb
upgrade to stdlib 4.6.1
[dsa-puppet.git] / 3rdparty / modules / stdlib / spec / functions / deep_merge_spec.rb
1 #! /usr/bin/env ruby -S rspec
2
3 require 'spec_helper'
4
5 describe Puppet::Parser::Functions.function(:deep_merge) do
6   let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
7
8   describe 'when calling deep_merge from puppet' do
9     it "should not compile when no arguments are passed" do
10       skip("Fails on 2.6.x, see bug #15912") if Puppet.version =~ /^2\.6\./
11       Puppet[:code] = '$x = deep_merge()'
12       expect {
13         scope.compiler.compile
14       }.to raise_error(Puppet::ParseError, /wrong number of arguments/)
15     end
16
17     it "should not compile when 1 argument is passed" do
18       skip("Fails on 2.6.x, see bug #15912") if Puppet.version =~ /^2\.6\./
19       Puppet[:code] = "$my_hash={'one' => 1}\n$x = deep_merge($my_hash)"
20       expect {
21         scope.compiler.compile
22       }.to raise_error(Puppet::ParseError, /wrong number of arguments/)
23     end
24   end
25
26   describe 'when calling deep_merge on the scope instance' do
27     it 'should require all parameters are hashes' do
28       expect { new_hash = scope.function_deep_merge([{}, '2'])}.to raise_error(Puppet::ParseError, /unexpected argument type String/)
29       expect { new_hash = scope.function_deep_merge([{}, 2])}.to raise_error(Puppet::ParseError, /unexpected argument type Fixnum/)
30     end
31
32     it 'should accept empty strings as puppet undef' do
33       expect { new_hash = scope.function_deep_merge([{}, ''])}.not_to raise_error
34     end
35
36     it 'should be able to deep_merge two hashes' do
37       new_hash = scope.function_deep_merge([{'one' => '1', 'two' => '1'}, {'two' => '2', 'three' => '2'}])
38       expect(new_hash['one']).to   eq('1')
39       expect(new_hash['two']).to   eq('2')
40       expect(new_hash['three']).to eq('2')
41     end
42
43     it 'should deep_merge multiple hashes' do
44       hash = scope.function_deep_merge([{'one' => 1}, {'one' => '2'}, {'one' => '3'}])
45       expect(hash['one']).to eq('3')
46     end
47
48     it 'should accept empty hashes' do
49       expect(scope.function_deep_merge([{},{},{}])).to eq({})
50     end
51
52     it 'should deep_merge subhashes' do
53       hash = scope.function_deep_merge([{'one' => 1}, {'two' => 2, 'three' => { 'four' => 4 } }])
54       expect(hash['one']).to eq(1)
55       expect(hash['two']).to eq(2)
56       expect(hash['three']).to eq({ 'four' => 4 })
57     end
58
59     it 'should append to subhashes' do
60       hash = scope.function_deep_merge([{'one' => { 'two' => 2 } }, { 'one' => { 'three' => 3 } }])
61       expect(hash['one']).to eq({ 'two' => 2, 'three' => 3 })
62     end
63
64     it 'should append to subhashes 2' do
65       hash = scope.function_deep_merge([{'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }, {'two' => 'dos', 'three' => { 'five' => 5 } }])
66       expect(hash['one']).to eq(1)
67       expect(hash['two']).to eq('dos')
68       expect(hash['three']).to eq({ 'four' => 4, 'five' => 5 })
69     end
70
71     it 'should append to subhashes 3' do
72       hash = scope.function_deep_merge([{ 'key1' => { 'a' => 1, 'b' => 2 }, 'key2' => { 'c' => 3 } }, { 'key1' => { 'b' => 99 } }])
73       expect(hash['key1']).to eq({ 'a' => 1, 'b' => 99 })
74       expect(hash['key2']).to eq({ 'c' => 3 })
75     end
76
77     it 'should not change the original hashes' do
78       hash1 = {'one' => { 'two' => 2 } }
79       hash2 = { 'one' => { 'three' => 3 } }
80       hash = scope.function_deep_merge([hash1, hash2])
81       expect(hash1).to eq({'one' => { 'two' => 2 } })
82       expect(hash2).to eq({ 'one' => { 'three' => 3 } })
83       expect(hash['one']).to eq({ 'two' => 2, 'three' => 3 })
84     end
85
86     it 'should not change the original hashes 2' do
87       hash1 = {'one' => { 'two' => [1,2] } }
88       hash2 = { 'one' => { 'three' => 3 } }
89       hash = scope.function_deep_merge([hash1, hash2])
90       expect(hash1).to eq({'one' => { 'two' => [1,2] } })
91       expect(hash2).to eq({ 'one' => { 'three' => 3 } })
92       expect(hash['one']).to eq({ 'two' => [1,2], 'three' => 3 })
93     end
94
95     it 'should not change the original hashes 3' do
96       hash1 = {'one' => { 'two' => [1,2, {'two' => 2} ] } }
97       hash2 = { 'one' => { 'three' => 3 } }
98       hash = scope.function_deep_merge([hash1, hash2])
99       expect(hash1).to eq({'one' => { 'two' => [1,2, {'two' => 2}] } })
100       expect(hash2).to eq({ 'one' => { 'three' => 3 } })
101       expect(hash['one']).to eq({ 'two' => [1,2, {'two' => 2} ], 'three' => 3 })
102       expect(hash['one']['two']).to eq([1,2, {'two' => 2}])
103     end
104   end
105 end