Nice catch.
I still wonder if there's a better way to track these than to store
them in @@applications. Like maybe there's a way for an app to
declare that it should be registered as a global app or something.
I've learned to distrust my code when I need to do what you're doing
in the before block here -- that is, when I'm testing an artificial
construct that is somehow global. It's become a code smell for me.
Not really a criticism, esp. since I wrote it in the first place, but
if you have a more elegant solution, I'm all for it.
On Apr 21, 2010, at 11:54 AM, Jesse Wolfe wrote:
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
.
--
Good judgment comes from experience, and experience comes from bad
judgment. --Barry LePatner
---------------------------------------------------------------------
Luke Kanies -|- http://puppetlabs.com -|- +1(615)594-8199
--
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.