test/loader_test.rb in boson-0.2.3 vs test/loader_test.rb in boson-0.2.4
- old
+ new
@@ -1,236 +1,235 @@
require File.join(File.dirname(__FILE__), 'test_helper')
-module Boson
- class LoaderTest < Test::Unit::TestCase
+describe "Loader" do
+ def load_namespace_library
+ Manager.load([Boson::Commands::Namespace])
+ end
- def load_namespace_library
- Manager.load([Boson::Commands::Namespace])
+ before { Gem.stubs(:loaded_specs).returns({}) } if RUBY_VERSION >= '1.9.2'
+ describe "config" do
+ before { reset }
+ it "from callback overridden by user's config" do
+ with_config(:libraries=>{'blih'=>{:namespace=>false}}) do
+ load :blih, :file_string=>"module Blah; def self.config; {:namespace=>'bling'}; end; end"
+ library('blih').namespace.should == false
+ end
end
- context "config" do
- before(:each) { reset }
- test "from callback overridden by user's config" do
- with_config(:libraries=>{'blih'=>{:namespace=>false}}) do
- load :blih, :file_string=>"module Blah; def self.config; {:namespace=>'bling'}; end; end"
- library('blih').namespace.should == false
- end
+ # if this test fails, other exists? using methods fail
+ it "from callback recursively merges with user's config" do
+ with_config(:libraries=>{'blah'=>{:commands=>{'bling'=>{:desc=>'bling', :options=>{:num=>3}}}}}) do
+ File.stubs(:exists?).returns(true)
+ load :blah, :file_string=> "module Blah; def self.config; {:commands=>{'blang'=>{:alias=>'ba'}, " +
+ "'bling'=>{:options=>{:verbose=>:boolean}}}}; end; end"
+ library('blah').command_object('bling').options.should == {:verbose=>:boolean, :num=>3}
+ library('blah').command_object('bling').desc.should == 'bling'
+ library('blah').command_object('blang').alias.should == 'ba'
end
+ end
- # if this test fails, other exists? using methods fail
- test "from callback recursively merges with user's config" do
- with_config(:libraries=>{'blah'=>{:commands=>{'bling'=>{:desc=>'bling', :options=>{:num=>3}}}}}) do
- File.stubs(:exists?).returns(true)
- load :blah, :file_string=> "module Blah; def self.config; {:commands=>{'blang'=>{:alias=>'ba'}, " +
- "'bling'=>{:options=>{:verbose=>:boolean}}}}; end; end"
- library('blah').command_object('bling').options.should == {:verbose=>:boolean, :num=>3}
- library('blah').command_object('bling').desc.should == 'bling'
- library('blah').command_object('blang').alias.should == 'ba'
- end
+ it "non-hash from inspector overridden by user's config" do
+ with_config(:libraries=>{'blah'=>{:commands=>{'bling'=>{:desc=>'already'}}}}) do
+ load :blah, :file_string=>"module Blah; #from file\ndef bling; end; end"
+ library('blah').command_object('bling').desc.should == 'already'
end
+ end
- test "non-hash from inspector overridden by user's config" do
- with_config(:libraries=>{'blah'=>{:commands=>{'bling'=>{:desc=>'already'}}}}) do
- load :blah, :file_string=>"module Blah; #from file\ndef bling; end; end"
- library('blah').command_object('bling').desc.should == 'already'
- end
+ it "from inspector attribute config sets command's config" do
+ load :blah, :file_string=>"module Blah; config :alias=>'ok'\n; def bling; end; end"
+ library('blah').command_object('bling').alias.should == 'ok'
+ end
+
+ it "hash from inspector recursively merged with user's config" do
+ with_config(:libraries=>{'blah'=>{:commands=>{'blung'=>{:args=>[], :render_options=>{:sort=>'this'}}}}}) do
+ CommentInspector.expects(:scrape).returns({:render_options=>{:fields=>['this']}})
+ load :blah, :file_string=>"module Blah; def blung; end; end"
+ library('blah').command_object('blung').render_options.should == {:fields=>["this"], :sort=>"this"}
end
+ end
+ end
- test "from inspector attribute config sets command's config" do
- load :blah, :file_string=>"module Blah; config :alias=>'ok'\n; def bling; end; end"
- library('blah').command_object('bling').alias.should == 'ok'
+ describe "load" do
+ before { reset }
+ it "calls included callback" do
+ capture_stdout {
+ load :blah, :file_string=>"module Blah; def self.included(mod); puts 'included blah'; end; def blah; end; end"
+ }.should =~ /included blah/
+ end
+
+ it "calls after_included callback" do
+ capture_stdout {
+ load :blah, :file_string=>"module Blah; def self.after_included; puts 'yo'; end; end"
+ }.should == "yo\n"
+ end
+
+ it "prints error if library module conflicts with top level constant/module" do
+ capture_stderr {
+ load :blah, :file_string=>"module Object; def self.blah; end; end"
+ }.should =~ /conflict.*'Object'/
+ library_loaded?('blah')
+ end
+
+ it "prints error and returns false for existing library" do
+ libs = create_library('blah', :loaded=>true)
+ Manager.stubs(:loader_create).returns(libs[0])
+ capture_stderr { load('blah', :no_mock=>true, :verbose=>true).should == false }.should =~ /already exists/
+ end
+
+ it "loads and strips aliases from a library's commands" do
+ with_config(:command_aliases=>{"blah"=>'b'}) do
+ load :blah, :file_string=>"module Blah; def blah; end; alias_method(:b, :blah); end"
+ library_loaded?('blah')
+ library('blah').commands.should == ['blah']
end
+ end
- test "hash from inspector recursively merged with user's config" do
- with_config(:libraries=>{'blah'=>{:commands=>{'blung'=>{:args=>[], :render_options=>{:sort=>'this'}}}}}) do
- CommentInspector.expects(:scrape).returns({:render_options=>{:fields=>['this']}})
- load :blah, :file_string=>"module Blah; def blung; end; end"
- library('blah').command_object('blung').render_options.should == {:fields=>["this"], :sort=>"this"}
- end
+ it "loads a library and creates its class commands" do
+ with_config(:libraries=>{"blah"=>{:class_commands=>{"bling"=>"Blah.bling", "Blah"=>['hmm']}}}) do
+ load :blah, :file_string=>"module Blah; def self.bling; end; def self.hmm; end; end"
+ command_exists? 'bling'
+ command_exists? 'hmm'
end
end
- context "load" do
- before(:each) { reset }
- test "calls included callback" do
- capture_stdout {
- load :blah, :file_string=>"module Blah; def self.included(mod); puts 'included blah'; end; def blah; end; end"
- }.should =~ /included blah/
+ it "loads a library with dependencies" do
+ File.stubs(:exists?).returns(true)
+ File.stubs(:read).returns("module Water; def water; end; end", "module Oaks; def oaks; end; end")
+ with_config(:libraries=>{"water"=>{:dependencies=>"oaks"}}) do
+ load 'water', :no_mock=>true
+ library_has_module('water', "Boson::Commands::Water")
+ library_has_module('oaks', "Boson::Commands::Oaks")
+ command_exists?('water')
+ command_exists?('oaks')
end
+ end
- test "calls after_included callback" do
- capture_stdout {
- load :blah, :file_string=>"module Blah; def self.after_included; puts 'yo'; end; end"
- }.should == "yo\n"
+ it "prints error for library with invalid dependencies" do
+ GemLibrary.stubs(:is_a_gem?).returns(true) #mock all as gem libs
+ Util.stubs(:safe_require).returns(true)
+ with_config(:libraries=>{"water"=>{:dependencies=>"fire"}, "fire"=>{:dependencies=>"man"}}) do
+ capture_stderr {
+ load('water', :no_mock=>true)
+ }.should == "Unable to load library fire. Reason: Can't load dependency man\nUnable to load"+
+ " library water. Reason: Can't load dependency fire\n"
end
+ end
- test "prints error if library module conflicts with top level constant/module" do
+ it "prints error for method conflicts with main_object method" do
+ with_config(:error_method_conflicts=>true) do
capture_stderr {
- load :blah, :file_string=>"module Object; def self.blah; end; end"
- }.should =~ /conflict.*'Object'/
- library_loaded?('blah')
+ load('blah', :file_string=>"module Blah; def require; end; end")
+ }.should =~ /Unable to load library blah.*conflict.*require/
end
+ end
- test "prints error and returns false for existing library" do
- libs = create_library('blah', :loaded=>true)
- Manager.stubs(:loader_create).returns(libs[0])
- capture_stderr { load('blah', :no_mock=>true, :verbose=>true).should == false }.should =~ /already exists/
+ it "prints error for method conflicts with config error_method_conflicts" do
+ with_config(:error_method_conflicts=>true) do
+ load('blah', :file_string=>"module Blah; def chwhat; end; end")
+ capture_stderr {
+ load('chwhat', :file_string=>"module Chwhat; def chwhat; end; end")
+ }.should =~ /Unable to load library chwhat.*conflict.*chwhat/
end
+ end
- test "loads and strips aliases from a library's commands" do
- with_config(:command_aliases=>{"blah"=>'b'}) do
- load :blah, :file_string=>"module Blah; def blah; end; alias_method(:b, :blah); end"
- library_loaded?('blah')
- library('blah').commands.should == ['blah']
- end
- end
+ it "namespaces a library that has a method conflict" do
+ load('blah', :file_string=>"module Blah; def chwhat; end; end")
+ capture_stderr {
+ load('chwhat2', :file_string=>"module Chwhat2; def chwhat; end; end")
+ }.should =~ /conflict.*chwhat.*chwhat2/
+ library_has_command('namespace', 'chwhat2')
+ library_has_command('chwhat2', 'chwhat')
+ end
- test "loads a library and creates its class commands" do
- with_config(:libraries=>{"blah"=>{:class_commands=>{"bling"=>"Blah.bling", "Blah"=>['hmm']}}}) do
- load :blah, :file_string=>"module Blah; def self.bling; end; def self.hmm; end; end"
- command_exists? 'bling'
- command_exists? 'hmm'
- end
+ describe "module library" do
+ def mock_library(*args); end
+
+ it "loads a module library and all its class methods by default" do
+ eval %[module ::Harvey; def self.bird; end; def self.eagle; end; end]
+ load ::Harvey, :no_mock=>true
+ library_has_command('harvey', 'bird')
+ library_has_command('harvey', 'eagle')
end
- test "loads a library with dependencies" do
- File.stubs(:exists?).returns(true)
- File.stubs(:read).returns("module Water; def water; end; end", "module Oaks; def oaks; end; end")
- with_config(:libraries=>{"water"=>{:dependencies=>"oaks"}}) do
- load 'water', :no_mock=>true
- library_has_module('water', "Boson::Commands::Water")
- library_has_module('oaks', "Boson::Commands::Oaks")
- command_exists?('water')
- command_exists?('oaks')
- end
+ it "loads a module library with specified commands" do
+ eval %[module ::Peanut; def self.bird; end; def self.eagle; end; end]
+ load ::Peanut, :no_mock=>true, :commands=>%w{bird}
+ library('peanut').commands.size.should == 1
+ library_has_command('peanut', 'bird')
end
- test "prints error for library with invalid dependencies" do
- GemLibrary.stubs(:is_a_gem?).returns(true) #mock all as gem libs
- Util.stubs(:safe_require).returns(true)
- with_config(:libraries=>{"water"=>{:dependencies=>"fire"}, "fire"=>{:dependencies=>"man"}}) do
- capture_stderr {
- load('water', :no_mock=>true)
- }.should == "Unable to load library fire. Reason: Can't load dependency man\nUnable to load"+
- " library water. Reason: Can't load dependency fire\n"
- end
+ it "loads a module library as a class" do
+ eval %[class ::Mentok; def self.bird; end; def self.eagle; end; end]
+ load ::Mentok, :no_mock=>true, :commands=>%w{bird}
+ library('mentok').commands.size.should == 1
+ library_has_command('mentok', 'bird')
end
+ end
- test "prints error for method conflicts with main_object method" do
- with_config(:error_method_conflicts=>true) do
- capture_stderr {
- load('blah', :file_string=>"module Blah; def require; end; end")
- }.should =~ /Unable to load library blah.*conflict.*require/
- end
+ describe "gem library" do
+ def mock_library(lib, options={})
+ options[:file_string] ||= ''
+ File.stubs(:exists?).returns(false)
+ GemLibrary.expects(:is_a_gem?).returns(true)
+ Util.expects(:safe_require).with { eval options.delete(:file_string) || ''; true}.returns(true)
end
- test "prints error for method conflicts with config error_method_conflicts" do
- with_config(:error_method_conflicts=>true) do
- load('blah', :file_string=>"module Blah; def chwhat; end; end")
- capture_stderr {
- load('chwhat', :file_string=>"module Chwhat; def chwhat; end; end")
- }.should =~ /Unable to load library chwhat.*conflict.*chwhat/
+ it "loads" do
+ with_config(:libraries=>{"dude"=>{:module=>'Dude'}}) do
+ load "dude", :file_string=>"module ::Dude; def blah; end; end"
+ library_has_module('dude', "Dude")
+ command_exists?("blah")
end
end
- test "namespaces a library that has a method conflict" do
- load('blah', :file_string=>"module Blah; def chwhat; end; end")
- capture_stderr {
- load('chwhat2', :file_string=>"module Chwhat2; def chwhat; end; end")
- }.should =~ /conflict.*chwhat.*chwhat2/
- library_has_command('namespace', 'chwhat2')
- library_has_command('chwhat2', 'chwhat')
+ it "with kernel methods loads" do
+ load "dude", :file_string=>"module ::Kernel; def dude; end; end"
+ library_loaded? 'dude'
+ library('dude').module.should == nil
+ command_exists?("dude")
end
- context "module library" do
- def mock_library(*args); end
-
- test "loads a module library and all its class methods by default" do
- eval %[module ::Harvey; def self.bird; end; def self.eagle; end; end]
- load ::Harvey, :no_mock=>true
- library_has_command('harvey', 'bird')
- library_has_command('harvey', 'eagle')
- end
-
- test "loads a module library with specified commands" do
- eval %[module ::Peanut; def self.bird; end; def self.eagle; end; end]
- load ::Peanut, :no_mock=>true, :commands=>%w{bird}
- library('peanut').commands.size.should == 1
- library_has_command('peanut', 'bird')
- end
-
- test "loads a module library as a class" do
- eval %[class ::Mentok; def self.bird; end; def self.eagle; end; end]
- load ::Mentok, :no_mock=>true, :commands=>%w{bird}
- library('mentok').commands.size.should == 1
- library_has_command('mentok', 'bird')
- end
+ it "prints error when nonexistent" do
+ capture_stderr { load('blah') }.should =~ /Unable.*load/
end
- context "gem library" do
- def mock_library(lib, options={})
- options[:file_string] ||= ''
- File.stubs(:exists?).returns(false)
- GemLibrary.expects(:is_a_gem?).returns(true)
- Util.expects(:safe_require).with { eval options.delete(:file_string) || ''; true}.returns(true)
+ it "with invalid module prints error" do
+ with_config(:libraries=>{"coolio"=>{:module=>"Cool"}}) do
+ capture_stderr {
+ load('coolio', :file_string=>"module ::Coolio; def coolio; end; end")
+ }.should =~ /Unable.*coolio.*No module/
end
-
- test "loads" do
- with_config(:libraries=>{"dude"=>{:module=>'Dude'}}) do
- load "dude", :file_string=>"module ::Dude; def blah; end; end"
- library_has_module('dude', "Dude")
- command_exists?("blah")
- end
- end
-
- test "with kernel methods loads" do
- load "dude", :file_string=>"module ::Kernel; def dude; end; end"
- library_loaded? 'dude'
- library('dude').module.should == nil
- command_exists?("dude")
- end
-
- test "prints error when nonexistent" do
- capture_stderr { load('blah') }.should =~ /Unable.*load/
- end
-
- test "with invalid module prints error" do
- with_config(:libraries=>{"coolio"=>{:module=>"Cool"}}) do
- capture_stderr {
- load('coolio', :file_string=>"module ::Coolio; def coolio; end; end")
- }.should =~ /Unable.*coolio.*No module/
- end
- end
end
end
+ end
- context "library with namespace" do
- before(:all) { reset_main_object }
- before(:each) { reset_boson }
+ describe "library with namespace" do
+ before_all { reset_main_object }
+ before { reset_boson }
- test "loads and defaults to library name" do
- with_config(:libraries=>{'blang'=>{:namespace=>true}}) do
- load 'blang', :file_string=>"module Blang; def bling; end; end"
- library_has_command('blang', 'bling')
- end
+ it "loads and defaults to library name" do
+ with_config(:libraries=>{'blang'=>{:namespace=>true}}) do
+ load 'blang', :file_string=>"module Blang; def bling; end; end"
+ library_has_command('blang', 'bling')
end
+ end
- test "loads with config namespace" do
- with_config(:libraries=>{'blung'=>{:namespace=>'dope'}}) do
- load 'blung', :file_string=>"module Blung; def bling; end; end"
- library_has_command('blung', 'bling')
- library('blung').commands.size.should == 1
- end
+ it "loads with config namespace" do
+ with_config(:libraries=>{'blung'=>{:namespace=>'dope'}}) do
+ load 'blung', :file_string=>"module Blung; def bling; end; end"
+ library_has_command('blung', 'bling')
+ library('blung').commands.size.should == 1
end
+ end
- test "prints error if namespace conflicts with existing commands" do
- eval "module Conflict; def self.bleng; end; end"
- load Conflict, :no_mock=>true
- with_config(:libraries=>{'bleng'=>{:namespace=>true}}) do
- capture_stderr {
- load 'bleng', :file_string=>"module Bleng; def bling; end; end"
- }.should =~ /conflict.*bleng/
- end
+ it "prints error if namespace conflicts with existing commands" do
+ eval "module ::Conflict; def self.bleng; end; end"
+ load Conflict, :no_mock=>true
+ with_config(:libraries=>{'bleng'=>{:namespace=>true}}) do
+ capture_stderr {
+ load 'bleng', :file_string=>"module Bleng; def bling; end; end"
+ }.should =~ /conflict.*bleng/
end
end
end
+ after_all { FileUtils.rm_r File.dirname(__FILE__)+'/commands/', :force=>true }
end