cucumber-blanket 0.2.0 → 0.3.0

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: f1ced4349e3ba6ee92c994e022909cfc77c37005
4
- data.tar.gz: a450503278a67cf67af97d75c5ddd14907a59d82
3
+ metadata.gz: 6c49a4739f76a49ef5c3f52c586ca8b541cfe1bb
4
+ data.tar.gz: f53fc13a0162903bf59b0097ee937853502d57bc
5
5
  SHA512:
6
- metadata.gz: 97a967c71d181734ff136f1ce12258877a6e205266f16b19b3850b5ef0ba39ceadb05219528d8878341928b1c9a795f5b0e5ebe07911aa9e361926ff450578d1
7
- data.tar.gz: 76f9519cb0b95bb305dbf4c61efaa82bfb3c96a931832ca870f117cccb604a77fb4683cbf5b5ea772c58a5c647e95f60f6b5099f42a53099692adf1d8085b3b0
6
+ metadata.gz: adb28a1c84ead4a01b2984fb94eccb9c8ae305945a97560c640155044bb919b35e1154987d3186587ca6094491c881b4612c5918f993068e597b441e7bb7ba59
7
+ data.tar.gz: 9be8b18b4cea7b819104e118b844ab6638e856268ebc5c88df18287051035913c273af620603fa430bd8e0573cf22636110e135f1c68b95dcc674c9ada8187a1
data/README.md CHANGED
@@ -96,22 +96,16 @@ at_exit do
96
96
  end
97
97
  ```
98
98
 
99
- ### Options
99
+ ### Write HTML Report
100
100
 
101
- You can adjust the wait times used to allow blanket.js to work, you should adjust
102
- this if you are getting an error like this:
101
+ After you've captured some coverage data, you can create an HTML report
102
+ like so:
103
103
 
104
+ ```ruby
105
+ Cucumber::Blanket.write_html_report File.join(File.dirname(__FILE__), '../../coverage.html')
104
106
  ```
105
- unknown error: You must call blanket.setupCoverage() first.
106
- (Session info: chrome=31.0.1650.63)
107
- (Driver info: chromedriver=2.6.232908,platform=Mac OS X 10.9.1 x86_64) (Selenium::WebDriver::Error::UnknownError)
108
- ```
109
-
110
- When you're extracting from the page, you can adjust the defaults (they are set to half-second) -- just keep in mind that if you set one you must set the other too.
111
107
 
112
- ```
113
- Cucumber::Blanket.extract_from page, setup_wait:1, extract_wait:1 # increased each by a half-second
114
- ```
108
+ I like to put this in `after_exit` in my Cucumber `hooks.rb` file
115
109
 
116
110
  ## Dev Notes
117
111
 
@@ -18,6 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.add_runtime_dependency "haml"
22
+
21
23
  spec.add_development_dependency "bundler", "~> 1.3"
22
24
  spec.add_development_dependency "rake"
23
25
  spec.add_development_dependency "rspec"
