b7a59a8095
Between Ruby 1.8.7 p352 and p357 the way arrays were returned when using keys and values in Ruby changed, and due to assumption about the ordering our tests are now failing. This patch fixes the issue by using the =~ operator matcher in rspec. This matcher is implemented as RSpec::Matchers::MatchArray and performs multiset equality matching of arrays. Order doesn't matter, but duplicate values do. This patch also switches @scope instance variables to memoized let methods for clarity in the code. Original Author: Ken Barber Reviewed-by: Nick Lewis This commit closes GH-29
35 lines
1 KiB
Ruby
35 lines
1 KiB
Ruby
#!/usr/bin/env rspec
|
|
require 'spec_helper'
|
|
|
|
describe "the values function" do
|
|
before :all do
|
|
Puppet::Parser::Functions.autoloader.loadall
|
|
end
|
|
|
|
let(:scope) { Puppet::Parser::Scope.new }
|
|
|
|
it "should exist" do
|
|
Puppet::Parser::Functions.function("values").should == "function_values"
|
|
end
|
|
|
|
it "should raise a ParseError if there is less than 1 arguments" do
|
|
lambda { scope.function_values([]) }.should( raise_error(Puppet::ParseError))
|
|
end
|
|
|
|
it "should return values from a hash" do
|
|
result = scope.function_values([{'a'=>'1','b'=>'2','c'=>'3'}])
|
|
# =~ is the RSpec::Matchers::MatchArray matcher.
|
|
# A.K.A. "array with same elements" (multiset) matching
|
|
result.should =~ %w{ 1 2 3 }
|
|
end
|
|
|
|
it "should return a multiset" do
|
|
result = scope.function_values([{'a'=>'1','b'=>'3','c'=>'3'}])
|
|
result.should =~ %w{ 1 3 3 }
|
|
result.should_not =~ %w{ 1 3 }
|
|
end
|
|
|
|
it "should raise a ParseError unless a Hash is provided" do
|
|
lambda { scope.function_values([['a','b','c']]) }.should( raise_error(Puppet::ParseError))
|
|
end
|
|
end
|