Merge remote-tracking branch 'pr/56' into pull-56
[puppet_stdlib.git] / spec / unit / puppet / parser / functions / range_spec.rb
1 #! /usr/bin/env ruby -S rspec
2 require 'spec_helper'
3
4 describe "the range function" do
5   let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
6
7   it "should exist" do
8     Puppet::Parser::Functions.function("range").should == "function_range"
9   end
10
11   it "should raise a ParseError if there is less than 1 arguments" do
12     lambda { scope.function_range([]) }.should( raise_error(Puppet::ParseError))
13   end
14
15   it "should return a letter range" do
16     result = scope.function_range(["a","d"])
17     result.should(eq(['a','b','c','d']))
18   end
19
20   it "should return a letter range given a step of 1" do
21     result = scope.function_range(["a","d","1"])
22     result.should(eq(['a','b','c','d']))
23   end
24
25   it "should return a stepped letter range" do
26     result = scope.function_range(["a","d","2"])
27     result.should(eq(['a','c']))
28   end
29
30   it "should return a stepped letter range given a negative step" do
31     result = scope.function_range(["a","d","-2"])
32     result.should(eq(['a','c']))
33   end
34
35   it "should return a number range" do
36     result = scope.function_range(["1","4"])
37     result.should(eq([1,2,3,4]))
38   end
39
40   it "should work with padded hostname like strings" do
41     expected = ("host01".."host10").to_a
42     scope.function_range(["host01","host10"]).should eq expected
43   end
44
45   it "should coerce zero padded digits to integers" do
46     expected = (0..10).to_a
47     scope.function_range(["00", "10"]).should eq expected
48   end
49
50   it "should return a number range given a step of 1" do
51     result = scope.function_range(["1","4","1"])
52     result.should(eq([1,2,3,4]))
53   end
54
55   it "should return a stepped number range" do
56     result = scope.function_range(["1","4","2"])
57     result.should(eq([1,3]))
58   end
59
60   it "should return a stepped number range given a negative step" do
61     result = scope.function_range(["1","4","-2"])
62     result.should(eq([1,3]))
63   end
64
65 end