@@ -1,4 +1,10 @@
1
1
  (function (){
2
+ window.CUCUMBER_BLANKET = {
3
+ files: {},
4
+ sources: {},
5
+ done: false,
6
+ is_setup: false
7
+ };
2
8
  /* ADAPTER
3
9
  *
4
10
  * This blanket.js adapter is designed to autostart coverage
@@ -15,12 +21,7 @@
15
21
  callback: function() {
16
22
  blanket.setupCoverage();
17
23
  blanket.onTestStart();
18
- window.CUCUMBER_BLANKET = {
19
- files: {},
20
- sources: {},
21
- done: false,
22
- is_setup: true
23
- };
24
+ window.CUCUMBER_BLANKET.is_setup = true;
24
25
  }
25
26
  });
26
27
 
@@ -1,5 +1,6 @@
1
1
  require "cucumber/blanket/version"
2
2
  require "cucumber/blanket/coverage_data"
3
+ require "cucumber/blanket/report_generator"
3
4
 
4
5
  module Cucumber
5
6
  module Blanket
@@ -24,22 +25,22 @@ module Cucumber
24
25
  # unknown error: You must call blanket.setupCoverage() first.
25
26
  # (Session info: chrome=31.0.1650.63)
26
27
  # (Driver info: chromedriver=2.6.232908,platform=Mac OS X 10.9.1 x86_64) (Selenium::WebDriver::Error::UnknownError)
27
- def extract_from page, opts={setup_wait: 0.5, extract_wait: 0.5}
28
+ def extract_from page
28
29
  @page = page
29
- sleep(opts[:setup_wait]) until coverage_is_setup?
30
+ sleep(0.2) until coverage_is_setup?
30
31
  page.evaluate_script("blanket.onTestsDone();")
31
- sleep(opts[:extract_wait]) until data_ready?
32
+ sleep(0.2) until data_ready?
32
33
  page_data = page.evaluate_script("window.CUCUMBER_BLANKET")
33
34
  @@coverage_data.accrue! page_data
34
35
  return page_data
35
36
  end
36
37
 
37
38
  def coverage_is_setup?
38
- @page.evaluate_script("window.CUCUMBER_BLANKET.is_setup")
39
+ @page.evaluate_script("window.CUCUMBER_BLANKET.is_setup") rescue false
39
40
  end
40
41
 
41
42
  def data_ready?
42
- @page.evaluate_script("window.CUCUMBER_BLANKET.done")
43
+ @page.evaluate_script("window.CUCUMBER_BLANKET.done") rescue false
43
44
  end
44
45
 
45
46
  def percent
@@ -59,6 +60,13 @@ module Cucumber
59
60
  return 0.0
60
61
  end
61
62
  end
63
+
64
+ def write_html_report path
65
+ generator = ReportGenerator.new(:html, self)
66
+ File.open(path, 'w') do |file|
67
+ file.write(generator.render)
68
+ end
69
+ end
62
70
  end
63
71
  end
64
72
  end
@@ -23,6 +23,22 @@ module Cucumber
23
23
  self.data['sources']
24
24
  end
25
25
 
26
+ def percent_covered script_url
27
+ total_lines = 0
28
+ covered_lines = 0
29
+ self.files[script_url].compact.each do |cov_stat|
30
+ if cov_stat > 0
31
+ covered_lines += 1
32
+ end
33
+ total_lines += 1
34
+ end
35
+ if total_lines > 0
36
+ return ((covered_lines.to_f / total_lines)*100).round(2)
37
+ else
38
+ return 0.0
39
+ end
40
+ end
41
+
26
42
  def accrue! page_data
27
43
  if @data.nil?
28
44
  @data = page_data
@@ -0,0 +1,23 @@
1
+ require 'haml'
2
+ module Cucumber
3
+ module Blanket
4
+ class ReportGenerator
5
+ TEMPLATE_DIR = File.join(File.dirname(__FILE__), '../../../templates')
6
+
7
+ def initialize(mode, coverage_data)
8
+ case mode
9
+ when :html
10
+ template = File.join(TEMPLATE_DIR, 'html_report.html.haml')
11
+ @engine = Haml::Engine.new(File.read(template))
12
+ else
13
+ raise "Unsupported report #{mode}"
14
+ end
15
+ @data = coverage_data
16
+ end
17
+
18
+ def render
19
+ @engine.render(self)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,5 +1,5 @@
1
1
  module Cucumber
2
2
  module Blanket
3
- VERSION = "0.2.0"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
@@ -57,4 +57,11 @@ describe Cucumber::Blanket::CoverageData do
57
57
  Cucumber::Blanket.sources.should eq covdata.sources
58
58
  end
59
59
  end
60
+
61
+ describe "#percent_covered" do
62
+ it "returns the percent covered for a given script" do
63
+ res = covdata.percent_covered covdata.files.keys[1]
64
+ res.should eq 60.0
65
+ end
66
+ end
60
67
  end
@@ -2,6 +2,12 @@ require 'spec_helper'
2
2
 
3
3
  describe Cucumber::Blanket do
4
4
 
5
+ let(:page) { FakePage.new }
6
+ before(:each) do
7
+ subject.reset!
8
+ subject.extract_from(page)
9
+ end
10
+
5
11
  describe "#files" do
6
12
  it "is a shortcut for coverage_data#files" do
7
13
  subject.files.should eq subject.coverage_data.files
@@ -15,10 +21,8 @@ describe Cucumber::Blanket do
15
21
  end
16
22
 
17
23
  describe "#extract_from" do
18
- let(:page) { FakePage.new }
19
24
  context "Selenium-returned blanket.js coverage data structure characteristics" do
20
25
  let(:cov) do
21
- subject.extract_from(page)
22
26
  subject.coverage_data
23
27
  end
24
28
  specify { cov.should have_key 'files' }
@@ -35,15 +39,25 @@ describe Cucumber::Blanket do
35
39
  end
36
40
 
37
41
  describe "#percent" do
38
- before(:each) { subject.reset! }
39
42
  it "returns total percent coverage of known lines of code as float" do
40
- subject.extract_from(FakePage.new)
41
43
  subject.percent.should eq 75.0
42
44
  end
43
45
  context "no data harvested yet" do
44
46
  it "returns zero" do
47
+ subject.reset!
45
48
  subject.percent.should eq 0.0
46
49
  end
47
50
  end
48
51
  end
52
+
53
+ describe "#write_html_report" do
54
+ let(:path) { '/tmp/cucumber-blanket-report.html' }
55
+ before { FileUtils.rm(path) if File.exists?(path) }
56
+
57
+ it "generates an HTML file at the desired location" do
58
+ subject.write_html_report path
59
+ File.exists?(path).should be_true
60
+ system("open #{path}") if ENV['showreport']
61
+ end
62
+ end
49
63
  end
@@ -0,0 +1,57 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %title cucumber-blanket coverage report
5
+ :css
6
+ pre {
7
+ margin:0;
8
+ }
9
+ .ignored {
10
+ }
11
+ .missed {
12
+ background-color: #f74552;
13
+ }
14
+ .covered {
15
+ background-color: #72f779;
16
+ }
17
+
18
+ :javascript
19
+ function toggleScriptContentDisplay(a) {
20
+ var contents = a.parentElement.childNodes[3];
21
+ if (contents.style.display === "none") {
22
+ contents.style.display = "block";
23
+ } else {
24
+ contents.style.display = "none";
25
+ }
26
+ }
27
+
28
+ document.addEventListener('DOMContentLoaded', function () {
29
+ scripts = document.querySelectorAll('a.script_url');
30
+ for (var i = 0, l = scripts.length; i < l; i ++) {
31
+ var script = scripts[i];
32
+ script.onclick = function() {
33
+ toggleScriptContentDisplay(this);
34
+ return false;
35
+ };
36
+ }
37
+ });
38
+
39
+
40
+ %body
41
+ %table.ui.table.segment
42
+ %thead
43
+ %tr
44
+ %th Script
45
+ %th Coverage #{@data.percent}%
46
+ %tbody
47
+ - @data.files.each do |script_url, covdata|
48
+ - lines = @data.sources[script_url]
49
+ %tr
50
+ %td
51
+ %a.script_url{:href=>"#"}= script_url
52
+ .contents{style:"display:none"}
53
+ - lines.each_with_index do |line, line_no|
54
+ - cov = covdata[line_no]
55
+ %pre{:class=>(cov.nil? ? "ignored" : (cov == 0 ? 'missed' : 'covered'))}
56
+ = line.gsub(' ', '&nbsp;')
57
+ %td #{@data.percent_covered(script_url)} %
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber-blanket
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keyvan Fatehi
@@ -10,6 +10,20 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2014-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: haml
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -99,11 +113,13 @@ files:
99
113
  - javascript/cucumber-blanket.js
100
114
  - lib/cucumber/blanket.rb
101
115
  - lib/cucumber/blanket/coverage_data.rb
116
+ - lib/cucumber/blanket/report_generator.rb
102
117
  - lib/cucumber/blanket/version.rb
103
118
  - spec/fixtures/simple.json
104
119
  - spec/lib/cucumber/blanket/coverage_data_spec.rb
105
120
  - spec/lib/cucumber/blanket_spec.rb
106
121
  - spec/spec_helper.rb
122
+ - templates/html_report.html.haml
107
123
  homepage: https://github.com/keyvanfatehi/cucumber-blanket
108
124
  licenses:
109
125
  - MIT
@@ -124,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
140
  version: '0'
125
141
  requirements: []
126
142
  rubyforge_project:
127
- rubygems_version: 2.0.3
143
+ rubygems_version: 2.1.10
128
144
  signing_key:
129
145
  specification_version: 4
130
146
  summary: Extract Blanket.js code coverage data from within a Ruby Cucumber environment