diff options
author | Leonardo Rodrigues de Mello <l@lmello.eu.org> | 2013-09-16 11:08:13 -0300 |
---|---|---|
committer | Leonardo Rodrigues de Mello <l@lmello.eu.org> | 2013-09-18 11:19:52 -0300 |
commit | 80a8b7bd1fdb3aadd53d112ce9a20b86d8ea9a62 (patch) | |
tree | 1701fb9cc05f0d766c0d81e3bc3151083f25ed1e /spec/unit/puppet | |
parent | 806430224ad0da860be3761ab83f1e574b64fc60 (diff) | |
download | puppet-stdlib-80a8b7bd1fdb3aadd53d112ce9a20b86d8ea9a62.tar.gz puppet-stdlib-80a8b7bd1fdb3aadd53d112ce9a20b86d8ea9a62.tar.bz2 |
(#20681) fix behaviour of delete_undef_values
The issue #20681 describe the error of delete() function
removing the elements from the origin array/hash/string.
This issue affected other delete functions. Because
ruby delete and delete_if functions make destructive
changes to the origin array/hash.
The delete_undef_values removed elements from the
origin array/hash and this is not the desired behaviour.
To solve this, we should dup or clone the array/hash
before using the delete or delete_if ruby functions.
We should also check if args[0] is not nil before using
dup, since dup on nil raises exception.
This fix the problem and add unit tests, so we could
enforce this behaviour and prevent regressions.
Diffstat (limited to 'spec/unit/puppet')
-rw-r--r-- | spec/unit/puppet/parser/functions/delete_undef_values_spec.rb | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/spec/unit/puppet/parser/functions/delete_undef_values_spec.rb b/spec/unit/puppet/parser/functions/delete_undef_values_spec.rb index 0536641..404aeda 100644 --- a/spec/unit/puppet/parser/functions/delete_undef_values_spec.rb +++ b/spec/unit/puppet/parser/functions/delete_undef_values_spec.rb @@ -26,4 +26,16 @@ describe "the delete_undef_values function" do result = scope.function_delete_undef_values([{'a'=>'A','b'=>:undef,'c'=>'C','d'=>'undef'}]) result.should(eq({'a'=>'A','c'=>'C','d'=>'undef'})) end + + it "should not change origin array passed as argument" do + origin_array = ['a',:undef,'c','undef'] + result = scope.function_delete_undef_values([origin_array]) + origin_array.should(eq(['a',:undef,'c','undef'])) + end + + it "should not change origin hash passed as argument" do + origin_hash = { 'a' => 1, 'b' => :undef, 'c' => 'undef' } + result = scope.function_delete_undef_values([origin_hash]) + origin_hash.should(eq({ 'a' => 1, 'b' => :undef, 'c' => 'undef' })) + end end |