summaryrefslogtreecommitdiff
path: root/spec/unit/puppet
diff options
context:
space:
mode:
authorLeonardo Rodrigues de Mello <l@lmello.eu.org>2013-09-16 11:08:13 -0300
committerLeonardo Rodrigues de Mello <l@lmello.eu.org>2013-09-18 11:19:52 -0300
commit80a8b7bd1fdb3aadd53d112ce9a20b86d8ea9a62 (patch)
tree1701fb9cc05f0d766c0d81e3bc3151083f25ed1e /spec/unit/puppet
parent806430224ad0da860be3761ab83f1e574b64fc60 (diff)
downloadpuppet-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.rb12
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