Updated to latest rspec
[gitorious:georgyos-clone.git] / vendor / plugins / rspec / Rakefile
1 $:.unshift('lib')
2 require 'rubygems'
3 require 'rake/gempackagetask'
4 require 'rake/contrib/rubyforgepublisher'
5 require 'rake/clean'
6 require 'rake/rdoctask'
7 require 'rake/testtask'
8 require 'spec/version'
9 dir = File.dirname(__FILE__)
10
11 # Some of the tasks are in separate files since they are also part of the website documentation
12 load File.dirname(__FILE__) + '/rake_tasks/examples.rake'
13 load File.dirname(__FILE__) + '/rake_tasks/examples_with_rcov.rake'
14 load File.dirname(__FILE__) + '/rake_tasks/failing_examples_with_html.rake'
15 load File.dirname(__FILE__) + '/rake_tasks/verify_rcov.rake'
16
17 PKG_NAME = "rspec"
18 PKG_VERSION   = Spec::VERSION::STRING
19 PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
20 PKG_FILES = FileList[
21   '[A-Z]*',
22   'lib/**/*.rb', 
23   'spec/**/*',
24   'examples/**/*',
25   'failing_examples/**/*',
26   'plugins/**/*',
27   'stories/**/*',
28   'rake_tasks/**/*'
29 ]
30
31 task :default => [:verify_rcov]
32 task :verify_rcov => [:spec, :stories]
33
34 desc "Run all specs"
35 Spec::Rake::SpecTask.new do |t|
36   t.spec_files = FileList['spec/**/*_spec.rb']
37   t.spec_opts = ['--options', 'spec/spec.opts']
38   unless ENV['NO_RCOV']
39     t.rcov = true
40     t.rcov_dir = '../doc/output/coverage'
41     t.rcov_opts = ['--exclude', 'spec\/spec,bin\/spec,examples,\/var\/lib\/gems,\/Library\/Ruby,\.autotest']
42   end
43 end
44
45 desc "Run all stories"
46 task :stories do
47   html = 'story_server/prototype/rspec_stories.html'
48   ruby "stories/all.rb --colour --format plain --format html:#{html}"
49   unless IO.read(html) =~ /<span class="param">/m
50     raise 'highlighted parameters are broken in story HTML'
51   end
52 end
53
54 desc "Run all specs and store html output in doc/output/report.html"
55 Spec::Rake::SpecTask.new('spec_html') do |t|
56   t.spec_files = FileList['spec/**/*_spec.rb']
57   t.spec_opts = ['--format html:../../../../doc/output/report.html', '--format progress','--backtrace']
58 end
59
60 desc "Run all failing examples"
61 Spec::Rake::SpecTask.new('failing_examples') do |t|
62   t.spec_files = FileList['failing_examples/**/*_spec.rb']
63 end
64
65 desc 'Generate RDoc'
66 rd = Rake::RDocTask.new do |rdoc|
67   rdoc.rdoc_dir = '../doc/output/rdoc'
68   rdoc.options << '--title' << 'RSpec' << '--line-numbers' << '--inline-source' << '--main' << 'README'
69   rdoc.rdoc_files.include('README', 'CHANGES', 'MIT-LICENSE', 'UPGRADE', 'lib/**/*.rb')
70 end
71
72 spec = Gem::Specification.new do |s|
73   s.name = PKG_NAME
74   s.version = PKG_VERSION
75   s.summary = Spec::VERSION::DESCRIPTION
76   s.description = <<-EOF
77     RSpec is a behaviour driven development (BDD) framework for Ruby.  RSpec was
78     created in response to Dave Astels' article _A New Look at Test Driven Development_
79     which can be read at: http://daveastels.com/index.php?p=5  RSpec is intended to
80     provide the features discussed in Dave's article.
81   EOF
82
83   s.files = PKG_FILES.to_a
84   s.require_path = 'lib'
85
86   s.has_rdoc = true
87   s.rdoc_options = rd.options
88   s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$|^EXAMPLES.rd$/ }.to_a
89
90   s.bindir = 'bin'
91   s.executables = ['spec', 'spec_translator']
92   s.default_executable = 'spec'
93   s.author = "RSpec Development Team"
94   s.email = "rspec-devel@rubyforge.org"
95   s.homepage = "http://rspec.rubyforge.org"
96   s.platform = Gem::Platform::RUBY
97   s.rubyforge_project = "rspec"
98 end
99
100 Rake::GemPackageTask.new(spec) do |pkg|
101   pkg.need_zip = true
102   pkg.need_tar = true
103 end
104
105 def egrep(pattern)
106   Dir['**/*.rb'].each do |fn|
107     count = 0
108     open(fn) do |f|
109       while line = f.gets
110         count += 1
111         if line =~ pattern
112           puts "#{fn}:#{count}:#{line}"
113         end
114       end
115     end
116   end
117 end
118
119 desc "Look for TODO and FIXME tags in the code"
120 task :todo do
121   egrep /(FIXME|TODO|TBD)/
122 end
123
124 task :release => [:verify_committed, :verify_user, :spec, :publish_packages, :tag, :publish_news]
125
126 desc "Verifies that there is no uncommitted code"
127 task :verify_committed do
128   # IO.popen('git status') do |io|
129   #   io.each_line do |line|
130   #     raise "\n!!! Do a git commit first !!!\n\n" if line =~ /^#\s*modified:/
131   #   end
132   # end
133 end
134
135 desc "Creates a tag in svn"
136 task :tag do
137   # from = `svn info #{File.dirname(__FILE__)}`.match(/URL: (.*)\/rspec/n)[1]
138   # to = from.gsub(/trunk/, "tags/#{Spec::VERSION::TAG}")
139   # current = from.gsub(/trunk/, "tags/CURRENT")
140   # 
141   # puts "Creating tag in SVN"
142   # tag_cmd = "svn cp #{from} #{to} -m \"Tag release #{Spec::VERSION::FULL_VERSION}\""
143   # `#{tag_cmd}` ; raise "ERROR: #{tag_cmd}" unless $? == 0
144   # 
145   # puts "Removing CURRENT"
146   # remove_current_cmd = "svn rm #{current} -m \"Remove tags/CURRENT\""
147   # `#{remove_current_cmd}` ; raise "ERROR: #{remove_current_cmd}" unless $? == 0
148   # 
149   # puts "Re-Creating CURRENT"
150   # create_current_cmd = "svn cp #{to} #{current} -m \"Copy #{Spec::VERSION::TAG} to tags/CURRENT\""
151   # `#{create_current_cmd}` ; "ERROR: #{create_current_cmd}" unless $? == 0
152 end
153
154 task :verify_user do
155   raise "RUBYFORGE_USER environment variable not set!" unless ENV['RUBYFORGE_USER']
156 end
157
158 desc "Upload Website to RubyForge"
159 task :publish_website => [:verify_user, :website] do
160   unless Spec::VERSION::RELEASE_CANDIDATE
161     publisher = Rake::SshDirPublisher.new(
162       "rspec-website@rubyforge.org",
163       "/var/www/gforge-projects/#{PKG_NAME}",
164       "../doc/output"
165     )
166     publisher.upload
167   else
168     puts "** Not publishing packages to RubyForge - this is a prerelease"
169   end
170 end
171
172 desc "Upload Website archive to RubyForge"
173 task :archive_website => [:verify_user, :website] do
174   publisher = Rake::SshDirPublisher.new(
175     "rspec-website@rubyforge.org",
176     "/var/www/gforge-projects/#{PKG_NAME}/#{Spec::VERSION::TAG}",
177     "../doc/output"
178   )
179   publisher.upload
180 end
181
182 desc "Package the Rails plugin"
183 task :package_rspec_on_rails do
184   mkdir 'pkg' rescue nil
185   rm_rf "pkg/rspec-rails-#{PKG_VERSION}" rescue nil
186   `git clone ../rspec-rails pkg/rspec-rails-#{PKG_VERSION}`
187   rm_rf "pkg/rspec-rails-#{PKG_VERSION}/.git"
188   Dir.chdir 'pkg' do
189     `tar cvzf rspec-rails-#{PKG_VERSION}.tgz rspec-rails-#{PKG_VERSION}`
190   end
191 end
192 task :pkg => :package_rspec_on_rails
193
194 desc "Package the RSpec.tmbundle"
195 task :package_tmbundle do
196   mkdir 'pkg' rescue nil
197   rm_rf "pkg/RSpec-#{PKG_VERSION}.tmbundle" rescue nil
198   `git clone ../../../../RSpec.tmbundle pkg/RSpec-#{PKG_VERSION}.tmbundle`
199   rm_rf "pkg/RSpec-#{PKG_VERSION}.tmbundle/.git"
200   Dir.chdir 'pkg' do
201     `tar cvzf RSpec-#{PKG_VERSION}.tmbundle.tgz RSpec-#{PKG_VERSION}.tmbundle`
202   end
203 end
204 task :pkg => :package_tmbundle
205
206 desc "Publish gem+tgz+zip on RubyForge. You must make sure lib/version.rb is aligned with the CHANGELOG file"
207 task :publish_packages => [:verify_user, :package, :pkg] do
208   release_files = FileList[
209     "pkg/#{PKG_FILE_NAME}.gem",
210     "pkg/#{PKG_FILE_NAME}.tgz",
211     "pkg/rspec-rails-#{PKG_VERSION}.tgz",
212     "pkg/#{PKG_FILE_NAME}.zip",
213     "pkg/RSpec-#{PKG_VERSION}.tmbundle.tgz"
214   ]
215   unless Spec::VERSION::RELEASE_CANDIDATE
216     require 'meta_project'
217     require 'rake/contrib/xforge'
218
219     Rake::XForge::Release.new(MetaProject::Project::XForge::RubyForge.new(PKG_NAME)) do |xf|
220       # Never hardcode user name and password in the Rakefile!
221       xf.user_name = ENV['RUBYFORGE_USER']
222       xf.files = release_files.to_a
223       xf.release_name = "RSpec #{PKG_VERSION}"
224     end
225   else
226     puts "SINCE THIS IS A PRERELEASE, FILES ARE UPLOADED WITH SSH, NOT TO THE RUBYFORGE FILE SECTION"
227     puts "YOU MUST TYPE THE PASSWORD #{release_files.length} TIMES..."
228
229     host = "rspec-website@rubyforge.org"
230     remote_dir = "/var/www/gforge-projects/#{PKG_NAME}"
231
232     publisher = Rake::SshFilePublisher.new(
233       host,
234       remote_dir,
235       File.dirname(__FILE__),
236       *release_files
237     )
238     publisher.upload
239
240     puts "UPLADED THE FOLLOWING FILES:"
241     release_files.each do |file|
242       name = file.match(/pkg\/(.*)/)[1]
243       puts "* http://rspec.rubyforge.org/#{name}"
244     end
245
246     puts "They are not linked to anywhere, so don't forget to tell people!"
247   end
248 end
249
250 desc "Publish news on RubyForge"
251 task :publish_news => [:verify_user] do
252   unless Spec::VERSION::RELEASE_CANDIDATE
253     require 'meta_project'
254     require 'rake/contrib/xforge'
255     Rake::XForge::NewsPublisher.new(MetaProject::Project::XForge::RubyForge.new(PKG_NAME)) do |news|
256       # Never hardcode user name and password in the Rakefile!
257       news.user_name = ENV['RUBYFORGE_USER']
258     end
259   else
260     puts "** Not publishing news to RubyForge - this is a prerelease"
261   end
262 end