2017-07-23 11:36:41 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2016-08-06 13:28:46 -04:00
|
|
|
require "rake/testtask"
|
2017-02-21 13:41:17 -05:00
|
|
|
require "fileutils"
|
2017-03-30 14:40:39 -04:00
|
|
|
require "open3"
|
|
|
|
|
2013-04-16 18:06:11 -04:00
|
|
|
desc "Default Task"
|
2016-08-06 13:36:34 -04:00
|
|
|
task default: :test
|
2013-04-16 18:06:11 -04:00
|
|
|
|
2017-03-30 14:40:39 -04:00
|
|
|
task package: %w( assets:compile assets:verify )
|
2016-01-31 13:01:03 -05:00
|
|
|
|
2013-04-16 18:06:11 -04:00
|
|
|
# Run the unit tests
|
|
|
|
|
|
|
|
desc "Run all unit tests"
|
2016-08-06 13:36:34 -04:00
|
|
|
task test: ["test:template", "test:integration:action_pack", "test:integration:active_record"]
|
2013-04-16 18:06:11 -04:00
|
|
|
|
|
|
|
namespace :test do
|
2013-06-20 12:24:50 -04:00
|
|
|
task :isolated do
|
2013-10-02 17:57:58 -04:00
|
|
|
Dir.glob("test/{actionpack,activerecord,template}/**/*_test.rb").all? do |file|
|
2016-08-06 13:28:46 -04:00
|
|
|
sh(Gem.ruby, "-w", "-Ilib:test", file)
|
2016-09-01 17:41:49 -04:00
|
|
|
end || raise("Failures")
|
2013-04-16 18:06:11 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
Rake::TestTask.new(:template) do |t|
|
2016-08-06 13:28:46 -04:00
|
|
|
t.libs << "test"
|
|
|
|
t.test_files = Dir.glob("test/template/**/*_test.rb")
|
2013-08-05 18:43:32 -04:00
|
|
|
t.warning = true
|
|
|
|
t.verbose = true
|
2014-09-27 10:37:44 -04:00
|
|
|
t.ruby_opts = ["--dev"] if defined?(JRUBY_VERSION)
|
2013-04-16 18:06:11 -04:00
|
|
|
end
|
|
|
|
|
2018-04-04 20:14:52 -04:00
|
|
|
desc "Run tests for rails-ujs"
|
2017-02-21 13:41:17 -05:00
|
|
|
task :ujs do
|
2019-02-05 09:50:06 -05:00
|
|
|
system("npm run lint")
|
|
|
|
exit $?.exitstatus unless $?.success?
|
|
|
|
|
2017-02-21 13:41:17 -05:00
|
|
|
begin
|
2019-02-05 09:50:06 -05:00
|
|
|
listen_host = "localhost"
|
|
|
|
listen_port = "4567"
|
|
|
|
|
|
|
|
runner_command = %w(ruby ../ci/qunit-selenium-runner.rb)
|
|
|
|
if ENV["SELENIUM_DRIVER_URL"]
|
|
|
|
require "socket"
|
|
|
|
runner_command += %W(http://#{Socket.gethostname}:#{listen_port}/ #{ENV["SELENIUM_DRIVER_URL"]})
|
|
|
|
listen_host = "0.0.0.0"
|
|
|
|
else
|
|
|
|
runner_command += %W(http://localhost:#{listen_port}/)
|
|
|
|
end
|
|
|
|
|
2017-02-21 13:41:17 -05:00
|
|
|
Dir.mkdir("log")
|
2019-02-05 09:50:06 -05:00
|
|
|
pid = File.open("log/test.log", "w") do |f|
|
|
|
|
spawn(*%W(rackup test/ujs/config.ru -o #{listen_host} -p #{listen_port} -s puma), out: f, err: f, pgroup: true)
|
|
|
|
end
|
2017-02-21 13:41:17 -05:00
|
|
|
|
|
|
|
start_time = Time.now
|
|
|
|
|
|
|
|
loop do
|
2017-07-26 11:28:12 -04:00
|
|
|
break if system("lsof -i :4567", 1 => File::NULL)
|
2017-02-21 13:41:17 -05:00
|
|
|
|
|
|
|
if Time.now - start_time > 5
|
2019-02-05 09:50:06 -05:00
|
|
|
puts "Failed to start puma after 5 seconds"
|
|
|
|
puts
|
|
|
|
puts File.read("log/test.log")
|
2017-02-21 13:41:17 -05:00
|
|
|
exit 1
|
|
|
|
end
|
2019-02-05 09:50:06 -05:00
|
|
|
|
|
|
|
sleep 0.2
|
2017-02-21 13:41:17 -05:00
|
|
|
end
|
|
|
|
|
2019-02-05 09:50:06 -05:00
|
|
|
system(*runner_command)
|
2017-10-20 02:06:37 -04:00
|
|
|
status = $?.exitstatus
|
2017-02-21 13:41:17 -05:00
|
|
|
ensure
|
2017-11-08 21:28:39 -05:00
|
|
|
Process.kill("KILL", -pid) if pid
|
2017-07-20 18:35:26 -04:00
|
|
|
FileUtils.rm_rf("log")
|
2017-02-21 13:41:17 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
exit status
|
|
|
|
end
|
|
|
|
|
2013-08-05 18:43:32 -04:00
|
|
|
namespace :integration do
|
2018-04-13 10:39:51 -04:00
|
|
|
# Active Record Integration Tests
|
2013-08-05 18:43:32 -04:00
|
|
|
Rake::TestTask.new(:active_record) do |t|
|
2016-08-06 13:28:46 -04:00
|
|
|
t.libs << "test"
|
2013-08-05 18:43:32 -04:00
|
|
|
t.test_files = Dir.glob("test/activerecord/*_test.rb")
|
|
|
|
t.warning = true
|
|
|
|
t.verbose = true
|
2014-09-27 10:37:44 -04:00
|
|
|
t.ruby_opts = ["--dev"] if defined?(JRUBY_VERSION)
|
2013-08-05 18:43:32 -04:00
|
|
|
end
|
2013-08-05 18:47:49 -04:00
|
|
|
|
2018-04-13 10:39:51 -04:00
|
|
|
# Action Pack Integration Tests
|
2013-08-05 18:47:49 -04:00
|
|
|
Rake::TestTask.new(:action_pack) do |t|
|
2016-08-06 13:28:46 -04:00
|
|
|
t.libs << "test"
|
2013-08-13 16:28:51 -04:00
|
|
|
t.test_files = Dir.glob("test/actionpack/**/*_test.rb")
|
2013-08-05 18:47:49 -04:00
|
|
|
t.warning = true
|
|
|
|
t.verbose = true
|
2014-09-27 10:37:44 -04:00
|
|
|
t.ruby_opts = ["--dev"] if defined?(JRUBY_VERSION)
|
2013-08-05 18:47:49 -04:00
|
|
|
end
|
2013-08-05 18:43:32 -04:00
|
|
|
end
|
2013-04-16 18:06:11 -04:00
|
|
|
end
|
|
|
|
|
2016-11-25 23:42:29 -05:00
|
|
|
namespace :ujs do
|
|
|
|
desc "Starts the test server"
|
|
|
|
task :server do
|
2016-12-28 21:53:51 -05:00
|
|
|
system "bundle exec rackup test/ujs/config.ru -p 4567 -s puma"
|
2016-11-25 23:42:29 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-11-26 08:58:55 -05:00
|
|
|
namespace :assets do
|
|
|
|
desc "Compile Action View assets"
|
|
|
|
task :compile do
|
|
|
|
require "blade"
|
2017-03-30 14:40:39 -04:00
|
|
|
require "sprockets"
|
|
|
|
require "sprockets/export"
|
2016-11-26 08:58:55 -05:00
|
|
|
Blade.build
|
|
|
|
end
|
2017-03-30 14:40:39 -04:00
|
|
|
|
2017-03-31 08:25:18 -04:00
|
|
|
desc "Verify compiled Action View assets"
|
2017-03-30 14:40:39 -04:00
|
|
|
task :verify do
|
|
|
|
file = "lib/assets/compiled/rails-ujs.js"
|
2017-05-15 10:17:28 -04:00
|
|
|
pathname = Pathname.new("#{__dir__}/#{file}")
|
2017-03-30 14:40:39 -04:00
|
|
|
|
|
|
|
print "[verify] #{file} exists "
|
|
|
|
if pathname.exist?
|
|
|
|
puts "[OK]"
|
|
|
|
else
|
|
|
|
$stderr.puts "[FAIL]"
|
|
|
|
fail
|
|
|
|
end
|
|
|
|
|
|
|
|
print "[verify] #{file} is a UMD module "
|
2018-07-28 17:37:17 -04:00
|
|
|
if /module\.exports.*define\.amd/m.match?(pathname.read)
|
2017-03-30 14:40:39 -04:00
|
|
|
puts "[OK]"
|
|
|
|
else
|
|
|
|
$stderr.puts "[FAIL]"
|
|
|
|
fail
|
|
|
|
end
|
|
|
|
|
2017-05-15 10:17:28 -04:00
|
|
|
print "[verify] #{__dir__} can be required as a module "
|
2017-03-30 14:40:39 -04:00
|
|
|
js = <<-JS
|
|
|
|
window = { Event: class {} }
|
|
|
|
class Element {}
|
2017-05-15 10:17:28 -04:00
|
|
|
require('#{__dir__}')
|
2017-03-30 14:40:39 -04:00
|
|
|
JS
|
2017-05-12 02:37:40 -04:00
|
|
|
_, stderr, status = Open3.capture3("node", "--print", js)
|
2017-03-30 14:40:39 -04:00
|
|
|
if status.success?
|
|
|
|
puts "[OK]"
|
|
|
|
else
|
|
|
|
$stderr.puts "[FAIL]\n#{stderr}"
|
|
|
|
fail
|
|
|
|
end
|
|
|
|
end
|
2016-11-26 08:58:55 -05:00
|
|
|
end
|
|
|
|
|
2013-04-16 18:06:11 -04:00
|
|
|
task :lines do
|
2018-04-19 10:45:28 -04:00
|
|
|
load File.expand_path("../tools/line_statistics", __dir__)
|
2015-05-22 08:37:02 -04:00
|
|
|
files = FileList["lib/**/*.rb"]
|
|
|
|
CodeTools::LineStatistics.new(files).print_loc
|
2013-04-16 18:06:11 -04:00
|
|
|
end
|