Upstream version 11.40.271.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / third_party / gl-matrix / tasks / test / coverage.rake
1 desc "Generate JavaScript code coverage report in ./covershot"
2 task :coverage => %w(
3   coverage:dependencies
4   coverage:clean
5   coverage:prepare
6   coverage:instrumentation
7   coverage:write_manifest
8   coverage:execute
9   coverage:generate
10   coverage:done
11 )
12
13 namespace :coverage do
14   task :dependencies do
15     unless File.exist?(base_path.join('node_modules'))
16       if %x[which npm].strip.length == 0
17         raise <<-end_error
18           Could not execute `npm`! Please make sure node.js and the Node Package
19           Manager (NPM) are available and can be executed without root
20           permissions.
21         end_error
22       else
23         cmd = "npm install && bundle exec #{$0} #{ARGV.join ' '}"
24         puts "Executing the following command:"
25         puts
26         puts "  #{cmd}"
27         puts
28         puts
29         Kernel.exec cmd
30       end
31     end
32   end
33
34   task :clean do
35     rm_rf base_path.join('covershot')
36     rm_rf base_path.join('tmp')
37   end
38
39   task :prepare do
40     manifest = sprockets['gl-matrix-manifest.js']
41     coverage_path = base_path.join('tmp/coverage')
42
43     manifest.dependencies.each do |part|
44       path = coverage_path.join('lib').join(part.pathname.basename)
45       mkdir_p(path.dirname) unless File.directory?(path.dirname)
46       File.open(path, 'w') do |f|
47         f.print part.body
48       end
49     end
50   end
51
52   task :instrumentation do
53     bin = 'jscoverage'
54     opts = [ '--no-highlight' ]
55     input = base_path.join('tmp/coverage/lib').to_s
56     output = base_path.join('tmp/coverage/lib-cov').to_s
57
58     unless system *[bin, opts, input, output].flatten
59       raise "Instrumentation failure. Please make sure `jscoverage` is installed."
60     end
61   end
62
63   task :write_manifest do
64     manifest = sprockets['gl-matrix-manifest.js']
65     coverage_path = base_path.join('tmp/coverage')
66
67     File.open(coverage_path.join('manifest.js'), 'w') do |manifest_out|
68       manifest_out.puts <<-end_script
69         var covershot = require('covershot');
70         var csrequire = covershot.require.bind(null, require);
71
72         function pull(str) {
73           var exps = csrequire(str);
74           for (var i in exps) {
75             global[i] = exps[i];
76           }
77         }
78
79         global.GLMAT_EPSILON = 0.000001;
80         global.GLMAT_ARRAY_TYPE = Float32Array;
81
82       end_script
83       manifest.dependencies.each do |part|
84         path = coverage_path.join('lib-cov').join(part.pathname.basename)
85         manifest_out.puts "pull('#{path}');"
86       end
87       manifest_out.puts <<-end_script
88         function CoverageReporter() {
89           this.reportRunnerResults = function(suite) {
90             covershot.writeCoverage();
91           };
92         };
93
94         jasmine.getEnv().addReporter(new CoverageReporter());
95       end_script
96     end
97   end
98
99   task :execute do
100     jasmine_node = base_path.join('node_modules/jasmine-node/bin/jasmine-node').to_s
101     spec = base_path.join('spec').to_s
102
103     unless system jasmine_node, spec
104       raise "jasmine-node tests failed. Coverage report not generated."
105     end
106   end
107
108   task :generate do
109     covershot = base_path.join('node_modules/covershot/bin/covershot').to_s
110     data_dir = base_path.join('covershot/data').to_s
111     format = 'html'
112
113     unless system covershot, data_dir, '-f', format
114       raise "Execution of covershot failed. Coverage report not generated."
115     end
116   end
117
118   task :done do
119     rm_rf base_path.join('tmp')
120     puts
121     puts
122     puts "Coverage report generated in: #{base_path.join("covershot/index.html")}"
123     puts
124   end
125 end