vaguerent/test/unit/vagrant/action/builder_test.rb

157 lines
3.5 KiB
Ruby

require File.expand_path("../../../base", __FILE__)
describe Vagrant::Action::Builder do
let(:data) { { :data => [] } }
let(:instance) { described_class.new }
# This returns a proc that can be used with the builder
# that simply appends data to an array in the env.
def appender_proc(data)
Proc.new { |env| env[:data] << data }
end
context "basic `use`" do
it "should add items to the stack and make them callable" do
data = {}
proc = Proc.new { |env| env[:data] = true }
instance.use proc
instance.call(data)
data[:data].should == true
end
it "should be able to add multiple items" do
data = {}
proc1 = Proc.new { |env| env[:one] = true }
proc2 = Proc.new { |env| env[:two] = true }
instance.use proc1
instance.use proc2
instance.call(data)
data[:one].should == true
data[:two].should == true
end
it "should be able to add another builder" do
data = {}
proc1 = Proc.new { |env| env[:one] = true }
# Build the first builder
one = described_class.new
one.use proc1
# Add it to this builder
two = described_class.new
two.use one
# Call the 2nd and verify results
two.call(data)
data[:one].should == true
end
it "should be able to set additional variables when using" do
data = { }
proc1 = Proc.new { |env| env[:data] += 1 }
# Build the first builder
one = described_class.new
one.use proc1, :data => 5
one.call(data)
data[:data].should == 6
end
end
context "inserting" do
it "can insert at an index" do
instance.use appender_proc(1)
instance.insert(0, appender_proc(2))
instance.call(data)
data[:data].should == [2, 1]
end
it "can insert next to a previous object" do
proc2 = appender_proc(2)
instance.use appender_proc(1)
instance.use proc2
instance.insert(proc2, appender_proc(3))
instance.call(data)
data[:data].should == [1, 3, 2]
end
it "can insert before" do
instance.use appender_proc(1)
instance.insert_before 0, appender_proc(2)
instance.call(data)
data[:data].should == [2, 1]
end
it "can insert after" do
instance.use appender_proc(1)
instance.use appender_proc(3)
instance.insert_after 0, appender_proc(2)
instance.call(data)
data[:data].should == [1, 2, 3]
end
it "raises an exception if an invalid object given" do
expect { instance.insert_after "object", appender_proc(1) }.
to raise_error(RuntimeError)
end
end
context "replace" do
it "can replace an object" do
proc1 = appender_proc(1)
proc2 = appender_proc(2)
instance.use proc1
instance.replace proc1, proc2
instance.call(data)
data[:data].should == [2]
end
it "can replace by index" do
proc1 = appender_proc(1)
proc2 = appender_proc(2)
instance.use proc1
instance.replace 0, proc2
instance.call(data)
data[:data].should == [2]
end
end
context "deleting" do
it "can delete by object" do
proc1 = appender_proc(1)
instance.use proc1
instance.use appender_proc(2)
instance.delete proc1
instance.call(data)
data[:data].should == [2]
end
it "can delete by index" do
proc1 = appender_proc(1)
instance.use proc1
instance.use appender_proc(2)
instance.delete 0
instance.call(data)
data[:data].should == [2]
end
end
end