summaryrefslogtreecommitdiff
path: root/spec/unit/functions/each_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/unit/functions/each_spec.rb')
-rw-r--r--spec/unit/functions/each_spec.rb111
1 files changed, 111 insertions, 0 deletions
diff --git a/spec/unit/functions/each_spec.rb b/spec/unit/functions/each_spec.rb
new file mode 100644
index 000000000..d6651cf5a
--- /dev/null
+++ b/spec/unit/functions/each_spec.rb
@@ -0,0 +1,111 @@
+require 'puppet'
+require 'spec_helper'
+require 'puppet_spec/compiler'
+
+require 'shared_behaviours/iterative_functions'
+
+describe 'the each method' do
+ include PuppetSpec::Compiler
+
+ before :each do
+ Puppet[:parser] = 'future'
+ end
+
+ context "should be callable as" do
+ it 'each on an array selecting each value' do
+ catalog = compile_to_catalog(<<-MANIFEST)
+ $a = [1,2,3]
+ $a.each |$v| {
+ file { "/file_$v": ensure => present }
+ }
+ MANIFEST
+
+ catalog.resource(:file, "/file_1")['ensure'].should == 'present'
+ catalog.resource(:file, "/file_2")['ensure'].should == 'present'
+ catalog.resource(:file, "/file_3")['ensure'].should == 'present'
+ end
+
+ it 'each on an array selecting each value - function call style' do
+ catalog = compile_to_catalog(<<-MANIFEST)
+ $a = [1,2,3]
+ each ($a) |$index, $v| {
+ file { "/file_$v": ensure => present }
+ }
+ MANIFEST
+
+ catalog.resource(:file, "/file_1")['ensure'].should == 'present'
+ catalog.resource(:file, "/file_2")['ensure'].should == 'present'
+ catalog.resource(:file, "/file_3")['ensure'].should == 'present'
+ end
+
+ it 'each on an array with index' do
+ catalog = compile_to_catalog(<<-MANIFEST)
+ $a = [present, absent, present]
+ $a.each |$k,$v| {
+ file { "/file_${$k+1}": ensure => $v }
+ }
+ MANIFEST
+
+ catalog.resource(:file, "/file_1")['ensure'].should == 'present'
+ catalog.resource(:file, "/file_2")['ensure'].should == 'absent'
+ catalog.resource(:file, "/file_3")['ensure'].should == 'present'
+ end
+
+ it 'each on a hash selecting entries' do
+ catalog = compile_to_catalog(<<-MANIFEST)
+ $a = {'a'=>'present','b'=>'absent','c'=>'present'}
+ $a.each |$e| {
+ file { "/file_${e[0]}": ensure => $e[1] }
+ }
+ MANIFEST
+
+ catalog.resource(:file, "/file_a")['ensure'].should == 'present'
+ catalog.resource(:file, "/file_b")['ensure'].should == 'absent'
+ catalog.resource(:file, "/file_c")['ensure'].should == 'present'
+ end
+
+ it 'each on a hash selecting key and value' do
+ catalog = compile_to_catalog(<<-MANIFEST)
+ $a = {'a'=>present,'b'=>absent,'c'=>present}
+ $a.each |$k, $v| {
+ file { "/file_$k": ensure => $v }
+ }
+ MANIFEST
+
+ catalog.resource(:file, "/file_a")['ensure'].should == 'present'
+ catalog.resource(:file, "/file_b")['ensure'].should == 'absent'
+ catalog.resource(:file, "/file_c")['ensure'].should == 'present'
+ end
+
+ it 'each on a hash selecting key and value (using captures-last parameter)' do
+ catalog = compile_to_catalog(<<-MANIFEST)
+ $a = {'a'=>present,'b'=>absent,'c'=>present}
+ $a.each |*$kv| {
+ file { "/file_${kv[0]}": ensure => $kv[1] }
+ }
+ MANIFEST
+
+ catalog.resource(:file, "/file_a")['ensure'].should == 'present'
+ catalog.resource(:file, "/file_b")['ensure'].should == 'absent'
+ catalog.resource(:file, "/file_c")['ensure'].should == 'present'
+ end
+ end
+
+ context "should produce receiver" do
+ it 'each checking produced value using single expression' do
+ catalog = compile_to_catalog(<<-MANIFEST)
+ $a = [1, 3, 2]
+ $b = $a.each |$x| { "unwanted" }
+ file { "/file_${b[1]}":
+ ensure => present
+ }
+ MANIFEST
+
+ catalog.resource(:file, "/file_3")['ensure'].should == 'present'
+ end
+
+ end
+ it_should_behave_like 'all iterative functions argument checks', 'each'
+ it_should_behave_like 'all iterative functions hash handling', 'each'
+
+end