diff options
| -rw-r--r-- | Library/Homebrew/formulary.rb | 2 | ||||
| -rw-r--r-- | Library/Homebrew/test/formulary_spec.rb | 10 |
2 files changed, 12 insertions, 0 deletions
diff --git a/Library/Homebrew/formulary.rb b/Library/Homebrew/formulary.rb index dd67b4f24..b26846e00 100644 --- a/Library/Homebrew/formulary.rb +++ b/Library/Homebrew/formulary.rb @@ -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 diff --git a/Library/Homebrew/test/formulary_spec.rb b/Library/Homebrew/test/formulary_spec.rb index 234ebc93c..7a7c8811a 100644 --- a/Library/Homebrew/test/formulary_spec.rb +++ b/Library/Homebrew/test/formulary_spec.rb @@ -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") |
