Author: vborja
Date: Sun Aug 31 22:30:18 2008
New Revision: 690849

URL: http://svn.apache.org/viewvc?rev=690849&view=rev
Log:
specs for tasks specified as path-like command like arguments

Modified:
    incubator/buildr/trunk/spec/application_spec.rb

Modified: incubator/buildr/trunk/spec/application_spec.rb
URL: 
http://svn.apache.org/viewvc/incubator/buildr/trunk/spec/application_spec.rb?rev=690849&r1=690848&r2=690849&view=diff
==============================================================================
--- incubator/buildr/trunk/spec/application_spec.rb (original)
+++ incubator/buildr/trunk/spec/application_spec.rb Sun Aug 31 22:30:18 2008
@@ -56,7 +56,6 @@
   end
 
   describe 'gems' do
-
     def load_with_yaml
       write 'build.yaml', <<-YAML
         gems:
@@ -379,3 +378,87 @@
     end
   end
 end
+
+
+describe Buildr::Application do
+  describe  '--project option' do
+    it 'should change directory before loading buildfile' do
+      Dir.chdir('.') do 
+        write('buildfile', 'define("invalid") { }')
+        path = File.expand_path('path/to/project')
+        write(path+'/buildfile', 'define("valid") { }')
+        Buildr.application = Buildr::Application.new
+        Buildr.application.options.project = path
+        Buildr.application.should_receive(:top_level) do 
+          Dir.pwd.should == Buildr.application.options.project
+          Dir.pwd.should == Buildr.application.original_dir
+          Buildr::Project.project("valid").path_to(nil).should == path
+        end
+        lambda { Buildr.application.run }.should_not raise_error
+      end
+    end
+    
+    it 'should change to project basedir before executing tasks' do
+      Dir.chdir('.') do 
+        path = File.expand_path('bar/baz')
+        mkpath('bar/baz')
+        write('buildfile', 'define("foo") { define("bar") { define("baz") { } 
} }')
+        Buildr.application.options.project = 'foo:bar:baz'
+        Buildr.application.should_receive(:top_level) do 
+          Dir.pwd.should == path
+          Dir.pwd.should == Buildr.application.original_dir
+        end
+        lambda { Buildr.application.run }.should_not raise_error
+      end
+    end
+
+    it 'should change to project basedir before executing tasks (allow use 
file_separator for project name)' do
+      Dir.chdir('.') do 
+        path = File.expand_path('bar/baz')
+        mkpath('bar/baz')
+        write('buildfile', 'define("foo") { define("bar") { define("baz") { } 
} }')
+        Buildr.application.options.project = 'foo/bar/baz'
+        Buildr.application.should_receive(:top_level) do 
+          Dir.pwd.should == path
+          Dir.pwd.should == Buildr.application.original_dir
+        end
+        lambda { Buildr.application.run }.should_not raise_error
+      end
+    end
+
+  end
+
+  describe 'path-like command line arguments' do
+    
+    %W[moo/bar ./moo/bar].each do |path|
+      it 'should invoke a file-task given as relative path' do
+        file = File.expand_path(path)
+        write('buildfile', 'define("foo") { task("pre"){}; file(_("moo/bar") 
=> :pre) { |t| write(t.name, "bat") } }')
+        Buildr.application.should_receive(:top_level) do 
+          Buildr.application.invoke_task(path)
+          File.should exist(file)
+        end
+        lambda { Buildr.application.run }.should run_tasks("foo:pre")
+      end
+    end
+
+    %W[bar/bat ./bar/bat foo/bar/bat].each do |path|
+      it 'should invoke a project task given as relative path' do
+        write('buildfile', 'define("foo") { define("bar") { task("bat") {} } 
}')
+        Buildr.application.should_receive(:top_level) do 
+          Buildr.application.invoke_task(path)
+        end
+        lambda { Buildr.application.run }.should run_tasks("foo:bar:bat")
+      end
+    end
+
+    it 'should invoke build task if path is a project basedir' do
+      write('buildfile', 'define("foo") { define("bar") { define("baz") { } } 
}')
+      Buildr.application.should_receive(:top_level) do 
+        Buildr.application.invoke_task('bar/baz')
+      end
+      lambda { Buildr.application.run }.should 
run_tasks("foo:bar:baz:build").but_not("foo:bar:build", "foo:build")
+    end
+
+  end
+end


Reply via email to