Allow concat to take non-array second parameters
Also improve and extend concat tests to lock down functionality
This commit is contained in:
parent
ab981422a6
commit
35bf5fd8c9
3 changed files with 29 additions and 5 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue