jasmine-blanket 2.0.2.1 → 2.0.2.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cfc7a45a66b1bf0a2ab128a0516ffbf8c94caa50
4
- data.tar.gz: 9e58a5b967956bc4c1bfb5e9bab3fa049a7f7306
3
+ metadata.gz: 33a437f12e82400b356f055a8d78f5e0b881beaf
4
+ data.tar.gz: 2714845f9062db778b9f96a2c4c15a221fe23d1c
5
5
  SHA512:
6
- metadata.gz: cdf0fac467600670de8116ce20d9ef791109b9a64b5d78d155a692e847beeb71b098e2d9c5114d118e650eff889640d817ecebd145537e4e0cbac43662f03b94
7
- data.tar.gz: 90725bc9d01fdecfdedc2cf0c9816360ccac143fd3e77914dea2157c7a84a468fbd6515d9a59ffbc53ecd06e1b1aab0a551f3d47627b148eb919c2f93f893aa3
6
+ metadata.gz: f60bcf595fb7ded876d14d5e37c3281b16ed1479fd52094f805dfd7fa8390723f4b97a2db9e6e2898e8e19c7d1920d89d83173fb9632bd6785100d9e835d5eee
7
+ data.tar.gz: ddd5de28f71739128097d512fc70d506cd362a650f92f193d286d4083eea27c1350899ed06d5bf66d901b28b7ff6a9b66046328435a888e0819a4581c65cb661
data/README.md CHANGED
@@ -41,13 +41,34 @@ In jasmine.yml
41
41
  - '__spec__'
42
42
  - '/templates/'
43
43
 
44
+ coverage_threshold: 90
45
+
44
46
  In jasmine_helper.rb
45
47
 
46
48
  Jasmine::Blanket.load_configuration_from_yaml
47
49
 
50
+ In Browser
51
+
52
+ rake jasmine
53
+
54
+ Headless or CI
55
+
56
+ rake jasmine:ci
57
+
58
+ ## Acknowledgements
59
+
60
+ Jasmine adaptor is from @alex-seville's [Blanket.js]((http://blanketjs.org/))
61
+ Travis Coverage JS is also @alex-seville's [TravisCov](https://github.com/alex-seville/travis-cov)
62
+
48
63
  ## Version
49
64
 
50
- Matches Jasmine version
65
+ Matches Jasmine version with a minor version
66
+
67
+ ## TODO
68
+
69
+ * Testing
70
+ * Clean up the configuration hacks
71
+ * Find a way around monkey patching jasmine-gem
51
72
 
52
73
  ## Contributing
53
74
 
@@ -29,6 +29,7 @@ module Jasmine
29
29
  Jasmine::Blanket.configure do |config|
30
30
  config.included_folders = yaml_config["included_blanket_folders"] if yaml_config["included_blanket_folders"].any?
31
31
  config.excluded_folders = yaml_config["excluded_blanket_folders"] if yaml_config["excluded_blanket_folders"].any?
32
+ config.coverage_threshold = yaml_config["coverage_threshold"] if yaml_config["coverage_threshold"]
32
33
  end
33
34
  else
34
35
  raise ConfigNotFound, "Unable to load jasmine config from #{path}"
@@ -44,10 +45,41 @@ module Jasmine
44
45
  @config.excluded_folders
45
46
  end
46
47
 
48
+ def self.coverage_threshold
49
+ @config.coverage_threshold
50
+ end
51
+
47
52
  end
48
53
 
49
- # Monkey Patch to use our template
54
+ # Monkey Patches
55
+
56
+ # To use our template
50
57
  def self.runner_template
51
58
  File.read(File.join(File.dirname(__FILE__), "run.html.erb"))
52
59
  end
60
+
61
+ # To use our jasmine runner
62
+ module Runners
63
+ class PhantomJs
64
+ def run
65
+ command = "#{phantom_js_path} '#{File.join(File.dirname(__FILE__), 'phantom_jasmine_runner.js')}' #{jasmine_server_url} #{result_batch_size}"
66
+
67
+ IO.popen(command) do |output|
68
+ output.each do |line|
69
+ if line =~ /^jasmine_result/
70
+ line = line.sub(/^jasmine_result/, '')
71
+ raw_results = JSON.parse(line, :max_nesting => false)
72
+ results = raw_results.map { |r| Result.new(r) }
73
+ formatter.format(results)
74
+ elsif line =~ /^coverage_result/
75
+ puts "\n"
76
+ puts line.sub(/^coverage_result/, '')
77
+ end
78
+ end
79
+ end
80
+ formatter.done
81
+ end
82
+ end
83
+ end
84
+
53
85
  end
@@ -1,7 +1,7 @@
1
1
  module Jasmine
2
2
  module Blanket
3
3
  class Configuration
4
- attr_accessor :included_folders, :excluded_folders
4
+ attr_accessor :included_folders, :excluded_folders, :coverage_threshold
5
5
  end
6
6
  end
7
7
  end
@@ -1,5 +1,5 @@
1
1
  module Jasmine
2
2
  module Blanket
3
- VERSION = "2.0.2.1"
3
+ VERSION = "2.0.2.5"
4
4
  end
5
5
  end
