public
Description: A DRb server for testing frameworks (RSpec / Cucumber currently) that forks before each run to ensure a clean testing state.
Homepage: spork.rubyforge.org
Clone URL: git://github.com/timcharper/spork.git
spork / Rakefile
100644 151 lines (130 sloc) 4.646 kb
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
142
143
144
145
146
147
148
149
150
151
require 'rubygems'
require 'rake'
 
begin
  require 'jeweler'
  Jeweler::Tasks.new do |s|
    s.name = %q{spork}
    s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
    s.authors = ["Tim Harper"]
    s.date = Date.today.to_s
    s.description = %q{A forking Drb spec server}
    s.email = ["timcharper+spork@gmail.com"]
    s.executables = ["spork"]
    s.extra_rdoc_files = ["README.rdoc", "MIT-LICENSE"]
    s.files = ["geminstaller.yml", "README.rdoc", "MIT-LICENSE"] + Dir["lib/**/*"] + Dir["assets/**/*"] + Dir["spec/**/*"] + Dir["features/**/*"]
    s.has_rdoc = true
    s.homepage = %q{http://github.com/timcharper/spork}
    s.rdoc_options = ["--main", "README.rdoc"]
    s.require_paths = ["lib"]
    s.rubyforge_project = %q{spork}
    s.rubygems_version = %q{1.3.1}
    s.summary = %{spork #{s.version}}
   # s is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
  end
 
  Jeweler::RubyforgeTasks.new do |rubyforge|
    rubyforge.doc_task = "rdoc"
  end
 
rescue LoadError
  puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
end
 
require 'spec/rake/spectask'
Spec::Rake::SpecTask.new(:spec) do |spec|
  spec.libs << 'lib' << 'spec'
  spec.spec_files = FileList['spec/**/*_spec.rb']
end
 
Spec::Rake::SpecTask.new(:rcov) do |spec|
  spec.libs << 'lib' << 'spec'
  spec.pattern = 'spec/**/*_spec.rb'
  spec.rcov = true
end
 
begin
  require 'cucumber/rake/task'
  Cucumber::Rake::Task.new(:features)
rescue LoadError
  task :features do
    abort "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
  end
end
 
task :default => :spec
 
require 'rake/rdoctask'
Rake::RDocTask.new do |rdoc|
  if File.exist?('VERSION.yml')
    require 'yaml'
    config = YAML.load(File.read('VERSION.yml'))
    version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
  else
    version = ""
  end
 
  rdoc.rdoc_dir = 'rdoc'
  rdoc.title = "Spork #{version}"
  rdoc.rdoc_files.include('README*')
  rdoc.rdoc_files.include('lib/**/*.rb')
end
 
 
# These are new tasks
begin
  require 'rake/contrib/sshpublisher'
  namespace :rubyforge do
 
    desc "Release gem and RDoc documentation to RubyForge"
    task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
 
    namespace :release do
      desc "Publish RDoc to RubyForge."
      task :docs => [:rdoc] do
        config = YAML.load(
            File.read(File.expand_path('~/.rubyforge/user-config.yml'))
        )
 
        host = "#{config['username']}@rubyforge.org"
        remote_dir = "/var/www/gforge-projects/spork/"
        local_dir = 'rdoc'
 
        Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
      end
    end
  end
rescue LoadError
  puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
end
 
task :test_rails do
  FAIL_MSG = "!! FAIL !!"
  OK_MSG = "OK"
  UNSUPPORTED_MSG = "Unsupported"
  rails_gems = `gem list rails`.grep(/^rails\b/).first
  versions = rails_gems.scan(/\((.+)\)/).flatten.first.split(", ")
  versions_2_x_gems = versions.grep(/^2/)
  results = {}
  versions_2_x_gems.each do |version|
    if version < '2.0.5'
      puts "-----------------------------------------------------"
      puts "Rails #{version} is not officially supported by Spork"
      puts "Why? http://www.nabble.com/rspec-rails-fails-to-find-a-controller-name-td23223425.html"
      puts "-----------------------------------------------------"
      results[version] = "unsupported"
      next
    end
    
    
    puts "Testing version #{version}"
    pid = Kernel.fork do
      test_files = %w[features/rspec_rails_integration.feature features/rails_delayed_loading_workarounds.feature]
      
      unless version < '2.1'
        # pending a fix, the following error happens with rails 2.0:
        # /opt/local/lib/ruby/gems/1.8/gems/cucumber-0.3.11/lib/cucumber/rails/world.rb:41:in `use_transactional_fixtures': undefined method `configuration' for Rails:Module (NoMethodError)
        test_files << "features/cucumber_rails_integration.feature "
      end
      exec("env RAILS_VERSION=#{version} cucumber #{test_files * ' '}; echo $? > result")
    end
    Process.waitpid(pid)
    result = File.read('result').chomp
    FileUtils.rm('result')
    if result=='0'
      results[version] = OK_MSG
    else
      results[version] = FAIL_MSG
    end
  end
  
  puts "Results:"
  results.keys.sort.each do |version|
    puts "#{version}:\t#{results[version]}"
  end
  if results.values.any? { |r| r == FAIL_MSG }
    exit 1
  else
    exit 0
  end
end