Since required_features can (and frequently does) return a single item instead of an Array, the error message needed to be more robust.
The tests were not specific enough to catch the fact that an error was being raised in the generation of the error, so a more specific test was added and the required_features accessor test was beefed up a little. Signed-off-by: Markus Roberts <[email protected]> Signed-off-by: Markus Roberts <[email protected]> --- lib/puppet/property.rb | 4 ++-- spec/unit/property.rb | 18 ++++++++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/puppet/property.rb b/lib/puppet/property.rb index 1ed323f..abbc71c 100644 --- a/lib/puppet/property.rb +++ b/lib/puppet/property.rb @@ -1,4 +1,4 @@ - # The virtual base class for properties, which are the self-contained building +# The virtual base class for properties, which are the self-contained building # blocks for actually doing work on the system. require 'puppet' @@ -384,7 +384,7 @@ class Puppet::Property < Puppet::Parameter # Make sure that we've got all of the required features for a given value. def validate_features_per_value(value) if features = self.class.value_option(self.class.value_name(value), :required_features) - raise ArgumentError, "Provider must have features '%s' to set '%s' to '%s'" % [features.collect { |f| f.to_s }.join(", "), self.class.name, value] unless provider.satisfies?(features) + raise ArgumentError, "Provider must have features '%s' to set '%s' to '%s'" % [[features].flatten.join(", "), self.class.name, value] unless provider.satisfies?(features) end end diff --git a/spec/unit/property.rb b/spec/unit/property.rb index 07ab9c3..26a5765 100755 --- a/spec/unit/property.rb +++ b/spec/unit/property.rb @@ -34,10 +34,12 @@ describe Puppet::Property do @class.should respond_to(:required_features=) end - it "should always convert required features into an array of symbols" do - @class.required_features = %w{one two} - @class.required_features.should == [:one, :two] - end + {"one" => [:one],:one => [:one],%w{a} => [:a],[:b] => [:b],%w{one two} => [:one,:two],[:a,:b] => [:a,:b]}.each { |in_value,out_value| + it "should always convert required features into an array of symbols (e.g. #{in_value.inspect} --> #{out_value.inspect})" do + @class.required_features = in_value + @class.required_features.should == out_value + end + } it "should be able to shadow metaparameters" do @property.must respond_to(:shadow) @@ -200,6 +202,14 @@ describe Puppet::Property do lambda { @property.should = :foo }.should raise_error(Puppet::Error) end + it "should internally raise an ArgumentError if required features are missing" do + @class.newvalue(:foo, :required_features => [:a, :b]) + + @provider.expects(:satisfies?).with([:a, :b]).returns false + + lambda { @property.validate_features_per_value :foo }.should raise_error(ArgumentError) + end + it "should validate that all required features are present for regexes" do value = @class.newvalue(/./, :required_features => [:a, :b]) -- 1.6.4 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en -~----------~----~----~----~------~----~------~--~---
