mirror of
https://github.com/toji/gl-matrix.git
synced 2026-01-18 14:26:54 +00:00
126 lines
3.4 KiB
Ruby
126 lines
3.4 KiB
Ruby
desc "Generate JavaScript code coverage report in ./covershot"
|
|
task :coverage => %w(
|
|
coverage:dependencies
|
|
coverage:clean
|
|
coverage:prepare
|
|
coverage:instrumentation
|
|
coverage:write_manifest
|
|
coverage:execute
|
|
coverage:generate
|
|
coverage:done
|
|
)
|
|
|
|
namespace :coverage do
|
|
task :dependencies do
|
|
unless File.exist?(base_path.join('node_modules'))
|
|
if %x[which npm].strip.length == 0
|
|
raise <<-end_error
|
|
Could not execute `npm`! Please make sure node.js and the Node Package
|
|
Manager (NPM) are available and can be executed without root
|
|
permissions.
|
|
end_error
|
|
else
|
|
cmd = "npm install && bundle exec #{$0} #{ARGV.join ' '}"
|
|
puts "Executing the following command:"
|
|
puts
|
|
puts " #{cmd}"
|
|
puts
|
|
puts
|
|
Kernel.exec cmd
|
|
end
|
|
end
|
|
end
|
|
|
|
task :clean do
|
|
rm_rf base_path.join('covershot')
|
|
rm_rf base_path.join('tmp')
|
|
end
|
|
|
|
task :prepare do
|
|
manifest = sprockets['gl-matrix-manifest.js']
|
|
coverage_path = base_path.join('tmp/coverage')
|
|
|
|
manifest.dependencies.each do |part|
|
|
path = coverage_path.join('lib').join(part.pathname.basename)
|
|
mkdir_p(path.dirname) unless File.directory?(path.dirname)
|
|
File.open(path, 'w') do |f|
|
|
f.print part.body
|
|
end
|
|
end
|
|
end
|
|
|
|
task :instrumentation do
|
|
bin = 'jscoverage'
|
|
opts = [ '--no-highlight' ]
|
|
input = base_path.join('tmp/coverage/lib').to_s
|
|
output = base_path.join('tmp/coverage/lib-cov').to_s
|
|
|
|
unless system *[bin, opts, input, output].flatten
|
|
raise "Instrumentation failure. Please make sure `jscoverage` is installed."
|
|
end
|
|
end
|
|
|
|
task :write_manifest do
|
|
manifest = sprockets['gl-matrix-manifest.js']
|
|
coverage_path = base_path.join('tmp/coverage')
|
|
|
|
File.open(coverage_path.join('manifest.js'), 'w') do |manifest_out|
|
|
manifest_out.puts <<-end_script
|
|
var covershot = require('covershot');
|
|
var csrequire = covershot.require.bind(null, require);
|
|
|
|
function pull(str) {
|
|
var exps = csrequire(str);
|
|
for (var i in exps) {
|
|
global[i] = exps[i];
|
|
}
|
|
}
|
|
|
|
global.GLMAT_EPSILON = 0.000001;
|
|
global.GLMAT_ARRAY_TYPE = Float32Array;
|
|
|
|
end_script
|
|
manifest.dependencies.each do |part|
|
|
path = coverage_path.join('lib-cov').join(part.pathname.basename)
|
|
manifest_out.puts "pull('#{path}');"
|
|
end
|
|
manifest_out.puts <<-end_script
|
|
function CoverageReporter() {
|
|
this.reportRunnerResults = function(suite) {
|
|
covershot.writeCoverage();
|
|
};
|
|
};
|
|
|
|
jasmine.getEnv().addReporter(new CoverageReporter());
|
|
end_script
|
|
end
|
|
end
|
|
|
|
task :execute do
|
|
jasmine_node = base_path.join('node_modules/jasmine-node/bin/jasmine-node').to_s
|
|
spec = base_path.join('spec').to_s
|
|
|
|
unless system jasmine_node, spec
|
|
raise "jasmine-node tests failed. Coverage report not generated."
|
|
end
|
|
end
|
|
|
|
task :generate do
|
|
covershot = base_path.join('node_modules/covershot/bin/covershot').to_s
|
|
data_dir = base_path.join('covershot/data').to_s
|
|
format = 'html'
|
|
|
|
unless system covershot, data_dir, '-f', format
|
|
raise "Execution of covershot failed. Coverage report not generated."
|
|
end
|
|
end
|
|
|
|
task :done do
|
|
rm_rf base_path.join('tmp')
|
|
puts
|
|
puts
|
|
puts "Coverage report generated in: #{base_path.join("covershot/index.html")}"
|
|
puts
|
|
end
|
|
end
|