# Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with this # work for additional information regarding copyright ownership. The ASF # licenses this file to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. require File.join(File.dirname(__FILE__), 'spec_helpers') describe 'local task', :shared=>true do it "should execute task for project in current directory" do define 'foobar' lambda { @task.invoke }.should run_task("foobar:#{@task.name}") end it "should not execute task for projects in other directory" do define 'foobar', :base_dir=>'elsewhere' lambda { task('build').invoke }.should_not run_task('foobar:build') end end describe 'build task' do it_should_behave_like 'local task' before(:each) { @task = task('build') } end describe 'clean task' do it_should_behave_like 'local task' before(:each) { @task = task('clean') } end describe 'package task' do it_should_behave_like 'local task' before(:each) { @task = task('package') } it 'should execute build task as prerequisite' do lambda { @task.invoke }.should run_task('build') end end describe 'install task' do it_should_behave_like 'local task' before(:each) { @task = task('install') } it 'should execute package task as prerequisite' do lambda { @task.invoke }.should run_task('package') end end describe 'uninstall task' do it_should_behave_like 'local task' before(:each) { @task = task('uninstall') } end describe 'upload task' do it_should_behave_like 'local task' before(:each) { @task = task('upload') } it 'should execute package task as prerequisite' do lambda { @task.invoke }.should run_task('package') end end describe Project, '#build' do it 'should return the project\'s build task' do define('foo').build.should eql(task('foo:build')) end it 'should enhance the project\'s build task' do task 'prereq' task 'action' define 'foo' do build 'prereq' do task('action').invoke end end lambda { project('foo').build.invoke }.should run_tasks('prereq', 'action') end it 'should execute build task for sub-project' do define 'foo' do define 'bar' end lambda { task('foo:build').invoke }.should run_task('foo:bar:build') end it 'should not execute build task of other projects' do define 'foo' define 'bar' lambda { task('foo:build').invoke }.should_not run_task('bar:build') end end describe Project, '#clean' do it 'should return the project\'s clean task' do define('foo').clean.should eql(task('foo:clean')) end it 'should enhance the project\'s clean task' do task 'prereq' task 'action' define 'foo' do clean 'prereq' do task('action').invoke end end lambda { project('foo').clean.invoke }.should run_tasks('prereq', 'action') end it 'should remove target directory' do define 'foo' do self.layout[:target] = 'targeted' end mkpath 'targeted' lambda { project('foo').clean.invoke }.should change { File.exist?('targeted') }.from(true).to(false) end it 'should remove reports directory' do define 'foo' do self.layout[:reports] = 'reported' end mkpath 'reported' lambda { project('foo').clean.invoke }.should change { File.exist?('reported') }.from(true).to(false) end it 'should execute clean task for sub-project' do define 'foo' do define 'bar' end lambda { task('foo:clean').invoke }.should run_task('foo:bar:clean') end it 'should not execute clean task of other projects' do define 'foo' define 'bar' lambda { task('foo:clean').invoke }.should_not run_task('bar:clean') end end describe Project, '#target' do before :each do @project = define('foo', :layout=>Layout.new) end it 'should default to target' do @project.target.should eql('target') end it 'should set layout :target' do @project.target = 'bar' @project.layout.expand(:target).should point_to_path('bar') end it 'should come from layout :target' do @project.layout[:target] = 'baz' @project.target.should eql('baz') end end describe Project, '#reports' do before :each do @project = define('foo', :layout=>Layout.new) end it 'should default to reports' do @project.reports.should eql('reports') end it 'should set layout :reports' do @project.reports = 'bar' @project.layout.expand(:reports).should point_to_path('bar') end it 'should come from layout :reports' do @project.layout[:reports] = 'baz' @project.reports.should eql('baz') end end