Raise an exception when double loading a formula

(As proposed in #2673)
This commit is contained in:
Alyssa Ross 2017-08-11 22:40:08 +01:00
parent d6d681ca01
commit 4760f4e803
No known key found for this signature in database
GPG Key ID: E7DCC566F9A36D30
2 changed files with 12 additions and 0 deletions

View File

@ -20,6 +20,8 @@ module Formulary
raise "Formula loading disabled by HOMEBREW_DISABLE_LOAD_FORMULA!"
end
raise "Formula #{name} has already been loaded" if const_defined?(namespace)
mod = Module.new
const_set(namespace, mod)
begin

View File

@ -27,6 +27,16 @@ describe Formulary do
let(:bottle_dir) { Pathname.new("#{TEST_FIXTURE_DIR}/bottles") }
let(:bottle) { bottle_dir/"testball_bottle-0.1.#{Utils::Bottles.tag}.bottle.tar.gz" }
describe "::load_formula" do
it "does not allow namespace repetition" do |example|
definition = "Foo = Class.new(Formula)"
namespace = "Test#{example.description.hash.abs}"
subject.load_formula("foo", "bar", definition, namespace)
expect { subject.load_formula("foo", "bar", definition, namespace) }
.to raise_error RuntimeError, /already.* loaded/
end
end
describe "::class_s" do
it "replaces '+' with 'x'" do
expect(subject.class_s("foo++")).to eq("Fooxx")