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 152 153 154 155 156 157 158
|
# frozen_string_literal: true
require "rake/testtask"
require "fileutils"
require "open3"
desc "Default Task"
task default: :test
task package: %w( assets:compile assets:verify )
# Run the unit tests
desc "Run all unit tests"
task test: ["test:template", "test:integration:action_pack", "test:integration:active_record"]
namespace :test do
task :isolated do
Dir.glob("test/{actionpack,activerecord,template}/**/*_test.rb").all? do |file|
sh(Gem.ruby, "-w", "-Ilib:test", file)
end || raise("Failures")
end
Rake::TestTask.new(:template) do |t|
t.libs << "test"
t.test_files = Dir.glob("test/template/**/*_test.rb")
t.warning = true
t.verbose = true
t.ruby_opts = ["--dev"] if defined?(JRUBY_VERSION)
end
desc "Run tests for rails-ujs"
task :ujs do
system("npm run lint")
exit $?.exitstatus unless $?.success?
begin
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
Dir.mkdir("log")
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
start_time = Time.now
loop do
break if system("lsof -i :4567", 1 => File::NULL)
if Time.now - start_time > 5
puts "Failed to start puma after 5 seconds"
puts
puts File.read("log/test.log")
exit 1
end
sleep 0.2
end
system(*runner_command)
status = $?.exitstatus
ensure
Process.kill("KILL", -pid) if pid
FileUtils.rm_rf("log")
end
exit status
end
namespace :integration do
# Active Record Integration Tests
Rake::TestTask.new(:active_record) do |t|
t.libs << "test"
t.test_files = Dir.glob("test/activerecord/*_test.rb")
t.warning = true
t.verbose = true
t.ruby_opts = ["--dev"] if defined?(JRUBY_VERSION)
end
# Action Pack Integration Tests
Rake::TestTask.new(:action_pack) do |t|
t.libs << "test"
t.test_files = Dir.glob("test/actionpack/**/*_test.rb")
t.warning = true
t.verbose = true
t.ruby_opts = ["--dev"] if defined?(JRUBY_VERSION)
end
end
end
namespace :ujs do
desc "Starts the test server"
task :server do
system "bundle exec rackup test/ujs/config.ru -p 4567 -s puma"
end
end
namespace :assets do
desc "Compile Action View assets"
task :compile do
require "blade"
require "sprockets"
require "sprockets/export"
Blade.build
end
desc "Verify compiled Action View assets"
task :verify do
file = "lib/assets/compiled/rails-ujs.js"
pathname = Pathname.new("#{__dir__}/#{file}")
print "[verify] #{file} exists "
if pathname.exist?
puts "[OK]"
else
$stderr.puts "[FAIL]"
fail
end
print "[verify] #{file} is a UMD module "
if /module\.exports.*define\.amd/m.match?(pathname.read)
puts "[OK]"
else
$stderr.puts "[FAIL]"
fail
end
print "[verify] #{__dir__} can be required as a module "
js = <<-JS
window = { Event: class {} }
class Element {}
require('#{__dir__}')
JS
_, stderr, status = Open3.capture3("node", "--print", js)
if status.success?
puts "[OK]"
else
$stderr.puts "[FAIL]\n#{stderr}"
fail
end
end
end
task :lines do
load File.expand_path("../tools/line_statistics", __dir__)
files = FileList["lib/**/*.rb"]
CodeTools::LineStatistics.new(files).print_loc
end
|