Runner.html is now generated (ensures all source & specs get tested); beginnings of refactoring of Rake tasks.
This commit is contained in:
251
Rakefile
251
Rakefile
@@ -1,170 +1,97 @@
|
||||
require 'json'
|
||||
require 'tilt'
|
||||
|
||||
def jasmine_sources
|
||||
first_sources = JSON.parse(File.read('src/SourcesList.json')).collect {|f| "src/core/#{f}"}
|
||||
|
||||
sources = first_sources
|
||||
sources += Dir.glob('src/core/*.js').reject {|f| first_sources.include?(f)}.sort
|
||||
sources
|
||||
Dir["#{File.dirname(__FILE__)}/tasks/**/*.rb"].each do |file|
|
||||
require file
|
||||
end
|
||||
|
||||
def jasmine_html_sources
|
||||
["src/html/TrivialReporter.js"]
|
||||
end
|
||||
|
||||
def jasmine_version
|
||||
"#{version_hash['major']}.#{version_hash['minor']}.#{version_hash['build']}"
|
||||
end
|
||||
|
||||
def version_hash
|
||||
require 'json'
|
||||
@version ||= JSON.parse(File.new("src/core/version.json").read);
|
||||
end
|
||||
|
||||
|
||||
def substitute_jasmine_version(filename)
|
||||
contents = File.read(filename)
|
||||
contents = contents.gsub(/##JASMINE_VERSION##/, (jasmine_version))
|
||||
contents = contents.gsub(/[^\n]*REMOVE_THIS_LINE_FROM_BUILD[^\n]*/, '')
|
||||
File.open(filename, 'w') { |f| f.write(contents) }
|
||||
task :require_node do
|
||||
raise "\nNode.js is required to develop code for Jasmine. Please visit http://nodejs.org to install.\n\n" unless node_installed?
|
||||
end
|
||||
|
||||
task :default => :spec
|
||||
|
||||
desc "Run spec suite: Browser, Node, JSHint"
|
||||
task :spec => ["jasmine:build", "spec:node", "spec:browser"]
|
||||
|
||||
namespace :spec do
|
||||
desc 'Run specs in Node.js'
|
||||
task :node do
|
||||
raise "Node is required to run all jasmine specs" unless system("node spec/node_suite.js")
|
||||
end
|
||||
|
||||
desc "Run specs in the default browser (MacOS only)"
|
||||
task :browser do
|
||||
system("open spec/runner.html")
|
||||
end
|
||||
end
|
||||
|
||||
namespace :jasmine do
|
||||
|
||||
desc 'Prepares for distribution'
|
||||
task :dist => ['jasmine:build',
|
||||
'jasmine:doc',
|
||||
'jasmine:build_pages',
|
||||
'jasmine:build_example_project',
|
||||
'jasmine:fill_index_downloads']
|
||||
|
||||
desc 'Check jasmine sources for coding problems'
|
||||
task :lint do
|
||||
puts "Running JSHint via Node.js"
|
||||
system("node jshint/run.js") || exit(1)
|
||||
end
|
||||
|
||||
desc "Alias to JSHint"
|
||||
task :hint => :lint
|
||||
|
||||
desc 'Builds lib/jasmine from source'
|
||||
task :build => :lint do
|
||||
puts 'Building Jasmine from source'
|
||||
|
||||
sources = jasmine_sources
|
||||
version = version_hash
|
||||
|
||||
File.open("lib/jasmine.js", 'w') do |jasmine|
|
||||
sources.each do |source_filename|
|
||||
jasmine.puts(File.read(source_filename))
|
||||
end
|
||||
|
||||
jasmine.puts %{
|
||||
jasmine.version_= {
|
||||
"major": #{version['major'].to_json},
|
||||
"minor": #{version['minor'].to_json},
|
||||
"build": #{version['build'].to_json},
|
||||
"revision": #{Time.now.to_i}
|
||||
};
|
||||
}
|
||||
end
|
||||
|
||||
File.open("lib/jasmine-html.js", 'w') do |jasmine_html|
|
||||
jasmine_html_sources.each do |source_filename|
|
||||
jasmine_html.puts(File.read(source_filename))
|
||||
end
|
||||
end
|
||||
|
||||
FileUtils.cp("src/html/jasmine.css", "lib/jasmine.css")
|
||||
end
|
||||
|
||||
downloads_file = 'pages/download.html'
|
||||
task :need_pages_submodule do
|
||||
unless File.exist?(downloads_file)
|
||||
raise "Jasmine pages submodule isn't present. Run git submodule update --init"
|
||||
end
|
||||
end
|
||||
|
||||
desc "Build the Github pages HTML"
|
||||
task :build_pages => :need_pages_submodule do
|
||||
Dir.chdir("pages") do
|
||||
FileUtils.rm_r('pages_output') if File.exist?('pages_output')
|
||||
Dir.chdir('pages_source') do
|
||||
system("frank export ../pages_output")
|
||||
end
|
||||
puts "\nCopying Frank output to the root of the gh-pages branch\n\n"
|
||||
system("cp -r pages_output/* .")
|
||||
end
|
||||
end
|
||||
|
||||
desc "Build jasmine documentation"
|
||||
task :doc => :need_pages_submodule do
|
||||
puts 'Creating Jasmine Documentation'
|
||||
require 'rubygems'
|
||||
require 'jsdoc_helper'
|
||||
|
||||
FileUtils.rm_r "pages/jsdoc", :force => true
|
||||
|
||||
JsdocHelper::Rake::Task.new(:lambda_jsdoc) do |t|
|
||||
t[:files] = jasmine_sources << jasmine_html_sources
|
||||
t[:options] = "-a"
|
||||
t[:out] = "pages/jsdoc"
|
||||
# JsdocHelper bug: template must be relative to the JsdocHelper gem, ick
|
||||
t[:template] = File.join("../".*(100), Dir::getwd, "jsdoc-template")
|
||||
end
|
||||
Rake::Task[:lambda_jsdoc].invoke
|
||||
end
|
||||
|
||||
desc "Build example project"
|
||||
task :build_example_project => :need_pages_submodule do
|
||||
require 'tmpdir'
|
||||
|
||||
temp_dir = File.join(Dir.tmpdir, 'jasmine-standalone-project')
|
||||
puts "Building Example Project in #{temp_dir}"
|
||||
FileUtils.rm_r temp_dir if File.exist?(temp_dir)
|
||||
Dir.mkdir(temp_dir)
|
||||
|
||||
root = File.expand_path(File.dirname(__FILE__))
|
||||
FileUtils.cp_r File.join(root, 'example/.'), File.join(temp_dir)
|
||||
substitute_jasmine_version(File.join(temp_dir, "SpecRunner.html"))
|
||||
|
||||
lib_dir = File.join(temp_dir, "lib/jasmine-#{jasmine_version}")
|
||||
FileUtils.mkdir_p(lib_dir)
|
||||
{
|
||||
"lib/jasmine.js" => "jasmine.js",
|
||||
"lib/jasmine-html.js" => "jasmine-html.js",
|
||||
"src/html/jasmine.css" => "jasmine.css",
|
||||
"MIT.LICENSE" => "MIT.LICENSE"
|
||||
}.each_pair do |src, dest|
|
||||
FileUtils.cp(File.join(root, src), File.join(lib_dir, dest))
|
||||
end
|
||||
|
||||
dist_dir = File.join(root, 'pages/downloads')
|
||||
zip_file_name = File.join(dist_dir, "jasmine-standalone-#{jasmine_version}.zip")
|
||||
puts "Zipping Example Project and moving to #{zip_file_name}"
|
||||
FileUtils.mkdir(dist_dir) unless File.exist?(dist_dir)
|
||||
if File.exist?(zip_file_name)
|
||||
puts "WARNING!!! #{zip_file_name} already exists!"
|
||||
FileUtils.rm(zip_file_name)
|
||||
end
|
||||
exec "cd #{temp_dir} && zip -r #{zip_file_name} . -x .[a-zA-Z0-9]*"
|
||||
end
|
||||
|
||||
end
|
||||
#namespace :jasmine do
|
||||
#
|
||||
# desc 'Prepares for distribution'
|
||||
# task :dist => ['jasmine:build',
|
||||
# 'jasmine:doc',
|
||||
# 'jasmine:build_pages',
|
||||
# 'jasmine:build_example_project',
|
||||
# 'jasmine:fill_index_downloads']
|
||||
#
|
||||
# end
|
||||
#
|
||||
# downloads_file = 'pages/download.html'
|
||||
# task :need_pages_submodule do
|
||||
# unless File.exist?(downloads_file)
|
||||
# raise "Jasmine pages submodule isn't present. Run git submodule update --init"
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# desc "Build the Github pages HTML"
|
||||
# task :build_pages => :need_pages_submodule do
|
||||
# Dir.chdir("pages") do
|
||||
# FileUtils.rm_r('pages_output') if File.exist?('pages_output')
|
||||
# Dir.chdir('pages_source') do
|
||||
# system("frank export ../pages_output")
|
||||
# end
|
||||
# puts "\nCopying Frank output to the root of the gh-pages branch\n\n"
|
||||
# system("cp -r pages_output/* .")
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# desc "Build jasmine documentation"
|
||||
# task :doc => :need_pages_submodule do
|
||||
# puts 'Creating Jasmine Documentation'
|
||||
# require 'rubygems'
|
||||
# require 'jsdoc_helper'
|
||||
#
|
||||
# FileUtils.rm_r "pages/jsdoc", :force => true
|
||||
#
|
||||
# JsdocHelper::Rake::Task.new(:lambda_jsdoc) do |t|
|
||||
# t[:files] = jasmine_sources << jasmine_html_sources
|
||||
# t[:options] = "-a"
|
||||
# t[:out] = "pages/jsdoc"
|
||||
# # JsdocHelper bug: template must be relative to the JsdocHelper gem, ick
|
||||
# t[:template] = File.join("../".*(100), Dir::getwd, "jsdoc-template")
|
||||
# end
|
||||
# Rake::Task[:lambda_jsdoc].invoke
|
||||
# end
|
||||
#
|
||||
# desc "Build example project"
|
||||
# task :build_example_project => :need_pages_submodule do
|
||||
# require 'tmpdir'
|
||||
#
|
||||
# temp_dir = File.join(Dir.tmpdir, 'jasmine-standalone-project')
|
||||
# puts "Building Example Project in #{temp_dir}"
|
||||
# FileUtils.rm_r temp_dir if File.exist?(temp_dir)
|
||||
# Dir.mkdir(temp_dir)
|
||||
#
|
||||
# root = File.expand_path(File.dirname(__FILE__))
|
||||
# FileUtils.cp_r File.join(root, 'example/.'), File.join(temp_dir)
|
||||
# substitute_jasmine_version(File.join(temp_dir, "SpecRunner.html"))
|
||||
#
|
||||
# lib_dir = File.join(temp_dir, "lib/jasmine-#{jasmine_version}")
|
||||
# FileUtils.mkdir_p(lib_dir)
|
||||
# {
|
||||
# "lib/jasmine.js" => "jasmine.js",
|
||||
# "lib/jasmine-html.js" => "jasmine-html.js",
|
||||
# "src/html/jasmine.css" => "jasmine.css",
|
||||
# "MIT.LICENSE" => "MIT.LICENSE"
|
||||
# }.each_pair do |src, dest|
|
||||
# FileUtils.cp(File.join(root, src), File.join(lib_dir, dest))
|
||||
# end
|
||||
#
|
||||
# dist_dir = File.join(root, 'pages/downloads')
|
||||
# zip_file_name = File.join(dist_dir, "jasmine-standalone-#{jasmine_version}.zip")
|
||||
# puts "Zipping Example Project and moving to #{zip_file_name}"
|
||||
# FileUtils.mkdir(dist_dir) unless File.exist?(dist_dir)
|
||||
# if File.exist?(zip_file_name)
|
||||
# puts "WARNING!!! #{zip_file_name} already exists!"
|
||||
# FileUtils.rm(zip_file_name)
|
||||
# end
|
||||
# exec "cd #{temp_dir} && zip -r #{zip_file_name} . -x .[a-zA-Z0-9]*"
|
||||
# end
|
||||
#
|
||||
#end
|
||||
|
||||
@@ -2463,10 +2463,9 @@ jasmine.getGlobal().clearInterval = function(timeoutKey) {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
jasmine.version_= {
|
||||
"major": 1,
|
||||
"minor": 1,
|
||||
"build": 0,
|
||||
"revision": 1307546962
|
||||
};
|
||||
"revision": 1307672575
|
||||
}
|
||||
|
||||
42
spec/templates/runner.html.erb
Normal file
42
spec/templates/runner.html.erb
Normal file
@@ -0,0 +1,42 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>Jasmine Test Runner</title>
|
||||
|
||||
<script type="text/javascript">
|
||||
// yes, really keep this here to keep us honest, but only for jasmine's own runner! [xw]
|
||||
undefined = "diz be undefined yo";
|
||||
</script>
|
||||
<link rel="shortcut icon" type="image/png" href="../images/jasmine_favicon.png">
|
||||
<script type="text/javascript" src="../lib/jasmine.js"></script>
|
||||
|
||||
<%= source_tags %>
|
||||
|
||||
<%= spec_file_tags %>
|
||||
|
||||
<script type="text/javascript">
|
||||
(function() {
|
||||
var jasmineEnv = jasmine.getEnv();
|
||||
jasmineEnv.updateInterval = 1000;
|
||||
|
||||
var trivialReporter = new jasmine.TrivialReporter();
|
||||
|
||||
jasmineEnv.addReporter(trivialReporter);
|
||||
|
||||
jasmineEnv.specFilter = function(spec) {
|
||||
return trivialReporter.specFilter(spec);
|
||||
};
|
||||
|
||||
window.onload = function() {
|
||||
jasmineEnv.execute();
|
||||
};
|
||||
})();
|
||||
</script>
|
||||
|
||||
<link href="../src/html/jasmine.css" rel="stylesheet"/>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
1
spec/templates/script_tag.html.erb
Normal file
1
spec/templates/script_tag.html.erb
Normal file
@@ -0,0 +1 @@
|
||||
<script type="text/javascript" src="<%= file %>"></script>
|
||||
@@ -19,4 +19,4 @@ jasmine.Block.prototype.execute = function(onComplete) {
|
||||
this.spec.fail(e);
|
||||
}
|
||||
onComplete();
|
||||
};
|
||||
};
|
||||
|
||||
@@ -74,4 +74,4 @@ jasmine.Runner.prototype.topLevelSuites = function() {
|
||||
|
||||
jasmine.Runner.prototype.results = function() {
|
||||
return this.queue.results();
|
||||
};
|
||||
};
|
||||
|
||||
@@ -79,4 +79,4 @@ jasmine.Suite.prototype.execute = function(onComplete) {
|
||||
this.queue.start(function () {
|
||||
self.finish(onComplete);
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
31
tasks/build_dist.rb
Normal file
31
tasks/build_dist.rb
Normal file
@@ -0,0 +1,31 @@
|
||||
desc "Build core jasmine.js"
|
||||
task :build_jasmine_js => :lint do
|
||||
puts 'Building Jasmine from source'
|
||||
|
||||
File.open("lib/jasmine.js", 'w') do |jasmine_js|
|
||||
core_sources.each do |source_filename|
|
||||
file = File.read(source_filename)
|
||||
# file += "\n" unless file.match(/\n$/)
|
||||
file.chomp
|
||||
jasmine_js << file
|
||||
end
|
||||
|
||||
jasmine_js << version_source
|
||||
end
|
||||
|
||||
File.open("lib/jasmine-html.js", 'w') do |jasmine_html|
|
||||
html_sources.each do |source_filename|
|
||||
jasmine_html.puts(File.read(source_filename))
|
||||
end
|
||||
end
|
||||
|
||||
FileUtils.cp("src/html/jasmine.css", "lib/jasmine.css")
|
||||
end
|
||||
|
||||
desc 'Check jasmine sources for coding problems'
|
||||
task :lint do
|
||||
puts "Running JSHint via Node.js"
|
||||
system("node jshint/run.js") || exit(1)
|
||||
end
|
||||
|
||||
task :hint => :lint
|
||||
32
tasks/build_specs.rb
Normal file
32
tasks/build_specs.rb
Normal file
@@ -0,0 +1,32 @@
|
||||
require 'ostruct'
|
||||
|
||||
desc "build the browser spec runner.html based on current tree"
|
||||
task :build_runner_html do
|
||||
template = Tilt.new('spec/templates/runner.html.erb')
|
||||
|
||||
File.open('spec/runner.html', 'w+') do |f|
|
||||
scope = OpenStruct.new(:source_tags => other_source_file_tags,
|
||||
:spec_file_tags => spec_file_tags)
|
||||
f << template.render(scope)
|
||||
end
|
||||
end
|
||||
|
||||
def other_source_file_tags
|
||||
other_files = html_sources + console_sources
|
||||
script_tags_for other_files.collect { |f| "../#{f}" }
|
||||
end
|
||||
|
||||
def spec_file_tags
|
||||
spec_files = core_specfiles + html_specfiles + console_specfiles
|
||||
script_tags_for spec_files.collect { |f| "../#{f}" }
|
||||
end
|
||||
|
||||
def script_tags_for(files)
|
||||
script_tag = Tilt::new('spec/templates/script_tag.html.erb')
|
||||
|
||||
files.inject([]) do |tags, f|
|
||||
scope = OpenStruct.new :file => f
|
||||
tags << script_tag.render(scope)
|
||||
tags
|
||||
end.join("\n ")
|
||||
end
|
||||
0
tasks/docs.rb
Normal file
0
tasks/docs.rb
Normal file
52
tasks/helpers.rb
Normal file
52
tasks/helpers.rb
Normal file
@@ -0,0 +1,52 @@
|
||||
require 'json'
|
||||
|
||||
def core_sources
|
||||
first_sources = JSON.parse(File.read('src/SourcesList.json')).collect { |f| "src/core/#{f}" }
|
||||
|
||||
remaining_sources = Dir.glob('src/core/*.js').reject { |f| first_sources.include?(f) }.sort
|
||||
|
||||
first_sources + remaining_sources
|
||||
end
|
||||
|
||||
def html_sources
|
||||
Dir.glob('src/html/*.js')
|
||||
end
|
||||
|
||||
def console_sources
|
||||
Dir.glob('src/console/*.js')
|
||||
end
|
||||
|
||||
def core_specfiles
|
||||
Dir.glob('spec/core/*.js')
|
||||
end
|
||||
|
||||
def html_specfiles
|
||||
Dir.glob('spec/html/*.js')
|
||||
end
|
||||
|
||||
def console_specfiles
|
||||
Dir.glob('spec/console/*.js')
|
||||
end
|
||||
|
||||
def version_string
|
||||
"#{version_hash['major']}.#{version_hash['minor']}.#{version_hash['build']}"
|
||||
end
|
||||
|
||||
def version_source
|
||||
<<-JS
|
||||
jasmine.version_= {
|
||||
"major": #{version_hash['major'].to_json},
|
||||
"minor": #{version_hash['minor'].to_json},
|
||||
"build": #{version_hash['build'].to_json},
|
||||
"revision": #{Time.now.to_i}
|
||||
}
|
||||
JS
|
||||
end
|
||||
|
||||
def version_hash
|
||||
@version ||= JSON.parse(File.new("src/core/version.json").read);
|
||||
end
|
||||
|
||||
def node_installed?
|
||||
`which node` =~ /node/
|
||||
end
|
||||
18
tasks/spec.rb
Normal file
18
tasks/spec.rb
Normal file
@@ -0,0 +1,18 @@
|
||||
desc "Run spec suite: Browser, Node, JSHint"
|
||||
task :spec => ["build_jasmine_js", "spec:node", "spec:browser"]
|
||||
|
||||
desc 'Run specs in Node.js'
|
||||
task "spec:node" => :require_node do
|
||||
puts "Running all appropriate specs via Node.js"
|
||||
system("node spec/node_suite.js")
|
||||
end
|
||||
|
||||
desc "Run specs in the default browser (MacOS only)"
|
||||
task "spec:browser" => :build_runner_html do
|
||||
puts "Running all appropriate specs via the default web browser"
|
||||
system("open spec/runner.html")
|
||||
end
|
||||
|
||||
#def core_spec_count
|
||||
#
|
||||
#end
|
||||
Reference in New Issue
Block a user