@@ -0,0 +1,68 @@
1
+ (function() {
2
+ var PhantomJasmineRunner = (function() {
3
+
4
+ function PhantomJasmineRunner(page, exit_func) {
5
+ this.page = page;
6
+ this.exit_func = exit_func != null ? exit_func : phantom.exit;
7
+ }
8
+
9
+ PhantomJasmineRunner.prototype.get_status = function() {
10
+ return this.page.evaluate(function() {
11
+ // Hack console.log
12
+ var logged_messages = [];
13
+ var oldLog = window.console.log;
14
+ window.console.log = function(message) {
15
+ logged_messages.push(message);
16
+ oldLog.apply(console, arguments);
17
+ }
18
+
19
+ var threshold = $('body').data("coverage-threshold");
20
+
21
+ logged_messages.push(window.travisCov.check(window._$blanket, { threshold: threshold }));
22
+
23
+ return logged_messages;
24
+ });
25
+ };
26
+
27
+ PhantomJasmineRunner.prototype.terminate = function() {
28
+ var messages = this.get_status();
29
+ var status = messages[messages.length-1];
30
+
31
+ for(var i = 0; i < messages.length - 1; i++) {
32
+ console.log('coverage_result' + messages[i]);
33
+ }
34
+
35
+ switch (status) {
36
+ case true:
37
+ return this.exit_func(0);
38
+ case false:
39
+ return this.exit_func(1);
40
+ default:
41
+ return this.exit_func(2);
42
+ }
43
+ };
44
+
45
+ return PhantomJasmineRunner;
46
+
47
+ })();
48
+
49
+ var url = phantom.args[0];
50
+ var page = require('webpage').create();
51
+ var runner = new PhantomJasmineRunner(page);
52
+
53
+ page.onCallback = function(data) {
54
+ if(data.state === 'specDone') {
55
+ console.log('jasmine_result' + JSON.stringify([].concat(data.results)));
56
+ } else {
57
+ runner.terminate();
58
+ }
59
+ };
60
+
61
+ page.open(url, function(status) {
62
+ if (status !== "success") {
63
+ runner.terminate();
64
+ }
65
+ });
66
+ }).call(this);
67
+
68
+
@@ -19,7 +19,7 @@
19
19
 
20
20
  </head>
21
21
  <!-- TODO: turbolinks breaks spec filter links -->
22
- <body data-no-turbolink>
22
+ <body data-no-turbolink data-coverage-threshold=<%= Jasmine::Blanket.coverage_threshold %>>
23
23
  <div id="jasmine_content"></div>
24
24
  </body>
25
25
  </html>
@@ -82,4 +82,74 @@
82
82
  jasmine.getEnv().execute();
83
83
  }
84
84
  });
85
+ })();
86
+
87
+ // https://github.com/alex-seville/travis-cov
88
+ (typeof exports !== "undefined" ? exports : window).travisCov = (function(){
89
+ var main = {
90
+ check: function(cov,userOptions){
91
+ if (!cov){
92
+ return false;
93
+ }
94
+
95
+ var options = {
96
+ threshold: 50 //defaults to 50%
97
+ };
98
+
99
+ if (userOptions){
100
+ options.threshold = userOptions.threshold || options.threshold;
101
+ }
102
+
103
+ var totals =[];
104
+ for (var filename in cov) {
105
+ var data = cov[filename];
106
+ totals.push(this.reportFile( data,options));
107
+ }
108
+
109
+ var totalHits = 0;
110
+ var totalSloc = 0;
111
+ totals.forEach(function(elem){
112
+ totalHits += elem[0];
113
+ totalSloc += elem[1];
114
+ });
115
+
116
+ var globCoverage = (totalHits === 0 || totalSloc === 0) ?
117
+ 0 : totalHits / totalSloc * 100;
118
+ console.log("Coverage: "+Math.floor(globCoverage)+"%");
119
+ if (globCoverage < options.threshold || isNaN(globCoverage)){
120
+ console.log("Code coverage below threshold: "+Math.floor(globCoverage)+ " < "+options.threshold);
121
+ if (typeof process !== "undefined"){
122
+ process.exit(1);
123
+ }
124
+ return false;
125
+
126
+ }else{
127
+ console.log("Coverage succeeded.");
128
+ }
129
+ return true;
130
+ },
131
+ reportFile: function( data,options) {
132
+ var ret = {
133
+ coverage: 0,
134
+ hits: 0,
135
+ misses: 0,
136
+ sloc: 0
137
+ };
138
+ data.source.forEach(function(line, num){
139
+ num++;
140
+ if (data[num] === 0) {
141
+ ret.misses++;
142
+ ret.sloc++;
143
+ } else if (data[num] !== undefined) {
144
+ ret.hits++;
145
+ ret.sloc++;
146
+ }
147
+ });
148
+ ret.coverage = ret.hits / ret.sloc * 100;
149
+
150
+ return [ret.hits,ret.sloc];
151
+
152
+ }
153
+ };
154
+ return main;
85
155
  })();
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jasmine-blanket
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2.1
4
+ version: 2.0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Carleton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-12 00:00:00.000000000 Z
11
+ date: 2014-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -69,6 +69,7 @@ files:
69
69
  - lib/jasmine-blanket/configuration.rb
70
70
  - lib/jasmine-blanket/engine.rb
71
71
  - lib/jasmine-blanket/version.rb
72
+ - lib/phantom_jasmine_runner.js
72
73
  - lib/run.html.erb
73
74
  - vendor/assets/javascripts/jasmine-blanket.js
74
75
  homepage: https://github.com/ScotterC/jasmine-blanket