Allow concat to take non-array second parameters

Also improve and extend concat tests to lock down functionality
This commit is contained in:
Martin Foot 2014-02-21 14:32:32 +00:00
parent ab981422a6
commit 35bf5fd8c9
3 changed files with 29 additions and 5 deletions

View file

@ -145,6 +145,11 @@ Would result in:
['1','2','3','4','5','6']
concat(['1','2','3'],'4')
Would result in:
['1','2','3','4']
- *Type*: rvalue

View file

@ -23,12 +23,16 @@ Would result in:
a = arguments[0]
b = arguments[1]
# Check that both args are arrays.
unless a.is_a?(Array) and b.is_a?(Array)
# Check that the first parameter is an array
unless a.is_a?(Array)
raise(Puppet::ParseError, 'concat(): Requires array to work with')
end
result = a.concat(b)
if b.is_a?(Array)
result = a.concat(b)
else
result = a << b
end
return result
end

View file

@ -4,12 +4,27 @@ require 'spec_helper'
describe "the concat function" do
let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
it "should raise a ParseError if there is less than 1 arguments" do
lambda { scope.function_concat([]) }.should( raise_error(Puppet::ParseError))
it "should raise a ParseError if the client does not provide two arguments" do
lambda { scope.function_concat([]) }.should(raise_error(Puppet::ParseError))
end
it "should raise a ParseError if the first parameter is not an array" do
lambda { scope.function_concat([1, []])}.should(raise_error(Puppet::ParseError))
end
it "should be able to concat an array" do
result = scope.function_concat([['1','2','3'],['4','5','6']])
result.should(eq(['1','2','3','4','5','6']))
end
it "should be able to concat a primitive to an array" do
result = scope.function_concat([['1','2','3'],'4'])
result.should(eq(['1','2','3','4']))
end
it "should not accidentally flatten nested arrays" do
result = scope.function_concat([['1','2','3'],[['4','5'],'6']])
result.should(eq(['1','2','3',['4','5'],'6']))
end
end