]> gitweb.fluxo.info Git - puppet-stdlib.git/commitdiff
(#13494) Specify the behavior of zero padded strings
authorJeff McCune <jeff@puppetlabs.com>
Thu, 29 Mar 2012 22:12:06 +0000 (15:12 -0700)
committerJeff McCune <jeff@puppetlabs.com>
Thu, 29 Mar 2012 22:17:30 +0000 (15:17 -0700)
Without this patch the specified behavior of strings that are numeric
only and zero padded is unclear and untested in the spec tests.  This is
a problem because it's not clear that range('00', '10') will actually
return [ "0", "1", ..., "10" ] instead of [ "00", "01", ..., "10" ]

This patch addresses the issue by providing explicit test coverage.  If
the string conversion behavior of puppet changes, this test will begin
to fail.

lib/puppet/parser/functions/range.rb
spec/unit/puppet/parser/functions/range_spec.rb

index 6e854225075ba763b92b090ff4f09ee10b247fc9..825617b383011ba01298d951787b050ff2c149a1 100644 (file)
@@ -15,9 +15,18 @@ an array.
 
 Will return: [0,1,2,3,4,5,6,7,8,9]
 
+    range("00", "09")
+
+Will return: [0,1,2,3,4,5,6,7,8,9] (Zero padded strings are converted to
+integers automatically)
+
     range("a", "c")
 
 Will return: ["a","b","c"]
+
+    range("host01", "host10")
+
+Will return: ["host01", "host02", ..., "host09", "host10"]
     EOS
   ) do |arguments|
 
index 8c2446a170339bb66399867f107415951cd086f8..060423af5123369cc63cc030d16c42f5664dd24b 100644 (file)
@@ -6,8 +6,8 @@ describe "the range function" do
     Puppet::Parser::Functions.autoloader.loadall
   end
 
-  before :each do
-    @scope = Puppet::Parser::Scope.new
+  let :scope do
+    Puppet::Parser::Scope.new
   end
 
   it "should exist" do
@@ -15,17 +15,26 @@ describe "the range function" do
   end
 
   it "should raise a ParseError if there is less than 1 arguments" do
-    lambda { @scope.function_range([]) }.should( raise_error(Puppet::ParseError))
+    lambda { scope.function_range([]) }.should( raise_error(Puppet::ParseError))
   end
 
   it "should return a letter range" do
-    result = @scope.function_range(["a","d"])
+    result = scope.function_range(["a","d"])
     result.should(eq(['a','b','c','d']))
   end
 
   it "should return a number range" do
-    result = @scope.function_range(["1","4"])
+    result = scope.function_range(["1","4"])
     result.should(eq([1,2,3,4]))
   end
 
+  it "should work with padded hostname like strings" do
+    expected = ("host01".."host10").to_a
+    scope.function_range(["host01","host10"]).should eq expected
+  end
+
+  it "should coerce zero padded digits to integers" do
+    expected = (0..10).to_a
+    scope.function_range(["00", "10"]).should eq expected
+  end
 end