Prevent you from making a mistake that I made in testing: Creating two
"Application" objects with the same name can cause problems.
Surprisingly, changing this led me to rediscover a bug in rspec.

Signed-off-by: Jesse Wolfe <[email protected]>
---
 lib/puppet/application.rb |    4 ++++
 spec/unit/application.rb  |   16 +++++++---------
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/lib/puppet/application.rb b/lib/puppet/application.rb
index 0f479b0..c5ddc22 100644
--- a/lib/puppet/application.rb
+++ b/lib/puppet/application.rb
@@ -255,6 +255,10 @@ class Puppet::Application
 
         @name = symbolize(name)
 
+        if @@applications[name]
+            raise Puppet::DevError, "There is already an application named 
#{name.inspect}"
+        end
+
         init_default
 
         @options = {}
diff --git a/spec/unit/application.rb b/spec/unit/application.rb
index 87a9009..a290aba 100755
--- a/spec/unit/application.rb
+++ b/spec/unit/application.rb
@@ -8,8 +8,9 @@ require 'getoptlong'
 
 describe Puppet::Application do
 
-    before :each do
-        @app = Puppet::Application.new(:test)
+    before :all do
+        # Workaround due to rspec bug #819: This code is being called multiple 
times
+        @app = Puppet::Application[:test] || Puppet::Application.new(:test)
     end
 
     it "should have a run entry-point" do
@@ -36,6 +37,10 @@ describe Puppet::Application do
         @app.get_command.should == :main
     end
 
+    it "should not allow you to create another application of the same name" do
+        lambda{ Puppet::Application.new(:test) }.should 
raise_error(Puppet::DevError)
+    end
+
     describe 'when invoking clear!' do
         before :each do
             Puppet::Application.run_status = :stop_requested
@@ -170,7 +175,6 @@ describe Puppet::Application do
             ARGV.clear
 
             Puppet.settings.stubs(:optparse_addargs).returns([])
-            @app = Puppet::Application.new(:test)
         end
 
         after :each do
@@ -288,7 +292,6 @@ describe Puppet::Application do
     describe "when calling default setup" do
 
         before :each do
-            @app = Puppet::Application.new(:test)
             @app.stubs(:should_parse_config?).returns(false)
             @app.options.stubs(:[])
         end
@@ -317,7 +320,6 @@ describe Puppet::Application do
     describe "when running" do
 
         before :each do
-            @app = Puppet::Application.new(:test)
             @app.stubs(:run_preinit)
             @app.stubs(:run_setup)
             @app.stubs(:parse_options)
@@ -411,10 +413,6 @@ describe Puppet::Application do
 
     describe "when metaprogramming" do
 
-        before :each do
-            @app = Puppet::Application.new(:test)
-        end
-
         it "should create a new method with command" do
             @app.command(:test) do
             end
-- 
1.6.3.3

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to