| # 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.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helpers')) |
| |
| describe Project, '.shell' do |
| |
| it 'should return the project\'s shell task' do |
| define('foo') |
| project('foo').shell.name.should eql('foo:shell') |
| end |
| |
| it 'should return a ShellTask' do |
| define('foo') |
| project('foo').shell.should be_kind_of(Shell::ShellTask) |
| end |
| |
| it 'should include compile and test.compile dependencies' do |
| define('foo') do |
| compile.using(:javac).with 'group:compile:jar:1.0' |
| test.compile.using(:javac).with 'group:test:jar:1.0' |
| end |
| project('foo').shell.classpath.should include(artifact('group:compile:jar:1.0')) |
| project('foo').shell.classpath.should include(artifact('group:test:jar:1.0')) |
| end |
| |
| it 'should respond to using() and return self' do |
| define 'foo' do |
| shell.using(:foo=>'Fooing').should be(shell) |
| end |
| end |
| |
| it 'should respond to using() and accept options' do |
| define 'foo' do |
| shell.using :foo=>'Fooing' |
| end |
| project('foo').shell.options[:foo].should eql('Fooing') |
| end |
| |
| it 'should select provider using shell.using' do |
| define 'foo' do |
| shell.using :bsh |
| end |
| project('foo').shell.provider.should be_a(Shell::BeanShell) |
| end |
| |
| it 'should select runner based on compile language' do |
| write 'src/main/java/Test.java', 'class Test {}' |
| define 'foo' do |
| # compile language detected as :java |
| end |
| project('foo').shell.provider.should be_a(Shell::BeanShell) |
| end |
| |
| it 'should depend on project''s compile task' do |
| define 'foo' |
| project('foo').shell.prerequisites.should include(project('foo').compile) |
| end |
| |
| it 'should be local task' do |
| define 'foo' do |
| define('bar') do |
| shell.using :bsh |
| end |
| end |
| task = project('foo:bar').shell |
| task.should_receive(:invoke_prerequisites) |
| task.should_receive(:run) |
| in_original_dir(project('foo:bar').base_dir) { task('shell').invoke } |
| end |
| |
| it 'should not recurse' do |
| define 'foo' do |
| shell.using :bsh |
| define('bar') { shell.using :bsh } |
| end |
| project('foo:bar').shell.should_not_receive(:invoke_prerequisites) |
| project('foo:bar').shell.should_not_receive(:run) |
| project('foo').shell.should_receive(:run) |
| project('foo').shell.invoke |
| end |
| |
| it 'should call shell provider with task configuration' do |
| define 'foo' do |
| shell.using :bsh |
| end |
| shell = project('foo').shell |
| shell.provider.should_receive(:launch).with(shell) |
| project('foo').shell.invoke |
| end |
| end |
| |
| shared_examples_for "shell provider" do |
| |
| it 'should have launch method accepting shell task' do |
| @instance.method(:launch).should_not be_nil |
| @instance.method(:launch).arity.should === 1 |
| end |
| |
| end |
| |
| Shell.providers.each do |provider| |
| describe provider do |
| before do |
| @provider = provider |
| @project = define('foo') {} |
| @instance = provider.new(@project) |
| @project.shell.using @provider.to_sym |
| end |
| |
| it_should_behave_like "shell provider" |
| |
| it 'should call Java::Commands.java with :java_args' do |
| @project.shell.using :java_args => ["-Xx"] |
| Java::Commands.should_receive(:java).with do |*args| |
| args.last.should be_a(Hash) |
| args.last.keys.should include(:java_args) |
| args.last[:java_args].should include('-Xx') |
| end |
| project('foo').shell.invoke |
| end |
| |
| it 'should call Java::Commands.java with :properties' do |
| @project.shell.using :properties => {:foo => "bar"} |
| Java::Commands.should_receive(:java).with do |*args| |
| args.last.should be_a(Hash) |
| args.last.keys.should include(:properties) |
| args.last[:properties][:foo].should == "bar" |
| end |
| project('foo').shell.invoke |
| end |
| end |
| end |