Index: tools/cc-frame-viewer/third_party/gl-matrix/tasks/test/coverage.rake |
diff --git a/tools/cc-frame-viewer/third_party/gl-matrix/tasks/test/coverage.rake b/tools/cc-frame-viewer/third_party/gl-matrix/tasks/test/coverage.rake |
new file mode 100644 |
index 0000000000000000000000000000000000000000..fdd8535eee183ab64ff8b11c1e6501699e2ae0f4 |
--- /dev/null |
+++ b/tools/cc-frame-viewer/third_party/gl-matrix/tasks/test/coverage.rake |
@@ -0,0 +1,125 @@ |
+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 |