puppetlabs-stdlib/spec/unit/puppet/parser/functions/count_spec.rb
Jeff McCune 435226abfd (maint) Add the behavior for count() with arrays and hashes
Without this patch the expected behavior of the count() function when
dealing with an out of bound array index and with a hash key that does
not exist is implicitly encoded in the spec examples.  This is a problem
because the expected behavior is not clear for something similar to the
following example:

    node default {
      $ary = [ 1, 2, 3 ]
      $ary_undef = $ary[100]
      $hsh = { 'one' => 1 }
      $hsh_undef = $hsh['dne']
      $count = count(['hi', $ary_undef, $hsh_undef])
      notice "Count is ${count}"
    }

This patch addresses the problem by making the expected behavior
explicit in the examples.
2013-04-10 14:33:10 -07:00

31 lines
957 B
Ruby

#! /usr/bin/env ruby -S rspec
require 'spec_helper'
describe "the count function" do
let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
it "should exist" do
Puppet::Parser::Functions.function("count").should == "function_count"
end
it "should raise a ArgumentError if there is more than 2 arguments" do
lambda { scope.function_count(['foo', 'bar', 'baz']) }.should( raise_error(ArgumentError))
end
it "should be able to count arrays" do
scope.function_count([["1","2","3"]]).should(eq(3))
end
it "should be able to count matching elements in arrays" do
scope.function_count([["1", "2", "2"], "2"]).should(eq(2))
end
it "should not count nil or empty strings" do
scope.function_count([["foo","bar",nil,""]]).should(eq(2))
end
it 'does not count an undefined hash key or an out of bound array index (which are both :undef)' do
expect(scope.function_count([["foo",:undef,:undef]])).to eq(1)
end
end