70 lines
1.6 KiB
Ruby
70 lines
1.6 KiB
Ruby
require File.expand_path("../../../base", __FILE__)
|
|
|
|
require "vagrant/registry"
|
|
|
|
describe Vagrant::Config::Top do
|
|
include_context "unit"
|
|
|
|
let(:registry) { Vagrant::Registry.new }
|
|
let(:instance) { described_class.new(registry) }
|
|
|
|
it "should load in the proper config class" do
|
|
registry.register(:foo, Object)
|
|
|
|
instance.foo.should be_kind_of(Object)
|
|
end
|
|
|
|
it "should load the proper config class only once" do
|
|
registry.register(:foo, Object)
|
|
|
|
obj = instance.foo
|
|
instance.foo.should eql(obj)
|
|
end
|
|
|
|
it "still raises a method missing error if invalid key" do
|
|
expect { instance.foo }.to raise_error(NoMethodError)
|
|
end
|
|
|
|
describe "merging" do
|
|
let(:foo_class) do
|
|
Class.new do
|
|
attr_accessor :one
|
|
attr_accessor :two
|
|
|
|
def merge(other)
|
|
result = self.class.new
|
|
result.one = other.one || one
|
|
result.two = other.two || two
|
|
result
|
|
end
|
|
end
|
|
end
|
|
|
|
it "merges each key by calling `merge` on the class" do
|
|
registry.register(:foo, foo_class)
|
|
|
|
instance.foo.one = 1
|
|
instance.foo.two = 2
|
|
|
|
another = described_class.new(registry)
|
|
another.foo.one = 2
|
|
|
|
result = instance.merge(another)
|
|
result.foo.one.should == 2
|
|
result.foo.two.should == 2
|
|
end
|
|
|
|
it "merges keys that aren't in the source instance" do
|
|
reg = Vagrant::Registry.new
|
|
reg.register(:foo, foo_class)
|
|
|
|
another = described_class.new(reg)
|
|
another.foo.one = 2
|
|
|
|
result = instance.merge(another)
|
|
result.foo.one.should == 2
|
|
result.foo.two.should be_nil
|
|
end
|
|
end
|
|
end
|