1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
#!/usr/bin/env ruby
begin
require 'rubygems'
require_gem 'session'
rescue LoadError
puts "UNABLE TO RUN FUNCTIONAL TESTS"
puts "No Session Found"
end
require 'test/unit'
require 'fileutils'
# Version 2.1.9 of session has a bug where the @debug instance
# variable is not initialized, causing warning messages. This snippet
# of code fixes that problem.
module Session
class AbstractSession
alias old_initialize initialize
def initialize(*args)
@debug = nil
old_initialize(*args)
end
end
end
class FunctionalTest < Test::Unit::TestCase
def setup
@rake_path = File.expand_path("bin/rake")
lib_path = File.expand_path("lib")
@ruby_options = "-I#{lib_path} -I."
@verbose = ! ENV['VERBOSE'].nil?
end
def test_rake_default
Dir.chdir("test/data/default") do rake end
assert_match(/^DEFAULT$/, @out)
assert_status
end
def test_rake_error_on_bad_task
Dir.chdir("test/data/default") do rake "xyz" end
assert_match(/rake aborted/, @out)
assert_status(1)
end
def test_env_availabe_at_top_scope
Dir.chdir("test/data/default") do rake "TESTTOPSCOPE=1" end
assert_match(/^TOPSCOPE$/, @out)
assert_status
end
def test_env_availabe_at_task_scope
Dir.chdir("test/data/default") do rake "TESTTASKSCOPE=1 task_scope" end
assert_match(/^TASKSCOPE$/, @out)
assert_status
end
def test_multi_desc
Dir.chdir("test/data/multidesc") do rake "-T" end
assert_match %r{^rake a *# A / A2 *$}, @out
assert_match %r{^rake b *# B *$}, @out
assert_no_match %r{^rake c}, @out
end
def test_rbext
Dir.chdir("test/data/rbext") do rake "-N" end
assert_match %r{^OK$}, @out
end
def test_nosearch
Dir.chdir("test/data/nosearch") do rake "-N" end
assert_match %r{^No Rakefile found}, @out
end
def test_dry_run
Dir.chdir("test/data/default") do rake "-n", "other" end
assert_match %r{Execute \(dry run\) default}, @out
assert_match %r{Execute \(dry run\) other}, @out
assert_no_match %r{DEFAULT}, @out
assert_no_match %r{OTHER}, @out
end
# Test for the trace/dry_run bug found by Brian Chandler
def test_dry_run_bug
Dir.chdir("test/data/dryrun") do rake end
FileUtils.rm_f "test/data/dryrun/temp_one"
Dir.chdir("test/data/dryrun") do rake "--dry-run" end
assert_no_match(/No such file/, @out)
assert_status
end
# Test for the trace/dry_run bug found by Brian Chandler
def test_trace_bug
Dir.chdir("test/data/dryrun") do rake end
FileUtils.rm_f "test/data/dryrun/temp_one"
Dir.chdir("test/data/dryrun") do rake "--trace" end
assert_no_match(/No such file/, @out)
assert_status
end
def test_imports
FileUtils.rm_f "test/data/imports/dynamic_deps"
Dir.chdir("test/data/imports") do rake end
assert File.exist?("test/data/imports/dynamic_deps"),
"'dynamic_deps' file should exist"
assert_match(/^FIRST$\s+^DYNAMIC$\s+^STATIC$\s+^OTHER$/, @out)
assert_status
end
def test_rules_chaining_to_file_task
%w(play.scpt play.app).each do |fn|
FileUtils.rm_f File.join("test/data/chains", fn)
end
Dir.chdir("test/data/chains") do rake end
assert File.exist?("test/data/chains/play.app"),
"'play.app' file should exist"
assert_status
end
private
def rake(*option_list)
options = option_list.join(' ')
shell = Session::Shell.new
command = "ruby #{@ruby_options} #{@rake_path} #{options}"
puts "COMMAND: [#{command}]" if @verbose
@out, @err = shell.execute command
@status = shell.exit_status
puts "STATUS: [#{@status}]" if @verbose
puts "OUTPUT: [#{@out}]" if @verbose
puts "ERROR: [#{@err}]" if @verbose
puts "PWD: [#{Dir.pwd}]" if @verbose
shell.close
end
def assert_status(expected_status=0)
assert_equal expected_status, @status
end
end
|