summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorJeff McCune <jeff@puppetlabs.com>2012-01-11 17:39:15 -0800
committerJeff McCune <jeff@puppetlabs.com>2012-01-11 17:39:15 -0800
commitb7a59a80954fdfd9923a0cd560374591e24f00b1 (patch)
tree04b37f8f26ddca2b8791e9994268a56f8195c92e /spec
parentb082094599f4cd26c9cb0c67ae44880b0dc02407 (diff)
(#11901) Fix sort order error in tests for 'keys' and 'values'
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
Diffstat (limited to 'spec')
-rw-r--r--spec/unit/puppet/parser/functions/keys_spec.rb13
-rw-r--r--spec/unit/puppet/parser/functions/values_spec.rb21
2 files changed, 19 insertions, 15 deletions
diff --git a/spec/unit/puppet/parser/functions/keys_spec.rb b/spec/unit/puppet/parser/functions/keys_spec.rb
index 927be96..d928562 100644
--- a/spec/unit/puppet/parser/functions/keys_spec.rb
+++ b/spec/unit/puppet/parser/functions/keys_spec.rb
@@ -6,21 +6,20 @@ describe "the keys function" do
Puppet::Parser::Functions.autoloader.loadall
end
- before :each do
- @scope = Puppet::Parser::Scope.new
- end
+ let(:scope) { Puppet::Parser::Scope.new }
it "should exist" do
Puppet::Parser::Functions.function("keys").should == "function_keys"
end
it "should raise a ParseError if there is less than 1 arguments" do
- lambda { @scope.function_keys([]) }.should( raise_error(Puppet::ParseError))
+ lambda { scope.function_keys([]) }.should( raise_error(Puppet::ParseError))
end
it "should return an array of keys when given a hash" do
- result = @scope.function_keys([{'a'=>1, 'b' => 2}])
- result.should(eq(['a','b']))
+ result = scope.function_keys([{'a'=>1, 'b'=>2}])
+ # =~ performs 'array with same elements' (set) matching
+ # For more info see RSpec::Matchers::MatchArray
+ result.should =~ ['a','b']
end
-
end
diff --git a/spec/unit/puppet/parser/functions/values_spec.rb b/spec/unit/puppet/parser/functions/values_spec.rb
index f6eb5b6..a5fbbd8 100644
--- a/spec/unit/puppet/parser/functions/values_spec.rb
+++ b/spec/unit/puppet/parser/functions/values_spec.rb
@@ -6,25 +6,30 @@ describe "the values function" do
Puppet::Parser::Functions.autoloader.loadall
end
- before :each do
- @scope = Puppet::Parser::Scope.new
- 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))
+ 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'}])
- result.should(eq(['1','2','3']))
+ 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 values from a hash" do
- lambda { @scope.function_values([['a','b','c']]) }.should( raise_error(Puppet::ParseError))
+ 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